質問

質問

背景

このlatexmkツールは、LaTeXファイルを自動的に処理して出力を生成するために使用できます。ここそしてここは、を に渡し、ビルド プロダクトをこの代替の場所に配置するlatexmk設定をサポートするようになりました。残念ながら、これにより で使用することが難しくなります。out_dir-output-directorypdflatexlatexmkfeynmp

質問

によって生成されたファインマン ダイアグラムを処理するために をlatexmk呼び出すように設定するにはどうすればよいですか? 特に新しい設定を使用する場合はどうすればよいですか?mpostfeynmpout_dir

部分的な回答 1

latexmkrc次のようなカスタムルールをファイルに追加してみることもできます。

add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
    system("mpost $_[0]");
}

しかし、これは 3 つの点で失敗します。1) 複数の画像がある場合、拡張子が変わり、すべての依存関係を指定する方法が明確ではありません。2) 図が生成された後に を再度実行する必要があることを.1伝える方法がわかりません。3) が指定されていても、ソース ディレクトリでコマンドが実行されるため、生成されたファイルが失われます。latexmkpdflatexout_dirlatexmkmpost.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という別の問題を解決します。.1latexmkmpost

私の知る限り、複数の画像がある場合、 は ( は整数)のような拡張子を持つファイルを生成しても問題は発生しません。この状況では、拡張子 を持つファイルがまだ存在しmpost、これが の正しい使用をトリガーするのに十分です。.NNNNNN.1mpost

関連情報