> 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/vi/theo-linh-vuc/03-feynman-diagrams.md).

# Các sơ đồ Feynman

## Giới thiệu

Bài viết trợ giúp này tìm hiểu các gói LaTeX để vẽ sơ đồ Feynman, một cách rất gọn và trực quan để biểu diễn các tương tác giữa các hạt. Chúng ta sẽ tìm hiểu [`tikz-feynman` gói](https://ctan.org/pkg/tikz-feynman?lang=en), gói này dùng TikZ để vẽ sơ đồ, và [`feynmp-auto`](#other-packages-for-drawing-feynman-diagrams) gói này ("ở hậu trường") sử dụng MetaPost.

## Gói TikZ-Feynman

Tính năng [`tikz-feynman` gói](https://ctan.org/pkg/tikz-feynman?lang=en) được phát hành vào năm 2016 và dùng Ti*k*Z để tạo các sơ đồ Feynman. Ti*k*Z-Feynman xây dựng dựa trên gói Ti*k*Z và các thuật toán vẽ đồ thị của nó để tự động hóa việc sắp xếp nhiều đỉnh. Ti*k*Z-Feynman vẫn cho phép tinh chỉnh việc đặt các đỉnh để ngay cả những sơ đồ phức tạp cũng có thể được tạo ra một cách dễ dàng. Thông tin mới nhất về Ti*k*Z-Feynman sẽ luôn có trên [trang dự án](http://www.jpellis.me/projects/tikz-feynman/) và trong [tài liệu gói](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf) trên CTAN.

### Cập nhật (9 tháng 11 năm 2022)

**CẬP NHẬT QUAN TRỌNG sau khi xuất bản** (9 tháng 11 năm 2022): Tại thời điểm cập nhật trang này, **gói TikZ-Feynman vẫn không tương thích với các phiên bản TeX Live mới hơn TeX Live 2018**—đây là phiên bản TeX Live được dùng trong [dự án Overleaf đi kèm với bài viết trợ giúp này.](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=) Tất cả các ví dụ TikZ-Feynman liệt kê bên dưới sẽ cần được biên dịch trong một dự án Overleaf với **Phiên bản TeX Live** được đặt thành `2018 (legacy)`. Để biết thêm thông tin, xem [vấn đề này được báo cáo trên GitHub](https://github.com/JP-Ellis/tikz-feynman/issues/73#issue-942615833).

### Tải gói

Sau khi cài đặt gói, gói Ti*k*Z-Feynman có thể được nạp bằng `\usepackage{tikz-feynman}` trong phần tiền đề. Bạn cũng nên chỉ định phiên bản Ti*k*Z-Feynman sẽ dùng với `compat` dưới đây: `\usepackage[compat=1.0.0]{tikz-feynman}`. Điều này đảm bảo rằng bất kỳ phiên bản mới nào của Ti*k*Z-Feynman sẽ không tạo ra những thay đổi không mong muốn nào mà không có cảnh báo.

### Sơ đồ đầu tiên

Có thể khai báo các sơ đồ Feynman bằng lệnh `\feynmandiagram` . Nó tương tự như lệnh `\tikz` của Ti*k*Z và yêu cầu một dấu chấm phẩy cuối cùng (`;`) để kết thúc môi trường. Ví dụ, một sơ đồ kênh *s*đơn giản là:

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

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

Hãy đi qua ví dụ này từng dòng một:

**Dòng 1**

\feynmandiagram giới thiệu sơ đồ Feynman và cho phép cung cấp các đối số tùy chọn trong dấu ngoặc \[]. Trong trường hợp này, horizontal=a to b định hướng đầu ra của thuật toán sao cho đường đi qua các đỉnh a và b là nằm ngang.

**Dòng 2**

Đường fermion bên trái được vẽ bằng cách khai báo ba đỉnh (i1, a và i2) và nối chúng bằng các cạnh --. Cũng như lệnh \feynmandiagram ở trên, mỗi cạnh cũng có các đối số tùy chọn được chỉ định trong dấu ngoặc \[]. Trong trường hợp này, chúng ta muốn các cạnh này có mũi tên để biểu thị rằng chúng là các đường fermion, vì vậy chúng ta thêm kiểu fermion vào chúng. Như bạn sẽ thấy sau này, các đối số tùy chọn cũng có thể được gán cho các đỉnh theo đúng cách như vậy.

**Dòng 3**

Cạnh này nối các đỉnh a và b bằng một cạnh được định kiểu là photon. Vì đã có sẵn một đỉnh mang nhãn a, thuật toán sẽ nối nó với một đỉnh mới mang nhãn b.

**Dòng 4**

Dòng này tương tự dòng 2 và giới thiệu hai đỉnh mới, f1 và f2. Nó tái sử dụng đỉnh b đã được gán nhãn trước đó.

**Dòng 5**

Kết thúc khai báo sơ đồ Feynman. Dấu chấm phẩy cuối cùng (;) là quan trọng.

Tên được đặt cho mỗi đỉnh trong đồ thị không quan trọng. Vì vậy, trong ví dụ này, `i1`, `i2` chỉ các hạt ban đầu; `f1`, `f2` chỉ các hạt cuối cùng; và `a`, `b` là các điểm cuối của bộ truyền. Khía cạnh quan trọng duy nhất là những gì chúng ta gọi `a` ở dòng 2 cũng là `a` ở dòng 3 để thuật toán cơ bản coi chúng là cùng một đỉnh.

Thứ tự khai báo các đỉnh không quan trọng vì thuật toán mặc định sẽ sắp xếp lại mọi thứ. Ví dụ, bạn có thể thích vẽ toàn bộ các đường fermion cùng một lúc, như trong ví dụ sau (cũng lưu ý rằng cách chúng ta đặt tên các đỉnh hoàn toàn khác):

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

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

Như một lưu ý cuối cùng, việc tính toán vị trí cần đặt các đỉnh thường được thực hiện thông qua một thuật toán viết bằng Lua. Do đó, cần dùng LuaTeX để có thể sử dụng các thuật toán này. Nếu không dùng LuaTeX, Ti*k*Z-Feynman sẽ mặc định dùng một thuật toán sơ khai hơn và thay vào đó sẽ cảnh báo người dùng.

### Thêm kiểu

Cho đến nay, các ví dụ chỉ mới dùng các kiểu `photon` và `fermion` . Gói Ti*k*Z-Feynman đi kèm với khá nhiều kiểu bổ sung cho các cạnh và đỉnh, tất cả đều được tài liệu hóa tại [tài liệu gói](http://mirrors.ctan.org/graphics/pgf/contrib/tikz-feynman/tikz-feynman.pdf). Ví dụ, có thể thêm mũi tên động lượng với `momentum=<text>`, và trong trường hợp các đỉnh cuối, hạt có thể được gắn nhãn với `particle=<text>`. Để minh họa cách chúng được dùng, chúng ta lấy sơ đồ *s*kênh

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

Ngoài các khóa kiểu được tài liệu hóa bên dưới, các khóa kiểu từ Ti*k*Z cũng có thể được dùng:

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

Để xem danh sách tất cả các kiểu khác nhau mà Ti*k*Z cung cấp, hãy xem [Ti*k*sổ tay Ti](http://mirrors.ctan.org/graphics/pgf/base/doc/pgfmanual.pdf)Z; nó cực kỳ chi tiết và cung cấp nhiều ví dụ sử dụng.

### Khi thuật toán không đủ

Theo mặc định, kiểu `\feynmandiagram` và `\diagram` các lệnh sử dụng `thuật toán bố cục lò xo` để đặt tất cả các cạnh.  `thuật toán bố cục lò xo` Thuật toán cố gắng 'trải rộng' sơ đồ nhiều nhất có thể, điều này—với hầu hết các sơ đồ đơn giản hơn—cho kết quả chấp nhận được; tuy nhiên trong một số trường hợp, điều này không tạo ra sơ đồ tốt nhất và phần này sẽ xem xét các phương án thay thế. Có ba phương án chính:

**Thêm các cạnh vô hình**

Mặc dù vẫn dùng thuật toán mặc định, vẫn có thể ép một số đỉnh nhất định lại gần nhau hơn bằng cách thêm các cạnh bổ sung và làm cho chúng vô hình bằng draw=none. Thuật toán sẽ xử lý các cạnh bổ sung này theo cùng một cách, nhưng chúng đơn giản là không được vẽ ra ở cuối;

**Dùng một thuật toán khác**

Trong một số trường hợp, các thuật toán khác có thể phù hợp hơn. Một số thuật toán bố cục đồ thị khác được liệt kê trong tài liệu gói, và danh sách đầy đủ mọi thuật toán cùng các tham số của chúng được nêu trong sổ tay TikZ;

**Đặt thủ công**

Như giải pháp cuối cùng, các sơ đồ rất phức tạp hoặc bất thường sẽ yêu cầu mỗi đỉnh phải được đặt thủ công.

#### Các cạnh vô hình

Thuật toán nền tảng xử lý tất cả các cạnh hoàn toàn theo cùng một cách khi tính toán vị trí đặt tất cả các đỉnh, và việc vẽ thực tế của sơ đồ (sau khi các vị trí đã được tính) được thực hiện riêng biệt. Do đó, có thể thêm các cạnh vào thuật toán, nhưng ngăn chúng không được vẽ bằng cách thêm `draw=none` vào kiểu cạnh.

Điều này đặc biệt hữu ích nếu bạn muốn đảm bảo rằng trạng thái ban đầu hoặc cuối cùng vẫn ở gần nhau hơn so với trường hợp khác như minh họa trong ví dụ sau (lưu ý rằng `opacity=0.2` được dùng thay vì `draw=none` để minh họa chính xác vị trí của cạnh).

```
% Không dùng cạnh vô hình để giữ hai photon ở gần nhau
\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/b2cf6434e0920dbcd8b56662f6fb3ebaf31ec4bf)

```
% Cạnh vô hình đảm bảo các photon song song
\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/d82591409825117f6315066ea6cad8b33235e3f6)

#### Các thuật toán thay thế

Thư viện vẽ đồ thị của Ti*k*Z có nhiều thuật toán khác nhau để định vị các đỉnh. Theo mặc định, `\diagram` và `\feynmandiagram` dùng `thuật toán bố cục lò xo` thuật toán để đặt các đỉnh.  `thuật toán bố cục lò xo` nó cố gắng trải rộng mọi thứ ra nhiều nhất có thể, điều này trong hầu hết các trường hợp cho một sơ đồ đẹp; tuy nhiên, có một số trường hợp mà cách này không hoạt động. Một ví dụ tốt cho trường hợp  `thuật toán bố cục lò xo` không hoạt động là các quá trình phân rã, nơi ta có hạt phân rã ở bên trái và tất cả các hạt con ở bên phải.

```
% Dùng bố cục lò xo mặc định
\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/2fc1c7eaa44232a67ee77ae7b7cd7d02a84540af)

```
% Dùng bố cục phân tầng
\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/ce393e7fd84d19497ba14be25b0c746663c1f746)

Bạn có thể nhận thấy rằng ngoài việc thêm kiểu `bố cục phân tầng` vào `\feynmandiagram`, chúng ta cũng đã thay đổi thứ tự mà chúng ta chỉ định các đỉnh. Điều này là vì `bố cục phân tầng` thuật toán này có chú ý đến thứ tự khai báo các đỉnh (khác với  `thuật toán bố cục lò xo`thuật toán mặc định `); do đó,` c--f2, c--f3 `có nghĩa khác với`. Trong trường hợp trước, `f2` và `f3` cả hai đều nằm trên tầng bên dưới `c` như mong muốn; trong khi trường hợp sau đặt `f2` trên tầng phía trên `c` (nghĩa là, cùng tầng với nơi W-boson xuất phát).

#### Định vị thủ công

Trong các sơ đồ phức tạp hơn, rất có thể là không thuật toán nào hoạt động, bất kể đã thêm bao nhiêu cạnh vô hình. Trong những trường hợp như vậy, các đỉnh phải được đặt thủ công. Ti*k*Z-Feynman cho phép đặt đỉnh thủ công bằng cách dùng `\vertex` lệnh này.

Tính năng `\vertex` lệnh này chỉ khả dụng trong môi trường `feynman` (bản thân môi trường này chỉ khả dụng bên trong một `tikzpicture`).  `feynman` Môi trường này nạp tất cả các kiểu liên quan từ Ti*k*Z-Feynman và khai báo các lệnh bổ sung dành riêng cho Ti*k*Z-Feynman như `\vertex` và `\diagram`. Điều này được lấy cảm hứng từ PGFPlots và việc dùng `axis` môi trường.

Tính năng `\vertex` lệnh này rất tương tự với `\node` của Ti*k*trong Ti `Z, với ngoại lệ đáng chú ý là nội dung của đỉnh là tùy chọn; tức là, bạn không cần phải có` {\<text>} `{}` ở cuối. Trong trường hợp `được chỉ định, đỉnh sẽ tự động được gán kiểu` particle

, còn nếu không thì đó là một đỉnh bình thường (có kích thước bằng 0). `positioning` thư viện từ Ti*k*Z cho phép đặt các đỉnh tương đối so với các đỉnh hiện có. Bằng cách dùng vị trí tương đối, có thể dễ dàng tinh chỉnh một phần của đồ thị và mọi thứ sẽ tự điều chỉnh cho phù hợp—thay vì phải tự tay chỉnh tọa độ của từng đỉnh bị ảnh hưởng.

Cuối cùng, sau khi tất cả các đỉnh đã được chỉ định, `\diagram*` lệnh này được dùng để chỉ định tất cả các cạnh. Nó hoạt động gần như giống hệt `\diagram` (và cả `\feynmandiagram`), ngoại trừ việc nó dùng một thuật toán rất cơ bản để đặt các nút mới và cho phép bao gồm các nút hiện có (đã đặt tên). Để tham chiếu đến một nút hiện có, nút đó phải được đặt trong dấu ngoặc đơn.

Toàn bộ quy trình chỉ định các nút rồi vẽ các cạnh giữa chúng được minh họa bên dưới cho quá trình phân rã 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/6a7c8081ced5e2cc9ab97c2202e4262ab1944586)

## Các gói khác để vẽ sơ đồ Feynman

Có một số lựa chọn thay thế cho gói TikZ-Feynman:

* [`feynmf`](https://ctan.org/pkg/feynmf): tạo đồ họa bitmap thông qua [MetaFont](https://ctan.org/pkg/metafont)
* [`feynmp`](https://ctan.org/pkg/feynmf) (đi kèm với `feynmf`) tạo đồ họa vector thông qua [MetaPost](https://ctan.org/pkg/metapost)
* [`feynmp-auto`](https://ctan.org/pkg/feynmp-auto?lang=en): bắt nguồn từ `feynmp`

Tính năng `feynmp-auto` gói này, trên thực tế, là một phần mở rộng của `feynmp` gói được thiết kế để tự động chuyển đổi mã PostScript của MetaPost thành dữ liệu PDF để dùng trong pdfTeX, LuaTeX và XeTeX. Tất cả các ví dụ sau đều dùng `feynmp-auto`.

### Giới thiệu

Tính năng `feynmf`, `feynmp` và `feynmp-auto` các gói này cho phép bạn dễ dàng vẽ các sơ đồ Feynman bằng cách chỉ định các đỉnh, các hạt và nhãn của chúng, rồi tự động thực hiện bố cục để vẽ sơ đồ của bạn.

#### Tổng quan về việc sử dụng các gói dựa trên feynmf

Để tạo các sơ đồ Feynman, bạn cần:

1. tạo một môi trường `fmfile` để chứa một hoặc nhiều sơ đồ, mỗi sơ đồ được bao trong một môi trường `fmfgraph` hoặc `fmfgraph*` —sự khác biệt giữa dạng có dấu sao và không có dấu sao là [được giải thích bên dưới](#fmfgraph-and-fmfgraph);
2. dùng mỗi môi trường `fmfgraph` hoặc `fmfgraph*` để chứa các hướng dẫn vẽ cần thiết để tạo một sơ đồ Feynman riêng lẻ.

Tính năng `fmfile` môi trường có dạng sau

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

% Sơ đồ 1
\begin{fmfgraph}(width,height)
...
\end{fmfgraph}

% Sơ đồ 2
\begin{fmfgraph*}(width,height)
...
\end{fmfgraph*}

\end{fmffile}
```

trong đó `file-name` là tên của một tệp sẽ được dùng để chứa các mô tả mã MetaPost của những bản vẽ riêng lẻ được định nghĩa bên trong `fmfgraph`/`fmfgraph*` các môi trường.

Mỗi bản vẽ có dạng

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

% các hướng dẫn vẽ

\end{fmfgraph}
```

hoặc, đối với phiên bản có dấu sao (`fmfgraph*`)

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

% các hướng dẫn vẽ

\end{fmfgraph*}
```

trong đó `(width,height)` định nghĩa kích thước của sơ đồ được biểu diễn theo đơn vị [`\unitlength`](#note-on-unitlength).

Mã MetaPost trong `file-name` được xử lý để tạo ra đồ họa đại diện cho sơ đồ Feynman của bạn. Một môi trường `fmfile` có thể chứa tối đa 256 bản vẽ riêng lẻ.

#### fmfgraph và fmfgraph\*

* `fmfgraph`: môi trường này chứa các hướng dẫn vẽ (mô tả) của một sơ đồ Feynman đơn lẻ. Nó sẽ được đặt *tại vị trí của môi trường*. Môi trường này không hỗ trợ nhãn, hãy dùng `fmfgraph*` để đưa nhãn vào các sơ đồ của bạn.
* `fmfgraph*` giống như `fmfgraph`, nhưng được bao trong một [`picture` môi trường](/latex/vi/hinh-va-bang/04-picture-environment.md) cùng kích thước. Nó hỗ trợ việc dùng nhãn LaTeX.

### Một ví dụ

Hãy bắt đầu với một ví dụ nhanh:

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

[Mở ví dụ này trong 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)

Ví dụ này tạo ra kết quả sau:

![](/files/8374f4a11e996ddcb0d5a8cf362e7189ca3be926)

Trong ví dụ này, `fmfgraph` môi trường này đặt chiều rộng và chiều cao của bản vẽ lần lượt là 120 và 80:

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

sử dụng các đơn vị được xác định bởi giá trị của `\unitlength`, giá trị mặc định là 1pt; do đó, sơ đồ này được cấp chiều rộng 120pt và chiều cao 80pt.

#### Lưu ý về \unitlength

Bởi vì `\unitlength` là một kích thước LaTeX, bạn có thể thay đổi giá trị của nó bằng lệnh `\setlength` ; chẳng hạn, để định nghĩa chiều rộng và chiều cao của các bản vẽ theo đơn vị cm, bạn có thể viết:

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

Lặp lại ví dụ ở trên, sơ đồ bên dưới giờ có chiều rộng `8cm` và chiều cao `5cm`:

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\setlength{\unitlength}{1cm}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph}(8,5)% các đơn vị bây giờ là 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}
```

[Mở ví dụ này trong 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)

Bây giờ ví dụ này tạo ra một sơ đồ lớn hơn:

![](/files/605e8e29da279d274156bd03423ffaf77244b18b)

### Các đỉnh

Điều đầu tiên bạn cần làm là chỉ định các đỉnh ngoài của mình và vị trí chúng nên được đặt. Bạn có thể đặt tên cho các đỉnh tùy ý, và chỉ ra vị trí của chúng bằng các lệnh `\fmfleft`, `\fmfright`, `\fmftop`, `\fmfbottom`.

Như dùng trong các ví dụ ở trên:

```latex
% Tạo hai đỉnh bên trái có tên i1 và i2
\fmfleft{i1,i2}

% Tạo hai đỉnh bên phải có tên o1 và o2
\fmfright{o1,o2}
```

Bạn có thể nối các đỉnh bằng `\fmf`, lệnh này sẽ tạo các đỉnh mới nếu bạn truyền vào những tên chưa được tạo trước đó. Cũng như trong các ví dụ ở trên:

```latex
% Sẽ tạo một đường fermion giữa i1 và
% đỉnh v1 mới được tạo, và giữa v1 và o1.
\fmf{fermion}{i1,v1,o1}

% Sẽ tạo một đường photon giữa v1 và đỉnh v2 mới được tạo
\fmf{photon}{v1,v2}
```

### Nhãn

Như [đã lưu ý ở trên](#fmfgraph-and-fmfgraph), để dùng nhãn, bản vẽ phải được tạo bằng `fmfgraph*` dạng của môi trường bản vẽ.

Hãy sử dụng `\fmflabel` lệnh để đặt nhãn lên một đỉnh:

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

trong đó:

* `nội dung nhãn` là nhãn được áp dụng cho đỉnh đã chọn;
* `đỉnh của sơ đồ` là tên của đỉnh cần gắn nhãn.

Lưu ý rằng `nội dung nhãn` có thể bao gồm nội dung toán học.

Chúng ta có thể tái sử dụng ví dụ trước để thêm các nhãn sau

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

kết quả là sơ đồ được cập nhật như dưới đây:

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{first-diagram}
 \begin{fmfgraph*}(120,80) %LƯU Ý môi trường fmfgraph*
   \fmfleft{i1,i2}
   \fmfright{o1,o2}
   \fmf{fermion}{i1,v1,o1}
   \fmf{fermion}{i2,v2,o2}
   \fmf{photon}{v1,v2}
   % Thêm các nhãn của chúng ta
   \fmflabel{$v_1$}{v1}
   \fmflabel{$v_2$}{v2}
 \end{fmfgraph*}
\end{fmffile}
\end{document}
```

[Mở ví dụ này trong 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)

Ví dụ này tạo ra một sơ đồ Feynman chứa các nhãn:

![](/files/59aac5df1c84c1eecda1e34db6935b6fba64e29d)

### Một số ví dụ phức tạp hơn

Các ví dụ nâng cao sau đây sử dụng những tính năng của `feynmp` mà chúng ta chưa thảo luận: xem [`feynmp` gói (`feynmf`) tài liệu](https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/feynmf/fmfman.pdf)—tài liệu này cũng chứa nhiều ví dụ bổ sung khác. Các sơ đồ này ban đầu được đăng trong một mẫu Overleaf chứa mã LaTeX được sao chép từ một trang web của CERN, hiện nay chỉ có thể truy cập qua [Wayback Machine](https://web.archive.org/web/20141015023615/http://szczypka.web.cern.ch:80/szczypka/guides/latex/feynmp.html)—trang đó có thêm các ví dụ khác mà bạn có thể muốn thử.

#### Ví dụ 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}
```

[Mở ví dụ này trong 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)

Ví dụ này tạo ra sơ đồ sau:

![](/files/e764afc191cfb93d5bd8b4e8c887c38d10f63f3f)

#### Ví dụ 2

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-b}
\begin{fmfgraph*}(200,200)
    % các đỉnh phía dưới và phía trên
    \fmfstraight
    \fmfleft{i0,i1,i2,id1,id2,i3,i4,i5}
    \fmfright{o0,o1,o2,od1,od2,o3,o4,o5}
    % proton đi vào đến các đỉnh gluon
    \fmf{fermion,label=$d$}{i1,o1}
    % lực căng dịch đỉnh sang một bên
    \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 căn giữa đỉnh 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}
```

[Mở ví dụ này trong 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)

Ví dụ này tạo ra sơ đồ sau:

![](/files/de0d31454aef14fe628e75136a725872e5aade2e)

#### Ví dụ 3

```latex
\documentclass{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{complex-c}
\begin{fmfgraph*}(200,200)
    % các đỉnh phía dưới và phía trên
    \fmfbottom{P1,P2}
    \fmftop{P1',b,bbar,P2'}
    % proton đi vào đến các đỉnh gluon
    \fmf{fermion,tension=2,lab=$P_1$}{P1,g1}
    \fmf{fermion,tension=2,lab=$P_2$}{P2,g2}
    % các blob tại các đỉnh gluon, 0.16w là kích thước của blob
    \fmfblob{.16w}{g1,g2}
    % gluon từ P1 đến đỉnh 1
    \fmf{gluon,lab.side=right,lab=$x_{1}P_{1}$}{g1,v1}
    % gluon từ P2 đến đỉnh 2 - lưu ý đổi thứ tự!
    \fmf{gluon,lab.side=right,lab=$x_{2}P_{2}$}{v2,g2}
    % vòng quark ở đây
    \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}
    % các proton đi ra
    \fmf{fermion}{g1,P1'}
    \fmf{fermion}{g2,P2'}
    % cố định mọi thứ tại chỗ
    \fmffreeze
    \renewcommand{\P}[3]{\fmfi{plain}{%
        vpath(__#1,__#2) shifted (thick*(#3))}}
    % các đường trên P1
    \P{P1}{g1}{2,0}
    \P{P1}{g1}{-2,1}
    % các đường trên p2
    \P{P2}{g2}{2,1}
    \P{P2}{g2}{-2,0}
    % các đường trên P1'
    \P{g1}{P1'}{-2,-1}
    \P{g1}{P1'}{2,0}
    % các đường trên P2'
    \P{g2}{P2'}{-2,0}
    \P{g2}{P2'}{2,-1}
\end{fmfgraph*}
\end{fmffile}
\end{document}
```

[Mở ví dụ này trong 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)

Ví dụ này tạo ra sơ đồ sau:

![](/files/d8496beca8c92891381ee42a9b531fc428c4faf8)

### Kiểu đường

Chúng ta đã thấy `photon` và `fermion` các kiểu đường ở trên, nhưng `feynmp` gói này hỗ trợ nhiều kiểu khác nữa.

| Hiển thị                                                                             | Tên                                            |
| ------------------------------------------------------------------------------------ | ---------------------------------------------- |
| ![Feynmf-line-curly.png](/files/dc9e7322b1028d00a72ddb4cff81f53baaa9c3f8)            | gluon, cong xoắn                               |
| ![Feynmf-line-dbl-curly.png](/files/ada5289dfa32f1cb7c039aebf6299f3abfb85872)        | dbl\_curly                                     |
| ![Feynmf-line-dashes.png](/files/44b5ab5716cd7e9998e3d60bce8dcd623444968b)           | nét đứt                                        |
| ![Feynmf-line-dashed-arrow.png](/files/4d7f78dd6a7de7f059030886a6caaa492f53c55c)     | scalar, mũi tên nét đứt                        |
| ![Feynmf-line-dbl-dashes.png](/files/c2c3268b0e117aba169433246251b71f62fce98b)       | dbl\_dashes                                    |
| ![Feynmf-line-dbl-dashes-arrow.png](/files/a16371e95ef79610d353d4244a9568c168e5fc4b) | dbl\_dashes\_arrow                             |
| ![Feynmf-line-dots.png](/files/bf3128be6f199f52d30b27ee042b0befedd89e91)             | chấm                                           |
| ![Feynmf-line-dots-arrow.png](/files/fdf9175923732480bab63990eaa67e6786294667)       | ghost, mũi tên chấm                            |
| ![Feynmf-line-dbl-dots.png](/files/06da3fd181d9b80c2d7204d85f51877ac7d23907)         | dbl\_dots                                      |
| ![Feynmf-line-dbl-dots-arrow.png](/files/0fadcb132f4420a145ace8977b86bb522f355a23)   | dbl\_dots\_arrow                               |
|                                                                                      | phantom                                        |
| ![Feynmf-line-phantom-arrow.png](/files/d17f676c68a47cf83b1235c72dc166f4510189ff)    | phantom\_arrow                                 |
| ![Feynmf-line-plain.png](/files/a0f3af0072e804d1ebfac0a7d3fdc284325b295d)            | vanilla, đường thẳng                           |
| ![Feynmf-line-plain-arrow.png](/files/d22d4859404c83d5ce79ecdda40fa874a441dbad)      | fermion, electron, quark, đường thẳng\_mũi tên |
| ![Feynmf-line-dbl-plain.png](/files/a130be0cb55212bc3bd65725a668fc58e506b5f5)        | đôi, dbl\_plain                                |
| ![Feynmf-line-dbl-plain-arrow.png](/files/1d72c69ee6d05510f5c10ca3290ebfa5a87eb0f0)  | double\_arrow, heavy, dbl\_plain\_arrow        |
| ![Feynmf-line-wiggly.png](/files/b99201273e8f071cd43133aca3ddc78abbe3fee9)           | boson, photon, lượn sóng                       |
| ![Feynmf-line-dbl-wiggly.png](/files/b78f9bbc56c70e9235742b0f55910fe7fe2887e8)       | dbl\_wiggly                                    |
| ![Feynmf-line-zigzag.png](/files/e27721c462114455745f460ed40db9b42bee8689)           | zic-zắc                                        |
| ![Feynmf-line-dbl-zigzag.png](/files/6796f58c46609de9040ca2430306e954b22ff087)       | dbl\_zigzag                                    |

## Đọc thêm

Để biết thêm thông tin, xem:

* [Công thức hóa học](/latex/vi/theo-linh-vuc/02-chemistry-formulae.md)
* [Sơ đồ orbital phân tử](/latex/vi/theo-linh-vuc/04-molecular-orbital-diagrams.md)
* [Gói TikZ](/latex/vi/hinh-va-bang/05-tikz-package.md)
* [Vẽ sơ đồ trực tiếp trong LaTeX](/latex/vi/hinh-va-bang/04-picture-environment.md)
* [Chèn hình ảnh](/latex/vi/chu-de-khac/27-inserting-images.md)
* [Danh sách các chữ cái Hy Lạp và ký hiệu toán học](/latex/vi/toan-hoc/11-list-of-greek-letters-and-math-symbols.md)
* [Tính năng **feynmf** tài liệu gói](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/vi/theo-linh-vuc/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.
