> 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/fr/specifique-a-un-domaine/03-feynman-diagrams.md).

# Diagrammes de Feynman

## Introduction

Cet article d’aide explore les paquets LaTeX pour dessiner des diagrammes de Feynman, une façon très compacte et intuitive de représenter les interactions entre particules. Nous allons explorer le [`tikz-feynman` package](https://ctan.org/pkg/tikz-feynman?lang=en), qui utilise TikZ pour dessiner des diagrammes, et [`feynmp-auto`](#other-packages-for-drawing-feynman-diagrams) qui utilise ("en coulisses") MetaPost.

## Le paquet TikZ-Feynman

Le [`tikz-feynman` package](https://ctan.org/pkg/tikz-feynman?lang=en) a été publié en 2016 et utilise Ti*roi*Z afin de générer des diagrammes de Feynman. Ti*roi*Z-Feynman s’appuie sur le paquet Ti*roi*Z et sur ses algorithmes de dessin de graphes afin d’automatiser le placement de nombreux sommets. Ti*roi*Z-Feynman permet toujours un placement finement réglé des sommets, de sorte que même des diagrammes complexes peuvent être générés facilement. Les informations les plus à jour pour Ti*roi*Z-Feynman se trouveront toujours sur la [page du projet](http://www.jpellis.me/projects/tikz-feynman/) et sur [documentation du paquet](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf) CTAN.

### Mise à jour (9 novembre 2022)

**Mise à jour IMPORTANTE après publication** (9 novembre 2022) : au moment de la mise à jour de cette page, le **paquet TikZ-Feynman reste incompatible avec les versions de TeX Live postérieures à TeX Live 2018**—qui est la version de TeX Live utilisée dans le [projet Overleaf accompagnant cet article d’aide.](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=) Tous les exemples TikZ-Feynman listés ci-dessous devront être compilés dans un projet Overleaf avec la **Version de TeX Live** défini sur `2018 (hérité)`. Pour plus d’informations, voir [ce problème signalé sur GitHub](https://github.com/JP-Ellis/tikz-feynman/issues/73#issue-942615833).

### Chargement du paquet

Après avoir installé le paquet, le paquet Ti*roi*Z-Feynman peut être chargé avec `\usepackage{tikz-feynman}` dans le préambule. Il est recommandé de préciser également la version de Ti*roi*Z-Feynman à utiliser avec `compat` option du paquet : `\usepackage[compat=1.0.0]{tikz-feynman}`. Cela garantit que les nouvelles versions de Ti*roi*Z-Feynman n’entraînent pas de changements indésirables sans avertissement.

### Un premier diagramme

Les diagrammes de Feynman peuvent être déclarés avec la `\feynmandiagram` commande. Elle est analogue à la `\tikz` commande de Ti*roi*Z et nécessite un point-virgule final (`;`) pour terminer l’environnement. Par exemple, un simple diagramme en *e*canal s’écrit :

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

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

Passons cet exemple en revue ligne par ligne :

**Ligne 1**

\feynmandiagram introduit le diagramme de Feynman et permet de fournir des arguments optionnels entre crochets \[]. Dans ce cas, horizontal=a to b oriente les résultats de l’algorithme de sorte que la ligne passant par les sommets a et b soit horizontale.

**Ligne 2**

La ligne de fermion de gauche est tracée en déclarant trois sommets (i1, a et i2) et en les reliant par des arêtes --. Tout comme la commande \feynmandiagram ci-dessus, chaque arête peut aussi prendre des arguments optionnels spécifiés entre crochets \[]. Dans ce cas, nous voulons que ces arêtes aient des flèches pour indiquer qu’il s’agit de lignes de fermion, nous leur ajoutons donc le style fermion. Comme vous le verrez plus loin, des arguments optionnels peuvent aussi être donnés aux sommets de la même manière.

**Ligne 3**

Cette arête relie les sommets a et b avec une arête stylée comme un photon. Comme il existe déjà un sommet nommé a, l’algorithme le reliera à un nouveau sommet nommé b.

**Ligne 4**

Cette ligne est analogue à la ligne 2 et introduit deux nouveaux sommets, f1 et f2. Elle réutilise le sommet b déjà nommé.

**Ligne 5**

Terminez la déclaration du diagramme de Feynman. Le point-virgule final (;) est important.

Le nom donné à chaque sommet du graphe n’a pas d’importance. Ainsi, dans cet exemple, `i1`, `i2` désignent les particules initiales ; `f1`, `f2` désignent les particules finales ; et `a`, `b` sont les points d’extrémité du propagateur. Le seul aspect important est que ce que nous avons appelé `a` dans la ligne 2 est aussi `a` dans la ligne 3, de sorte que l’algorithme sous-jacent les traite comme un seul et même sommet.

L’ordre dans lequel les sommets sont déclarés n’a pas d’importance, car l’algorithme par défaut réorganise tout. Par exemple, on peut préférer dessiner toutes les lignes de fermion d’un coup, comme dans l’exemple suivant (notez aussi que la manière de nommer les sommets est complètement différente) :

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

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

Pour finir, le calcul de l’emplacement des sommets est généralement effectué au moyen d’un algorithme écrit en Lua. Par conséquent, LuaTeX est nécessaire pour pouvoir utiliser ces algorithmes. Si LuaTeX n’est pas utilisé, Ti*roi*Z-Feynman reviendra par défaut à un algorithme plus rudimentaire et avertira plutôt l’utilisateur.

### Ajout de styles

Jusqu’à présent, les exemples n’ont utilisé que les styles `photon` et `fermion` . Le paquet Ti*roi*Z-Feynman fournit un bon nombre de styles supplémentaires pour les arêtes et les sommets, tous documentés dans le [documentation du paquet](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf). Par exemple, il est possible d’ajouter des flèches d’impulsion avec `momentum=<text>`, et dans le cas des sommets terminaux, la particule peut être étiquetée avec `particle=<text>`. Pour montrer comment ils sont utilisés, nous reprenons le diagramme générique en *e*canal vu plus haut et en faisons une annihilation de paires électron-positron en muons :

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

En plus des clés de style documentées ci-dessous, les clés de style de Ti*roi*Z peuvent aussi être utilisées :

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

Pour une liste de tous les différents styles fournis par Ti*roi*Z, consultez le [Ti*roi*manuel de Ti](http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf)Z ; il est extrêmement complet et fournit de nombreux exemples d’utilisation.

### Quand l’algorithme ne suffit pas

Par défaut, le `\feynmandiagram` et `\diagram` commandes utilisent l’algorithme de `mise en page en ressort` pour placer toutes les arêtes. L’ `mise en page en ressort` algorithme tente d’« espacer » le diagramme autant que possible, ce qui — pour la plupart des diagrammes simples — donne un résultat satisfaisant ; toutefois, dans certains cas, cela ne produit pas le meilleur diagramme et cette section examinera des alternatives. Il existe trois principales alternatives :

**Ajouter des arêtes invisibles**

Tout en utilisant l’algorithme par défaut, il est possible de forcer certains sommets à être plus proches en ajoutant des arêtes supplémentaires et en les rendant invisibles via draw=none. L’algorithme traitera ces arêtes supplémentaires de la même manière, mais elles ne seront simplement pas dessinées à la fin ;

**Utiliser un algorithme différent**

Dans certaines circonstances, d’autres algorithmes peuvent être mieux adaptés. Certains des autres algorithmes de disposition de graphes sont listés dans la documentation du paquet, et une liste exhaustive de tous les algorithmes et de leurs paramètres est donnée dans le manuel TikZ ;

**Placement manuel**

En dernier recours, des diagrammes très compliqués ou inhabituels nécessiteront que chaque sommet soit placé manuellement.

#### Arêtes invisibles

L’algorithme sous-jacent traite toutes les arêtes exactement de la même manière lorsqu’il calcule où placer tous les sommets, et le dessin effectif du diagramme (une fois les placements calculés) est réalisé séparément. Par conséquent, il est possible d’ajouter des arêtes à l’algorithme, mais d’empêcher qu’elles soient dessinées en ajoutant `draw=none` au style de l’arête.

C’est particulièrement utile si vous voulez vous assurer que les états initiaux ou finaux restent plus proches qu’ils ne le seraient autrement, comme illustré dans l’exemple suivant (notez que `opacity=0.2` est utilisé à la place de `draw=none` pour illustrer où se trouve exactement l’arête).

```
% Pas d’arête invisible pour garder les deux photons ensemble
\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/76678e3d94c38be7fc57f3421ea17272ef12740c)

```
% Une arête invisible garantit que les photons sont parallèles
\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/e0bb28ffe1ea551c8786987315a4fb5bc5e8e17f)

#### Algorithmes alternatifs

La bibliothèque de dessin de graphes de Ti*roi*Z propose plusieurs algorithmes différents pour positionner les sommets. Par défaut, `\diagram` et `\feynmandiagram` utilisez le `mise en page en ressort` algorithme pour placer les sommets. L’ `mise en page en ressort` tente d’étaler tout autant que possible, ce qui, dans la plupart des cas, donne un beau diagramme ; cependant, il existe certains cas où cela ne fonctionne pas. Un bon exemple où l’ `mise en page en ressort` ne fonctionne pas est celui des désintégrations où l’on a la particule en désintégration à gauche et toutes les particules filles à droite.

```
% Utilisation de la mise en page par ressorts par défaut
\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/256f4ac36f0151d860fef18055967ff23925de8f)

```
% Utilisation de la disposition en couches
\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/129c906784276abee687bf2ba9cbbaa046a2e305)

Vous remarquerez peut-être qu’en plus d’ajouter le style `de disposition en couches` à `\feynmandiagram`, nous avons aussi changé l’ordre dans lequel nous spécifions les sommets. En effet, `de disposition en couches` algorithme tient compte de l’ordre dans lequel les sommets sont déclarés (contrairement à la `mise en page en ressort`) ; par conséquent, `c--f2, c--f3` n’a pas la même signification que `f2--c--f3`. Dans le premier cas, `f2` et `f3` sont tous deux sur la couche en dessous `c` comme souhaité ; tandis que le second cas place `f2` sur la couche au-dessus de `c` (c’est-à-dire, sur la même couche que celle d’où provient le boson W).

#### Placement manuel

Dans des diagrammes plus compliqués, il est tout à fait probable qu’aucun des algorithmes ne fonctionne, quel que soit le nombre d’arêtes invisibles ajoutées. Dans de tels cas, les sommets doivent être placés manuellement. Ti*roi*Z-Feynman permet de placer les sommets manuellement à l’aide de la `\vertex` commande.

Le `\vertex` commande n’est disponible que dans l’environnement `feynman` (qui lui-même n’est disponible qu’à l’intérieur d’un `tikzpicture`). L’ `feynman` environnement charge tous les styles pertinents de Ti*roi*Z-Feynman et déclare des commandes Ti*roi*Z-Feynman supplémentaires telles que `\vertex` et `\diagram`. Ceci s’inspire de PGFPlots et de son utilisation de la `axis` environnement.

Le `\vertex` commande est très analogue à la `\node` commande de Ti*roi*Ti `{<text>}` à la fin. Dans le cas où `{}` est spécifié, le sommet se voit automatiquement attribuer le style `particle` , et sinon il s’agit d’un sommet habituel (de taille nulle).

Pour préciser où vont les sommets, il est possible de donner des coordonnées explicites, mais il est probablement plus simple d’utiliser la bibliothèque de Ti `positionnement` Z qui permet de placer des sommets relativement à des sommets existants. En utilisant des placements relatifs, il est possible d’ajuster facilement une partie du graphe et tout le reste s’adaptera en conséquence — l’alternative étant d’ajuster manuellement les coordonnées de chaque sommet affecté.*roi*Z,

Enfin, une fois tous les sommets spécifiés, la `\diagram*` commande est utilisée pour spécifier toutes les arêtes. Cela fonctionne à peu près de la même manière que `\diagram` (et aussi `\feynmandiagram`), sauf qu’elle utilise un algorithme très basique pour placer les nouveaux nœuds et permet d’inclure des nœuds existants (nommés). Pour faire référence à un nœud existant, le nœud doit être donné entre parenthèses.

Tout ce processus de spécification des nœuds puis de dessin des arêtes entre eux est présenté ci-dessous pour la désintégration du muon :

```
\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/75ca7dc4cbe4f86b22d08ba353a79780e8af43ad)

## Autres paquets pour dessiner des diagrammes de Feynman

Il existe plusieurs alternatives au paquet TikZ-Feynman :

* [`feynmf`](https://ctan.org/pkg/feynmf) : produit des graphiques matriciels via [MetaFont](https://ctan.org/pkg/metafont)
* [`feynmp`](https://ctan.org/pkg/feynmf) (fourni avec `feynmf`) produit des graphiques vectoriels via [MetaPost](https://ctan.org/pkg/metapost)
* [`feynmp-auto`](https://ctan.org/pkg/feynmp-auto?lang=en) : dérivé de `feynmp`

Le `feynmp-auto` le paquet est, en pratique, une extension du `feynmp` paquet conçue pour automatiser la conversion du code PostScript de MetaPost en données PDF utilisables dans pdfTeX, LuaTeX et XeTeX. Tous les exemples suivants utilisent `feynmp-auto`.

### Introduction

Le `feynmf`, `feynmp` et `feynmp-auto` les paquets vous permettent de dessiner facilement des diagrammes de Feynman en spécifiant les sommets, les particules et leurs étiquettes, puis en effectuant automatiquement la mise en page pour dessiner votre diagramme.

#### Vue d’ensemble de l’utilisation des paquets basés sur feynmf

Pour créer des diagrammes de Feynman, vous devez :

1. créer un `fmfile` environnement pour contenir un ou plusieurs diagrammes, chacun étant placé dans un `fmfgraph` ou `fmfgraph*` environnement — la différence entre la forme étoilée et la forme non étoilée est [expliqué ci-dessous](#fmfgraph-and-fmfgraph);
2. utiliser chaque `fmfgraph` ou `fmfgraph*` environnement pour contenir les instructions de dessin nécessaires à la création d’un diagramme de Feynman individuel.

Le `fmfile` l’environnement a la forme suivante

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

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

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

\end{fmffile}
```

où `file-name` est le nom d’un fichier qui servira à contenir les descriptions en code MetaPost des dessins individuels définis dans `fmfgraph`/`fmfgraph*` environnements.

Chaque dessin prend la forme

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

% instructions de dessin

\end{fmfgraph}
```

ou, pour la version étoilée (`fmfgraph*`)

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

% instructions de dessin

\end{fmfgraph*}
```

où `(width,height)` définit la taille du diagramme exprimée en unités de [`\unitlength`](#note-on-unitlength).

Le code MetaPost dans `file-name` est traité pour créer le ou les graphiques représentant votre ou vos diagrammes de Feynman. Un `fmfile` environnement peut contenir jusqu’à 256 dessins individuels.

#### fmfgraph and fmfgraph\*

* `fmfgraph`: cet environnement contient les instructions de dessin (description) d’un seul diagramme de Feynman. Il sera placé *à l’emplacement de l’environnement*. Cet environnement ne prend pas en charge les étiquettes, utilisez `fmfgraph*` pour inclure des étiquettes dans vos diagrammes.
* `fmfgraph*` identique à `fmfgraph`, mais entouré d’un [`image` environnement](/latex/fr/figures-et-tableaux/04-picture-environment.md) de la même taille. Il prend en charge l’utilisation d’étiquettes LaTeX.

### Un exemple

Commençons par un exemple rapide :

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

[Ouvrez cet exemple dans 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)

Cet exemple produit le résultat suivant :

![](/files/f407e388a0d07fee99217637832b65ae4bf50876)

Dans cet exemple, l’ `fmfgraph` environnement définit la largeur et la hauteur du dessin à 120 et 80 respectivement :

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

en utilisant des unités déterminées par la valeur de `\unitlength`, qui a par défaut la valeur 1pt ; par conséquent, ce diagramme se voit attribuer une largeur de 120pt et une hauteur de 80pt.

#### Remarque sur \unitlength

Parce que `\unitlength` est une dimension LaTeX dont vous pouvez modifier la valeur avec la `\setlength` commande ; par exemple, pour définir la largeur et la hauteur des dessins en unités de cm, vous pouvez écrire :

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

En reproduisant l’exemple ci-dessus, le diagramme ci-dessous a maintenant une largeur de `8cm` et une hauteur de `5cm`:

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\setlength{\unitlength}{1cm}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph}(8,5)% les unités sont maintenant en 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}
```

[Ouvrez cet exemple dans 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)

Cet exemple produit maintenant un diagramme plus grand :

![](/files/16c2db7f9d7092be5a1abf917e1caa9ff77aca53)

### Sommets

La première chose à faire est de spécifier vos sommets externes, et l’endroit où ils doivent être positionnés. Vous pouvez nommer vos sommets comme vous le souhaitez, et indiquer où ils doivent être placés avec les commandes `\fmfleft`, `\fmfright`, `\fmftop`, `\fmfbottom`.

Comme dans les exemples ci-dessus :

```latex
% Crée deux sommets à gauche appelés i1 et i2
\fmfleft{i1,i2}

