
背景
このlatexmk
ツールは、LaTeXファイルを自動的に処理して出力を生成するために使用できます。ここそしてここは、を に渡し、ビルド プロダクトをこの代替の場所に配置するlatexmk
設定をサポートするようになりました。残念ながら、これにより で使用することが難しくなります。out_dir
-output-directory
pdflatex
latexmk
feynmp
質問
によって生成されたファインマン ダイアグラムを処理するために をlatexmk
呼び出すように設定するにはどうすればよいですか? 特に新しい設定を使用する場合はどうすればよいですか?mpost
feynmp
out_dir
部分的な回答 1
latexmkrc
次のようなカスタムルールをファイルに追加してみることもできます。
add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
system("mpost $_[0]");
}
しかし、これは 3 つの点で失敗します。1) 複数の画像がある場合、拡張子が変わり、すべての依存関係を指定する方法が明確ではありません。2) 図が生成された後に を再度実行する必要があることを.1
伝える方法がわかりません。3) が指定されていても、ソース ディレクトリでコマンドが実行されるため、生成されたファイルが失われます。latexmk
pdflatex
out_dir
latexmk
mpost
.mp
部分的な回答 2
提案通りこの回答ではでは、-shell-escape
のオプションを使用してpdflatex
、 の呼び出しによって図を処理できるようにすることができますpdflatex
。残念ながら、 の呼び出しは依然として最上位ディレクトリで行われます。 を使ってシェル コマンドが適切な場所で実行されるようにmpost
する方法はありますか?-output-directory
この 2 回目の試みを示す MWE を次に示します。
latexmkrc
mkdir _build;
$out_dir = '_build';
$pdflatex="pdflatex -shell-escape -interaction=nonstopmode %O %S";
tst.tex
\documentclass{scrbook}
\usepackage{feynmp}
\usepackage{etoolbox}
\DeclareGraphicsRule{*}{mps}{*}{}
\makeatletter
\show\endfmffile
\preto{\endfmffile}{\let\the@fmffile\thefmffile}
\appto{\endfmffile}{
\ifnum\pdfshellescape=\@ne
\immediate\write18{mpost \the@fmffile}%
\else
\message{
Run pdf(la)tex with -shell-escape to generate feynmp diagrams}
\fi
\let\the@fmffile\relax
}
\makeatother
\begin{document}
\begin{fmffile}{title}
\begin{fmfgraph}(40,25)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmf{fermion}{i1,v1,o1}
\fmf{fermion}{i2,v2,o2}
\fmf{photon}{v1,v2}
\end{fmfgraph}
\end{fmffile}
\end{document}
答え1
のアップデートlatexmk
、バージョン 4.30a では、-output-directory
オプションの使用に関するいくつかの問題が解決されています。アップグレードすることをお勧めします。
以下は、v. 4.30a で機能するソリューションですlatexmk
。
$out_dir = 'output';
add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
my $file = $_[0];
my ($name, $path) = fileparse( $file );
pushd( $path );
my $return = system "mpost $name" ;
popd();
return $return;
}
これをファイルに保存しますlatexmkrc
。
上記のコードは、mpost
出力ファイルを適切なディレクトリに配置するように説得するという問題を解決します。 の新しいバージョンは、最初の実行時にファイルが存在しない場合、ファイルが見つからない状態を検出して を実行する必要があるlatexmk
という別の問題を解決します。.1
latexmk
mpost
私の知る限り、複数の画像がある場合、 は ( は整数)のような拡張子を持つファイルを生成しても問題は発生しません。この状況では、拡張子 を持つファイルがまだ存在しmpost
、これが の正しい使用をトリガーするのに十分です。.NNN
NNN
.1
mpost