使用 feynmf 绘制图表时调整标签的位置

使用 feynmf 绘制图表时调整标签的位置

当使用绘制费曼图时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}

这产生了

在此处输入图片描述

笔记

  • 我添加了后缀ab和 ,c只是为了更清楚地知道哪个标签是哪个

  • 我把图表的尺寸增加到 120x120,以便我们有一定的空间,然后根据\resizebox标准graphics包将整个图表缩小。

  • 我使用feynmp-auto包来简化整个编译过程

  • 我已经注释掉了开始时节点的冗余定义。

  • \fmffreeze由于您要\fmfforce放置所有三个节点,因此不需要任何线。

  • 我已经删除了所有标签位置提示,只是让它们占据默认位置;重要的是使节点的顺序与连接的左右偏转保持一致。

  • 我认为你不能将表达式传递给标签距离选项,我认为它只会读取一个数字,所以你所有的表达式都被读作“0”

  • 我把整个尺寸缩小到 1 英寸,这样就几乎可以读取了。你可能会觉得 16 毫米有点太小了。

相关内容