comandos definidos em arquivo externo e importados por lua não são reconhecidos

comandos definidos em arquivo externo e importados por lua não são reconhecidos

Suponha que eu tenha um arquivo sourced.texque defina um novo comando \MyCommand:

\newcommand{\MyCommand}{Hello World}

Se eu criar um arquivo main.texe 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.texe obtê-lo usando um luainterpretador, 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 luaterminal 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 \newcommandse perdem no\end

este é um dos muitos motivos pelos quais acho mais fácil de usar \directluado que os wrappers fornecidos porluacode

\documentclass{article}

\begin{document}

\directlua{tex.print("\string\\input{sourced}")}

\MyCommand
\end{document}

informação relacionada