8

私は論文を編集するためにMakefileを単純化/改善しようとしています。Makefileは、すべてをコンパイルするためにうまく機能します。私はこのようなものを持っています:

show: thesis.pdf
    open thesis.pdf

thesis.pdf: *.tex
    pdflatex --shell-escape thesis

これにより、入力が可能にmakeなり、変更があれば検出され、表示される前に再コンパイルされます。

ここで、個々のチャプターのみを条件付きでコンパイルするように拡張したいと思います。たとえば、これによりmake xpmt、ラウンドアバウトのような方法で1つの章だけを取得するように書くことができます。

xpmt: ch-xpmt.pdf
    open ch-xpmt.pdf

ch-xpmt.pdf: xpmt.tex
    pdflatex --shell-escape --jobname=ch-xpmt \
      "\includeonly{xpmt}\input{thesis}"

しかし、私はこれを個々の章ごとに同じように書き留める必要はありません。繰り返しを避けるために、上記のルールを一般的に十分な方法で作成するにはどうすればよいですか?

(実際の問​​題を解決するのではなく、Makefileの記述方法を学ぶための演習です。明らかにこの場合、上記のコードを十分な回数コピーして貼り付けるのは簡単です!)

4

3 に答える 3

8

名前が付けられたチャプターがある場合xpmt(それは「実験」だと思いますか?)、たとえば、thryanlsconc、またはその他:

xmpt thry anls conc: %: ch-%.pdf
    open $<

ch-%.pdf: %.tex
    pdflatex --shell-escape --jobname=ch-$* "\includeonly{$*}\input{thesis}"

または、make変数を使用して「適切な」方法で行うには、次のようになると思います。

chapters = xmpt thry anls conc
main = thesis
.PHONY: $(chapters) show

show: $(main).pdf
    open $<

$(main).pdf: $(main).tex $(addsuffix .tex,$(chapters))
    pdflatex --shell-escape $(main)

$(chapters): %: ch-%.pdf
    open $<

ch-%.pdf: %.tex
    pdflatex --shell-escape --jobname=ch-$* "\includeonly{$*}\input{$(main)}"
于 2009-03-12T03:15:21.213 に答える
2

ご利用をご検討くださいlatexmk

http://www.phys.psu.edu/~collins/software/latexmk-jcc/

ソースを完全にコンパイルするために、pdflatex/latex、bibtex、makeindex などの実行が必要かどうか (およびその回数) を分類します。

latexmkほとんどの latex ディストリビューションに含まれている perl スクリプトです。システムに perl がインストールされていることを確認するだけで済みます。

于 2012-06-07T18:28:32.070 に答える
2

LaTeX の構築を処理するゴムのようなものを検討する必要があります。make を使用してほとんどの作業を行うことは可能ですが、すべての参照をソートするために bibtex を何度も再実行するなど、LaTeX の複雑な作業は特殊なツールで処理できます。

于 2009-04-06T09:52:00.597 に答える