Gostaria de escrever um documento LaTeX com exemplos de código em um ambiente literal. Também gostaria de exportar esses exemplos de código para arquivos nomeados para que possam ser criados e executados. Isso me permite executar testes facilmente em meus exemplos de código para garantir que meu documento não contenha código com erros. Então, eu gostaria de escrever LaTeX assim
\begin{code}[test1.hs]
main = do
print "Hello, world!"
\end{code}
e fazer com que esse exemplo de código apareça literalmente em meu documento e, como efeito colateral, no arquivo test1.hs
.
Infelizmente, minhas tentativas de escrever LaTeX tanto para exibir o código literalmente quanto para o código de saída para um arquivo acabaram me amarrando em nós. Existe uma maneira fácil de fazer isso?
Responder1
Uma possível solução com tcolorbox
.
Claro, você pode personalizar a caixa como quiser, também sem moldura.
\documentclass{book}
\usepackage{tcolorbox}
\tcbuselibrary{breakable,listings}
\newtcbinputlisting{\mylisting}[2][]{%
listing file={#2},
title=Listing of \texttt{#2},
colframe=red,fonttitle=\bfseries,
listing only,breakable, #1}
\begin{document}
This creates a file \texttt{test1.hs}:
\begin{tcbverbatimwrite}{test1.hs}
main = do
print "Hello, world!"
\end{tcbverbatimwrite}
And this use it:
\mylisting{test1.hs}
\end{document}