> For the complete documentation index, see [llms.txt](https://ayakaleaf-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://ayakaleaf-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（legacy）`。更多信息请参见 [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，并且需要以最后的分号（`;`）来结束环境。例如，一个简单的 *s*-通道图如下：

```
\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 行**

这条边用 photon 样式连接顶点 a 和 b。由于已经有一个标记为 a 的顶点，算法会将它连接到一个新的、标记为 b 的顶点。

**第 4 行**

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

**第 5 行**

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

图中每个顶点所起的名字并不重要。因此在这个示例中， `i1`, `i2` 表示初始粒子； `f1`, `f2` 表示最终粒子；并且 `a`, `b` 是传播子的端点。唯一重要的是，我们在 `a` 第 2 行中称作 `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>`为粒子添加标签。为了演示它们的用法，我们取前面的通用 *s*-通道图，并将其改成一个电子-正电子对湮灭成 μ 子的过程：

```
\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` 命令使用 `弹簧布局` 算法来放置所有边。 `弹簧布局` 该算法会尝试尽可能把图“展开”，这对大多数较简单的图来说都能得到令人满意的结果；但在某些情况下，这并不能产生最佳图形，本节将介绍替代方案。主要有三种替代方法：

**添加不可见的边**

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

**使用不同的算法**

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

**手动放置**

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

#### 不可见边

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

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

```
% No invisible to keep the two photons together
\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)

```
% Invisible edge ensures photons are parallel
\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` 使用 `弹簧布局` 算法来放置顶点。 `弹簧布局` 该算法会尽量把所有东西展开，在大多数情况下能得到漂亮的图形；然而，在某些情况下这并不奏效。一个默认 `弹簧布局` 算法不起作用的好例子是衰变过程：衰变粒子在左边，而所有子粒子在右边。

```
% 使用默认的弹簧布局
\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)

你可能会注意到，除了添加 `分层布局` 样式到 `\feynmandiagram`之外，我们还改变了指定顶点的顺序。这是因为 `分层布局` 算法确实会关注顶点声明的顺序（不同于默认的 `弹簧布局`）；因此， `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`. `axis` 环境中。

该 `\vertex` 命令与 `\node` 命令，来自 Ti*k*Z 类似，不过有一个显著的例外：顶点内容是可选的；也就是说，你不必在末尾写 `{<text>}` 。如果指定了 `{}` ，该顶点会自动获得 `particle` 样式，否则它就是一个普通的（零尺寸）顶点。

要指定顶点的位置，可以给出明确坐标，不过最简单的做法可能是使用 Ti `positioning` Z 中的库，它允许将顶点相对于现有顶点进行放置。通过相对放置，可以轻松调整图形的一部分，而其他部分会相应自动调整——另一种做法则是手动调整所有受影响顶点的坐标。*k*最后，一旦所有顶点都已指定，

\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 代码转换为供 pdfTeX、LuaTeX 和 XeTeX 使用的 PDF 数据。以下示例都使用 `feynmp-auto`.

### 引言

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

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

要创建费曼图，你需要：

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

该 `fmfile` 环境的形式如下

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

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

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

\end{fmffile}
```

其中 `file-name` 是一个文件名，用来包含在其中定义的各个图形的 MetaPost 代码描述 `fmfgraph`/`fmfgraph*` 环境填充。

每个图形采用如下形式

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

% drawing instructions

\end{fmfgraph}
```

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

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

% drawing instructions

\end{fmfgraph*}
```

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

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

#### fmfgraph 和 fmfgraph\*

* `fmfgraph`：此环境包含单个费曼图的绘图指令（描述）。它将被放置在 *环境所在的位置*。此环境不支持标签，请使用 `fmfgraph*` 在图中加入标签。
* `fmfgraph*` 与 `fmfgraph`，但被包裹在一个 [`picture` 环境](/latex/zh-cn/tu-xing-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)% units are now in 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) %NOTE the fmfgraph* environment
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
   % Add our labels
   \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 模板中，该模板包含从 CERN 网页复制的 LaTeX 代码，而该网页现在只能通过 [互联网档案馆（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)
    % bottom and top verticies
    \fmfstraight
    \fmfleft{i0,i1,i2,id1,id2,i3,i4,i5}
    \fmfright{o0,o1,o2,od1,od2,o3,o4,o5}
    % incoming proton to gluon vertices
    \fmf{fermion,label=$d$}{i1,o1}
    % tension shifts vertex to one side
    \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}
    % phantom centres the W->cs vertex
    \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)
    %bottom and top verticies
    \fmfbottom{P1,P2}
    \fmftop{P1',b,bbar,P2'}
    %incoming protons to gluon vertices
    \fmf{fermion,tension=2,lab=$P_1$}{P1,g1}
    \fmf{fermion,tension=2,lab=$P_2$}{P2,g2}
    %blobs at gluon vertices, 0.16w is the size of blob
    \fmfblob{.16w}{g1,g2}
    %gluon from P1 to vertex1
    \fmf{gluon,lab.side=right,lab=$x_{1}P_{1}$}{g1,v1}
    %gluon from P2 to vertex2 - note change of order!
    \fmf{gluon,lab.side=right,lab=$x_{2}P_{2}$}{v2,g2}
    %quark loop was here
    \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}
    %outgoing protons
    \fmf{fermion}{g1,P1'}
    \fmf{fermion}{g2,P2'}
    %freeze everything in place
    \fmffreeze
    \renewcommand{\P}[3]{\fmfi{plain}{%
        vpath(__#1,__#2) shifted (thick*(#3))}}
    %lines on P1
    \P{P1}{g1}{2,0}
    \P{P1}{g1}{-2,1}
    %lines on p2
    \P{P2}{g2}{2,1}
    \P{P2}{g2}{-2,0}
    %lines on P1'
    \P{g1}{P1'}{-2,-1}
    \P{g1}{P1'}{2,0}
    %lines on 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-xing-he-biao-ge/05-tikz-package.md)
* [在 LaTeX 中直接绘制图表](/latex/zh-cn/tu-xing-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://ayakaleaf-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.
