> 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/overleaf-learn-latex-pt/artigos-aprofundados/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.md).

# Usar LuaTeX para executar ferramentas e utilitários instalados nos servidores do Overleaf

## Os servidores do Overleaf: a correr e a executar software

Os poderosos servidores do Overleaf compilam o seu projeto numa sandbox baseada em [a tecnologia de contentores Linux da Docker](https://www.docker.com/). Cada projeto recebe a sua própria sandbox, o que garante que qualquer código que executamos como parte da compilação do projeto fica isolado de outros projetos — e esta é a primeira de várias camadas de proteção que usamos para compilar projetos em segurança. Para os utilizadores de TeX, isto significa que pode aceder e usar com segurança as ferramentas e utilitários contidos nos nossos servidores — mas como? Neste breve artigo mostramos como usar um script Lua (via LuaTeX) para executar um programa externo e capturar qualquer texto que normalmente seria enviado para uma janela de terminal. Por exemplo, suponha que está interessado em converter alguns ficheiros DVI em SVG usando o `dvisvgm` utilitário, mas já não se lembra das várias opções da linha de comandos? Não seria bom compor rapidamente uma lista delas para refrescar a memória? Se sim, continue a ler — mas, se preferir ver isto em ação, vá até este [exemplo de projeto da galeria](https://www.overleaf.com/latex/examples/using-luatex-to-run-software-installed-on-overleafs-servers/nnvfvnfhzwsy) para ver como é feito.

![Captura de ecrã de um projeto do Overleaf](/files/7d1ada2a6f7e2e1d32afbae4976399fbb063f4db)

### Usar LuaTeX para executar um programa externo através de um script Lua

Como o LuaTeX tem a linguagem de script Lua incorporada no motor TeX, torna-se quase trivial escrever um pequeno script que não só executa um programa externo, mas também capta e guarda num ficheiro qualquer texto que esse programa, de outra forma, enviaria para uma janela de terminal. Depois de esse texto ser guardado num ficheiro, pode usar o `verbatim` pacote para o importar para o seu documento TeX principal. Eis o código completo necessário para fazer isto com o 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}
```

A linha chave no código acima é `local sout=runcommand("dvisvgm --help")` que executa `dvisvgm` com a opção da linha de comandos `--help` para instruir `dvisvgm` a listar todas as suas opções da linha de comandos. O texto de ajuda é capturado e guardado num ficheiro de texto chamado `command.txt`. Depois de o código Lua dentro de `\directlua{...}` ter terminado de ser executado, o conteúdo de `command.txt` é inserido no documento TeX principal usando `\verbatiminput{command.txt}`. É importante que insira qualquer texto capturado como material verbatim porque caracteres como `$, #, \, _, ^` etc. podem estar presentes no texto importado.

Sinta-se à vontade para alterar o código em `runcommand("dvisvgm --help")` e explore a execução de outros programas — como o GhostScript — ou qualquer software do TeX Live que possa ter interesse em usar.


---

# 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/overleaf-learn-latex-pt/artigos-aprofundados/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.