% Crée deux sommets à droite appelés o1 et o2
\fmfright{o1,o2}
```

Vous pouvez relier les sommets avec `\fmf`, qui créera de nouveaux sommets si vous lui passez des noms qui n’ont pas encore été créés. Toujours comme dans les exemples ci-dessus :

```latex
% Crée une ligne de fermion entre i1 et
% le nouveau v1, et entre v1 et o1.
\fmf{fermion}{i1,v1,o1}

% Crée une ligne de photon entre v1 et le nouveau v2
\fmf{photon}{v1,v2}
```

### Étiquettes

Comme [mentionné plus haut](#fmfgraph-and-fmfgraph), pour utiliser des étiquettes le dessin doit être créé à l’aide de la `fmfgraph*` forme de l’environnement de dessin.

Utilisez la `\fmflabel` commande pour placer une étiquette sur un sommet :

```latex
\fmflabel{contenu-de-l'étiquette}{sommet-du-diagramme}
```

où :

* `contenu de l'étiquette` est l'étiquette à appliquer au sommet choisi ;
* `sommet-du-diagramme` est le nom du sommet à étiqueter.

Notez que `contenu de l'étiquette` peut inclure du matériel mathématique.

Nous pouvons réutiliser l'exemple précédent pour ajouter les étiquettes suivantes

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

ce qui produit le diagramme mis à jour ci-dessous :

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph*}(120,80) %REMARQUE l'environnement fmfgraph*
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
   % Ajouter nos étiquettes
   \fmflabel{$v_1$}{v1}
   \fmflabel{$v_2$}{v2}
 \end{fmfgraph*}
