未定義の参照のために Xe(La)TeX の再実行がいつ必要になるかを判断しようとしています。関連する質問をSCons メーリング リストに投稿しましたが、問題は次のとおりです。
XeLaTeX の複数回の実行を必要とするページ カウントやその他の参照は、現時点では SCons やその他のビルド システムによって検出されないことがあります。以下にサンプル ファイルを示します (これを と呼びますjob.tex
)。
\documentclass[oneside,12pt]{memoir}
\usepackage{xltxtra}
\usepackage[T1]{fontenc}
\makepagestyle{plain}
\makeoddfoot{plain}{}{}{Page \thepage\ of \arabic{lastpage}}
\makeevenfoot{plain}{}{}{Page \thepage\ of \arabic{lastpage}}
\begin{document}
\pagestyle{plain}
Page 1
\newpage
Page 2
\newpage
Page 3
\newpage
\end{document}
を実行するxelatex job
と、生成される .pdf には、3 ページのページ番号「Page 1 of 0」、「Page 2 of 0」、および「Page 3 of 0」が含まれます。2 回目に実行xelatex job
すると、"Page 1 of 3" など (つまり、正しいページ数) が表示されます。
これを修正するために、未定義の参照を解決するために xelatex を実行するかどうかを確認するには、次の正規表現を変更することを SCons メーリング リストで提案しました (SCons.Tools.tex
バージョン 2.0.1.beta.20100627.r5064 の 71 行目)。
- warning_rerun_str = '(^LaTeX Warning:.*Rerun)|(^Package \w+ Warning:.*Rerun)'
+ warning_rerun_str = '(^LaTeX Warning:.*Rerun)|(^Package \w+ Warning:.*Rerun)'\
+ '|(^No file \w+\.\w{3}\.$)'
実際には、これは「ファイル job.aux なし」のチェックです。Xe(La)TeX は最初の実行時に常に "No file job.aux" を出力し、Xe(La)TeX は常に 2 回実行されるため、これはすべての場合に機能します。job.aux
事実上、これはと の間の暫定ビルド ターゲットになったのjob.tex
と同じjob.pdf
です。
ここに問題があります: 未定義の参照がなくても (たとえば、上記\arabic{lastpage}
からを削除job.tex
)、Xe(La)TeX が 2 回呼び出され.aux
ます.pdf
。明らかに、未定義の参照がない場合、この 2 番目の呼び出しは不要です。
job.log
したがって、私の質問:再コンパイルが必要な未定義の参照 (\arabic{lastpage} など) がある場合とない場合を、おそらく正規表現を使用して検出する方法を教えてください。
読んでくれてありがとう。
よろしくお願いします、
ブライアン