> 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/bai-viet-chuyen-sau/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.md).

# Dùng LuaTeX để chạy các công cụ và tiện ích được cài đặt trên máy chủ của Overleaf

## Máy chủ của Overleaf: chạy và thực thi phần mềm

Các máy chủ mạnh mẽ của Overleaf biên dịch dự án của bạn trong một sandbox dựa trên [công nghệ container Linux của Docker](https://www.docker.com/). Mỗi dự án có một sandbox riêng, đảm bảo rằng bất kỳ mã nào chúng tôi thực thi khi biên dịch dự án đều được tách biệt khỏi các dự án khác — và đây là lớp bảo vệ đầu tiên trong nhiều lớp mà chúng tôi dùng để biên dịch dự án an toàn. Đối với người dùng TeX, điều này có nghĩa là bạn có thể an toàn truy cập và sử dụng các công cụ và tiện ích có trên máy chủ của chúng tôi — nhưng bằng cách nào? Trong bài viết ngắn này, chúng tôi sẽ chỉ ra cách dùng một script Lua (thông qua LuaTeX) để thực thi một chương trình bên ngoài và thu lại bất kỳ văn bản nào thường được xuất ra cửa sổ terminal. Ví dụ, giả sử bạn muốn chuyển một số tệp DVI sang SVG bằng `dvisvgm` tiện ích nhưng bạn không nhớ các tùy chọn dòng lệnh khác nhau? Sẽ thật tuyệt nếu có thể nhanh chóng dàn trang một danh sách chúng để gợi lại trí nhớ phải không? Nếu vậy, hãy đọc tiếp — nhưng nếu bạn muốn xem điều này hoạt động, hãy chuyển sang [ví dụ dự án thư viện ảnh](https://www.overleaf.com/latex/examples/using-luatex-to-run-software-installed-on-overleafs-servers/nnvfvnfhzwsy) để xem cách thực hiện.

![Ảnh chụp màn hình một dự án Overleaf](/files/fa5de53b12acf37f43ac50a195f16f13b3a02a84)

### Sử dụng LuaTeX để chạy một chương trình bên ngoài thông qua một script Lua

Vì LuaTeX tích hợp ngôn ngữ kịch bản Lua vào trong bộ máy TeX, nên việc viết một script ngắn không chỉ thực thi một chương trình bên ngoài mà còn thu, rồi lưu vào tệp, bất kỳ văn bản nào mà chương trình đó lẽ ra sẽ xuất ra cửa sổ terminal trở nên gần như rất đơn giản. Khi văn bản đó đã được lưu vào một tệp, bạn có thể dùng `verbatim` gói đó để nhập nó vào tài liệu TeX chính của bạn. Dưới đây là toàn bộ mã cần để làm điều này với LuaTeX:

```latex

\documentclass{article}
\usepackage{verbatim}
\begin{document}
\directlua{
function runcommand(cmd)
local fout = assert(io.popen(cmd, 'r'))
local str = assert(fout:read('*a'))
fout:close()
return str
end

local sout=runcommand("dvisvgm --help")
local marg = assert(io.open("command.txt","w"))
marg:write(sout)
marg:flush()
marg:close()
}
\verbatiminput{command.txt}
\end{document}
```

Dòng then chốt trong đoạn mã trên là `local sout=runcommand("dvisvgm --help")` đoạn này thực thi `dvisvgm` với tùy chọn dòng lệnh `--help` để yêu cầu `dvisvgm` liệt kê tất cả các tùy chọn dòng lệnh của nó. Phần trợ giúp được thu lại và lưu vào một tệp văn bản có tên `command.txt`. Sau khi đoạn mã Lua bên trong `\directlua{...}` đã thực thi xong, nội dung của `command.txt` được chèn vào tài liệu TeX chính bằng `\verbatiminput{command.txt}`. Điều quan trọng là bạn phải chèn mọi văn bản đã thu được dưới dạng nguyên văn vì các ký tự như `$, #, \, _, ^` v.v. có thể xuất hiện trong văn bản được nhập vào.

Bạn cứ thoải mái chỉnh sửa đoạn mã trong `runcommand("dvisvgm --help")` và khám phá việc thực thi các chương trình khác — chẳng hạn GhostScript — hoặc bất kỳ phần mềm TeX Live nào mà bạn muốn sử dụng.


---

# 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/bai-viet-chuyen-sau/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.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.
