我试过这些代码
\begin{fmffile}{loop} % Loop correction
\begin{fmfgraph*}(80,65)
\fmfkeep{loop}
\fmfleft{ve1}
\fmfright{ve4}]
\fmflabel{$P \rightarrow$}{ve1}
\fmf{photon}{ve1,ve2}
\fmf{photon}{ve3,ve4}
\fmf{fermion,right,label=$K$,label.side=top,label=$K - P$,label.side=bottom,tension=.23}{ve2,ve3,ve2}
\end{fmfgraph*}
\end{fmffile}
但这些代码无法在左侧制作顶部和底部的标签以及 $P$ 的位置:
我该如何处理标签问题?
答案1
虽然你提到你正在使用 FeynMP,但我在这里提供了一个替代方案,它使用TikZ-Feynman(加拿大运输安全局)绘制费曼图。
\documentclass[tikz,convert]{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}
\begin{document}
\feynmandiagram [horizontal=a to b, layered layout] {
a -- [photon, momentum=\(p\)] b
-- [fermion, half left, momentum=\(k\)] c
-- [fermion, half left, momentum=\(p-k\)] b,
c -- [photon, momentum=\(p\)] d,
};
\end{document}
答案2
如果您在命令中指定标签,fmf
它将应用于它定义的所有线段。它不能将不同的参数应用于线的不同部分。最简单的解决方案是只使用两个fmf
命令并分别指定每个部分,如下所示。另一种选择是绘制线条,然后在第二步添加标签,但至少对于这种情况来说,这太复杂了。
\begin{fmffile}{loop} % Loop correction
\begin{fmfgraph*}(80,65)
\fmfkeep{loop}
\fmfleft{ve1}
\fmfright{ve4}]
\fmflabel{$P \rightarrow$}{ve1}
\fmf{photon}{ve1,ve2}
\fmf{photon}{ve3,ve4}
\fmf{fermion,right,label=$K$,label.side=top,tension=.23}{ve2,ve3}
\fmf{fermion,right,label=$K - P$,label.side=bottom,tension=.23}{ve3,ve2}
\end{fmfgraph*}
\end{fmffile}