使用 feynmp-auto 的无箭头光子

使用 feynmp-auto 的无箭头光子

我用以下方式创建了这个 MWE feynmp-auto


在此处输入图片描述


\documentclass[a4paper,12pt]{article}
\usepackage{mathtools,amssymb}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{draw}
 \begin{fmfgraph*}(100,100)
       \fmfleft{i}
       \fmfright{o}
       \fmfv{label=$p$,l.a=60}{i}
       \fmfv{label=$p$,l.a=120}{o}
       \fmf{photon,tension=1,l.side=right}{i,v1}
       \fmf{photon,tension=1}{v2,o}
       \fmf{fermion,left,tension=0.4,label=$p-k$}{v1,v2}
       \fmf{fermion,left,tension=0.4,label=$k$}{v2,v1}
\end{fmfgraph*}
\end{fmffile}   
    
\end{document}

但是光子没有像这样的箭头吗?

在此处输入图片描述

我已经阅读了文档:fmfmanfmfsamples和,latex_feynman [CMS Wiki Pages]但是所有的光子都没有箭头(左或右)。

答案1

添加wiggly_arrow样式很容易,但(a)它看起来很糟糕,并且(b)我认为这在费曼图中没有任何意义......

在此处输入图片描述

\documentclass[a4paper,12pt]{article}
\usepackage{mathtools,amssymb}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{draw}
     \fmfcmd{style_def wiggly_arrow expr p = 
        cdraw wiggly p; 
        cfill (arrow wiggly p);
     enddef;} 
     \begin{fmfgraph*}(100,100)
       \fmfleft{i}
       \fmfright{o}
       \fmfv{label=$p$,l.a=60}{i}
       \fmfv{label=$p$,l.a=120}{o}
       \fmf{wiggly_arrow,tension=1}{i,v1}
       \fmf{wiggly_arrow,tension=1}{v2,o}
       \fmf{fermion,left,tension=0.4,label=$p-k$}{v1,v2}
       \fmf{fermion,left,tension=0.4,label=$k$}{v2,v1}
     \end{fmfgraph*}
\end{fmffile}       
\end{document}

第二次尝试

这看起来更好,但我仍然担心它在费曼图中不“意味着”任何东西。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{mathtools,amssymb}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{draw}
     \fmfcmd{style_def wiggly_arrow expr p = 
        draw wiggly p withcolor 3/4 [foreground, background]; 
        cfill (arrow wiggly p);
     enddef;} 
     \fmfcmd{style_def directed_photon expr p = 
        interim ahangle := 30;
        drawarrow (wiggly subpath (0, arctime arclength p - 2.4 ahlength of p) of p) 
            .. {direction infinity of p} point infinity of p 
            cutafter fullcircle scaled 2 shifted point infinity of p
            withcolor foreground; 
     enddef;} 
     \begin{fmfgraph*}(100,100)
       \fmfleft{i}
       \fmfright{o}
       \fmfv{label=$p$,l.a=60}{i}
       \fmfv{label=$p$,l.a=120}{o}
       \fmf{directed_photon,tension=1}{i,v1}
       \fmf{directed_photon,tension=1}{v2,o}
       \fmf{fermion,left,tension=0.4,label=$p-k$}{v1,v2}
       \fmf{fermion,left,tension=0.4,label=$k$}{v2,v1}
     \end{fmfgraph*}
\end{fmffile}   
\end{document}

笔记

