在 LuaTeX 中使用 for 循环来包含多个子章节

在 LuaTeX 中使用 for 循环来包含多个子章节

我有许多名为 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
}}

相关内容