질문

질문

배경

latexmk도구를 사용하면 출력을 생성하기에 충분한 시간 동안 LaTeX 파일을 자동으로 처리할 수 있습니다. 논의여기그리고여기latexmk이제 이 대체 위치에 빌드 제품을 out_dir전달 -output-directory하고 배치하는 설정을 지원합니다. pdflatex불행하게도 이로 latexmk인해 feynmp.

질문

에서 생성된 Feynman 다이어그램 처리를 latexmk호출 하도록 구성하려면 어떻게 해야 합니까 ? 특히 새로운 구성을 사용하시나요?mpostfeynmpout_dir

부분 답변 1

latexmkrc다음과 같이 파일 에 사용자 정의 규칙을 추가하려고 할 수 있습니다 .

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

그러나 이는 세 가지 방식으로 실패합니다. 1) 이미지가 여러 개인 경우 확장이 .1변경되고 모든 종속성을 지정하는 방법이 명확하지 않습니다. 2) 그림이 생성된 후 다시 실행해야 하는지 latexmk어떻게 알 수 있는지 모르겠습니다 . 3) 가 지정 pdflatex되더라도 여전히 소스 디렉터리에서 명령을 실행하므로 생성된 파일이 누락됩니다.out_dirlatexmkmpost.mp

부분 답변 2

제안대로이 답변에서, 에 대한 호출에 의해 수치가 처리되도록 허용하는 -shell-escape옵션을 사용할 수 있습니다 . 불행하게도 에 대한 호출은 여전히 ​​최상위 디렉터리에서 발생합니다. 쉘 명령이 적절한 위치에서 실행되도록 하기 위해 사용하는 방법이 있습니까 ?pdflatexpdflatexmpost-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다른 문제를 해결합니다 ..1latexmkmpost

내가 알 수 있는 한, 이미지가 여러 개 있는 경우 가 정수인 와 mpost같은 확장자를 가진 파일을 생성하는 문제는 발생하지 않습니다. 이 상황에서는 여전히 확장자를 가진 파일이 있으며 이는 의 올바른 사용을 트리거하는 데 충분합니다 ..NNNNNN.1mpost

관련 정보