为什么 metapost 不知道我的 feynmp 代码中的路径?

为什么 metapost 不知道我的 feynmp 代码中的路径?

我正在尝试使用 FeynMP 绘制一个与此完全一样的费曼图

哈特里对费米子自能贡献的费曼图

但圆圈内有一条光子线。此代码完美地创建了上面的图表:

\fmfleft{i} \fmfright{o} \fmftop{t}
\fmf{fermion,label=$q$}{i,v1,o}
\fmffreeze
\fmf{photon,label=$0$}{v1,v2}
\fmf{fermion,right,tension=0.45,label=$k$}{v2,t}
\fmf{fermion,right,tension=0.45}{t,v2}

但当我尝试添加

\fmfposition
\fmfipath{p[]}
\fmfiset{p1}{vpath1(__v2,__t)}
\fmfiset{p2}{vpath2(__t,__v2)}
\fmfi{photon}{point 3length(p1)/4 of p1 -- point 3length(p2)/4 of p2}

创建光子线,MetaPost 给出错误

unknown path p1

另一方面,这段代码改编自 FeynMF 手册,

\fmfleft{i}
\fmfright{o}
\fmf{dots}{i,v1}
\fmf{dots}{v2,o}
\fmf{phantom,left,tension=0.2,tag=1}{v1,v2}
\fmf{phantom,left,tension=0.2,tag=2}{v2,v1}
\fmfdot{v1,v2}
\fmfposition
\fmfipath{p[]}
\fmfiset{p1}{vpath1(__v1,__v2)}
\fmfiset{p2}{vpath2(__v2,__v1)}
\fmfi{fermion}{subpath (0,length(p1)/3) of p1}
\fmfi{fermion}{subpath (2length(p1)/3,length(p1)) of p1}
\fmfi{fermion}{subpath (0,length(p2)/3) of p2}
\fmfi{fermion}{subpath (2length(p2)/3,length(p2)) of p2}
\fmfi{gluon}{point length(p1)/10 of p1
-- point 11length(p1)/12 of p1}

成功创建此图表:

fmfi 的工作示例

有什么区别?我该如何解决?

编辑:根据要求,完整(不起作用)的代码:

\documentclass{article}

%Feynman diagrams
\usepackage{feynmp}
\DeclareGraphicsRule{*}{mps}{*}{}

\begin{document}

\begin{center}
 \begin{fmffile}{Calculation2Diagrams}
  \begin{fmfgraph*}(200,150)

   % This code works fine...
   \fmfleft{i} \fmfright{o} \fmftop{t}
   \fmf{fermion,label=$q$}{i,v1,o}
   \fmffreeze
   \fmf{photon,label=$0$}{v1,v2}
   \fmf{fermion,right,tension=0.45,label=$k$}{v2,t}
   \fmf{fermion,right,tension=0.45}{t,v2}
   % ...just as long as this code isn't added to it.
   \fmfposition
   \fmfipath{p[]}
   \fmfiset{p1}{vpath1(__v2,__t)}
   \fmfiset{p2}{vpath2(__t,__v2)}
   \fmfi{photon}{point 3length(p1)/4 of p1 -- point 3length(p2)/4 of p2}

   % This code, adapted from the FeynMF manual, on the other hand, does
   % almost the same thing in almost the same way and works perfectly.
   %\fmfleft{i}
   %\fmfright{o}
   %\fmf{plain}{i,v1}
   %\fmf{plain}{v2,o}
   %\fmf{phantom,left,tension=0.2,tag=1}{v1,v2}
   %\fmf{phantom,left,tension=0.2,tag=2}{v2,v1}
   %\fmfdot{v1,v2}
   %\fmfposition
   %\fmfipath{p[]}
   %\fmfiset{p1}{vpath1(__v1,__v2)}
   %\fmfiset{p2}{vpath2(__v2,__v1)}
   %\fmfi{plain}{subpath (0,length(p1)/3) of p1}
   %\fmfi{plain}{subpath (2length(p1)/3,length(p1)) of p1}
   %\fmfi{plain}{subpath (0,length(p2)/3) of p2}
   %\fmfi{plain}{subpath (2length(p2)/3,length(p2)) of p2}
   %\fmfi{plain}{point length(p1)/10 of p1
   %-- point 9length(p1)/10 of p1}

  \end{fmfgraph*}
 \end{fmffile}
\end{center}

\end{document}

答案1

如果从宏中省略后缀,它就会起作用vpath

\fmfiset{p1}{vpath(__v2,__t)}
\fmfiset{p2}{vpath(__t,__v2)}

这些后缀到底起什么作用对我来说是一个谜。

这是一个使用的完整程序feynmp-auto

\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first}
\begin{fmfgraph*}(200,200)
    \fmfleft{i} \fmfright{o} \fmftop{t}
\fmf{fermion,label=$q$}{i,v1,o}
\fmffreeze
\fmf{photon,label=$0$}{v1,v2}
\fmf{fermion,right,tension=0.45,label=$k$}{v2,t}
\fmf{fermion,right,tension=0.45}{t,v2}
\fmfposition
\fmfipath{p[]}
\fmfiset{p1}{vpath(__v2,__t)}
\fmfiset{p2}{vpath(__t,__v2)}
\fmfi{photon}{point 3/4 length p1 of p1 -- point 3/4 length p2 of p2}
\end{fmfgraph*}
\end{fmffile}
\end{document}

在此处输入图片描述

相关内容