> 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/ru/specializirovannye/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*к*Z для генерации диаграмм Фейнмана. Ti*к*Z-Feynman основан на пакете Ti*к*Z и его алгоритмах построения графов, чтобы автоматизировать размещение многих вершин.*к*Тем не менее Z-Feynman по-прежнему позволяет тонко настраивать размещение вершин, так что даже сложные диаграммы можно с лёгкостью создавать. Самая актуальная информация о Ti*к*Z-Feynman всегда будет на [странице проекта](http://www.jpellis.me/projects/tikz-feynman/) и в [документация пакета](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf) на CTAN.

### Обновление (9 ноября 2022 г.)

**ВАЖНО: обновление после публикации** (9 ноября 2022 г.): На момент обновления этой страницы пакет **TikZ-Feynman по-прежнему несовместим с версиями TeX Live новее TeX Live 2018**—это версия TeX Live, используемая в [проекте Overleaf, сопровождающем эту справочную статью.](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)`. Для получения дополнительной информации см. [этот issue на GitHub](https://github.com/JP-Ellis/tikz-feynman/issues/73#issue-942615833).

### Загрузка пакета

После установки пакета Ti*к*Z-Feynman можно подключить с помощью `\usepackage{tikz-feynman}` в преамбуле. Рекомендуется также указать версию Ti*к*Z-Feynman, используя `compat` опцию пакета: `\usepackage[compat=1.0.0]{tikz-feynman}`. Это гарантирует, что любые новые версии Ti*к*Z-Feynman не будут неожиданно вносить нежелательные изменения.

### Первая диаграмма

Диаграммы Фейнмана можно объявлять с помощью `\feynmandiagram` . Эта команда аналогична `\tikz` команде из Ti*к*Z и требует завершающей точки с запятой (`;`) для завершения окружения. Например, простая *последовательности*-канальная диаграмма выглядит так:

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

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

Разберём этот пример построчно:

**Строка 1**

\feynmandiagram вводит диаграмму Фейнмана и позволяет задавать необязательные аргументы в квадратных скобках \[]. В этом случае horizontal=a to b ориентирует результаты алгоритма так, чтобы линия через вершины a и b была горизонтальной.

**Строка 2**

Левая линия фермиона рисуется путём объявления трёх вершин (i1, a и i2) и соединения их рёбрами --. Как и команда \feynmandiagram выше, каждое ребро также принимает необязательные аргументы, задаваемые в квадратных скобках \[]. В этом случае мы хотим, чтобы у этих рёбер были стрелки, обозначающие, что это линии фермионов, поэтому добавляем к ним стиль fermion. Как вы увидите позже, необязательные аргументы можно так же задавать и для вершин.

**Строка 3**

Это ребро соединяет вершины a и b и оформлено как фотон. Поскольку вершина с меткой a уже существует, алгоритм соединит её с новой вершиной с меткой b.

**Строка 4**

Эта строка аналогична строке 2 и вводит две новые вершины, f1 и f2. Она повторно использует ранее обозначенную вершину b.

**Строка 5**

Завершите объявление диаграммы Фейнмана. Финальная точка с запятой (;) важна.

Имя, данное каждой вершине в графе, не имеет значения. Так что в этом примере, `i1`, `i2` обозначают начальные частицы; `f1`, `f2` обозначают конечные частицы; а `один`, `b` являются концами пропагатора. Единственное важное — то, что мы назвали `один` в строке 2, также является `один` в строке 3, чтобы базовый алгоритм воспринимал их как одну и ту же вершину.

Порядок объявления вершин не имеет значения, поскольку алгоритм по умолчанию всё перестраивает. Например, может быть удобнее рисовать все линии фермионов сразу, как в следующем примере (заметьте также, что способ именования вершин здесь совершенно другой):

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

![Photon-scattering.png](/files/6518ba241dcc95b8ff0419444ee193535ecaa486)

И наконец, вычисление того, где должны располагаться вершины, обычно выполняется алгоритмом, написанным на Lua. В результате для использования этих алгоритмов требуется LuaTeX. Если LuaTeX не используется, Ti*к*Z-Feynman по умолчанию переключится на более примитивный алгоритм и вместо этого предупредит пользователя.

### Добавление стилей

Пока что в примерах использовались только `фотон` и `фермион` стили. Пакет Ti*к*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/510ac914a34c7848d03d0679e2f8badb2e7b66cd)

Помимо описанных ниже ключей стилей, можно использовать и ключи стилей из Ti*к*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/94f3e43bf54607186bb44959a67eb73710bb2f95)

Список всех различных стилей, предоставляемых Ti*к*Z, можно найти в [Ti*к*руководстве по 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/6c1d5d6f327c140db97396e8e5c4599e8c62e701)

```
% Невидимое ребро обеспечивает параллельность фотонов
\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/a09f9314c6168d34ceacbb478942cf2cfdd40110)

