[備忘録]LaTeXのビルドの流れ

 LaTeXの使用頻度は高いものの、エディットはVSCode + LaTeXworkshop、ビルドはptex2pdfやlatexmkに任せっきりで、内部処理で何をしているのかがよく分からなかったのでまとめたやつです。ビルドの流れに沿って記述していきます。なお筆者のTex環境は以下を参照ください。

ptex2pdf

Tex Wikiによると「uplatex, euptex, uptex, platex, eptex, ptex の中から指定したコマンドと dvipdfmx とを連続して実行する Lua スクリプトです」とのこと。要は、ptex系のコマンドを使用してdviファイルを生成し、その後にdvipdfmxを実行してくれるプログラムのこと。筆者の普段使いはこちらで、以下の通り。

pLaTeX

.texファイルから中間ファイルの.dviファイルを生成する。同時に.auxファイルと.logファイルも生成される。Unicodeに対応した版がupLaTex。ptex2pdfではuplatex, euptex, uptex, platex, eptex, ptexが使用できるらしい。色々あってややこしいが、基本的にuがつくとunicode対応、eがつくと拡張機能(extended)、pがつくとASCII日本語対応(publishing)というイメージで筆者は覚えた。

[追記]
コンパイラのログを見るとplatexと指定しても実際に呼び出されるのはeptexの模様。eをサポートするのが標準となっているっぽい。同様に、uplatexと指定したlatexmkでのコンパイルも実際にはeuptexが動いてる様です。

筆者はVSCodeのsetting.jsonでは以下の様に指定している。

{
    "name": "ptex2pdf",
    "command": "ptex2pdf",
    "args": 
    [
        "-l", //ここでplatexを指定
        "-ot", //optionの指定
        "-kanji=utf8 -synctex=1",
        "%DOC%"
    ]
}

dvipdfmx

.dviファイルを.pdfに変換する。

なお筆者は.bibファイルのコンパイルはpbibtexを使用しており、ptex2pdf→pbibtex→ptex2pdf*2という感じで相互参照を反映させたビルドをしている。

latexmk

latexとbibtexを交互に呼び出したり、.texファイルを保存した場合に自動的に.pdfファイルを生成してくれる様なツール。相互参照をする場合、ptex2pdf→bibtex→ptex2pdfをするよりもビルドが速いくらいで、VSCodeのLaTex Workshopがあれば正直あんまり必要性を感じない。(なんならlatexmk用のプロファイルを作らなきゃいけない分手間は増える)
筆者はuplatex+biberでのコンパイルの場合に使用することにした。

.latexmkrcの作成

設定ファイルを~/.latexmkrcに書く。筆者は以下の様に記述。

$latex = 'uplatex -synctex=1';
$bibtex = 'biber';
$makeindex = 'mendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars';

$latexで.texファイルのコンパイルに使うコマンドを指定(ここではuplatex)。$bibtexでbiberを指定。
uplatexなのでドキュメントクラスはujarticleなどを使用。オプションに以下の様にuplatexも渡しておく。

\documentclass[a4j,11pt, dvipdfmx, uplatex]{ujarticle}

またここではbibtexにbiberを指定。これはbiblatex(bibtexの後継)をバックエンドとして使うことを想定したもの。bibtexより柔軟なソートが可能。
.latexmkrcの$biberでは「.bblファイルのコンパイルはutf-8で行い、入出力もutf-8、ただしアクセント記号などはlatexのコマンドでエンコード」と設定している。
preambleには以下の様にすると、本文での出現順にソートできる。

\usepackage[backend=biber, style=numeric]{biblatex}
\DeclareSortingScheme{sorting1}{
  \sort{\citeorder}
}
\ExecuteBibliographyOptions{sorting=sorting1}

また本文中で参考文献を表示したい場合は\bibliography{}ではなく、以下の様にする。
biblatexはローカライズされていないので、titleのオプションで題を変更している。

\printbibliography[title=参考文献]

VSCodeのsetting.jsonの設定

最終的に筆者はptex2pdfではplatex+pbibtexでのコンパイル、latexmkではuplatex+biberを使用してビルドしている。最終的なsetting.jsonは以下の様になった。

また.latexmkrcは以下の通り。

$latex = 'uplatex %O %S';
$bibtex = 'biber';
$makeindex = 'mendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars';

uplatexをコンパイラに指定し、bibtexにはbiberを指定している。

参考にした記事など


この記事が気に入ったらサポートをしてみませんか?