> 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/uk/dokladni-statti/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.md).

# Використання LuaTeX для запуску інструментів і утиліт, установлених на серверах Overleaf

## Сервери Overleaf: запуск і виконання програмного забезпечення

Потужні сервери Overleaf компілюють ваш проєкт у пісочниці, що базується на [технології Linux-контейнерів Docker](https://www.docker.com/). Кожен проєкт отримує власну пісочницю, що гарантує, що будь-який код, який ми виконуємо під час компіляції проєкту, ізольований від інших проєктів — і це перший із кількох рівнів захисту, які ми використовуємо для безпечної компіляції проєктів. Для користувачів TeX це означає, що ви можете безпечно отримувати доступ до інструментів і утиліт, що містяться на наших серверах, — але як? У цьому короткому дописі ми показуємо, як за допомогою Lua-скрипта (через LuaTeX) виконати зовнішню програму та зібрати будь-який текст, який зазвичай виводився б у вікно термінала. Наприклад, припустімо, що ви хочете перетворити деякі файли DVI на SVG за допомогою `dvisvgm` утиліти, але не можете пригадати різні параметри командного рядка? Хіба не було б зручно швидко набрати їхній список, щоб освіжити пам’ять? Якщо так, читайте далі — але якщо ви хочете побачити це в дії, перейдіть до цього [прикладу проєкту галереї](https://www.overleaf.com/latex/examples/using-luatex-to-run-software-installed-on-overleafs-servers/nnvfvnfhzwsy) щоб побачити, як це зроблено.

![Знімок екрана проєкту Overleaf](/files/abfdad658a97c506020dc5f5fe422023cc20d9d5)

### Використання LuaTeX для запуску зовнішньої програми через Lua-скрипт

Оскільки в рушій TeX вбудовано мову сценаріїв Lua, стає майже тривіальним написати короткий скрипт, який не лише виконує зовнішню програму, а й перехоплює та зберігає у файл будь-який текст, який ця програма інакше виводила б у вікно термінала. Після того як цей текст буде збережено у файлі, ви можете використати пакет `verbatim` щоб імпортувати його у ваш основний документ TeX. Ось увесь код, потрібний для цього в 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}
```

Ключовий рядок у наведеному вище коді — `local sout=runcommand("dvisvgm --help")` який виконує `dvisvgm` з параметром командного рядка `--help` щоб наказати `dvisvgm` перелічити всі його параметри командного рядка. Текст довідки перехоплюється і зберігається в текстовий файл під назвою `command.txt`. Після того як код Lua всередині `\directlua{...}` завершить виконання, вміст `command.txt` вставляється в основний документ TeX за допомогою `\verbatiminput{command.txt}`. Важливо вставляти будь-який перехоплений текст як дослівний матеріал, оскільки символи на кшталт `$, #, \, _, ^` тощо можуть бути присутні у імпортованому тексті.

Не соромтеся змінити код у `runcommand("dvisvgm --help")` і поекспериментуйте з виконанням інших програм — таких як GhostScript — або будь-якого програмного забезпечення TeX Live, яке ви хотіли б використовувати.


---

# 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/uk/dokladni-statti/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.
