有人知道如何教自动执行编译包含用或kile
生成的费曼图的 Latex 文档的附加步骤吗?feynmf
feynmp
据我所知,我必须运行latex
,然后运行mf title
(或出于某种原因mf '\mode:=localfont;' input title
;mpost
对于 feynmp)每个用以下方式定义的费曼图
\begin{fmffile}{title}
% the actual diagram definition
\end{fmffile}
然后latex
再次运行。这可以方便地实现自动化吗kile
?
答案1
以下适用于pdflatex
和费因普:
\usepackage{feynmp}
\DeclareGraphicsRule{*}{mps}{*}{}
\makeatletter
\def\endfmffile{%
\fmfcmd{\p@rcent\space the end.^^J%
end.^^J%
endinput;}%
\if@fmfio
\immediate\closeout\@outfmf
\fi
\ifnum\pdfshellescape=\@ne
\immediate\write18{mpost \thefmffile}%
\fi}
\makeatother
如果您现在使用选项(对于 MiKTeX)调用pdflatex
,-shell-escape
则-enable-write18
Metapost 文件将在环境结束后立即编译,并将在下一次编译时使用。
笔记TeX Live 2012 列出了mpost
可以使用“受限 shell 转义”运行的程序,因此上面的测试可以
\ifnum\pdfshellescape>\z@
不再-shell-escape
需要。但请注意,MiKTeX 2.9没有允许mpost
在受限 shell 中逃逸。
为了费恩姆夫都是一样的:
\usepackage{feynmf}
\makeatletter
\def\endfmffile{%
\fmfcmd{\p@rcent\space the end.^^J%
end.^^J%
endinput;}%
\if@fmfio
\immediate\closeout\@outfmf
\fi
\ifnum\pdfshellescape=\@ne
\immediate\write18{mf "\noexpand\mode:=localfont;input \thefmffile"}%
\fi}
\makeatother
在 Kile 中添加-shell-escape
(pdf)latex 的调用应该很容易。
我建议使用费因普它更易于管理,并可生成与分辨率无关的输出。此外,它还支持颜色。
对于较旧的系统,另一种方法是打开一个输出流,在其中写入必要的 shell 命令。
\usepackage{feynmf}
\makeatletter
\newwrite\@feynmfwr
\immediate\openout\@feynmfwr=\jobname.out
\def\endfmffile{%
\fmfcmd{\p@rcent\space the end.^^J%
end.^^J%
endinput;}%
\if@fmfio
\immediate\closeout\@outfmf
\fi
\immediate\write\@feynmfwr{mf "\noexpand\mode:=localfont;input \thefmffile"}%
}
\makeatother
在 LaTeX 运行结束时,您将得到一个名为主文件的文件,其扩展名.out
包含运行所需的 shell 命令。如果文件是,main.tex
您所要做的就是从 shell 运行
sh main.out