Skip to content

Automatic Package Installation

The killer feature of jettex is automatic detection and installation of missing LaTeX packages - just like R's tinytex.

How It Works

When you use compile_tex(), jettex:

  1. Attempts compilation - Runs the LaTeX engine on your document
  2. Parses errors - If compilation fails, parses the log file for missing packages
  3. Finds packages - Uses tlmgr to find which packages provide the missing files
  4. Installs packages - Automatically installs the required packages
  5. Retries compilation - Tries again (up to 3 times by default)
import jettex

# This will automatically install any missing packages
result = jettex.compile_tex("complex_document.tex")

if result.success:
    print(f"PDF created: {result.output_file}")

Using compile_tex

The compile_tex() function is the main interface for auto-install:

result = jettex.compile_tex(
    "document.tex",
    engine="pdflatex",      # Engine: pdflatex, xelatex, lualatex
    max_attempts=3,         # Max compilation attempts
    output_dir=None,        # Output directory
    quiet=False,            # Suppress progress output
)

Engine Selection

# Use pdflatex (default)
result = jettex.compile_tex("document.tex", engine="pdflatex")

# Use xelatex for Unicode/OpenType fonts
result = jettex.compile_tex("document.tex", engine="xelatex")

# Use lualatex for Lua scripting
result = jettex.compile_tex("document.tex", engine="lualatex")

Controlling Attempts

# Try more times for documents with many missing packages
result = jettex.compile_tex("document.tex", max_attempts=5)

# Only try once (fail if any packages are missing)
result = jettex.compile_tex("document.tex", max_attempts=1)

Quiet Mode

# Suppress progress messages
result = jettex.compile_tex("document.tex", quiet=True)

Error Detection

jettex detects various types of missing file errors:

Missing Style Files (.sty)

! LaTeX Error: File `geometry.sty' not found.

Missing Class Files (.cls)

! LaTeX Error: File `beamer.cls' not found.

Missing Fonts

! Font TU/lmr/m/n/10=lmroman10-regular at 10pt not loadable

Missing Files

! I can't find file `missing.tex'.

Manual Package Detection

You can also use the package detection functions directly:

Parse Log Files

from jettex import parse_log_file

# Parse a log file for missing files
missing_files = parse_log_file("document.log")
print(f"Missing files: {missing_files}")

Find Packages for Files

from jettex import find_packages_for_files, PackageInfo

# Find packages that provide the missing files
package_info = find_packages_for_files(["geometry.sty", "hyperref.sty"])

for info in package_info:
    print(f"{info.filename} -> {info.package}")

Install Missing Packages

from jettex import install_missing_packages

# Install the packages
installed = install_missing_packages(package_info)
print(f"Installed: {installed}")

Comparison with Standard Compilation

Function Auto-Install Use Case
compile_tex() Yes General use, unknown packages
pdflatex() No When you know all packages are installed
xelatex() No Direct xelatex without auto-install
lualatex() No Direct lualatex without auto-install

Example: Complex Document

Here's a complete example with a document that uses many packages:

import jettex

# Ensure TinyTeX is installed
if not jettex.is_tinytex_installed():
    jettex.install_tinytex()

# Compile with auto-install
result = jettex.compile_tex(
    "thesis.tex",
    engine="xelatex",
    max_attempts=5,
    quiet=False,
)

if result.success:
    print(f"Thesis compiled successfully!")
    print(f"Output: {result.output_file}")
else:
    print("Compilation failed after all attempts")
    print(f"Check log: {result.log_file}")

Limitations

  • Network required - Package installation requires internet access
  • CTAN packages only - Only packages available in TeX Live can be auto-installed
  • Some errors not detectable - Complex errors may not be parsed correctly
  • Compilation time - First compilation may be slower due to package downloads

CLI Usage

From the command line, auto-install is enabled by default:

# Compile with auto-install (default)
jettex compile document.tex

# Disable auto-install
jettex compile document.tex --no-auto-install