> 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/cau-hoi-and-tra-loi/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.md).

# Tôi có rất nhiều hình tikz, matlab2tikz hoặc pgfplots, nên tôi bị quá thời gian biên dịch. Tôi có thể e

## Cách ngoại hóa đồ họa TikZ

Sử dụng TikZ [thư viện có tên `external`](https://tikz.dev/library-external) để tạo và lưu trữ (cache) các bản vẽ TikZ dưới dạng tệp PDF — một quá trình thường được gọi là “*ngoại hóa*”.

Nạp thư viện qua `\usetikzlibrary{external}`, rồi kích hoạt việc ngoại hóa bằng lệnh `\tikzexternalize`:

```latex
\usetikzlibrary{external}
\tikzexternalize[<options>]
```

trong đó `<options>` là một danh sách tham số tùy chọn (cặp khóa–giá trị) dùng để cấu hình `external` thư viện.

* **LƯU Ý**: Để việc ngoại hóa TikZ hoạt động trên Overleaf,  `\tikzexternalize` lệnh ***phải*** được đặt trong tệp chính của dự án `.tex` .

Hãy xem một ví dụ cơ bản sử dụng một đồ họa được sao chép từ [tài liệu TikZ](https://tikz.dev/library-external):

```latex
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=tikz/]

\begin{document}
% Hình TikZ này sẽ được ghi vào
% một tệp có tên 'output-figure0.pdf'
% bên trong thư mục 'tikz'
\begin{tikzpicture}

  \node {root}
    child {node {left}}
    child {node {right}
      child {node {child}}
      child {node {child}}
    };

\end{tikzpicture}

\end{document}
```

Để khám phá ví dụ này, bạn có thể [mở nó trên Overleaf.](https://www.overleaf.com/project/new/template/27519?id=1174669946\&templateName=Example+to+externalize+a+TikZ+graphic\&latexEngine=pdflatex\&texImage=texlive-full%3A2022.1\&mainFile=)

Mã trong ví dụ của chúng tôi sử dụng tùy chọn `prefix=tikz/` với `\tikzexternalize`:

```latex
\tikzexternalize[prefix=tikz/]
```

Tùy chọn `prefix=tikz/` cung cấp tên của một thư mục (ở đây, `tikz`) để dùng để lưu bộ nhớ đệm các hình được tạo ra (đã ngoại hóa) — bạn sẽ cần tự tạo thư mục đó trong dự án của mình. Tuy nhiên, trước khi LaTeX (mã TikZ) có thể ghi vào thư mục đó, nó cần chứa một tệp — bất kỳ tệp (giả) nào cũng được; ví dụ, bạn có thể thêm một tệp văn bản trống `foo.txt` trong `tikz` thư mục.

Overleaf xem các đồ họa PDF TikZ đã ngoại hóa là các tệp đầu ra được tạo ra, vì vậy chúng sẽ không xuất hiện trong danh sách tệp hiển thị của dự án — chúng có trong dự án, chỉ là bị ẩn khỏi chế độ xem — bạn có thể xem danh sách [các tệp đã tạo](/latex/vi/co-so-tri-thuc/150-view-generated-files.md) để xem chúng.

Đoạn video ngắn sau đây tóm tắt việc biên dịch ví dụ trên và minh họa cách truy cập danh sách các tệp do TikZ tạo ra:

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/6VZVoHzhpNzOWSTvsWYm08/80d178255345da83bcd82b5fc64e5c6b/TikZExternalize.mp4>" %}

## Một số lưu ý

Việc ngoại hóa đồ họa TikZ có thể đòi hỏi nhiều tính toán đối với bộ máy TeX nền tảng (pdfTeX, XeTeX, LuaTeX, v.v.), vì vậy `external` thư viện cung cấp một tùy chọn để “tối ưu hóa” quá trình này. Nếu bạn bật tối ưu hóa, TikZ sẽ cố gắng giảm khối lượng công việc bằng cách “bỏ qua” một số lệnh phức tạp (tốn kém), dù không thiết yếu (đối với TikZ) — bằng cách định nghĩa lại chúng (ngay khi chạy). Ngoài ra, một số lệnh từ các gói khác có thể gây lỗi trong chế độ ngoại hóa; ví dụ, `\includepdf` từ gói `pdfpages` pdfpages. Để khắc phục điều đó, bạn sẽ cần “tối ưu hóa để loại bỏ” các lệnh như vậy:

```latex
\tikzexternalize[prefix=tikz/,optimize command away=\includepdf]
```

## Quá nhiều đồ họa phức tạp để ngoại hóa!

Nếu đồ họa của bạn phức tạp và/hoặc nhiều, rất có thể bạn sẽ gặp [hết thời gian biên dịch](/latex/vi/co-so-tri-thuc/038-fixing-and-preventing-compile-timeouts.md#compiletimeout) trong lần biên dịch đầu tiên — khi các tệp đã ngoại hóa được tạo ra. Phần này sẽ liệt kê một số cách khắc phục có thể để tránh hết thời gian biên dịch.

### Xây dựng tăng dần

Xây dựng dự án của bạn theo từng bước bằng cách [chú thích đi](https://ctan.org/pkg/comment?lang=en) các phần khác nhau của dự án có thể hữu ích, nhưng hãy nhớ rằng tất cả các tệp được tạo ra đều được thu gom rác theo các khoảng thời gian cố định trên máy chủ. Khi đó dự án của bạn có thể không biên dịch được vào lần đăng nhập tiếp theo, và bạn sẽ phải tạo lại chúng theo từng bước một lần nữa.

### Tạo các bản vẽ cục bộ

* **Lưu ý**: Phần này giả định dự án của bạn sử dụng `\tikzexternalize[prefix=tikz/]` để lưu bộ nhớ đệm cho các đồ họa được tạo ra trong một thư mục có tên `tikz`.

Như một giải pháp thay thế, [tải xuống dự án Overleaf của bạn](/latex/vi/co-so-tri-thuc/036-exporting-your-work-from-overleaf.md) và biên dịch nó trên máy tính cục bộ để ngoại hóa (tạo) các tệp đồ họa. Sau khi biên dịch xong,  `tikz` thư mục nên chứa một số loại tệp cho mỗi đồ họa được tạo, bao gồm `*somegraphic*.pdf`, `*somegraphic*.md5` và `*somegraphic*.dpth`. Nếu bạn tải những tệp đó lên thư mục của dự án Overleaf, `tikz` chúng sẽ được dùng trong quá trình biên dịch — giờ đây sẽ khá nhanh. Vì những tệp đó được tải lên chứ không phải được tạo ra, chúng sẽ không bị máy chủ xóa: các tệp tải lên không bao giờ bị thu gom rác.

* **Lưu ý (tên tệp đồ họa)**: Overleaf đặt `\jobname` sang `kết quả`, điều này ảnh hưởng đến tên được gán cho các đồ họa TikZ đã ngoại hóa (đã tạo): theo mặc định, các tệp đồ họa được tạo ra có tên `output-figureN.EXT` trong đó
  * `N` là một số nguyên được suy ra từ thứ tự/chuỗi mà các đồ họa xuất hiện (`N`=0, 1, 2, ...);
  * `EXT` là một trong các phần mở rộng tệp được TikZ sử dụng, bao gồm `pdf`, `md5` và `dpth` (cũng `log`).
* **Một điều cần lưu ý**: Nếu sau khi tải các tệp đồ họa lên, bạn sau đó thực hiện thay đổi đối với mã TikZ trong dự án của mình, có thể cần xóa các tệp đồ họa tương ứng trong `tikz` thư mục để Overleaf có thể tạo và sử dụng phiên bản mới. Hoặc, bạn có thể tạo lại các tệp trên máy tính cục bộ và tải lại chúng lên Overleaf. Hãy nhớ rằng bạn cần thay thế tất cả các `.pdf`, `.md5` và `.dpth` tệp cho bản vẽ TikZ cụ thể đó.

### Tạo các bản vẽ trong một dự án riêng

Một lựa chọn khác là tạo một dự án riêng chỉ dành cho đồ họa, chỉ chứa các hình TikZ. Khi các hình đó hoàn tất, bạn có thể tải PDF từ dự án riêng đó lên dự án chính của mình như sau:

* nhấp vào biểu tượng Tải tệp lên (![Overleaf file upload icon](/files/ffbb79573c03318d5269b2a8f54d5e4a1d5c6efa)) ở phía trên bảng danh sách tệp;
* chọn **Từ một dự án khác**;
* từ danh sách thả xuống, chọn dự án chứa các bản vẽ TikZ;
* chọn **trong các tệp đầu ra**;
* chọn **output.pdf** và (tùy chọn) đặt tên cho tệp đã tải lên.

Sau khi tải lên, bạn có thể truy cập từng hình bằng cách chọn trang phù hợp của PDF đã tải lên; ví dụ, qua một lệnh như:

```latex
\includegraphics[page=1]{tikzpics.pdf}
```

Tính năng [video ở cuối bài viết này](#videodemo) minh họa việc tải lên một PDF từ một dự án riêng.

#### Cách tạo một dự án đồ họa riêng

Hãy sử dụng `standalone` hoặc `preview` gói để tạo một dự án riêng chứa các bản vẽ TikZ — các PDF đầu ra sẽ chứa các trang được cắt sát, khớp với kích thước của đồ họa.

**Ví dụ: gói standalone**

Sau đây là một đoạn mã mẫu sử dụng `standalone` gói:

```latex
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\node[fill=yellow]{Hello!};
\end{tikzpicture}

\begin{tikzpicture}
\node[fill=pink]{World!};
\end{tikzpicture}
\end{document}
```

[Mở ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+standalone+package+and+TikZ\&snip=%5Cdocumentclass%5Btikz%5D%7Bstandalone%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cnode%5Bfill%3Dyellow%5D%7BHello%21%7D%3B%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cbegin%7Btikzpicture%7D%0A%5Cnode%5Bfill%3Dpink%5D%7BWorld%21%7D%3B%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

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

![Ví dụ về gói LaTeX standalone](/files/53de32253b3e20b85bff2b941ced2996763812c0)

**Ví dụ: gói preview**

Sau đây là một đoạn mã mẫu sử dụng `preview` gói:

```latex
\documentclass{article}
\usepackage[active,tightpage]{preview}
\setlength{\PreviewBorder}{0pt}
\usepackage{tikz}
\PreviewEnvironment[{[]}]{tikzpicture}
\begin{document}
\begin{tikzpicture}
\node[fill=yellow]{Hello!};
\end{tikzpicture}

\begin{tikzpicture}
\node[fill=pink]{World!};
\end{tikzpicture}
\end{document}
```

[Mở ví dụ này trong Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+preview+package+and+TikZ\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bactive%2Ctightpage%5D%7Bpreview%7D%0A%5Csetlength%7B%5CPreviewBorder%7D%7B0pt%7D%0A%5Cusepackage%7Btikz%7D%0A%5CPreviewEnvironment%5B%7B%5B%5D%7D%5D%7Btikzpicture%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btikzpicture%7D%0A%5Cnode%5Bfill%3Dyellow%5D%7BHello%21%7D%3B%0A%5Cend%7Btikzpicture%7D%0A%0A%5Cbegin%7Btikzpicture%7D%0A%5Cnode%5Bfill%3Dpink%5D%7BWorld%21%7D%3B%0A%5Cend%7Btikzpicture%7D%0A%5Cend%7Bdocument%7D)

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

![Ví dụ về gói LaTeX preview](/files/951a7cc9643af555f1b25c159d6d16e62ada53c7)

### Video minh họa: tải tệp lên từ một dự án Overleaf khác

Video sau đây minh họa cách tải lên một tệp PDF (từ một dự án Overleaf khác) chỉ chứa đồ họa — ở đây, chúng tôi sử dụng `standalone` gói để tạo PDF chứa các minh họa dựa trên TikZ.

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/6l4dDatlnqzIymJLofSnQP/61f8ad4b872f5a82f3cd45c487e2f101/TikzSeparateProjects.mp4>" %}


---

# 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/cau-hoi-and-tra-loi/60-i-have-a-lot-of-tikz-matlab2tikz-or-pgfplots-figures-so-i-m-getting-a-compilation-timeout.-can-i.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.
