> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/zh-cn/te-ding-ling-yu/03-feynman-diagrams.md).

# 费曼图

## 引言

本文将介绍用于绘制费曼图的 LaTeX 宏包，费曼图是一种表示粒子间相互作用的非常紧凑且直观的方式。我们将介绍 [`tikz-feynman` 宏包](https://ctan.org/pkg/tikz-feynman?lang=en)，它使用 TikZ 绘制图形，以及 [`feynmp-auto`](#other-packages-for-drawing-feynman-diagrams) ，它（在“幕后”）使用 MetaPost。

## TikZ-Feynman 宏包

该 [`tikz-feynman` 宏包](https://ctan.org/pkg/tikz-feynman?lang=en) 发布于 2016 年，并使用 Ti*k*Z 来生成费曼图。Ti*k*Z-Feynman 建立在 Ti*k*Z 宏包及其图形绘制算法之上，以自动安排许多顶点的位置。Ti*k*Z-Feynman 仍然允许对顶点进行精细调整，因此即使是复杂的图也能轻松生成。Ti*k*Z-Feynman 的最新信息始终会在 [项目页面](http://www.jpellis.me/projects/tikz-feynman/) 以及 [包文档](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf) CTAN 上。

### 更新（2022 年 11 月 9 日）

**发布后的重要更新** （2022 年 11 月 9 日）：在更新此页面时， **TikZ-Feynman 宏包仍然与 TeX Live 2018 之后的 TeX Live 版本不兼容**——这也是 [与本文配套的 Overleaf 项目所使用的 TeX Live 版本。](https://www.overleaf.com/project/new/template/26607?id=114366276\&templateName=Examples+using+the+TikZ-Feynman+package\&latexEngine=lualatex\&texImage=texlive-full%3A2018.1\&mainFile=) 下面列出的所有 TikZ-Feynman 示例都需要在一个 Overleaf 项目中编译，并将 **TeX Live 版本** 设置为 `2018（旧版）`。更多信息请参见 [GitHub 上报告的这个问题](https://github.com/JP-Ellis/tikz-feynman/issues/73#issue-942615833).

### 加载宏包

安装宏包后，Ti*k*Z-Feynman 宏包可通过 `\usepackage{tikz-feynman}` 在导言区中加载。建议你同时指定 Ti*k*Z-Feynman 的版本，使用 `compat` 宏包选项： `\usepackage[compat=1.0.0]{tikz-feynman}`。这样可以确保 Ti*k*Z-Feynman 的任何新版本都不会在未警告的情况下带来不希望出现的更改。

### 第一个图

费曼图可以通过 `\feynmandiagram` 命令来声明。它类似于 `\tikz` 来自 Ti*k*Z 的命令，并且需要以分号（`;`）结束环境。例如，一个简单的 *制*道图如下：

```
\feynmandiagram [horizontal=a to b] {
  i1 -- [fermion] a -- [fermion] i2,
  a -- [photon] b,
  f1 -- [fermion] b -- [fermion] f2,
};
```

![S-channel.png](/files/11061c03f7677e2b490e6c028d412a6c9426c9bf)

让我们逐行看看这个示例：

**第 1 行**

\feynmandiagram 用于引入费曼图，并允许在方括号 \[] 中给出可选参数。在这里，horizontal=a to b 会让算法的输出以顶点 a 和 b 之间的连线为水平。

**第 2 行**

左侧的费米子线是通过声明三个顶点（i1、a 和 i2）并用边 -- 将它们连接起来绘制的。就像上面的 \feynmandiagram 命令一样，每条边也可以带有在方括号 \[] 中指定的可选参数。在这里，我们希望这些边带有箭头来表示它们是费米子线，因此为它们添加 fermion 样式。稍后你会看到，可选参数也可以用完全相同的方式加到顶点上。

**第 3 行**

这条边将顶点 a 和 b 连接起来，并将该边样式设为 photon。由于已经存在一个标记为 a 的顶点，算法会把它连接到一个新顶点 b。

**第 4 行**

这一行与第 2 行类似，并引入两个新顶点 f1 和 f2。它重复使用了前面标记的 b 顶点。

**第 5 行**

完成费曼图的声明。最后的分号（;）很重要。

图中每个顶点所给的名称并不重要。因此在这个例子中， `i1`, `i2` 表示初态粒子； `f1`, `f2` 表示末态粒子；而 `a`, `b` 是传播子的端点。唯一重要的是，我们在第 2 行中称 `a` 的也同样是 `a` 第 3 行中的那个，这样底层算法就会把它们视为同一个顶点。

声明顶点的顺序并不重要，因为默认算法会重新排列所有内容。例如，你可能更愿意一次性画出所有费米子线，如下例所示（也请注意，我们给顶点命名的方式完全不同）：

```
\feynmandiagram [horizontal=f2 to f3] {
  f1 -- [fermion] f2 -- [fermion] f3 -- [fermion] f4,
  f2 -- [photon] p1,
  f3 -- [photon] p2,
};
```

![Photon-scattering.png](/files/1bd1616a219022a3a3663a15c605197795e5af30)

最后说明一点，顶点应放置在何处的计算通常通过用 Lua 编写的算法完成。因此，要使用这些算法需要 LuaTeX。如果不使用 LuaTeX，Ti*k*Z-Feynman 将默认采用更基础的算法，并改为向用户发出警告。

### 添加样式

到目前为止，这些示例只使用了 `photon` 和 `fermion` 样式。Ti*k*Z-Feynman 宏包还附带了相当多用于边和顶点的额外样式，它们都记录在 [包文档](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf)中。例如，可以使用 `momentum=<text>`添加动量箭头；而对于末端顶点，粒子可以用 `particle=<text>`进行标记。为了演示它们的用法，我们把前面的通用 *制*道图改成电子-正电子对湮灭生成 μ 子：

```
\feynmandiagram [horizontal=a to b] {
  i1 [particle=\(e^{-}\)] -- [fermion] a -- [fermion] i2 [particle=\(e^{+}\)],
  a -- [photon, edge label=\(\gamma\), momentum'=\(k\)] b,
  f1 [particle=\(\mu^{+}\)] -- [fermion] b -- [fermion] f2 [particle=\(\mu^{-}\)],
};
```

![S-channel-labelled.png](/files/68dffc5598ecc589cefd6acd477c98859ab0cb5c)

除了下面记录的样式键之外，还可以使用 Ti*k*Z 中的样式键：

```
\feynmandiagram [horizontal=a to b] {
  i1 [particle=\(e^{-}\)] -- [fermion, very thick] a -- [fermion, opacity=0.2] i2 [particle=\(e^{+}\)],
  a -- [red, photon, edge label=\(\gamma\), momentum'={[arrow style=red]\(k\)}] b,
  f1 [particle=\(\mu^{+}\)] -- [fermion, opacity=0.2] b -- [fermion, very thick] f2 [particle=\(\mu^{-}\)],
};
```

![S-channel-labelled-styled.png](/files/904a105749978f1fbb826a4a7c00d3d6d282fb81)

如需查看 Ti 提供的所有不同样式的列表，*k*Z 提供的，请查看 [Ti*k*Z 手册](http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf)；它非常详尽，并提供了许多用法示例。

### 当算法还不够时

默认情况下， `\feynmandiagram` 和 `\diagram` 命令使用 `spring layout` 算法来放置所有边。 `spring layout` 该算法会尽量把图“展开”得尽可能开——对于大多数较简单的图来说，这会得到令人满意的结果；不过在某些情况下，这并不能生成最佳图形，本节将介绍其他替代方案。主要有三种替代方案：

**添加不可见边**

在仍使用默认算法的情况下，可以通过添加额外的边并用 draw=none 将其设为不可见，来强制某些顶点彼此更靠近。算法会以同样方式处理这些额外的边，但它们最终不会被绘制出来；

**使用不同的算法**

在某些情况下，其他算法可能更适合。该宏包文档中列出了一些其他图布局算法，所有算法及其参数的完整列表见 TikZ 手册；

**手动放置**

作为最后的手段，非常复杂或不常见的图将需要手动放置每个顶点。

#### 不可见边

底层算法在计算所有顶点的放置位置时，会以完全相同的方式处理所有边，而图的实际绘制（在位置计算完成之后）是单独进行的。因此，可以把边加入算法，但通过添加 `draw=none` 到边样式中来阻止它们被绘制。

如果你希望初态或末态比原本更靠近，这一点尤其有用，如下例所示（注意 `opacity=0.2` 用于代替 `draw=none` 来说明边究竟位于哪里）。

```
% 没有使用不可见边，以保持两个光子靠在一起
\feynmandiagram [small, horizontal=a to t1] {
  a [particle=\(\pi^{0}\)] -- [scalar] t1 -- t2 -- t3 -- t1,
  t2 -- [photon] p1 [particle=\(\gamma\)],
  t3 -- [photon] p2 [particle=\(\gamma\)],
};
```

![Invisible-edge-before.png](/files/0ceff6268dc93d6df2d0f351c64d120e2d98ad60)

```
% 不可见边可确保两个光子平行
\feynmandiagram [small, horizontal=a to t1] {
  a [particle=\(\pi^{0}\)] -- [scalar] t1 -- t2 -- t3 -- t1,
  t2 -- [photon] p1 [particle=\(\gamma\)],
  t3 -- [photon] p2 [particle=\(\gamma\)],
  p1 -- [opacity=0.2] p2,
};
```

![Invisible-edge-after.png](/files/97f6f388ee72c6f60d6dc110e1072aff7294fd7c)

#### 替代算法

来自 Ti*k*Z 有几种不同的算法来定位顶点。默认情况下， `\diagram` 和 `\feynmandiagram` 使用 `spring layout` 算法来放置顶点。 `spring layout` 会尽可能把所有内容展开，在大多数情况下都能得到不错的图；不过，在某些情况下这并不奏效。一个很好的例子是 `spring layout` 这种方法不起作用的衰变图：衰变粒子在左侧，而所有子粒子都在右侧。

```
% 使用默认的 spring layout
\feynmandiagram [horizontal=a to b] {
  a [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f1 [particle=\(\nu_{\mu}\)],
  b -- [boson, edge label=\(W^{-}\)] c,
  f2 [particle=\(\overline \nu_{e}\)] -- [fermion] c -- [fermion] f3 [particle=\(e^{-}\)],
};
```

![Spring-layout.png](/files/397ba6396c7895dcce7e32be1bf651103931f28c)

```
% 使用分层布局
\feynmandiagram [layered layout, horizontal=a to b] {
  a [particle=\(\mu^{-}\)] -- [fermion] b -- [fermion] f1 [particle=\(\nu_{\mu}\)],
  b -- [boson, edge label'=\(W^{-}\)] c,
  c -- [anti fermion] f2 [particle=\(\overline \nu_{e}\)],
  c -- [fermion] f3 [particle=\(e^{-}\)],
};
```

![Layered-layout.png](/files/6a478b112ebf02f3658bbd05829557df1274e4a7)

你可能会注意到，除了添加 `layered layout` 样式到 `\feynmandiagram`之外，我们还改变了顶点的指定顺序。这是因为 `layered layout` 算法确实会注意顶点声明的顺序（不同于默认的 `spring layout`）；因此， `c--f2，c--f3` 的含义与 `f2--c--f3`不同。在前一种情况下， `f2` 和 `f3` 都位于下方那一层 `c` ，符合预期；而后一种情况会把 `f2` 放在上方那一层 `c` （也就是 W 玻色子起始所在的同一层）。

#### 手动放置

在更复杂的图中，很可能无论添加多少不可见边，任何算法都不起作用。在这种情况下，就必须手动放置顶点。Ti*k*Z-Feynman 允许通过使用 `\vertex` 命令。

该 `\vertex` 命令来手动放置顶点。该命令仅可在 `feynman` 环境中使用（而该环境本身又仅可在 `tikzpicture`）内部使用。 `feynman` 该环境会从 Ti 加载所有相关样式*k*Z-Feynman，并声明额外的 Ti*k*Z-Feynman 特定命令，例如 `\vertex` 和 `\diagram`。这受 PGFPlots 及其对 `axis` 环境中。

该 `\vertex` 命令的使用方式启发，与 `\node` 来自 Ti*k*Z 非常相似，唯一值得注意的例外是顶点内容是可选的；也就是说，你不必写 `{<text>}` 放在末尾。在指定了 `{}` 的情况下，顶点会自动赋予 `particle` 样式；否则它就是一个普通的（零尺寸）顶点。

要指定顶点的位置，可以给出显式坐标，不过最简单的方式可能是使用 `positioning` 来自 Ti 的库*k*Z，它允许相对于已有顶点放置新顶点。通过使用相对定位，可以轻松调整图中的某一部分，而其余部分会相应自动调整——另一种做法则是手动调整每个受影响顶点的坐标。

最后，一旦所有顶点都已指定， `\diagram*` 命令用于指定所有边。其工作方式与 `\diagram` （以及 `\feynmandiagram`）非常相似，只不过它使用一个非常基础的算法来放置新节点，并且允许包含已有的（已命名的）节点。要引用已有节点，节点名称必须放在括号中。

下面以 μ 子衰变为例，展示了先指定节点再绘制它们之间边的整个过程：

```
\begin{tikzpicture}
  \begin{feynman}
    \vertex (a) {\(\mu^{-}\)};
    \vertex [right=of a] (b);
    \vertex [above right=of b] (f1) {\(\nu_{\mu}\)};
    \vertex [below right=of b] (c);
    \vertex [above right=of c] (f2) {\(\overline \nu_{e}\)};
    \vertex [below right=of c] (f3) {\(e^{-}\)};

    \diagram* {
      (a) -- [fermion] (b) -- [fermion] (f1),
      (b) -- [boson, edge label'=\(W^{-}\)] (c),
      (c) -- [anti fermion] (f2),
      (c) -- [fermion] (f3),
    };
  \end{feynman}
\end{tikzpicture}
```

![Manual-positioning.png](/files/d4fbf7208ebd504db0ed045b41318ade6829c5b3)

## 用于绘制费曼图的其他宏包

TikZ-Feynman 宏包还有几种替代方案：

* [`feynmf`](https://ctan.org/pkg/feynmf)：通过 [MetaFont](https://ctan.org/pkg/metafont)
* [`feynmp`](https://ctan.org/pkg/feynmf) （随 `feynmf`）一起提供，通过 [MetaPost](https://ctan.org/pkg/metapost)
* [`feynmp-auto`](https://ctan.org/pkg/feynmp-auto?lang=en)：派生自 `feynmp`

该 `feynmp-auto` 宏包实际上是 `feynmp` 宏包的扩展，旨在自动将 MetaPost 的 PostScript 代码转换为 PDF 数据，以便在 pdfTeX、LuaTeX 和 XeTeX 中使用。以下示例都使用 `feynmp-auto`.

### 引言

该 `feynmf`, `feynmp` 和 `feynmp-auto` 这些宏包让你只需指定顶点、粒子及其标签，就能轻松绘制费曼图，然后自动完成布局来绘制图形。

#### 使用基于 feynmf 的宏包概览

要创建费曼图，你需要：

1. 创建一个 `fmfile` 环境，用来容纳一个或多个图，每个图都包裹在一个 `fmfgraph` 或 `fmfgraph*` 环境中——带星号和不带星号形式的区别在于 [如下所述](#fmfgraph-and-fmfgraph);
2. 使用每个 `fmfgraph` 或 `fmfgraph*` 环境来包含创建单个费曼图所需的绘图指令。

该 `fmfile` 环境的形式如下

```latex
\begin{fmffile}{file-name}

% 图 1
\begin{fmfgraph}(width,height)
...
\end{fmfgraph}

% 图 2
\begin{fmfgraph*}(width,height)
...
\end{fmfgraph*}

\end{fmffile}
```

其中 `file-name` 是一个文件名，用于保存其中定义的各个图的 MetaPost 代码描述 `fmfgraph`/`fmfgraph*` 环境。

每个图的形式为

```latex
\begin{fmfgraph}(width,height)

% 绘图指令

\end{fmfgraph}
```

或者，对于带星号的版本（`fmfgraph*`)

```latex
\begin{fmfgraph*}(width,height)

% 绘图指令

\end{fmfgraph*}
```

其中 `(width,height)` 定义图形大小，以 [`\unitlength`](#note-on-unitlength).

中的 MetaPost 代码 `file-name` 会被处理以生成表示你的费曼图的图形。一个 `fmfile` 环境最多可以包含 256 个单独图形。

#### fmfgraph 和 fmfgraph\*

* `fmfgraph`：此环境包含单个费曼图的绘图指令（描述）。它将被放置在 *环境所在的位置*。此环境不支持标签，请使用 `fmfgraph*` 来在图中加入标签。
* `fmfgraph*` 与……相同 `fmfgraph`，但包裹在一个 [`picture` 环境](/latex/zh-cn/tu-biao-he-biao-ge/04-picture-environment.md) 中，并且大小相同。它支持使用 LaTeX 标签。

### 一个例子

让我们先看一个简单示例：

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph}(120,80)
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
 \end{fmfgraph}
\end{fmffile}
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=feynmf+package+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfeynmp-auto%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bfmffile%7D%7Bfirst-diagram%7D%0A+%5Cbegin%7Bfmfgraph%7D%28120%2C80%29%0A+++%5Cfmfleft%7Bi1%2Ci2%7D%0A+++%5Cfmfright%7Bo1%2Co2%7D%0A+++%5Cfmf%7Bfermion%7D%7Bi1%2Cv1%2Co1%7D%0A+++%5Cfmf%7Bfermion%7D%7Bi2%2Cv2%2Co2%7D%0A+++%5Cfmf%7Bphoton%7D%7Bv1%2Cv2%7D%0A+%5Cend%7Bfmfgraph%7D%0A%5Cend%7Bfmffile%7D%0A%5Cend%7Bdocument%7D)

此示例生成以下输出：

![](/files/7cfcb14c412a75529bbe50d06a7c16392065af84)

在这个示例中， `fmfgraph` 环境将图形的宽度和高度分别设为 120 和 80：

```latex
\begin{fmfgraph}(120,80)
```

单位由以下值决定： `\unitlength`，其默认值为 1pt；因此，这个图分配到的宽度为 120pt，高度为 80pt。

#### 关于 \unitlength 的说明

因为 `\unitlength` 是一个 LaTeX 长度单位，你可以使用 `\setlength` 命令更改它的值；例如，要以 cm 为单位定义图形的宽度和高度，你可以写：

```latex
\setlength{\unitlength}{1cm}
```

重复上面的示例，下面的图现在具有 `8cm` 和 `5cm`:

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\setlength{\unitlength}{1cm}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph}(8,5)% 单位现在是 cm
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
 \end{fmfgraph}
\end{fmffile}
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Setting+units+to+draw+Feynman+diagrams\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfeynmp-auto%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Cunitlength%7D%7B1cm%7D%0A%5Cbegin%7Bfmffile%7D%7Bfirst-diagram%7D%0A+%5Cbegin%7Bfmfgraph%7D%288%2C5%29%25+units+are+now+in+cm%0A+++%5Cfmfleft%7Bi1%2Ci2%7D%0A+++%5Cfmfright%7Bo1%2Co2%7D%0A+++%5Cfmf%7Bfermion%7D%7Bi1%2Cv1%2Co1%7D%0A+++%5Cfmf%7Bfermion%7D%7Bi2%2Cv2%2Co2%7D%0A+++%5Cfmf%7Bphoton%7D%7Bv1%2Cv2%7D%0A+%5Cend%7Bfmfgraph%7D%0A%5Cend%7Bfmffile%7D%0A%5Cend%7Bdocument%7D)

这个示例现在生成了更大的图：

![](/files/9de995feb876fcc02e9c6fa11e64bb996bf4365f)

### 顶点

你首先需要做的是指定外部顶点及其应放置的位置。你可以随意给顶点命名，并使用以下命令说明它们应放在何处： `\fmfleft`, `\fmfright`, `\fmftop`, `\fmfbottom`.

如上面的示例所示：

```latex
% 在左侧创建两个顶点，名为 i1 和 i2
\fmfleft{i1,i2}

% 在右侧创建两个顶点，名为 o1 和 o2
\fmfright{o1,o2}
```

你可以使用 `\fmf`来连接顶点；如果传入尚未创建的名称，它还会创建新的顶点。上面的示例中也是这样使用的：

```latex
% 将在 i1 和之间创建一条费米子线
% 新创建的 v1 之间，以及 v1 和 o1 之间。
\fmf{fermion}{i1,v1,o1}

% 将在 v1 和新创建的 v2 之间创建一条光子线
\fmf{photon}{v1,v2}
```

### 标签

如 [上所述](#fmfgraph-and-fmfgraph)；要使用标签，绘图必须使用 `fmfgraph*` 形式的绘图环境创建。

使用 `\fmflabel` 命令在顶点上放置标签：

```latex
\fmflabel{label-content}{diagram-vertex}
```

其中：

* `标签内容` 是要应用于所选顶点的标签；
* `图形顶点` 是要标注的顶点的名称。

请注意 `标签内容` 可以包含数学内容。

我们可以重用前面的示例来添加以下标签

```latex
   \fmflabel{$v_1$}{v1}
   \fmflabel{$v_2$}{v2}
```

这将生成如下所示的更新后的图：

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph*}(120,80) %注意 fmfgraph* 环境
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
   % 添加我们的标签
   \fmflabel{$v_1$}{v1}
   \fmflabel{$v_2$}{v2}
 \end{fmfgraph*}
\end{fmffile}
\end{document}
```

[在 Overleaf 中打开此示例。](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Adding+labels+to+Feynman+diagrams\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfeynmp-auto%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bfmffile%7D%7Bfirst-diagram%7D%0A+%5Cbegin%7Bfmfgraph%2A%7D%28120%2C80%29+%25NOTE+the+fmfgraph%2A+environment%0A+++%5Cfmfleft%7Bi1%2Ci2%7D%0A+++%5Cfmfright%7Bo1%2Co2%7D%0A+++%5Cfmf%7Bfermion%7D%7Bi1%2Cv1%2Co1%7D%0A+++%5Cfmf%7Bfermion%7D%7Bi2%2Cv2%2Co2%7D%0A+++%5Cfmf%7Bphoton%7D%7Bv1%2Cv2%7D%0A+++%25+Add+our+labels%0A+++%5Cfmflabel%7B%24v_1%24%7D%7Bv1%7D%0A+++%5Cfmflabel%7B%24v_2%24%7D%7Bv2%7D%0A+%5Cend%7Bfmfgraph%2A%7D%0A%5Cend%7Bfmffile%7D%0A%5Cend%7Bdocument%7D)

此示例生成一个包含标签的费曼图：

![](/files/2fcf546b4c6bec2452d9e7c9aaa3223e260239b9)

### 一些更复杂的示例

以下更高级的示例使用了我们尚未讨论的 `feynmp` 的功能：请参见 [`feynmp` 宏包（`feynmf`) 文档](https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/feynmf/fmfman.pdf)——其中还包含许多其他示例。这些图最初发布在一个 Overleaf 模板中，其中的 LaTeX 代码转载自 CERN 的一个网页，该网页现在只能通过 [Wayback Machine](https://web.archive.org/web/20141015023615/http://szczypka.web.cern.ch:80/szczypka/guides/latex/feynmp.html)访问——该页面还包含更多你可能想尝试的示例。

#### 示例 1

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-a}
\begin{fmfgraph*}(100,100)
    \fmfleft{i1}
    \fmfright{o1,o2}
    \fmf{fermion,label=$u$}{i1,w1}
    \fmf{fermion,label=$d$}{w1,o1}
    \fmf{photon,label=$W^{+}$}{w1,o2}
    \fmfv{lab=$V^{\ast}_{ud}$,lab.dist=0.05w}{w1}
\end{fmfgraph*}
\end{fmffile}
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=feynmf+package+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfeynmp-auto%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bfmffile%7D%7Bcomplex-a%7D%0A%5Cbegin%7Bfmfgraph%2A%7D%28100%2C100%29%0A++++%5Cfmfleft%7Bi1%7D%0A++++%5Cfmfright%7Bo1%2Co2%7D%0A++++%5Cfmf%7Bfermion%2Clabel%3D%24u%24%7D%7Bi1%2Cw1%7D%0A++++%5Cfmf%7Bfermion%2Clabel%3D%24d%24%7D%7Bw1%2Co1%7D%0A++++%5Cfmf%7Bphoton%2Clabel%3D%24W%5E%7B%2B%7D%24%7D%7Bw1%2Co2%7D%0A++++%5Cfmfv%7Blab%3D%24V%5E%7B%5Cast%7D_%7Bud%7D%24%2Clab.dist%3D0.05w%7D%7Bw1%7D%0A%5Cend%7Bfmfgraph%2A%7D%0A%5Cend%7Bfmffile%7D%0A%5Cend%7Bdocument%7D)

此示例生成如下图：

![](/files/81f5c8fd52166cdfc68331007544aae38df15b3f)

#### 示例 2

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-b}
\begin{fmfgraph*}(200,200)
    % 底部和顶部顶点
    \fmfstraight
    \fmfleft{i0,i1,i2,id1,id2,i3,i4,i5}
    \fmfright{o0,o1,o2,od1,od2,o3,o4,o5}
    % 入射质子到胶子顶点
    \fmf{fermion,label=$d$}{i1,o1}
    % 张力将顶点偏向一侧
    \fmf{fermion,tension=1.5,label=$\overline{b}$}{v2,i4}
    \fmf{fermion,label=$\overline{c}$}{o4,v2}
    \fmffreeze
    \fmf{fermion}{o2,v3,o3}
    \fmf{fermion,label=$\overline{s}$}{o2,v3}
    \fmf{fermion,label=$c$}{v3,o3}
    \fmf{photon, tension=2,label=$W^{+}$}{v2,v3}
    % 幻影线使 W->cs 顶点居中
    \fmf{phantom,tension=1.5}{i1,v3}

    \fmfv{lab=$V_{cb}^{\ast}$}{v2}
    \fmfv{lab=$V_{cs}$,lab.dist=-.1w}{v3}
\end{fmfgraph*}
\end{fmffile}
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=feynmf+package+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfeynmp-auto%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bfmffile%7D%7Bcomplex-b%7D%0A%5Cbegin%7Bfmfgraph%2A%7D%28200%2C200%29%0A++++%25+bottom+and+top+verticies%0A++++%5Cfmfstraight%0A++++%5Cfmfleft%7Bi0%2Ci1%2Ci2%2Cid1%2Cid2%2Ci3%2Ci4%2Ci5%7D%0A++++%5Cfmfright%7Bo0%2Co1%2Co2%2Cod1%2Cod2%2Co3%2Co4%2Co5%7D%0A++++%25+incoming+proton+to+gluon+vertices%0A++++%5Cfmf%7Bfermion%2Clabel%3D%24d%24%7D%7Bi1%2Co1%7D%0A++++%25+tension+shifts+vertex+to+one+side%0A++++%5Cfmf%7Bfermion%2Ctension%3D1.5%2Clabel%3D%24%5Coverline%7Bb%7D%24%7D%7Bv2%2Ci4%7D%0A++++%5Cfmf%7Bfermion%2Clabel%3D%24%5Coverline%7Bc%7D%24%7D%7Bo4%2Cv2%7D%0A++++%5Cfmffreeze%0A++++%5Cfmf%7Bfermion%7D%7Bo2%2Cv3%2Co3%7D%0A++++%5Cfmf%7Bfermion%2Clabel%3D%24%5Coverline%7Bs%7D%24%7D%7Bo2%2Cv3%7D%0A++++%5Cfmf%7Bfermion%2Clabel%3D%24c%24%7D%7Bv3%2Co3%7D%0A++++%5Cfmf%7Bphoton%2C+tension%3D2%2Clabel%3D%24W%5E%7B%2B%7D%24%7D%7Bv2%2Cv3%7D%0A++++%25+phantom+centres+the+W-%3Ecs+vertex%0A++++%5Cfmf%7Bphantom%2Ctension%3D1.5%7D%7Bi1%2Cv3%7D%0A%0A++++%5Cfmfv%7Blab%3D%24V_%7Bcb%7D%5E%7B%5Cast%7D%24%7D%7Bv2%7D%0A++++%5Cfmfv%7Blab%3D%24V_%7Bcs%7D%24%2Clab.dist%3D-.1w%7D%7Bv3%7D%0A%5Cend%7Bfmfgraph%2A%7D%0A%5Cend%7Bfmffile%7D%0A%5Cend%7Bdocument%7D)

此示例生成如下图：

![](/files/5e29704a6f22c879a06c0cc1aac305dcdf1c0933)

#### 示例 3

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-c}
\begin{fmfgraph*}(200,200)
    % 底部和顶部顶点
    \fmfbottom{P1,P2}
    \fmftop{P1',b,bbar,P2'}
    % 入射质子到胶子顶点
    \fmf{fermion,tension=2,lab=$P_1$}{P1,g1}
    \fmf{fermion,tension=2,lab=$P_2$}{P2,g2}
    % 胶子顶点处的气泡，0.16w 是气泡大小
    \fmfblob{.16w}{g1,g2}
    % 从 P1 到顶点1 的胶子
    \fmf{gluon,lab.side=right,lab=$x_{1}P_{1}$}{g1,v1}
    % 从 P2 到顶点2 的胶子——注意顺序的变化！
    \fmf{gluon,lab.side=right,lab=$x_{2}P_{2}$}{v2,g2}
    % 这里原本是夸克环
    \fmf{fermion, tension=.6, lab.side=right,lab=$b$}{v1,b}
    \fmf{fermion, tension=1.2}{v2,v1}
    \fmf{fermion, tension=.6, lab.side=right,lab=$\overline{b}$}{bbar,v2}
    % 输出质子
    \fmf{fermion}{g1,P1'}
    \fmf{fermion}{g2,P2'}
    % 将所有内容固定在原位
    \fmffreeze
    \renewcommand{\P}[3]{\fmfi{plain}{%
        vpath(__#1,__#2) shifted (thick*(#3))}}
    % P1 上的线
    \P{P1}{g1}{2,0}
    \P{P1}{g1}{-2,1}
    % p2 上的线
    \P{P2}{g2}{2,1}
    \P{P2}{g2}{-2,0}
    % P1' 上的线
    \P{g1}{P1'}{-2,-1}
    \P{g1}{P1'}{2,0}
    % P2' 上的线
    \P{g2}{P2'}{-2,0}
    \P{g2}{P2'}{2,-1}
\end{fmfgraph*}
\end{fmffile}
\end{document}
```

[在 Overleaf 中打开此示例](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=feynmf+package+example+1\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bfeynmp-auto%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bfmffile%7D%7Bcomplex-c%7D%0A%5Cbegin%7Bfmfgraph%2A%7D%28200%2C200%29%0A++++%25bottom+and+top+verticies%0A++++%5Cfmfbottom%7BP1%2CP2%7D%0A++++%5Cfmftop%7BP1%27%2Cb%2Cbbar%2CP2%27%7D%0A++++%25incoming+protons+to+gluon+vertices%0A++++%5Cfmf%7Bfermion%2Ctension%3D2%2Clab%3D%24P_1%24%7D%7BP1%2Cg1%7D%0A++++%5Cfmf%7Bfermion%2Ctension%3D2%2Clab%3D%24P_2%24%7D%7BP2%2Cg2%7D%0A++++%25blobs+at+gluon+vertices%2C+0.16w+is+the+size+of+blob%0A++++%5Cfmfblob%7B.16w%7D%7Bg1%2Cg2%7D%0A++++%25gluon+from+P1+to+vertex1%0A++++%5Cfmf%7Bgluon%2Clab.side%3Dright%2Clab%3D%24x_%7B1%7DP_%7B1%7D%24%7D%7Bg1%2Cv1%7D%0A++++%25gluon+from+P2+to+vertex2+-+note+change+of+order%21%0A++++%5Cfmf%7Bgluon%2Clab.side%3Dright%2Clab%3D%24x_%7B2%7DP_%7B2%7D%24%7D%7Bv2%2Cg2%7D%0A++++%25quark+loop+was+here%0A++++%5Cfmf%7Bfermion%2C+tension%3D.6%2C+lab.side%3Dright%2Clab%3D%24b%24%7D%7Bv1%2Cb%7D%0A++++%5Cfmf%7Bfermion%2C+tension%3D1.2%7D%7Bv2%2Cv1%7D%0A++++%5Cfmf%7Bfermion%2C+tension%3D.6%2C+lab.side%3Dright%2Clab%3D%24%5Coverline%7Bb%7D%24%7D%7Bbbar%2Cv2%7D%0A++++%25outgoing+protons%0A++++%5Cfmf%7Bfermion%7D%7Bg1%2CP1%27%7D%0A++++%5Cfmf%7Bfermion%7D%7Bg2%2CP2%27%7D%0A++++%25freeze+everything+in+place%0A++++%5Cfmffreeze%0A++++%5Crenewcommand%7B%5CP%7D%5B3%5D%7B%5Cfmfi%7Bplain%7D%7B%25%0A++++++++vpath%28__%231%2C__%232%29+shifted+%28thick%2A%28%233%29%29%7D%7D%0A++++%25lines+on+P1%0A++++%5CP%7BP1%7D%7Bg1%7D%7B2%2C0%7D%0A++++%5CP%7BP1%7D%7Bg1%7D%7B-2%2C1%7D%0A++++%25lines+on+p2%0A++++%5CP%7BP2%7D%7Bg2%7D%7B2%2C1%7D%0A++++%5CP%7BP2%7D%7Bg2%7D%7B-2%2C0%7D%0A++++%25lines+on+P1%27%0A++++%5CP%7Bg1%7D%7BP1%27%7D%7B-2%2C-1%7D%0A++++%5CP%7Bg1%7D%7BP1%27%7D%7B2%2C0%7D%0A++++%25lines+on+P2%27%0A++++%5CP%7Bg2%7D%7BP2%27%7D%7B-2%2C0%7D%0A++++%5CP%7Bg2%7D%7BP2%27%7D%7B2%2C-1%7D%0A%5Cend%7Bfmfgraph%2A%7D%0A%5Cend%7Bfmffile%7D%0A%5Cend%7Bdocument%7D)

此示例生成如下图：

![](/files/5766ab68abc322905bd61d6e97f6b9f9f915f541)

### 线型

我们已经见过 `photon` 和 `fermion` 上面的线型，但 `feynmp` 该包还支持更多。

| 外观                                                                                   | 名称                                      |
| ------------------------------------------------------------------------------------ | --------------------------------------- |
| ![Feynmf-line-curly.png](/files/35f17f4d2e56c41174e579c00979b7d9400fa396)            | gluon, curly                            |
| ![Feynmf-line-dbl-curly.png](/files/8a890fc6c24001bc222bf558bf167220ab25b10f)        | dbl\_curly                              |
| ![Feynmf-line-dashes.png](/files/fe0da17c7ea75fb3df44ba73708ce149060cdcdf)           | dashes                                  |
| ![Feynmf-line-dashed-arrow.png](/files/8c069859fdd9eaa48b1194d62c9e8ff3f9e5db00)     | scalar, dashes\_arrow                   |
| ![Feynmf-line-dbl-dashes.png](/files/81304fc504299284d9d50c0f1ebcd42849e1b74b)       | dbl\_dashes                             |
| ![Feynmf-line-dbl-dashes-arrow.png](/files/e297d1d0c3440d16286d97208e76516b20186d13) | dbl\_dashes\_arrow                      |
| ![Feynmf-line-dots.png](/files/b49468b530bfa6be9a2b1dadf3a4d01678e2631c)             | dots                                    |
| ![Feynmf-line-dots-arrow.png](/files/fc0d317d224eb7074fb11e24301f37b37485e02a)       | ghost, dots\_arrow                      |
| ![Feynmf-line-dbl-dots.png](/files/508ee56aa8c46ede0e6910288b384b18cd6a5441)         | dbl\_dots                               |
| ![Feynmf-line-dbl-dots-arrow.png](/files/a349ffddb6dd469b14ad20bbdf894f9150c952ef)   | dbl\_dots\_arrow                        |
|                                                                                      | phantom                                 |
| ![Feynmf-line-phantom-arrow.png](/files/b4d85e8e03cffd1a3aeaafcaaf497e8483822577)    | phantom\_arrow                          |
| ![Feynmf-line-plain.png](/files/bfaeda501774ba4e9c92c07f50f006da7092a50a)            | vanilla, plain                          |
| ![Feynmf-line-plain-arrow.png](/files/98711cbf88d752d87f0f7bc3f7a59ce26329b604)      | fermion, electron, quark, plain\_arrow  |
| ![Feynmf-line-dbl-plain.png](/files/bfd47f9f08e652eb210e922cbb9613e16e0516a0)        | double, dbl\_plain                      |
| ![Feynmf-line-dbl-plain-arrow.png](/files/0b81da50004d2f9b00368e4d7abde3fa1b013cd0)  | double\_arrow, heavy, dbl\_plain\_arrow |
| ![Feynmf-line-wiggly.png](/files/92e8301836c6721f8ff3011258a8deade2a3aa6a)           | boson, photon, wiggly                   |
| ![Feynmf-line-dbl-wiggly.png](/files/f183090ab9dd81d365b8d78097fd541b2cc089fe)       | dbl\_wiggly                             |
| ![Feynmf-line-zigzag.png](/files/12e346461f88fe6f051aeca77690d03e6833cab2)           | zigzag                                  |
| ![Feynmf-line-dbl-zigzag.png](/files/4821191db5364237387048c6c8086daa2f8831a3)       | dbl\_zigzag                             |

## 延伸阅读

更多信息请参见：

* [化学公式](/latex/zh-cn/te-ding-ling-yu/02-chemistry-formulae.md)
* [分子轨道图](/latex/zh-cn/te-ding-ling-yu/04-molecular-orbital-diagrams.md)
* [TikZ 宏包](/latex/zh-cn/tu-biao-he-biao-ge/05-tikz-package.md)
* [直接在 LaTeX 中绘图](/latex/zh-cn/tu-biao-he-biao-ge/04-picture-environment.md)
* [插入图片](/latex/zh-cn/geng-duo-zhu-ti/27-inserting-images.md)
* [希腊字母和数学符号列表](/latex/zh-cn/shu-xue/11-list-of-greek-letters-and-math-symbols.md)
* [该 **feynmf** 包文档](http://mirrors.ctan.org/macros/latex/contrib/feynmf/fmfman.pdf).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/zh-cn/te-ding-ling-yu/03-feynman-diagrams.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
