
Angenommen, ich habe eine Datei sourced.tex
, die einen neuen Befehl definiert \MyCommand
:
\newcommand{\MyCommand}{Hello World}
Wenn ich eine Datei erstelle main.tex
und diese mit als Quelle verwende \input
, kann ich den Befehl verwenden und mein Dokument wird problemlos kompiliert:
\documentclass{article}
\begin{document}
\input{sourced.tex}
\MyCommand
\end{document}
Wenn ich jedoch eine Datei erstelle main_lua.tex
und diese mithilfe eines Interpreters als Quelle verwende lua
, wird die Datei nicht kompiliert und ich erhalte eine Fehlermeldung, die besagt, dass die Steuersequenz nicht definiert ist:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
tex.print("\\input{sourced.tex}")
\end{luacode*}
\MyCommand
\end{document}
Überträgt im lua
Terminal generierter LaTeX-Code seine Definitionen nicht in das Hauptdokument? Gibt es eine Möglichkeit, dies zu umgehen?
Antwort1
Ihr Code entspricht
\documentclass{article}
\begin{document}
\begin{empty} \newcommand{\MyCommand}{Hello World}\end{empty}
\MyCommand
\end{document}
die Sie in klassischem Tex ohne Lua ausprobieren können. Alle lokalen Definitionen wie \newcommand
gehen verloren bei der\end
Dies ist einer der vielen Gründe, warum ich es einfacher zu verwenden finde \directlua
als die Wrapper vonluacode
\documentclass{article}
\begin{document}
\directlua{tex.print("\string\\input{sourced}")}
\MyCommand
\end{document}