> 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/ru/podrobnye-stati/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/844e81d7cdf6f3ce26841b7480e0bbf2bce137d8)

### Использование LuaTeX для запуска внешней программы через сценарий Lua

Поскольку в движок TeX встроен язык сценариев LuaTeX, становится почти тривиально написать короткий сценарий, который не только запускает внешнюю программу, но и перехватывает и сохраняет в файл любой текст, который эта программа иначе вывела бы в окно терминала. После того как этот текст сохранён в файл, вы можете использовать пакет `verbatim` 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/ru/podrobnye-stati/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.
