如何用 FeynMP 绘制椭圆?

如何用 FeynMP 绘制椭圆?

是否可以使用 FeynMP 绘制椭圆形?以下是 blob(即一个圆圈)的 mwe:

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{feynmp}
\usepackage{rotating}
\setlength{\unitlength}{1mm}
\pagestyle{empty}

\usepackage{ifpdf}
\ifpdf
  \DeclareGraphicsRule{*}{mps}{*}{}
\fi

\makeatletter
\def\endfmffile{%
  \fmfcmd{\p@rcent\space the end.^^J%
          end.^^J%
          endinput;}%
  \if@fmfio
    \immediate\closeout\@outfmf
  \fi
  \IfFileExists{\thefmffile.mp}{\immediate\write18{mpost \thefmffile}}{}
  \let\thefmffile\relax
}
\makeatother

\begin{document}
\begin{center}
\begin{fmffile}{lower_bloba}
    \begin{fmfgraph*}(50,70)
    \fmfrightn{r}{1}
    \fmfleftn{l}{1}
    \fmftopn{t}{1}
        \fmfblob{.5w}{v1}
        \fmf{fermion}{l1,v1}
        \fmf{fermion}{v1,r1}
        \fmf{photon}{t1,v1}
\end{fmfgraph*}
\end{fmffile}
\end{center} 
\end{document}

答案1

我认为如果不修改 FeynMP 源就不可能实现,或者至少我不知道如何实现。

但是您可以修改 feynmp.sty 和 feynmp.mp 的源代码来执行您想要的操作。请确保将 feynmp.sty 和 feynmp.mp 放在编译 latex 文件的同一目录中,然后执行以下操作。(编辑:请参阅下文以了解 feynmp.mp 的更简单补丁)

在文件 feynmp.mp:1325(第 1325 行)中有 vblob() 的定义。基于它,我在其下方创建了另一个名为 vblobOval() 的过程:

vardef vblobOval (expr bd) (text vl)=
  forsuffixes $=vl:
    if not vexists $: venter $; fi
    vlist[vlookup $]decor.shape := fullcircle xscaled 1.4;
    vlist[vlookup $]decor.size := bd;
    vlist[vlookup $]decor.sty := "shaded";
 endfor
enddef;

唯一的区别是xscaled 1.4使圆变成椭圆的部分(你可以使用这个数字;我觉得 1.4 不错)。

在文件 feynmp.sty:289 中有 的定义\fmfblob。基于它我写了\fmfblobOval

\def\fmfblobOval#1#2{\fmfcmd{vblobOval ((#1), \fmfpfx{#2});}}

低于原来的\fmfblob,所以你仍然拥有两者。

现在在你的 latex 文件上,\fmfblob你可以使用\fmfblobOval

\fmfblobOval{.5w}{v1}

你会得到一个椭圆形的顶点:

椭圆形顶点,xscale 为 1.4

编辑:可以编写一行补丁到 feynmp.mp,以包含 blob 的椭圆样式。如果你写

elseif match_prefix (n, "oval"): p := fullcircle xscaled 1.4;

在 feynmp.mp 中的第 1282 行以下,您可以使用以下行在您的 latex 文件中绘制一个椭圆形的斑点:

\fmfv{decor.shape=oval, decor.filled=shaded, decor.size=(.5w)}{v1}

该命令\fmfv是绘制 blob 的等效方法(请参阅 FeynMF 手册第 17 页),它允许明确指定选项。因此,您可以使用上面单行补丁中的新“椭圆”形状。

相关内容