
Supongamos que tengo un archivo sourced.tex
que define un nuevo comando \MyCommand
:
\newcommand{\MyCommand}{Hello World}
Si creo un archivo main.tex
y lo obtengo con \input
, puedo usar el comando y mi documento se compila bien:
\documentclass{article}
\begin{document}
\input{sourced.tex}
\MyCommand
\end{document}
Sin embargo, si creo un archivo main_lua.tex
y lo obtengo usando un lua
intérprete, el archivo no se compila y aparece un error que indica que la secuencia de control no está definida:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
tex.print("\\input{sourced.tex}")
\end{luacode*}
\MyCommand
\end{document}
¿El código LaTeX generado en el lua
terminal no transfiere sus definiciones al documento principal? ¿Hay alguna manera de evitar esto?
Respuesta1
Su código es equivalente a
\documentclass{article}
\begin{document}
\begin{empty} \newcommand{\MyCommand}{Hello World}\end{empty}
\MyCommand
\end{document}
que puedes probar en tex clásico sin Lua en absoluto. Todas las definiciones locales como \newcommand
se pierden en el\end
Esta es una de las muchas razones por las que lo encuentro más fácil de usar \directlua
que los envoltorios proporcionados porluacode
\documentclass{article}
\begin{document}
\directlua{tex.print("\string\\input{sourced}")}
\MyCommand
\end{document}