![无法识别外部文件中定义并由 lua 导入的命令](https://linux22.com/image/448650/%E6%97%A0%E6%B3%95%E8%AF%86%E5%88%AB%E5%A4%96%E9%83%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E5%AE%9A%E4%B9%89%E5%B9%B6%E7%94%B1%20lua%20%E5%AF%BC%E5%85%A5%E7%9A%84%E5%91%BD%E4%BB%A4.png)
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}
您可以在经典 tex 中尝试,而无需 Lua。所有本地定义(例如)\newcommand
在\end
\directlua
这是我发现它比包装器更容易使用的众多原因之一luacode
\documentclass{article}
\begin{document}
\directlua{tex.print("\string\\input{sourced}")}
\MyCommand
\end{document}