如何在 feynmf 中沿线绘制动量箭头?

如何在 feynmf 中沿线绘制动量箭头?

画费曼图时,经常需要标注每条线并画出动量箭头。怎样才能画出令人满意的动量箭头?以电子-μ子散射为例,我曾尝试自己将箭头放在标签中来画。

\begin{fmfgraph*}(40,25)
    \fmfleftn{i}{2}
    \fmfrightn{o}{2}
    \fmf{fermion,label=$\longrightarrow$}{i1,v1,o1}
    \fmf{fermion}{i2,v2,o2}
    \fmf{photon,label=$\gamma$}{v1,v2}
    \fmfdotn{v}{2}
    \fmflabel{$e^-$}{i1}
    \fmflabel{$e^-$}{o1}
    \fmflabel{$\mu^-$}{i2}
    \fmflabel{$\mu^-$}{o2}
\end{fmfgraph*}

结果最多是愚蠢的:

徒劳地试图绘制动量箭头

如果正确执行此操作,将会有一个与线平行的箭头,旁边(在与线和箭头正交的方向上)将会有一个文本,例如 $p_i$。如何实现这一点?

答案1

如果你不介意切换到普通元帖子语法,并将图形放入外部文件,您可以导入定义feynmp并在常规 MP 图表中使用它们。这提供了一种简单的方法来制作标准位feynmf不支持的布局的图表。

这是我对上述描述的第一次尝试。

在此处输入图片描述

这是使用此 MP 输入生成的:

prologues := 3;
outputtemplate := "%j%c.eps";

input feynmp

beginfig(1);

z1 = -z2 = 20 up;
z3 = (-60,40); 
z4 = z3 reflectedabout(up,down);
z5 = z3 reflectedabout(left,right);
z6 = z4 reflectedabout(left,right);

draw fermion z3 -- z1;
draw fermion z5 -- z2;
draw fermion z1 -- z4;
draw fermion z2 -- z6;
draw photon  z1 -- z2;

label.lft(btex $\gamma$ etex, .5[z1,z2]);

label.ulft(btex $\mu^-$ etex, z3);
label.urt (btex $\mu^-$ etex, z4);

label.llft(btex $e^-$ etex, z5);
label.lrt (btex $e^-$ etex, z6);

fill fullcircle scaled 4 shifted z1;
fill fullcircle scaled 4 shifted z2;

path a[];

a1 = subpath (0.3,0.6) of (z5--z2) shifted 8 up;
drawarrow a1; label.top(btex $p_i$ etex, point .5 of a1);

a2 = subpath (0.4,0.7) of (z2--z6) shifted 8 up;
drawarrow a2; label.top(btex $p_i$ etex, point .5 of a2);

endfig;
end.

但是,如果您希望更贴近原始输入,则可以使用fmfcmd添加新线条样式来添加动量箭头。像这样:

\begin{fmfgraph*}(120,55)
    \fmfleftn{i}{2}
    \fmfrightn{o}{2}
    \fmf{fermion}{i1,v1,o1}
    \fmf{fermion}{i2,v2,o2}
    \fmf{photon,label=$\gamma$}{v1,v2}
    \fmfdotn{v}{2}
    \fmflabel{$e^-$}{i1}
    \fmflabel{$e^-$}{o1}
    \fmflabel{$\mu^-$}{i2}
    \fmflabel{$\mu^-$}{o2}
    % additions here
    \fmffreeze
    \fmfcmd{style_def marrow expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 up
        withpen pencircle scaled 0.4; label.top(btex $p_i$ etex, point 0.5 of p
        shifted 6 up); enddef;}
    \fmf{marrow}{i1,v1,o1}
\end{fmfgraph*}

结果是:

在此处输入图片描述

请注意,这fmffreeze可防止多余的连接弄乱布局。我坦率地承认,这些标签有点儿不妥。

顺便说一下,为了产生这个输出,我发现将其放入fmfgraph这样的 LaTeX 文件中很方便:

\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first}
\begin{fmfgraph*}(120,55)
   ... graph commands here ...
\end{fmfgraph*}
\end{fmffile}
\end{document}

请注意,我必须将 OP 的大小更改为我的系统可读的大小。

答案2

回顾一下下面发生的讨论瑟斯顿的回答,这是一种在费曼图中的线旁边绘制动量箭头的有点古怪的方法。

