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

# Diagramy Feynmana

## Wstęp

Ten artykuł pomocy omawia pakiety LaTeX do rysowania diagramów Feynmana, bardzo zwięzły i intuicyjny sposób przedstawiania oddziaływań między cząstkami. Przyjrzymy się [`tikz-feynman` pakietu](https://ctan.org/pkg/tikz-feynman?lang=en), który używa TikZ do rysowania diagramów, oraz [`feynmp-auto`](#other-packages-for-drawing-feynman-diagrams) który („w tle”) używa MetaPost.

## Pakiet TikZ-Feynman

Ta [`tikz-feynman` pakietu](https://ctan.org/pkg/tikz-feynman?lang=en) został opublikowany w 2016 roku i używa Ti*k*Z do generowania diagramów Feynmana. Ti*k*Z-Feynman bazuje na pakiecie Ti*k*Z oraz jego algorytmach rysowania grafów, aby zautomatyzować rozmieszczanie wielu wierzchołków. Ti*k*Z-Feynman nadal umożliwia precyzyjne rozmieszczanie wierzchołków, dzięki czemu nawet złożone diagramy można generować z łatwością. Najbardziej aktualne informacje o Ti*k*Z-Feynman zawsze będą na [stronie projektu](http://www.jpellis.me/projects/tikz-feynman/) i w [dokumentacja pakietu](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf) na CTAN.

### Aktualizacja (9 listopada 2022)

**WAŻNA aktualizacja po publikacji** (9 listopada 2022): W chwili aktualizacji tej strony, **pakiet TikZ-Feynman pozostaje niezgodny z wersjami TeX Live nowszymi niż TeX Live 2018**—a jest to wersja TeX Live użyta w [projekcie Overleaf towarzyszącym temu artykułowi pomocy.](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=) Wszystkie poniższe przykłady TikZ-Feynman będą musiały zostać skompilowane w projekcie Overleaf z **Wersja TeX Live** ustawionym na `2018 (starsza wersja)`. Więcej informacji znajdziesz w [tym zgłoszeniu na GitHubie](https://github.com/JP-Ellis/tikz-feynman/issues/73#issue-942615833).

### Ładowanie pakietu

Po zainstalowaniu pakietu pakiet Ti*k*Z-Feynman można wczytać za pomocą `\usepackage{tikz-feynman}` w preambule. Zaleca się również określenie wersji Ti*k*Z-Feynman, której chcesz używać, za pomocą `compat` opcja pakietu: `\usepackage[compat=1.0.0]{tikz-feynman}`. Zapewnia to, że nowe wersje Ti*k*Z-Feynman nie wprowadzą żadnych niepożądanych zmian bez ostrzeżenia.

### Pierwszy diagram

Diagramy Feynmana można deklarować za pomocą `\feynmandiagram` polecenia. Jest ono analogiczne do `\tikz` polecenia z Ti*k*Z i wymaga końcowego średnika (`;`) aby zakończyć środowisko. Na przykład prosty *s*diagram -kanałowy wygląda tak:

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

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

Przejdźmy przez ten przykład linia po linii:

**Linia 1**

\feynmandiagram wprowadza diagram Feynmana i pozwala podawać opcjonalne argumenty w nawiasach \[]. W tym przypadku horizontal=a to b ustawia wyniki algorytmu tak, aby linia przechodząca przez wierzchołki a i b była pozioma.

**Linia 2**

Lewą linię fermionową rysuje się, deklarując trzy wierzchołki (i1, a i i2) i łącząc je krawędziami --. Podobnie jak polecenie \feynmandiagram powyżej, każda krawędź także przyjmuje opcjonalne argumenty podane w nawiasach \[]. W tym przypadku chcemy, aby te krawędzie miały strzałki wskazujące, że są to linie fermionowe, więc dodajemy do nich styl fermion. Jak zobaczysz później, opcjonalne argumenty można też podawać dla wierzchołków w dokładnie ten sam sposób.

**Linia 3**

Ta krawędź łączy wierzchołki a i b krawędzią wystylizowaną jako foton. Ponieważ istnieje już wierzchołek oznaczony a, algorytm połączy go z nowym wierzchołkiem oznaczonym b.

**Linia 4**

Ta linia jest analogiczna do linii 2 i wprowadza dwa nowe wierzchołki, f1 i f2. Ponownie używa wcześniej oznaczonego wierzchołka b.

**Linia 5**

Zakończ deklarację diagramu Feynmana. Końcowy średnik (;) jest ważny.

Nazwa nadana każdemu wierzchołkowi w grafie nie ma znaczenia. Zatem w tym przykładzie, `i1`, `i2` oznaczają cząstki początkowe; `f1`, `f2` oznaczają cząstki końcowe; a `a`, `b` są punktami końcowymi propagatora. Jedyny ważny aspekt to to, że to, co nazwaliśmy `a` w linii 2, jest też `a` w linii 3, tak aby podstawowy algorytm traktował je jako ten sam wierzchołek.

Kolejność, w jakiej deklarowane są wierzchołki, nie ma znaczenia, ponieważ domyślny algorytm wszystko przestawia. Na przykład można woleć narysować wszystkie linie fermionowe naraz, jak w poniższym przykładzie (zauważ też, że sposób nazwania wierzchołków jest całkowicie inny):

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

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

Na koniec warto zauważyć, że obliczanie miejsc, w których należy umieścić wierzchołki, zwykle odbywa się za pomocą algorytmu napisanego w Lua. W rezultacie do korzystania z tych algorytmów wymagany jest LuaTeX. Jeśli nie używa się LuaTeX, Ti*k*Z-Feynman domyślnie przełączy się na bardziej podstawowy algorytm i zamiast tego wyświetli ostrzeżenie użytkownikowi.

### Dodawanie stylów

Jak dotąd przykłady używały tylko `photon` i `fermion` stylów. Pakiet Ti*k*Z-Feynman zawiera całkiem sporo dodatkowych stylów dla krawędzi i wierzchołków, które są wszystkie opisane w [dokumentacja pakietu](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf). Na przykład można dodać strzałki pędu za pomocą `momentum=<text>`, a w przypadku wierzchołków końcowych cząstkę można opisać etykietą `particle=<text>`. Aby pokazać, jak się ich używa, weźmy ogólny *s*diagram -kanałowy z wcześniejszego przykładu i zamieńmy go w anihilację par elektron-pozyton do mionów:

```
\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/89cbde24f23fb25debe370830087d4694068bfb1)

Oprócz kluczy stylu opisanych poniżej można także używać kluczy stylu z 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/ca3f8f86eb6c316ff07813faa540d1a049311a7b)

Aby zobaczyć listę wszystkich różnych stylów oferowanych przez Ti*k*Z, zajrzyj do [Ti*k*podręcznika Ti](http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf); jest on niezwykle obszerny i zawiera wiele przykładów użycia.

### Gdy algorytm to za mało

Domyślnie używany jest `\feynmandiagram` i `\diagram` polecenia używają `układu sprężynowego` algorytmu do rozmieszczania wszystkich krawędzi.  `układu sprężynowego` algorytm próbuje jak najbardziej „rozszerzyć” diagram, co — w przypadku większości prostszych diagramów — daje zadowalający wynik; jednak w niektórych przypadkach nie daje to najlepszego diagramu i ta sekcja przyjrzy się alternatywom. Istnieją trzy główne alternatywy:

**Dodaj niewidoczne krawędzie**

Nadal używając domyślnego algorytmu, można wymusić, aby pewne wierzchołki były bliżej siebie, dodając dodatkowe krawędzie i czyniąc je niewidocznymi za pomocą draw=none. Algorytm będzie traktował te dodatkowe krawędzie tak samo, ale po prostu nie zostaną one narysowane na końcu;

**Użyj innego algorytmu**

W niektórych sytuacjach lepiej sprawdzą się inne algorytmy. Niektóre inne algorytmy układu grafu są wymienione w dokumentacji pakietu, a pełna lista wszystkich algorytmów i ich parametrów znajduje się w podręczniku TikZ;

**Ręczne rozmieszczenie**

W ostateczności bardzo skomplikowane lub nietypowe diagramy będą wymagały ręcznego rozmieszczenia każdego wierzchołka.

#### Niewidoczne krawędzie

Podstawowy algorytm traktuje wszystkie krawędzie dokładnie tak samo przy obliczaniu rozmieszczenia wszystkich wierzchołków, a właściwe rysowanie diagramu (po obliczeniu rozmieszczenia) odbywa się osobno. W konsekwencji można dodać krawędzie do algorytmu, ale zapobiec ich rysowaniu, dodając `draw=none` do stylu krawędzi.

Jest to szczególnie przydatne, jeśli chcesz zapewnić, że stany początkowe lub końcowe pozostaną bliżej siebie, niż byłoby to w przeciwnym razie, jak pokazano w poniższym przykładzie (zwróć uwagę, że `opacity=0.2` użyto zamiast `draw=none` aby pokazać dokładnie, gdzie znajduje się krawędź).

```
% Brak niewidocznej, aby utrzymać oba fotony razem
\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/fdadd35e660b13a9ddfb49093bbc8b9eb9b02afa)

```
% Niewidoczna krawędź zapewnia, że fotony są równoległe
\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/f8f544d4051f0287bd01fb2ad8a4cfee7fb9234d)

#### Alternatywne algorytmy

Biblioteka do rysowania grafów z Ti*k*Z ma kilka różnych algorytmów rozmieszczania wierzchołków. Domyślnie, `\diagram` i `\feynmandiagram` użyj `układu sprężynowego` algorytm do rozmieszczania wierzchołków.  `układu sprężynowego` próbuje rozsunąć wszystko tak bardzo, jak to możliwe, co w większości przypadków daje ładny diagram; jednak istnieją sytuacje, w których to nie działa. Dobrym przykładem, gdzie `układu sprężynowego` to nie działa, są rozpady, w których mamy rozpadającą się cząstkę po lewej i wszystkie cząstki potomne po prawej.

```
% Korzystanie z domyślnego układu sprężynowego
\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/f6e02cf143c287ea9c0766425d01fc9e2a0936e5)

```
% Korzystanie z układu warstwowego
\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/8ac4799053110f95673a65e5e42b5d62087c396d)

Możesz zauważyć, że oprócz dodania `stylu layered layout` do `\feynmandiagram`, zmieniliśmy również kolejność, w jakiej określamy wierzchołki. Dzieje się tak dlatego, że `stylu layered layout` algorytm rzeczywiście zwraca uwagę na kolejność deklarowania wierzchołków (w przeciwieństwie do domyślnego `układu sprężynowego`); w rezultacie, `c--f2, c--f3` ma inne znaczenie niż `f2--c--f3`. W pierwszym przypadku `f2` i `f3` obie znajdują się na warstwie poniżej `c` zgodnie z oczekiwaniem; natomiast w drugim przypadku umieszcza `f2` na warstwie powyżej `c` (czyli na tej samej warstwie, z której pochodzi bozon W).

#### Ręczne rozmieszczanie

W bardziej skomplikowanych diagramach bardzo możliwe jest, że żaden z algorytmów nie zadziała, niezależnie od tego, ile niewidocznych krawędzi zostanie dodanych. W takich przypadkach wierzchołki trzeba umieścić ręcznie. Ti*k*Z-Feynman pozwala na ręczne rozmieszczanie wierzchołków za pomocą `\vertex` polecenie.

Ta `\vertex` polecenie jest dostępne tylko w środowisku `feynman`  (które samo jest dostępne tylko wewnątrz `tikzpicture`).  `feynman` Środowisko wczytuje wszystkie odpowiednie style z Ti*k*Z-Feynman i deklaruje dodatkowe polecenia specyficzne dla Ti*k*Z-Feynman, takie jak `\vertex` i `\diagram`. To jest inspirowane PGFPlots i jego użyciem `axis` środowiska.

Ta `\vertex` Polecenie `\node` polecenia z Ti*k*w Ti `{<text>}` na końcu. W przypadku, gdy `{}` zostanie podana, wierzchołek automatycznie otrzymuje styl `particle` a w przeciwnym razie jest zwykłym wierzchołkiem (o zerowym rozmiarze).

Aby określić, gdzie mają trafić wierzchołki, można podać jawne współrzędne, choć prawdopodobnie najłatwiej jest użyć `positioning` biblioteki z Ti*k*Z, która pozwala umieszczać wierzchołki względem istniejących wierzchołków. Dzięki użyciu położeń względnych można łatwo dopracować jedną część grafu, a wszystko dostosuje się odpowiednio — alternatywą byłoby ręczne dostosowywanie współrzędnych każdego dotkniętego wierzchołka.

Na koniec, gdy wszystkie wierzchołki zostaną określone, polecenie `\diagram*` służy do określania wszystkich krawędzi. Działa to w bardzo podobny sposób jak `\diagram` (a także `\feynmandiagram`), z tym wyjątkiem, że używa bardzo podstawowego algorytmu do rozmieszczania nowych węzłów i pozwala uwzględniać istniejące (nazwane) węzły. Aby odwołać się do istniejącego węzła, węzeł musi być podany w nawiasach.

Cały ten proces określania węzłów, a następnie rysowania między nimi krawędzi, pokazano poniżej na przykładzie rozpadu mionu:

```
\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/870951516be2e0f22cf9d1644105560ede552885)

