
배경
이 latexmk
도구를 사용하면 출력을 생성하기에 충분한 시간 동안 LaTeX 파일을 자동으로 처리할 수 있습니다. 논의여기그리고여기는 latexmk
이제 이 대체 위치에 빌드 제품을 out_dir
전달 -output-directory
하고 배치하는 설정을 지원합니다. pdflatex
불행하게도 이로 latexmk
인해 feynmp
.
질문
에서 생성된 Feynman 다이어그램 처리를 latexmk
호출 하도록 구성하려면 어떻게 해야 합니까 ? 특히 새로운 구성을 사용하시나요?mpost
feynmp
out_dir
부분 답변 1
latexmkrc
다음과 같이 파일 에 사용자 정의 규칙을 추가하려고 할 수 있습니다 .
add_cus_dep('mp', '1', 0, 'mpost');
sub mpost {
system("mpost $_[0]");
}
그러나 이는 세 가지 방식으로 실패합니다. 1) 이미지가 여러 개인 경우 확장이 .1
변경되고 모든 종속성을 지정하는 방법이 명확하지 않습니다. 2) 그림이 생성된 후 다시 실행해야 하는지 latexmk
어떻게 알 수 있는지 모르겠습니다 . 3) 가 지정 pdflatex
되더라도 여전히 소스 디렉터리에서 명령을 실행하므로 생성된 파일이 누락됩니다.out_dir
latexmk
mpost
.mp
부분 답변 2
제안대로이 답변에서, 에 대한 호출에 의해 수치가 처리되도록 허용하는 -shell-escape
옵션을 사용할 수 있습니다 . 불행하게도 에 대한 호출은 여전히 최상위 디렉터리에서 발생합니다. 쉘 명령이 적절한 위치에서 실행되도록 하기 위해 사용하는 방법이 있습니까 ?pdflatex
pdflatex
mpost
-output-directory
다음은 이 두 번째 시도를 보여주는 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
사용과 관련된 몇 가지 문제를 해결하는 v. 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