该命令本质上是(定义新样式)和(用该样式绘制箭头)\marrow的组合,定义有 5 个参数:\fmfcmdfmf

\marrow{name}{arrow_pos}{text_pos}{text}{nodes}

第一个参数是必要的,因为本质上为每个箭头创建了一种新样式(仅字母符号),第二个参数是其中的任意一个up, down, left, right,第三个参数是其中的任意一个top, bot, lft, rt,第四个参数是您的文本,第五个参数是费曼图中的节点或顶点列表(例如i1,v1)。

MWE 如下。

\documentclass{article}
\usepackage{feynmp-auto}
\newcommand{\marrow}[5]{%
    \fmfcmd{style_def marrow#1
    expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4;
    label.#3(btex #4 etex, point 0.5 of p shifted 6 #2);
    enddef;}
    \fmf{marrow#1,tension=0}{#5}}
\begin{document}
\setlength{\unitlength}{1mm}
\begin{fmffile}{marrows}
    \begin{fmfgraph*}(50,30)
        \fmfleftn{i}{2}
        \fmfrightn{o}{2}
        \fmf{fermion}{i1,v1,o1}
        \fmf{fermion}{i2,v2,o2}
        \fmf{photon,label=$\gamma$}{v1,v2}
        \fmfdotn{v}{2}
        \fmflabel{$e^-$}{i1}
        \fmflabel{$e^-$}{o1}
        \fmflabel{$\mu^-$}{i2}
        \fmflabel{$\mu^-$}{o2}
        % Momentum arrows
        \marrow{a}{down}{bot}{$p_1$}{i1,v1}
        \marrow{b}{up}{top}{$p_2$}{i2,v2}
        \marrow{c}{left}{lft}{$q$}{v1,v2}
        \marrow{d}{down}{bot}{$p_3$}{v1,o1}
        \marrow{e}{up}{top}{$p_4$}{v2,o2}
    \end{fmfgraph*}
\end{fmffile}
\end{document}

输出:

动量箭头

中的线条\marrow张力为 0,以防止它们影响图形的形状(瑟斯顿最初的方法是\fmffreeze在包含箭头之前调用,但我认为最佳做法是避免该命令,因为人们可能希望在绘制动量箭头后继续添加线和顶点)。


对于更具冒险精神的人:您可以允许用户自己选择每个箭头的间距,例如在此循环图中。

\documentclass{article}
\usepackage{feynmp-auto}
\newcommand{\marrow}[5]{%
    \fmfcmd{style_def marrow#1
    expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4;
    label.#3(btex #4 etex, point 0.5 of p shifted 6 #2);
    enddef;}
    \fmf{marrow#1,tension=0}{#5}}
\newcommand{\Marrow}[6]{%
    \fmfcmd{style_def marrow#1
    expr p = drawarrow subpath (1/4, 3/4) of p shifted #6 #2 withpen pencircle scaled 0.4;
    label.#3(btex #4 etex, point 0.5 of p shifted #6 #2);
    enddef;}
    \fmf{marrow#1,tension=0}{#5}}
\begin{document}
\setlength{\unitlength}{1mm}
\begin{fmffile}{marrow2}
    \begin{fmfgraph*}(50,50)
        \fmfleftn{i}{2}
        \fmfrightn{o}{2}
        \fmf{fermion}{i1,v1,o1}
        \fmf{fermion}{i2,v4,o2}
        \fmf{photon}{v1,v2}
        \fmf{fermion,right,tension=0.4}{v2,v3,v2}
        \fmf{photon}{v3,v4}
        \fmfdotn{v}{4}
        \marrow{a}{down}{bot}{$p_1$}{i1,v1}
        \marrow{b}{up}{top}{$p_2$}{i2,v4}
        \marrow{c}{left}{lft}{$q$}{v1,v2}
        \Marrow{d}{right}{rt}{$k$}{v2,v3}{26}
        \Marrow{e}{left}{lft}{$q-k$}{v2,v3}{26}
        \marrow{f}{left}{lft}{$q$}{v3,v4}
        \marrow{g}{down}{bot}{$p_3$}{v1,o1}
        \marrow{h}{up}{top}{$p_4$}{v4,o2}
    \end{fmfgraph*}
\end{fmffile}
\end{document}

回路图

相关内容