
Предположим, у меня есть файл sourced.tex
, определяющий новую команду \MyCommand
:
\newcommand{\MyCommand}{Hello World}
Если я создам файл main.tex
и укажу в качестве источника этот файл \input
, я смогу использовать команду, и мой документ будет нормально скомпилирован:
\documentclass{article}
\begin{document}
\input{sourced.tex}
\MyCommand
\end{document}
Однако если я создам файл main_lua.tex
и воспользуюсь интерпретатором lua
, файл не скомпилируется, и я получу сообщение об ошибке, сообщающее о том, что управляющая последовательность не определена:
\documentclass{article}
\usepackage{luacode}
\begin{document}
\begin{luacode*}
tex.print("\\input{sourced.tex}")
\end{luacode*}
\MyCommand
\end{document}
Код LaTeX, сгенерированный в lua
терминале, не переносит свои определения в основной документ? Есть ли способ обойти это?
решение1
Ваш код эквивалентен
\documentclass{article}
\begin{document}
\begin{empty} \newcommand{\MyCommand}{Hello World}\end{empty}
\MyCommand
\end{document}
который вы можете попробовать в классическом тексе без Lua вообще. Все локальные определения, такие как \newcommand
теряются на\end
Это одна из многих причин, по которым мне проще использовать его, \directlua
чем оболочки, предоставляемыеluacode
\documentclass{article}
\begin{document}
\directlua{tex.print("\string\\input{sourced}")}
\MyCommand
\end{document}