LaTeXを速くする

最終更新日
公開日

LaTeXのコンパイルが遅い場合の対処法

目次

(私の環境では)1,2ページのコンパイルに数分かかっていたのが,以下の項目を全て対策すると,1,2ページなら1秒以内,数十ページでも数秒でコンパイルできるようになった.

LuaLaTeX → upLaTeX

mylatexformatでプリコンパイル

分割コンパイル

Windows → WSL2

画像の前処理・無視

コンパイルレシピの見直し

参考(私の設定)

高速化に関係のある部分を一部抜粋して紹介する

~/.latexmkrc

#!/usr/bin/env perl

# $latex = 'uplatex %O -kanji=utf8 -synctex=1 -halt-on-error -file-line-error %S';
$latex = 'internal mylatexcmd uplatex %A %O -kanji=utf8 -synctex=1 -halt-on-error -file-line-error %S';
$max_repeat = 5;
# BibTeX
$bibtex = 'upbibtex %O %B';
$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B';
# index
$makeindex = 'mendex %O -o %D %S';
# DVI / PDF
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3; # generate pdf from dvi

# %O:オプション
# %S:ソースファイル
# %D:出力ファイル

# mylatexformatによる,プリアンブルの前処理
# ref: https://tasusu.hatenablog.com/entry/2022/04/07/044634
sub mylatexcmd {
    my ($engine, $base, @args) = @_;
    my $com = join(' ', @args);
    unless (-e "$base.fmt"){
        print "mylatexcmd: making $base.fmt in ini mode... \n";
        Run_subst("$engine -ini -jobname=\"$base\" \\\&$engine mylatexformat.ltx %S");
    }
    print "mylatexcmd: $base.fmt detected, so running normal latex... \n";
    return Run_subst("$engine -fmt $base $com");
}

.vscode/settings.json

{
  "latex-workshop.latex.tools": [
    {
      "name": "latexmk(uplatex)",
      "command": "latexmk",
      "args": ["-outdir=%OUTDIR%", "%DOC%"]
    }
  ],
  "latex-workshop.latex.recipes": [
    {
      "name": "uplatex",
      "tools": ["latexmk(uplatex)"]
    }
  ]
}

main.tex

% \endofdump

\RequirePackage{plautopatch}
\documentclass[
  autodetect-engine,dvipdfmx-if-dvi,
  ja=standard,
  a4paper,
  % draft,
]{bxjsreport}

% 分割コンパイル用のパッケージ
\usepackage{docmute}

\begin{document}

% 分割したファイル(sub_file.tex)を読み込み
\include{sub_file}

\end{document}

sub_file.tex

\csname docmute\endcsname

\RequirePackage{plautopatch}
\documentclass[
  autodetect-engine,dvipdfmx-if-dvi,
  ja=standard,
  a4paper,
]{bxjsreport}

\begin{document}
hoge hoge
\end{document}