当使用绘制费曼图时feynmf
,我很难将标签放置在不相互重叠和/或接触线的位置。
以下是一次尝试:
\begin{fmffile}{fmflabels}
\parbox{16mm}{
\begin{fmfgraph*}(16,16)
\fmfleft{ve}
\fmfright{vo}
\fmftop{v}
\fmffreeze
\fmfforce{(0w,0.5h)}{ve}
\fmfforce{(1.0w,0.5h)}{vo}
\fmfforce{(.5w,0.1h)}{v}
\fmffreeze
\fmf{plain,left=0.8,label=$1$,l.s=left,l.d=0.01w}{ve,vo}
\fmf{plain,left=0.8}{vo,ve}
\fmf{plain,left=0.5,label=$2$,l.s=left,l.d=0.05h-0.05w}{v,vo}
\fmf{plain,left=0.5,label=$1/2$,l.s=left,l.d=0.05h-0.05w}{ve,v}
\fmf{phantom,right=0.1,label=$1$,l.s=left}{vo,v}
\fmf{phantom,right=0.1,label=$1$}{ve,v}
\fmffreeze
\fmfdot{ve,v,vo}
\end{fmfgraph*}
}
\end{fmffile}
标签放置不正确,因为它们与线重叠。其他尝试(使用不同的值)没有改善结果。所以对于放置标签label.distance
有些我不明白。label.distance
您对如何修复此问题有什么建议吗?以及如何系统地将标签放置在所需位置?
答案1
这里有几个问题:(a)您试图把它弄得太小,以致没有空间放置标签,(b)您试图在不需要时强制定位。
这是一个简化的版本:
\documentclass{article}
\usepackage{graphics}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{fmflabels}
\resizebox{25.4mm}{!}{
\begin{fmfgraph*}(120,120)
%\fmfleft{ve}
%\fmfright{vo}
%\fmftop{v}
%\fmffreeze
\fmfforce{(0w,0.5h)}{ve}
\fmfforce{(1.0w,0.5h)}{vo}
\fmfforce{(.5w,0.1h)}{v}
%\fmffreeze
\fmf{plain,left=0.8,label=$1a$}{ve,vo}
\fmf{plain,left=0.3,label=$1/2$}{ve,v}
\fmf{plain,right=0.3,label=$1c$}{ve,v}
\fmf{plain,left=0.3,label=$2$}{v,vo}
\fmf{plain,right=0.3,label=$1b$}{v,vo}
%\fmffreeze
\fmfdot{ve,v,vo}
\end{fmfgraph*}
}
\end{fmffile}
\end{document}
这产生了
笔记
我添加了后缀
a
、b
和 ,c
只是为了更清楚地知道哪个标签是哪个我把图表的尺寸增加到 120x120,以便我们有一定的空间,然后根据
\resizebox
标准graphics
包将整个图表缩小。我使用
feynmp-auto
包来简化整个编译过程我已经注释掉了开始时节点的冗余定义。
\fmffreeze
由于您要\fmfforce
放置所有三个节点,因此不需要任何线。我已经删除了所有标签位置提示,只是让它们占据默认位置;重要的是使节点的顺序与连接的左右偏转保持一致。
我认为你不能将表达式传递给标签距离选项,我认为它只会读取一个数字,所以你所有的表达式都被读作“0”
我把整个尺寸缩小到 1 英寸,这样就几乎可以读取了。你可能会觉得 16 毫米有点太小了。