MakeでLaTeX言語のビルドしましょう
Fri 17 Dec 2021 by mskala Tags used: software, typography, 日本語, latex今日MakeでLaTeX言語のビルドしましょう。
これは「TeX & LaTeX Advent Calendar 2021」の17日目の記事です。 (16日目はCareleSmith9さん、18日目はSpark Hiroさんです。) 悪い日本語でごめんなさい。 練習ので、一年に一つの記事を書いています。 早く流暢になりますかな?
LaTeXの必要なコマンド
初心者には、「LaTeXが易い」と教えています。 文章を作ったら、たった一つのコマンドあります。
pdflatex foo
それは.texから.pdfまで訳します。
しかしイザコザありできます。 たとえば、古いdvipsで、二つのコマンドが必需です。latex foo dvips foo
pdflatexでも、クロスレファレンスは余分なコマンドあります。
pdflatex foo pdflatex foo
書誌も索引も、専用のコマンドあります。
latex foo bibtex foo makeindex foo latex foo latex foo dvips foo
それ上に、もしかしてMetapostからのフィギュアーとかGnuplotからの図表とか書きました。 ビルドのコマンドは数々です。
make
ソフトウェアエンジニアはこの問題が日常です。 C言語のビルドは数々なコマンドが必需です。 コンパイルとかアセンブラとかリンクとかです。 易いになってMakeを使います。 LaTeXがプログラミング言語なら、Makeを使わないんですか?
Makeはソフトウェアのビルドのツールです。 Makefileでプログラムのソースコードを教えています。 ファイルのエディットしたら、「make」だけをタイプしています。 全部ビルドのコマンドがされます。
これは初心者のMakefileです。
foo.pdf: foo.tex pdflatex foo
「make」をタイプしたら、foo.texが新しいかチェックして、新しいなら「pdflatex foo」をしています。 不必要コマンドを抜かします。
数個の文章ので、Makefileで書きできます。
all: foo.pdf bar.pdf baz.pdf foo.pdf: foo.tex pdflatex foo bar.pdf: bar.tex pdflatex bar baz.pdf: baz.tex pdflatex baz
「make」や「make all」をタイプしたら、新しいファイルをビルドしています。 もう、「make foo.pdf」とかできます。
GNU Makeの型ルールは手頃です。 全部の文章でも一つのルールあります。 コマンドは一つの場所で書かれました。
all: foo.pdf bar.pdf baz.pdf %.pdf: %.tex pdflatex $*
それでも、難しい文章は問題になります。 LaTeXは、出力のファイルをいつも書き換えます。 Makeの新しいファイルチェックが慌てます。 クロスレファレンスなら、いくら繰り返しは分かりません。 書誌とか、索引とか難しいです。 その上に、一本で全部のファイルあるなら依存関係のリストが必要で難しいです。
latex-makeのパケージ
その問題だから、latex-makeのパケージあります。 Vincent DanjeanさんとArnaud Legrandさんは著者です。 難しい文章でも、latex-makeとGNU Makeでビルドが易いです。 CTANからダウンロードが出来て、TeXliveとかでパケージあります。
パケージでLaTeX.mkのファイルあります。 MakeはインクルードディレクトリでLaTeX.mkのファイルを探しています。 たとえばLinuxで/usr/local/includeにインストールがいいです。 TEXMFにソフトリンクができます。
$ # 例だけ $ locate LaTeX.mk /usr/local/texlive/2020/texmf-dist/doc/support/latex-make/LaTeX.mk /usr/local/texlive/2020/texmf-dist/doc/support/latex-make/LaTeX.mk.conf $ sudo ln -s /usr/local/texlive/2020/texmf-dist/doc/support/latex-make/LaTeX.mk /usr/local/include
latex-makeパケージから他のファイルも必要でも、TeXディストリビューションはTEXMFでそのファイルあります。
ちょくちょく小さいMakefileが満足です。
echo 'include LaTeX.mk' > Makefile
そのあと、ビルドがたった一つのコマンドです。
make
LaTeX.mkはオートマチックですよ。
- 全部のソースコードのファイルを知ります。
- クロスレファレンスなら、余分なコマンドをやります。
- makeindexとbibtexをしります。
- 依存関係はオートマチックのチェックあります。
もしかしたら、ここで読むことをやめできます。
フレーバー
しかし、latex-makeはいつもpdflatexがデフォルトです。 ある全部で、オートマチックな依存関係チェックは満足ないです。 LaTeXほかにプログラミング言語使いなら、余分なコマンドが必要です。
latex-makeで、フレーバー(味)あります。 Makefileの上にフレーバーを書き出来ます。 たとえば、pdflatexせずにlualatexを使って。
LU_FLAVORS=LUALATEX
include LaTeX.mk
実は、僕がXeLaTeXが好きです。 latex-makeで、xelatexのフレーバーありません。 でも、カスタムフレーバーを作ったです。 2011年のブログで書きました。
define lu-define-flavor-XELATEX $$(eval $$(call lu-create-flavor,XELATEX,tex,XELATEX,.pdf,pdf,\ .pdftex_t .$$(_LU_XELATEX_EXT))) endef LU_FLAVORS=XELATEX XELATEX=xelatex include LaTeX.mk
ほかのルール
LaTeXの上にほかのツールを使いなら、Makefileで余分なルールを書いています。 たとえば、Leapfrog VCFのマニュアルでGnuplotからグラフあります。
Gnuplotは.gpファイルから.epsファイルまでコンパイルをします。 だから、このルールがいいです。
define lu-define-flavor-XELATEX $$(eval $$(call lu-create-flavor,XELATEX,tex,XELATEX,.pdf,pdf,\ .pdftex_t .$$(_LU_XELATEX_EXT))) endef LU_FLAVORS=XELATEX XELATEX=xelatex include LaTeX.mk %.eps: %.gp gnuplot $*.gp
msk-007.texでは、「\input{calculations.tex}
」あります。
calculations.texで「\includegraphics{mnelp-bode.eps}
」あります。
mnelp-bode.gpのファイルあります。
だから、make msk-007.pdf
のタイプ時、latex-makeとGNU Makeはオートマチックに依存関係を知ります。
msk-007.pdfだからmsk-007.texを読んで、msk-007.texだからgeneral.texを読んで、general.texだからmnelp-bode.epsが欲しいです。
それから、余分なルールでgnuplotを使っています。
そのマニュアルも、Circuit-macrosのスキマティク図あります。 2016年でCircuit-macrosについて書きました。
これは二つの余分なルールあります。
%.pic: %.m4 m4 -I /usr/local/share/texmf/tex/latex/circuit_macros \ pgf.m4 $*.m4 > $*.pic %.tex: %.pic dpic -g $*.pic > $*.tex
二歩の依存関係です。 m4から.picまで、.picから.texまでです。 だから、Makeルールでもオートマチックないです。 手動に依存関係をリストします。
msk-007.pdf: \ coretopo.tex fibonacci.tex fibsv.tex galois.tex galsv.tex \ linca.tex passivelc.tex simplres.tex
プログラミング言語の母語に話す人のために、Makeが楽なビルド出来ます。
0 comments