我正在尝试使用 LaTeX/MetaPost 创建费曼图,feynmp 似乎是完美的工具包。我按照教程操作没有遇到任何问题,并且可以毫无问题地以 .eps 格式生成图表本身。但是,一旦我开始标记每个图表,图表的边缘就会像这样被裁剪掉:
我做错了什么? 这是我的代码:
% feynman.tex
\documentclass{article}
\usepackage{feynmp}
\usepackage{amsmath}
\begin{document}
\unitlength = 1mm
\begin{fmffile}{diagram}
\gdef\P#1#2{%
\begin{fmfgraph*}(70,20)
\fmfi{#1}{#2}
\def\L##1##2{\fmfiv{%
dec.shape=circle,dec.size=3thin,
dec.fill=1,lab.dist=5thick,
lab=\noexpand\texttt{%
\noexpand\scriptsize ##1}}{##2}}
\L{sw}{sw}\L{.3[nw,,ne]}{.3[nw,ne]}
\L{ne}{ne}\L{.7[sw,,se]}{.7[sw,se]}
\end{fmfgraph*}}
\P{plain}{sw .. .3[nw,ne]
.. .7[sw,se] .. ne}
\end{fmffile}
\end{document}
答案1
latex
确实,使用和编译示例文件dvipdfm
会产生错误的结果;我不知道为什么,但是其中对 EPS 文件的支持dvipdfm
并不是很好,而且在其他情况下我也遇到了问题。例如,当我开发 时gmp
,为了与xdvipdfmx
内部使用的 XeLaTeX(而后者又基于dvipdfm(x)
)兼容,我只能将 Metapost 输出的文件转换为 PDF 后再包含。
因此我建议使用pdflatex
。Metapost 包含 MPS 文件输出的问题可以通过添加以下代码轻松解决:
\DeclareGraphicsRule{*}{mps}{*}{}
到你的序言。另一种方法,甚至更好,是使用feynmp-auto
它做两件事:
- 它包括上面的行
- 避免了单独运行 Metapost
唯一需要做的就是运行pdflatex
两次(仅当文档中的费曼图发生变化时才需要第二次运行)。
需要注意的另一件事是,该代码在两个方面是错误的:为了完成这项工作而全局重新定义不是一个好主意\P
,因为在使用正常命令时会遇到问题\P
。你能本地重新定义它,但最好不要这样做。 同样适用于\L
。 还请注意,\noexpand
该代码中的 是错误的。
\documentclass{article}
\usepackage{feynmp-auto}
\usepackage{amsmath}
\begin{document}
\unitlength = 1mm
\begin{fmffile}{diagram}
\newcommand\fdP[2]{%
\begin{fmfgraph*}(70,20)
\fmfi{#1}{#2}
\newcommand\fdL[2]{\fmfiv{%
dec.shape=circle,dec.size=3thin,
dec.fill=1,lab.dist=5thick,
lab=\texttt{%
\scriptsize ##1}}{##2}}
\fdL{sw}{sw}\fdL{.3[nw,,ne]}{.3[nw,ne]}
\fdL{ne}{ne}\fdL{.7[sw,,se]}{.7[sw,se]}
\end{fmfgraph*}}
\fdP{plain}{sw .. .3[nw,ne]
.. .7[sw,se] .. ne}
\end{fmffile}
\end{document}