3b1b/manim · error · LatexError

LaTeX compilation failed

Error message

LaTeX compilation failed

What it means

Raised as LatexError by full_tex_to_svg (tex_file_writing.py:135) when the TeX subprocess exits non-zero AND no dvi/xdv output was produced. The message is extracted from the .log file by regex ('! ' error lines); when extraction finds nothing the generic 'LaTeX compilation failed' text is used.

Source

Thrown at manimlib/utils/tex_file_writing.py:135

            "-interaction=batchmode",
            "-halt-on-error",
            f"-output-directory={temp_dir}",
            tex_path.as_posix(),
        ],
        capture_output=True,
        text=True,
    )

    if process.returncode != 0 and not dvi_path.exists():
        # Handle error
        error_str = ""
        log_path = tex_path.with_suffix(".log")
        if log_path.exists():
            content = log_path.read_text()
            error_match = re.search(r"(?<=\n! ).*\n.*\n", content)
            if error_match:
                error_str = error_match.group()
        raise LatexError(error_str or "LaTeX compilation failed")

    # Run dvisvgm and capture output directly
    process = subprocess.run(
        [
            "dvisvgm",
            dvi_path,
            "-n",  # no fonts
            "-v",
            "0",  # quiet
            "--stdout",  # output to stdout instead of file
        ],
        capture_output=True,
    )

    # Return SVG string
    result = process.stdout.decode("utf-8")

    if message:

View on GitHub (pinned to dee01804d4)

Solutions

  1. Read the raised LatexError message — it quotes the '! ' line from the working.tex log; also open <latex_cache>/working.tex and .log to reproduce locally
  2. Fix the reported LaTeX syntax error (typo, missing brace, escape & % # with backslash)
  3. For Unicode/CJK, switch the compiler to xelatex in the manim config
  4. Ensure required LaTeX packages are installed (standalone, preview, dvisvgm toolchain)

Example fix

# before
MathTex(r'\fra{a}{b}')  # undefined command -> LatexError

# after
MathTex(r'\frac{a}{b}')
Defensive patterns

Strategy: try-catch

Validate before calling

import subprocess

def latex_available() -> bool:
    return subprocess.run(['latex', '--version'], capture_output=True).returncode == 0

Try / catch

from manimlib.utils.tex_file_writing import LatexError
try:
    tex = MathTex(src)
except LatexError as e:
    print('TeX error:', e)
    tex = MathTex(r'\text{TeX error}')

Prevention

When it happens

Trigger: MathTex(r'\fra{a}{b}') — an undefined command makes latex exit non-zero with no dvi; missing LaTeX packages (e.g. standalone or preview not installed); using Unicode text with the default 'latex' compiler instead of xelatex.

Common situations: Fresh environments without a full LaTeX installation (only basic latex, no dvisvgm/standalone); typos in commands; special characters (&, %, #) unescaped in math mode; CJK content requiring xelatex while config says latex.

Related errors


AI-assisted analysis of 3b1b/manim@dee01804d4 (2026-08-14). Data as JSON: /api/errors/9a12b89a6a0092f6. Report an issue: GitHub.