\end{fmffile}
\end{document}
```

[Ouvrez cet exemple dans 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)

Cet exemple produit un diagramme de Feynman contenant des étiquettes :

![](/files/856d201830bdd87f2b48d528900a6dd60053396e)

### Quelques exemples plus complexes

Les exemples suivants, plus avancés, utilisent des fonctionnalités de `feynmp` que nous n'avons pas abordées : voir la [`feynmp` package (`feynmf`) documentation](https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/feynmf/fmfman.pdf)—qui contient également de nombreux exemples supplémentaires. Ces diagrammes ont été initialement publiés dans un modèle Overleaf contenant du code LaTeX reproduit à partir d'une page web du CERN, désormais accessible uniquement via [Wayback Machine](https://web.archive.org/web/20141015023615/http://szczypka.web.cern.ch:80/szczypka/guides/latex/feynmp.html)—cette page contient d'autres exemples que vous pourriez vouloir essayer.

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

[Ouvrez cet exemple dans 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)

Cet exemple produit le diagramme suivant :

![](/files/ee8c46e48990a9a89ceb9c48fcd1ca2942b45e06)

#### Exemple 2

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-b}
\begin{fmfgraph*}(200,200)
    % sommets du bas et du haut
    \fmfstraight
    \fmfleft{i0,i1,i2,id1,id2,i3,i4,i5}
    \fmfright{o0,o1,o2,od1,od2,o3,o4,o5}
    % protons incidents vers les sommets gluon
    \fmf{fermion,label=$d$}{i1,o1}
    % la tension décale le sommet d'un côté
    \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}
    % le phantom centre le sommet 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}
```