#### Альтернативные алгоритмы

Библиотека рисования графов из Ti*к*Z имеет несколько различных алгоритмов для размещения вершин. По умолчанию, `\diagram` и `\feynmandiagram` используйте `алгоритм spring layout` алгоритм для размещения вершин. `алгоритм spring layout` старается раздвинуть всё как можно сильнее, что в большинстве случаев даёт красивую диаграмму; однако есть определённые случаи, когда это не работает. Хороший пример, где `алгоритм spring layout` это не работает, — распады, где распадающаяся частица находится слева, а все дочерние частицы — справа.

```
% Использование макета spring по умолчанию
\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/7297a1c04960a016fcddb72f41bcf56b75753f13)

```
% Использование слоистого макета
\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/60227b09fbec23f1f054ec37e89c24221bf384d4)

Вы можете заметить, что помимо добавления стиля `слоистого макета` к `\feynmandiagram`, мы также изменили порядок, в котором указываем вершины. Это потому, что `слоистого макета` алгоритм действительно обращает внимание на порядок объявления вершин (в отличие от алгоритма по умолчанию `алгоритм spring layout`); в результате, `c--f2, c--f3` имеет иное значение, чем `f2--c--f3`. В первом случае, `f2` и `f3` оба находятся на слое ниже `c` как и требуется; тогда как во втором случае помещает `f2` на слой выше `c` (то есть на тот же слой, где возникает W-бозон).

#### Ручное размещение

В более сложных диаграммах вполне вероятно, что ни один из алгоритмов не сработает, сколько бы невидимых рёбер ни добавили. В таких случаях вершины приходится размещать вручную. Ti*к*Z-Feynman позволяет вручную размещать вершины с помощью `\vertex` команды.

Это `\vertex` команда доступна только внутри `feynman` окружения (которое, в свою очередь, доступно только внутри `tikzpicture`). The `feynman` окружение загружает все соответствующие стили из Ti*к*Z-Feynman и объявляет дополнительные специфичные для Ti*к*Z-Feynman команды, такие как `\vertex` и `\diagram`. Это вдохновлено PGFPlots и использованием им `axis` окружение.

Это `\vertex` команда очень похожа на `\node` команде из Ti*к*Z, с заметным исключением: содержимое вершины необязательно; то есть вам не нужно писать `{<text>}` в конце. Если `{}` указано, вершине автоматически присваивается стиль `particle` , а в противном случае это обычная (нулевого размера) вершина.

Чтобы указать, где находятся вершины, можно задать явные координаты, хотя, вероятно, проще всего использовать `библиотеки` библиотеку из Ti*к*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/01426ab2f9bc932085ce24cad2f6d64374996598)

## Другие пакеты для рисования диаграмм Фейнмана

Существует несколько альтернатив пакету 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` пакета, предназначенного для автоматизации преобразования PostScript-кода MetaPost в данные 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}
```

где `имя-файла` — это имя файла, который будет использоваться для хранения описаний отдельных рисунков в коде MetaPost, определённых внутри него `fmfgraph`/`fmfgraph*` окружениями.

Каждый рисунок имеет вид

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

% инструкции по рисованию

\end{fmfgraph}
```

или, для звёздной версии (`fmfgraph*`)

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

% инструкции по рисованию

\end{fmfgraph*}
```

где `(ширина,высота)` задаёт размер диаграммы, выраженный в единицах [`\unitlength`](#note-on-unitlength).

Код MetaPost в `имя-файла` обрабатывается для создания графики, представляющей вашу диаграмму(ы).  `fmfile` окружение может содержать до 256 отдельных рисунков.

#### fmfgraph и fmfgraph\*

* `fmfgraph`: это окружение содержит инструкции по рисованию (описание) одной диаграммы Фейнмана. Оно будет размещено *в месте расположения окружения*. Это окружение не поддерживает метки; используйте `fmfgraph*` , чтобы добавлять метки в ваши диаграммы.
* `fmfgraph*` то же, что и `fmfgraph`, но заключено в [`picture` окружения](/latex/ru/risunki-i-tablicy/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/37af08f9478676a9d70535aa7ae20f22eb1fd7ca)

В этом примере `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/96cd6666db7a24402a3e5329690d745e3b4d3c9e)

### Вершины

Первое, что нужно сделать, — указать внешние вершины и то, где они должны располагаться. Вы можете назвать вершины как угодно и указать, где они должны располагаться, с помощью команд `\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/a4eb001a5009ac8c35fa4a7af0d2a1988932f1bc)

