我有许多名为 1.tex、...、85.tex 的文件,我想将它们包含到我的文档中,如下所示:
\include{chapters/text/1}
[...]
\include{chapters/text/85}
当我使用 LuaLaTeX 时,我认为我可以使用类似这样的方法以保持主文档整洁:
\directlua{
for i=1,85,1 do
tex.sprint("\\include{chapters/text/", i, "} ")
end
}
但是,这给了我一个错误:
> TeX capacity exceeded, sorry [input stack size=5000].
>
> \reserved@a ^^@-\def \reserved@a
> *{\@vspacer }\reserved@a l.102 tex.sprint("\\
> include{chapters/text/", i, "}")
我已经找到了本介绍在 TeX 中使用 Lua 进行编程,感觉这个错误与花括号有关——但我不知道应该如何更改代码才能使其工作……
编辑:一个最小的例子,改编自大卫卡莱尔的回答:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{filecontents}
\begin{filecontents*}{text/1.tex}
Das ist ein Test.
\end{filecontents*}
\begin{filecontents*}{text/2.tex}
Noch ein Test.
\end{filecontents*}
\begin{document}
\directlua{
for i=1,2,1 do
tex.sprint("\string\\include{text/", i, "} ")
end
}
\end{document}
错误:
> Argument of \language@active@arg" has an extra }. <inserted text>
> \par l.13 tex.sprint("\string\\include{text/", i, "}
> ")
删除后错误消失babel
。对我来说,问题似乎是该ngerman
选项使"
一个角色处于活动状态...
答案1
您正在扩展\\
其换行符的含义前调用lua。
使用
tex.sprint("\string\\include{
在您添加的 babel 示例中也存在同样的问题,您"
使用 babel 简写进行扩展过早了。
您可以通过以下方式禁用参数的所有 Tex 扩展:
\directlua{\detokenize{
for i=1,2,1 do
tex.sprint("\\include{text/", i, "} ")
end
}}