这里发生了什么?

  • feynmp包提供了\fmfcmd控制序列,让您可以将任意的 Metapost 代码插入到您的图表中。

  • 我已经使用了\fmfcmd来定义几个新的“样式”宏。

  • style_def我们可以使用包提供的宏来定义“样式”宏feynmpstyle_def工作原理很像,vardef但也设置了一些绘图命令,以及允许您使用带有控制序列的样式名称的定义\fmf

  • 我的第一个叫做“wiggly_arrow”,它使用了feynmp:cdraw和提供的两个命令来cfill绘制路径并在中间放置一个箭头。要绘制的路径由参数表示p,定义使用wiggly前面的宏对其进行修改,从而返回路径的摆动版本。

  • 第二次尝试放弃提供的cdraw命令cfill并回到普通的 MPdrawarrow

  • 复杂之处在于我想让箭头看起来更美观。为此,我只会将波浪形应用于路径的主要部分,并尝试将最后几毫米保持笔直,以便箭头看起来更好。

  • 路径的长度p(以点为单位)为arclength p

  • 普通 MP 箭头的长度为ahlength

  • 所以我想要摆动的路径的长度是arclength p - 2.4 ahlength

  • 所以我们想摆动一下subpath (0, arctime a of p) of p上面a的长度。

  • 我们希望顺利连接到的正常端p,所以我们将弯曲的子路径连接到.. {direction infinity of p} point infinity of p

  • 但最后我们想要停得稍微短一些,以便箭头的尖端更容易被看到,我们在绘制一个完整圆的边缘后切断路径,将其缩放到 2pt 并移动到最远端p

  • 了解?

答案2

每次我看到连接到光子(或胶子)线的箭头时,箭头都会偏移,如示例中的绿色所示。

在我的博士论文中,我为 feynmp 添加了很多箭头样式,并将它们包含在下面。共有 3 种箭头类型和两条线,总共 6 种新线样式。'arrow' 和 'far_arrow' 样式只绘制箭头头,但偏离原始线,'line_arrow' 样式绘制一个完整的箭头,其茎覆盖了它所基于的线的中间一半(从 1/4 到 3/4),但再次偏移。

您将需要使用 \fmffreeze 或tension=0,因为它们需要像光子或胶子线一样被绘制。

以下是包含三种类型的示例的代码(为了清楚起见,采用不同的颜色)。

\documentclass[class=minimal,border=20pt]{standalone}
\usepackage{mathtools,amssymb}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{draw}
     \fmfcmd{
vardef middir(expr p,ang) =
  dir(angle direction length(p)/2 of p + ang)
enddef;
style_def arrow_left expr p =
  shrink(.7);
    cfill(arrow p
      shifted(4thick*middir(p,90)));
  endshrink
enddef;
style_def arrow_right expr p =
  shrink(.7);
    cfill(arrow p
      shifted(4thick*middir(p,-90)));
  endshrink
enddef;
style_def far_arrow_left expr p =
  shrink(.7);
    cfill(arrow p
      shifted(8thick*middir(p,90)));
  endshrink
enddef;
style_def far_arrow_right expr p =
  shrink(.7);
    cfill(arrow p
      shifted(8thick*middir(p,-90)));
  endshrink
enddef;
style_def line_arrow_right expr p = 
  drawarrow subpath (1/4, 3/4) of p shifted 6 middir(p,-90) withpen pencircle scaled 0.4;
enddef;
style_def line_arrow_left expr p = 
  drawarrow subpath (1/4, 3/4) of p shifted 6 middir(p,90) withpen pencircle scaled 0.4;
enddef;} 
     \begin{fmfgraph*}(100,100)
       \fmfleft{i}
       \fmfright{o}
       \fmfv{label=$p$,l.a=60}{i}
       \fmfv{label=$p$,l.a=120}{o}
       \fmf{wiggly,tension=1}{i,v1}
       \fmf{wiggly,tension=1}{v2,o}
       \fmf{fermion,left,tension=0.4,label=$p-k$}{v1,v2}
       \fmf{fermion,left,tension=0.4,label=$k$}{v2,v1}
       \fmf{arrow_right,tension=0,foreground=green}{i,v1}
       \fmf{far_arrow_right,tension=0,foreground=red}{i,v1}
       \fmf{line_arrow_right,tension=0}{v2,o}
     \end{fmfgraph*}
\end{fmffile}       
\end{document}

带光子箭头的费曼图

相关内容