### Еще несколько более сложных примеров

Следующие, более продвинутые, примеры используют возможности `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/87e0499a9a1d1575b301ffda443be0276e06031d)

#### Пример 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/2ef411c7a0592de5c8ce7c67d4780d4b7eabfd9c)

#### Пример 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/61cc8db073fe0161e5c0e495094974100da7ab11)

### Стили линий

Мы уже видели `фотон` и `фермион` стили линий выше, но `feynmp` пакет поддерживает еще многие другие.

| Внешний вид                                                                          | Имя(имена)                              |
| ------------------------------------------------------------------------------------ | --------------------------------------- |
| ![Feynmf-line-curly.png](/files/3f98ea34b3c94dadc4e5f952059e493978ca42a4)            | gluon, curly                            |
| ![Feynmf-line-dbl-curly.png](/files/cb1c9c55df775f8c8eda2d4ecf4b8154d4d2101f)        | dbl\_curly                              |
| ![Feynmf-line-dashes.png](/files/2908cd4758a94796462fc38553e6a3a7dfae1422)           | dashes                                  |
| ![Feynmf-line-dashed-arrow.png](/files/1dea471e296cbb1728365f4c14157c1411b7f98c)     | scalar, dashes\_arrow                   |
| ![Feynmf-line-dbl-dashes.png](/files/747a729aeea49834f6e4e991bbfb6d52a3f12157)       | dbl\_dashes                             |
| ![Feynmf-line-dbl-dashes-arrow.png](/files/33a7395c927000bff62b93a18ce2b3a0e69440d0) | dbl\_dashes\_arrow                      |
| ![Feynmf-line-dots.png](/files/8c9ebaa96d19d92ab768c014fbe7aae58c0cecaa)             | dots                                    |
| ![Feynmf-line-dots-arrow.png](/files/2c63d95b90b0f220eb050f932354ac8e9c7c08ed)       | ghost, dots\_arrow                      |
| ![Feynmf-line-dbl-dots.png](/files/5c167bfda81c7e7cdbac7b4fbb778f4be587ca92)         | dbl\_dots                               |
| ![Feynmf-line-dbl-dots-arrow.png](/files/18c15a599b6e92bed743ad1566325c593ed5e20d)   | dbl\_dots\_arrow                        |
|                                                                                      | phantom                                 |
| ![Feynmf-line-phantom-arrow.png](/files/11618c7f4a1694774fbede447462030d0d9bf2a2)    | phantom\_arrow                          |
| ![Feynmf-line-plain.png](/files/53c166d0e5c934e6e48cf3e6144eddb7ecea4dba)            | vanilla, plain                          |
| ![Feynmf-line-plain-arrow.png](/files/35ffe6cbdc719096bb59f2e280c7f30cbb786bb3)      | fermion, electron, quark, plain\_arrow  |
| ![Feynmf-line-dbl-plain.png](/files/0d43dabc0dc00618fbcf857c2df888428c3f059b)        | double, dbl\_plain                      |
| ![Feynmf-line-dbl-plain-arrow.png](/files/fd9fdbe30cbb76489531fedbf51c148e47812471)  | double\_arrow, heavy, dbl\_plain\_arrow |
| ![Feynmf-line-wiggly.png](/files/1fd384f4c56db3e4cfc2d446dd560e2452bd82f0)           | boson, photon, wiggly                   |
| ![Feynmf-line-dbl-wiggly.png](/files/892ba757bcb092fd20d396dcea04cd007d8f2e3c)       | dbl\_wiggly                             |
| ![Feynmf-line-zigzag.png](/files/76618b25f2dfe89a509ec30f85c33d83bdfcf3bf)           | zigzag                                  |
| ![Feynmf-line-dbl-zigzag.png](/files/828017a8634abe1d5f4c8758356dfce35c366933)       | dbl\_zigzag                             |

## Дополнительное чтение

Для получения дополнительной информации см.:

* [Химические формулы](/latex/ru/specializirovannye/02-chemistry-formulae.md)
* [Диаграммы молекулярных орбиталей](/latex/ru/specializirovannye/04-molecular-orbital-diagrams.md)
* [Пакет TikZ](/latex/ru/risunki-i-tablicy/05-tikz-package.md)
* [Рисование диаграмм непосредственно в LaTeX](/latex/ru/risunki-i-tablicy/04-picture-environment.md)
* [Вставка изображений](/latex/ru/drugie-temy/27-inserting-images.md)
* [Список греческих букв и математических символов](/latex/ru/matematika/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/ru/specializirovannye/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.
