> 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/uk/specializovani/03-feynman-diagrams.md).

# Діаграми Фейнмана

## Вступ

У цій довідковій статті розглянуто пакети LaTeX для малювання діаграм Фейнмана — дуже компактного й інтуїтивного способу подання взаємодій між частинками. Ми розглянемо [`tikz-feynman` accents](https://ctan.org/pkg/tikz-feynman?lang=en), який використовує TikZ для малювання діаграм, і [`feynmp-auto`](#other-packages-for-drawing-feynman-diagrams) який («за лаштунками») використовує MetaPost.

## Пакет TikZ-Feynman

Функція [`tikz-feynman` accents](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.

### Оновлення (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 (застарілий)`. Докладнішу інформацію див. у [цьому повідомленні про проблему на 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/9295f2a6ef6f88872756c2759e3794b0b160691f)

Розгляньмо цей приклад рядок за рядком:

**Рядок 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` є кінцевими точками пропагатора. Єдиним важливим аспектом є те, що те, що ми назвали `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/b2572e9ab0c339ce3e30c163a0de043774f96db0)

Насамкінець зазначимо, що обчислення місць розташування вершин зазвичай виконується алгоритмом, написаним мовою 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/f63227ea7a3121fc5b72143e97b98e240e887d54)

На додачу до ключів стилів, задокументованих нижче, також можна використовувати ключі стилів із 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/c14ea8799fcfe1819d510f7972482ed2703619e6)

Щоб переглянути список усіх різних стилів, які надає 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` для ілюстрації точного розташування ребра).

```
% Немає невидимого ребра, щоб утримувати два фотони разом
\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/b76971d6845201cd164b7ffa8959933278a99dc8)

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

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

Бібліотека малювання графів із 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/4ae07198b1ad70509606fae38d8f73363c69ec67)

```
% Використання шарового макета
\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/68d811649f35bd9a461e78776599215b6b2ed0a9)

Ви можете помітити, що, окрім додавання `layered layout` стилю до `\feynmandiagram`, ми також змінили порядок, у якому задаємо вершини. Це тому, що `layered 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/45c6900932ac766ec7a39089d974c2a65f3f1490)

## Інші пакети для малювання діаграм Фейнмана

Є кілька альтернатив пакету 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}
```

де `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/uk/risunki-ta-tablici/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/8139402a90e24cfb6525a2f298b7a9b52e7be436)

У цьому прикладі `fmfgraph` середовище встановлює ширину та висоту рисунка відповідно на 120 і 80:

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

використовуючи одиниці, визначені значенням `\unitlength`, яке має типове значення 1pt; отже, для цієї діаграми виділено ширину 120pt і висоту 80pt.

#### Примітка щодо \unitlength

Оскільки `\unitlength` є розмірністю LaTeX; її значення можна змінити за допомогою `\setlength` команди; наприклад, щоб визначити ширину та висоту рисунків в одиницях см, можна написати:

```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)% одиниці тепер у см
   \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/a67f752cb4465606ed051ede45be929403519008)

### Вершини

Перше, що потрібно зробити, — це задати зовнішні вершини та місця їх розташування. Ви можете назвати вершини як завгодно й указати, де їх слід розмістити, за допомогою команд `\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/59069de7855be6c2e5229eaf153cd2f26dd5cdb7)

### Декілька складніших прикладів

