
Suponha que eu tenha um arquivo sourced.tex
que defina um novo comando \MyCommand
:
\newcommand{\MyCommand}{Hello World}
Se eu criar um arquivo main.tex
e fornecê-lo com \input
, poderei usar o comando e meu documento será compilado corretamente:
\documentclass{article}
\begin{document}
\input{sourced.tex}
\MyCommand
\end{document}
No entanto, se eu criar um arquivo main_lua.tex
e obtê-lo usando um lua
interpretador, o arquivo não será compilado e recebo um erro informando que a sequência de controle é indefinida:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
tex.print("\\input{sourced.tex}")
\end{luacode*}
\MyCommand
\end{document}
O código LaTeX gerado no lua
terminal não transfere suas definições para o documento principal? Existe alguma maneira de contornar isso?
Responder1
Seu código é equivalente a
\documentclass{article}
\begin{document}
\begin{empty} \newcommand{\MyCommand}{Hello World}\end{empty}
\MyCommand
\end{document}
que você pode experimentar no tex clássico sem Lua. Todas as definições locais, como as que \newcommand
se perdem no\end
este é um dos muitos motivos pelos quais acho mais fácil de usar \directlua
do que os wrappers fornecidos porluacode
\documentclass{article}
\begin{document}
\directlua{tex.print("\string\\input{sourced}")}
\MyCommand
\end{document}