如何将 kile 与 feynmf 或 feynmp 一起使用?

如何将 kile 与 feynmf 或 feynmp 一起使用?

有人知道如何教自动执行编译包含用或kile生成的费曼图的 Latex 文档的附加步骤吗?feynmffeynmp

据我所知,我必须运行latex,然后运行mf title(或出于某种原因mf '\mode:=localfont;' input titlempost对于 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-write18Metapost 文件将在环境结束后立即编译,并将在下一次编译时使用。


笔记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

相关内容