Наведені нижче, більш просунуті, приклади використовують можливості `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/625c2197a6464f02c78bde709a2061e9020f1280)

#### Приклад 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/cb4cc72efd53698a25d2fb3f162389889d9d2dd3)

#### Приклад 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/e299b033040606cbf10b7f52adfeb50bb28a9344)

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

Ми вже бачили `photon` та `fermion` стилі ліній вище, але `feynmp` пакет підтримує ще багато інших.

| Зовнішній вигляд                                                                     | Назва(и)                                |
| ------------------------------------------------------------------------------------ | --------------------------------------- |
| ![Feynmf-line-curly.png](/files/4a3fa7ee44daa5309d138fbf7f2bac0d7cc9a0ae)            | глюон, кучерявий                        |
| ![Feynmf-line-dbl-curly.png](/files/fd13f5d9866fa8b397dfb35e2120c67041644f46)        | dbl\_curly                              |
| ![Feynmf-line-dashes.png](/files/0cbaec7a8c631140a9239727c9cb34ffeb22c74a)           | штрихи                                  |
| ![Feynmf-line-dashed-arrow.png](/files/9c0119b32a3d8d9bfc17639b2e4107e0986d9e2b)     | скаляр, dashes\_arrow                   |
| ![Feynmf-line-dbl-dashes.png](/files/fe2d433ad06770c97e8eeeb169125b3b67c02073)       | dbl\_dashes                             |
| ![Feynmf-line-dbl-dashes-arrow.png](/files/f9481825bfa91e48b33a52b4492b900d2d2f7b48) | dbl\_dashes\_arrow                      |
| ![Feynmf-line-dots.png](/files/74a3b5c808b27186c5c9a28ade476f0748e09b83)             | крапки                                  |
| ![Feynmf-line-dots-arrow.png](/files/466788993a2c516b22f51eea4d8da06316d2d9a4)       | привид, dots\_arrow                     |
| ![Feynmf-line-dbl-dots.png](/files/7ef72c36f0645de5a1a302bccee022a8cea513b2)         | dbl\_dots                               |
| ![Feynmf-line-dbl-dots-arrow.png](/files/f674318fcf14dc918a81afa27aba9c7a03e3f440)   | dbl\_dots\_arrow                        |
|                                                                                      | фантом                                  |
| ![Feynmf-line-phantom-arrow.png](/files/e274b689fd5c71342a6fc36525515ec8352e5992)    | phantom\_arrow                          |
| ![Feynmf-line-plain.png](/files/578af76913832f5853364378ead494677c61fd63)            | ванільний, plain                        |
| ![Feynmf-line-plain-arrow.png](/files/f3e6f6ca8cf9a72dc5a0706d3f3b3cb004066190)      | ферміон, електрон, кварк, plain\_arrow  |
| ![Feynmf-line-dbl-plain.png](/files/63526dda401ad97132eacf1768e762d1772b5296)        | подвійна, dbl\_plain                    |
| ![Feynmf-line-dbl-plain-arrow.png](/files/c657985c98452a4888195cf7530b1a1a927d3aae)  | double\_arrow, heavy, dbl\_plain\_arrow |
| ![Feynmf-line-wiggly.png](/files/e932338cb2b8d2eb808e63c0e9ac994bf6091830)           | бозон, фотон, хвилястий                 |
| ![Feynmf-line-dbl-wiggly.png](/files/f2a68f9b73bc32c70ea5a1051af63b5a2012533c)       | dbl\_wiggly                             |
| ![Feynmf-line-zigzag.png](/files/5e384bdcaf0a360ac7038ab14ac8735f4ad7f3bd)           | зигзаг                                  |
| ![Feynmf-line-dbl-zigzag.png](/files/be8bd9071982309a4f2a0e5164daa3a274c2070d)       | dbl\_zigzag                             |

## Додаткове читання

Докладніше див.:

* [Хімічні формули](/latex/uk/specializovani/02-chemistry-formulae.md)
* [Діаграми молекулярних орбіталей](/latex/uk/specializovani/04-molecular-orbital-diagrams.md)
* [Пакет TikZ](/latex/uk/risunki-ta-tablici/05-tikz-package.md)
* [Малювання діаграм безпосередньо в LaTeX](/latex/uk/risunki-ta-tablici/04-picture-environment.md)
* [Вставлення зображень](/latex/uk/inshi-temi/27-inserting-images.md)
* [Список грецьких літер і математичних символів](/latex/uk/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/uk/specializovani/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.