[Ouvrez cet exemple dans 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)

Cet exemple produit le diagramme suivant :

![](/files/add37304999a97be8d85b2c838ab1c697d9d3016)

#### Exemple 3

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-c}
\begin{fmfgraph*}(200,200)
    %sommets du bas et du haut
    \fmfbottom{P1,P2}
    \fmftop{P1',b,bbar,P2'}
    %protons incidents vers les sommets gluon
    \fmf{fermion,tension=2,lab=$P_1$}{P1,g1}
    \fmf{fermion,tension=2,lab=$P_2$}{P2,g2}
    %blobs aux sommets gluon, 0.16w est la taille du blob
    \fmfblob{.16w}{g1,g2}
    % gluon de P1 vers le sommet1
    \fmf{gluon,lab.side=right,lab=$x_{1}P_{1}$}{g1,v1}
    % gluon de P2 vers le sommet2 - noter le changement d'ordre !
    \fmf{gluon,lab.side=right,lab=$x_{2}P_{2}$}{v2,g2}
    % la boucle de quarks se trouvait ici
    \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}
    % protons sortants
    \fmf{fermion}{g1,P1'}
    \fmf{fermion}{g2,P2'}
    % figer tout en place
    \fmffreeze
    \renewcommand{\P}[3]{\fmfi{plain}{%
        vpath(__#1,__#2) shifted (thick*(#3))}}
    %lignes sur P1
    \P{P1}{g1}{2,0}
    \P{P1}{g1}{-2,1}
    %lignes sur p2
    \P{P2}{g2}{2,1}
    \P{P2}{g2}{-2,0}
    %lignes sur P1'
    \P{g1}{P1'}{-2,-1}
    \P{g1}{P1'}{2,0}
    %lignes sur P2'
    \P{g2}{P2'}{-2,0}
    \P{g2}{P2'}{2,-1}
\end{fmfgraph*}
\end{fmffile}
\end{document}
```

[Ouvrez cet exemple dans 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)

Cet exemple produit le diagramme suivant :

![](/files/4522a209c92f5a8d8cc10edf9ed5680eedb0f4f4)

### Styles de ligne

Nous avons vu les `photon` et `fermion` styles de ligne ci-dessus, mais le `feynmp` paquet en prend en charge bien d'autres.

| Apparence                                                                            | Nom(s)                                  |
| ------------------------------------------------------------------------------------ | --------------------------------------- |
| ![Feynmf-line-curly.png](/files/89fcff7c07c4e355e49f8a8f881d354bb8af6308)            | gluon, curly                            |
| ![Feynmf-line-dbl-curly.png](/files/f50771741fef578491cba61d4389357ca72879f6)        | dbl\_curly                              |
| ![Feynmf-line-dashes.png](/files/3441380336d9c5be13d373132cad4cf30f9c01f2)           | dashes                                  |
| ![Feynmf-line-dashed-arrow.png](/files/9350113798a61d5ac38d4405955a63908cb5470e)     | scalar, dashes\_arrow                   |
| ![Feynmf-line-dbl-dashes.png](/files/c6674d5be09f0a8bae863994a2d700ff0d29f9a2)       | dbl\_dashes                             |
| ![Feynmf-line-dbl-dashes-arrow.png](/files/fc6012e216822b8e6c5785af3c8e7c00e1a8e065) | dbl\_dashes\_arrow                      |
| ![Feynmf-line-dots.png](/files/34b95afbe6ec1d8e180ec8139067a8e591c960fc)             | dots                                    |
| ![Feynmf-line-dots-arrow.png](/files/b4f7cf4da69bc41ff8d9af07d9106df5e1a8ea79)       | ghost, dots\_arrow                      |
| ![Feynmf-line-dbl-dots.png](/files/33be356e4de4df28b38a8caedc56987daf4d56db)         | dbl\_dots                               |
| ![Feynmf-line-dbl-dots-arrow.png](/files/06e9544608d90663848fdc26f5ee222b591c82a5)   | dbl\_dots\_arrow                        |
|                                                                                      | phantom                                 |
| ![Feynmf-line-phantom-arrow.png](/files/39ab80fd6fb739edd156696b25172c72e6ef2851)    | phantom\_arrow                          |
| ![Feynmf-line-plain.png](/files/e5dfc613700eb89fd41edd09263f6d6eeb4af248)            | vanilla, plain                          |
| ![Feynmf-line-plain-arrow.png](/files/244037480115ff8c0fcd316dc70bf56c57ef49cc)      | fermion, electron, quark, plain\_arrow  |
| ![Feynmf-line-dbl-plain.png](/files/28fd42bab2c39c2f0884fe963d3eb86627335952)        | double, dbl\_plain                      |
| ![Feynmf-line-dbl-plain-arrow.png](/files/2ae8339331c6dd156e44b2fde344805a83ec7c7a)  | double\_arrow, heavy, dbl\_plain\_arrow |
| ![Feynmf-line-wiggly.png](/files/e097c287dd65c2216039d9fa5211a2f87bf90bd7)           | boson, photon, wiggly                   |
| ![Feynmf-line-dbl-wiggly.png](/files/fb4d82bd56f8f8f161eef850041cea56e5d3bd3a)       | dbl\_wiggly                             |
| ![Feynmf-line-zigzag.png](/files/0cc258e545cd7de563966107158f3cdfa9c17731)           | zigzag                                  |
| ![Feynmf-line-dbl-zigzag.png](/files/b06c4b40ee7cd07a189b6f9215cc7fb4d424edfd)       | dbl\_zigzag                             |

## Lectures complémentaires

Pour plus d'informations, voir :

* [Formules chimiques](/latex/fr/specifique-a-un-domaine/02-chemistry-formulae.md)
* [Diagrammes d'orbitales moléculaires](/latex/fr/specifique-a-un-domaine/04-molecular-orbital-diagrams.md)
* [Package TikZ](/latex/fr/figures-et-tableaux/05-tikz-package.md)
* [Dessiner des diagrammes directement en LaTeX](/latex/fr/figures-et-tableaux/04-picture-environment.md)
* [Insertion d'images](/latex/fr/autres-sujets/27-inserting-images.md)
* [Liste des lettres grecques et des symboles mathématiques](/latex/fr/mathematiques/11-list-of-greek-letters-and-math-symbols.md)
* [Le **feynmf** documentation du paquet](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/fr/specifique-a-un-domaine/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.
