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

# Usare LuaTeX per eseguire strumenti e utilità installati sui server di Overleaf

## I server di Overleaf: esecuzione e avvio del software

I potenti server di Overleaf compilano il tuo progetto in una sandbox basata su [la tecnologia dei contenitori Linux di Docker](https://www.docker.com/). Ogni progetto ottiene la propria sandbox, il che garantisce che qualsiasi codice che eseguiamo come parte della compilazione del progetto sia isolato dagli altri progetti — ed è questo il primo di diversi livelli di protezione che utilizziamo per compilare i progetti in modo sicuro. Per gli utenti TeX, questo significa che puoi accedere e usare in sicurezza gli strumenti e le utility presenti sui nostri server — ma come? In questo breve post mostriamo come usare uno script Lua (tramite LuaTeX) per eseguire un programma esterno e catturare qualsiasi testo che normalmente verrebbe inviato a una finestra di terminale. Per esempio, supponiamo che tu sia interessato a convertire alcuni file DVI in SVG usando il `dvisvgm` utility, ma non riesci a ricordare le varie opzioni da riga di comando? Non sarebbe bello impaginare rapidamente un elenco di esse per rinfrescarti la memoria? Se sì, continua a leggere — ma se preferisci vedere tutto in azione, vai a questo [esempio di progetto galleria](https://www.overleaf.com/latex/examples/using-luatex-to-run-software-installed-on-overleafs-servers/nnvfvnfhzwsy) per vedere come si fa.

![Screenshot di un progetto Overleaf](/files/205e5442befe88142f811db9dce3c1b80c09fe8a)

### Usare LuaTeX per eseguire un programma esterno tramite uno script Lua

Poiché LuaTeX ha il linguaggio di scripting Lua integrato nel motore TeX, diventa quasi banale scrivere un breve script che non solo esegue un programma esterno ma cattura anche, e salva in un file, qualsiasi testo che quel programma altrimenti produrrebbe in una finestra di terminale. Una volta salvato il testo in un file puoi usare il `verbatim` pacchetto per importarlo nel tuo documento TeX principale. Ecco l'intero codice necessario per farlo con 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}
```

La riga chiave nel codice sopra è `local sout=runcommand("dvisvgm --help")` che esegue `dvisvgm` con l'opzione da riga di comando `--help` per istruirlo a `dvisvgm` elencare tutte le opzioni da riga di comando. Il testo della guida viene catturato e salvato in un file di testo chiamato `command.txt`. Dopo che il codice Lua all'interno di `\directlua{...}` ha terminato l'esecuzione, il contenuto di `command.txt` viene inserito nel documento TeX principale usando `\verbatiminput{command.txt}`. È importante inserire qualsiasi testo catturato come materiale verbatim perché caratteri come `$, #, \\, _, ^` ecc. potrebbero essere presenti nel testo importato.

Sentiti libero di modificare il codice in `runcommand("dvisvgm --help")` ed esplorare l'esecuzione di altri programmi — come GhostScript — o qualsiasi software TeX Live che ti interessi usare.


---

# 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/it/articoli-approfonditi/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.