## Inne pakiety do rysowania diagramów Feynmana

Istnieje kilka alternatyw dla pakietu TikZ-Feynman:

* [`feynmf`](https://ctan.org/pkg/feynmf): generuje grafiki bitmapowe za pomocą [MetaFont](https://ctan.org/pkg/metafont)
* [`feynmp`](https://ctan.org/pkg/feynmf) (dołączony do `feynmf`) generuje grafiki wektorowe za pomocą [MetaPost](https://ctan.org/pkg/metapost)
* [`feynmp-auto`](https://ctan.org/pkg/feynmp-auto?lang=en): wywodzi się z `feynmp`

Ta `feynmp-auto` pakiet jest w istocie rozszerzeniem `feynmp` pakietu zaprojektowanym do automatyzacji konwersji kodu PostScript MetaPost do danych PDF do użycia w pdfTeX, LuaTeX i XeTeX. Poniższe przykłady używają wszystkich `feynmp-auto`.

### Wstęp

Ta `feynmf`, `feynmp` i `feynmp-auto` pakietów pozwalają łatwo rysować diagramy Feynmana, określając wierzchołki, cząstki i ich etykiety, a następnie automatycznie wykonując układ w celu narysowania diagramu.

#### Przegląd korzystania z pakietów opartych na feynmf

Aby tworzyć diagramy Feynmana, musisz:

1. utworzyć `fmfile` środowisko zawierające jeden lub więcej diagramów, z których każdy jest zamknięty w środowisku `fmfgraph` lub `fmfgraph*` —różnica między formą z gwiazdką a bez gwiazdki polega na [wyjaśnione poniżej](#fmfgraph-and-fmfgraph);
2. użyć każdego `fmfgraph` lub `fmfgraph*` środowiska do zawarcia instrukcji rysowania potrzebnych do utworzenia pojedynczego diagramu Feynmana.

Ta `fmfile` środowisko ma następującą postać

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

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

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

\end{fmffile}
```

gdzie `file-name` jest nazwą pliku, który będzie używany do przechowywania opisów kodu MetaPost poszczególnych rysunków zdefiniowanych w `fmfgraph`/`fmfgraph*` środowiska.

Każdy rysunek ma postać

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

% drawing instructions

\end{fmfgraph}
```

lub, w przypadku wersji z gwiazdką (`fmfgraph*`)

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

% drawing instructions

\end{fmfgraph*}
```

gdzie `(width,height)` określa rozmiar diagramu wyrażony w jednostkach [`\unitlength`](#note-on-unitlength).

Kod MetaPost w `file-name` jest przetwarzany w celu utworzenia grafiki reprezentującej Twój diagram Feynmana / diagramy Feynmana.  `fmfile` Środowisko może zawierać do 256 pojedynczych rysunków.

#### fmfgraph i fmfgraph\*

* `fmfgraph`: to środowisko zawiera instrukcje rysowania (opis) pojedynczego diagramu Feynmana. Zostanie ono umieszczone *w miejscu środowiska*. To środowisko nie obsługuje etykiet, użyj `fmfgraph*` aby umieszczać etykiety w diagramach.
* `fmfgraph*` takie samo jak `fmfgraph`, ale otoczone [`picture` środowisko](/latex/pl/rysunki-i-tabele/04-picture-environment.md) o tym samym rozmiarze. Obsługuje etykiety LaTeX.

### Przykład

Zacznijmy od szybkiego przykładu:

```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}
```

[Otwórz ten przykład w 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)

Ten przykład generuje następujący wynik:

![](/files/0886b1ea314b44b15b4aa508408f07794ef776f3)

W tym przykładzie `fmfgraph` środowisko ustawia szerokość i wysokość rysunku odpowiednio na 120 i 80:

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

używając jednostek określonych przez wartość `\unitlength`, której wartość domyślna wynosi 1pt; w konsekwencji temu diagramowi przypisana jest szerokość 120pt i wysokość 80pt.

#### Uwaga dotycząca \unitlength

Ponieważ `\unitlength` jest wymiarem LaTeX, którego wartość można zmienić za pomocą `\setlength` polecenia; na przykład, aby zdefiniować szerokość i wysokość rysunków w jednostkach cm, możesz napisać:

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

Odtwarzając powyższy przykład, poniższy diagram ma teraz szerokość `8cm` i wysokość `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}
```

[Otwórz ten przykład w 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)

Ten przykład daje teraz większy diagram:

![](/files/6550d3101a5b504331f13b8bf9b7a0975e4f4c1c)

### Wierzchołki

Pierwszą rzeczą, jaką musisz zrobić, jest określenie zewnętrznych wierzchołków i miejsc, w których mają być umieszczone. Możesz nadać swoim wierzchołkom dowolne nazwy i wskazać, gdzie mają być umieszczone, za pomocą poleceń `\fmfleft`, `\fmfright`, `\fmftop`, `\fmfbottom`.

Jak użyto w powyższych przykładach:

```latex
% Tworzy dwa wierzchołki po lewej stronie o nazwach i1 i i2
\fmfleft{i1,i2}

% Tworzy dwa wierzchołki po prawej stronie o nazwach o1 i o2
\fmfright{o1,o2}
```

Wierzchołki można łączyć za pomocą `\fmf`, która utworzy nowe wierzchołki, jeśli podasz nazwy, które nie zostały jeszcze utworzone. Również jak w powyższych przykładach:

```latex
% Utworzy linię fermionową między i1 a
% nowo utworzonym v1 oraz między v1 a o1.
\fmf{fermion}{i1,v1,o1}

% Utworzy linię fotonową między v1 a nowo utworzonym v2
\fmf{photon}{v1,v2}
```

### Etykiety

Jak [wspomniano powyżej](#fmfgraph-and-fmfgraph), aby używać etykiet, rysunek musi zostać utworzony przy użyciu `fmfgraph*` formy środowiska rysowania.

Użyj `\fmflabel` polecenia do umieszczenia etykiety na wierzchołku:

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

gdzie:

* `zawartość etykiety` jest etykietą, którą należy przypisać do wybranego wierzchołka;
* `wierzchołek diagramu` jest nazwą wierzchołka, który ma zostać oznaczony.

Zauważ, że `zawartość etykiety` może zawierać materiał matematyczny.

Możemy ponownie użyć poprzedniego przykładu, aby dodać następujące etykiety

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

co daje zaktualizowany diagram pokazany poniżej:

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph*}(120,80) %UWAGA środowisko fmfgraph*
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
   % Dodajmy nasze etykiety
   \fmflabel{$v_1$}{v1}
   \fmflabel{$v_2$}{v2}
 \end{fmfgraph*}
\end{fmffile}
\end{document}
```

[Otwórz ten przykład w 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)

Ten przykład generuje diagram Feynmana zawierający etykiety:

![](/files/611fb61f2dae183db281b18949e3033631ee66cf)

### Kilka bardziej złożonych przykładów

Poniższe, bardziej zaawansowane przykłady wykorzystują funkcje `feynmp` których nie omówiliśmy: zobacz [`feynmp`  (`feynmf`) dokumentację](https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/feynmf/fmfman.pdf)—która zawiera również liczne dodatkowe przykłady. Diagramy te zostały pierwotnie opublikowane w szablonie Overleaf zawierającym kod LaTeX skopiowany ze strony CERN, która jest teraz dostępna tylko przez [Wayback Machine](https://web.archive.org/web/20141015023615/http://szczypka.web.cern.ch:80/szczypka/guides/latex/feynmp.html)—ta strona zawiera dalsze przykłady, które możesz wypróbować.

#### Przykład 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}
```

[Otwórz ten przykład w 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)

Ten przykład generuje następujący diagram:

![](/files/6bf387f67a2a730b7a73126de0f5fac765674a13)

#### Przykład 2

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-b}
\begin{fmfgraph*}(200,200)
    % dolne i górne wierzchołki
    \fmfstraight
    \fmfleft{i0,i1,i2,id1,id2,i3,i4,i5}
    \fmfright{o0,o1,o2,od1,od2,o3,o4,o5}
    % wchodzący proton do wierzchołków gluonów
    \fmf{fermion,label=$d$}{i1,o1}
    % napięcie przesuwa wierzchołek na jedną stronę
    \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 centruje wierzchołek 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}
```

[Otwórz ten przykład w 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)

Ten przykład generuje następujący diagram:

![](/files/9f26fa3944fef9a5b26965dfe49fc5f17bd20d56)

#### Przykład 3

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-c}
\begin{fmfgraph*}(200,200)
    % dolne i górne wierzchołki
    \fmfbottom{P1,P2}
    \fmftop{P1',b,bbar,P2'}
    % wchodzące protony do wierzchołków gluonów
    \fmf{fermion,tension=2,lab=$P_1$}{P1,g1}
    \fmf{fermion,tension=2,lab=$P_2$}{P2,g2}
    % plamki przy wierzchołkach gluonów, 0.16w to rozmiar plamki
    \fmfblob{.16w}{g1,g2}
    % gluon od P1 do wierzchołka1
    \fmf{gluon,lab.side=right,lab=$x_{1}P_{1}$}{g1,v1}
    % gluon od P2 do wierzchołka2 - zauważ zmianę kolejności!
    \fmf{gluon,lab.side=right,lab=$x_{2}P_{2}$}{v2,g2}
    % tutaj była pętla kwarkowa
    \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}
    % wychodzące protony
    \fmf{fermion}{g1,P1'}
    \fmf{fermion}{g2,P2'}
    % zamroź wszystko na miejscu
    \fmffreeze
    \renewcommand{\P}[3]{\fmfi{plain}{%
        vpath(__#1,__#2) shifted (thick*(#3))}}
    % linie na P1
    \P{P1}{g1}{2,0}
    \P{P1}{g1}{-2,1}
    % linie na p2
    \P{P2}{g2}{2,1}
    \P{P2}{g2}{-2,0}
    % linie na P1'
    \P{g1}{P1'}{-2,-1}
    \P{g1}{P1'}{2,0}
    % linie na P2'
    \P{g2}{P2'}{-2,0}
    \P{g2}{P2'}{2,-1}
\end{fmfgraph*}
\end{fmffile}
\end{document}
```

[Otwórz ten przykład w 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)

Ten przykład generuje następujący diagram:

![](/files/fdd8ee81dfdfc427be75568420c526b6ac4e3c4f)

### Style linii

Widzieliśmy już `photon` i `fermion` powyższe style linii, ale pakiet `feynmp` obsługuje ich znacznie więcej.

| Wygląd                                                                               | Nazwa(y)                                     |
| ------------------------------------------------------------------------------------ | -------------------------------------------- |
| ![Feynmf-line-curly.png](/files/5a31641421cd07f7d65d240df37b86913abf7eb6)            | gluon, kręcony                               |
| ![Feynmf-line-dbl-curly.png](/files/876daafb3b2ba8dbc20546a81977655df420c4d0)        | dbl\_curly                                   |
| ![Feynmf-line-dashes.png](/files/74a337e32d8a7dd930d9af4470bccf6c65e97d42)           | kreski                                       |
| ![Feynmf-line-dashed-arrow.png](/files/386a65e7be81353bafda59104f3543c3ece721bd)     | skalar, dashes\_arrow                        |
| ![Feynmf-line-dbl-dashes.png](/files/d0c08358b5d4ce09bbeda59a5462d047fc8b81f6)       | dbl\_dashes                                  |
| ![Feynmf-line-dbl-dashes-arrow.png](/files/12f230811d63af5f5083da277c280248a46509b2) | dbl\_dashes\_arrow                           |
| ![Feynmf-line-dots.png](/files/79913e630aefdab7a473f2022a218b2ba0142646)             | kropki                                       |
| ![Feynmf-line-dots-arrow.png](/files/22600fc427bc394df1b40fa76b2c4226d73a9708)       | duch, dots\_arrow                            |
| ![Feynmf-line-dbl-dots.png](/files/233a51ee31d9959096ce421dba3886e4e82f4fa7)         | dbl\_dots                                    |
| ![Feynmf-line-dbl-dots-arrow.png](/files/e2b5f954d18644bad439cc3e11091d925ba82573)   | dbl\_dots\_arrow                             |
|                                                                                      | phantom                                      |
| ![Feynmf-line-phantom-arrow.png](/files/68bbb3a33b25bf068b774d03826c835512f5b643)    | phantom\_arrow                               |
| ![Feynmf-line-plain.png](/files/06e395c681e396baf2256da50eb45fda1368f4bc)            | waniliowy, zwykły                            |
| ![Feynmf-line-plain-arrow.png](/files/fcd7d57e7b3777118665b10b2fefe63875fd9450)      | fermion, elektron, kwark, plain\_arrow       |
| ![Feynmf-line-dbl-plain.png](/files/5238ad533bdcbcaaac09b1ea01f55cbd185029db)        | podwójny, dbl\_plain                         |
| ![Feynmf-line-dbl-plain-arrow.png](/files/a3895990761e164355a035626284aa6e7eeeeffd)  | podwójna strzałka, ciężki, dbl\_plain\_arrow |
| ![Feynmf-line-wiggly.png](/files/88f56e6965ccb45ff56225b67a247a8f4d4a44a7)           | bozon, foton, falisty                        |
| ![Feynmf-line-dbl-wiggly.png](/files/e3fe65690e06fe6b63c401665f0849ff28aa7d01)       | dbl\_wiggly                                  |
| ![Feynmf-line-zigzag.png](/files/e44c2f1abf6bc5427e46f48095dcb308206bd4cb)           | zygzak                                       |
| ![Feynmf-line-dbl-zigzag.png](/files/97d91343146bc5cdbb8f31e1cd7d234b00b1d714)       | dbl\_zigzag                                  |

## Dalsza lektura

Więcej informacji znajdziesz w:

* [Wzory chemiczne](/latex/pl/specyficzne-dla-dziedziny/02-chemistry-formulae.md)
* [Diagramy orbitali molekularnych](/latex/pl/specyficzne-dla-dziedziny/04-molecular-orbital-diagrams.md)
* [Pakiet TikZ](/latex/pl/rysunki-i-tabele/05-tikz-package.md)
* [Rysowanie diagramów bezpośrednio w LaTeX-u](/latex/pl/rysunki-i-tabele/04-picture-environment.md)
* [Wstawianie obrazów](/latex/pl/wiecej-tematow/27-inserting-images.md)
* [Lista greckich liter i symboli matematycznych](/latex/pl/matematyka/11-list-of-greek-letters-and-math-symbols.md)
* [Ta **feynmf** dokumentacja pakietu](http://mirrors.ctan.org/macros/latex/contrib/feynmf/fmfman.pdf).


---

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

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

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

```
GET https://overleaf-pro.ayaka.space/latex/pl/specyficzne-dla-dziedziny/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.
