使用 lualatex 的编译顺序

使用 lualatex 的编译顺序

我正在寻找使用 lualatex 制作自动化表格(我只想进行一些转换并能够轻松修改输入)。

但我不知道 lualatex 如何解析和编译代码。

正确的顺序是:

all lua section and after latex

或者

lua section executed when latex parsed them (so between some latex compilation)

或者是其他东西?

答案1

无论您使用哪种“文档级别”接口,在基元级别使用 Lua 都意味着\directlua正在使用基元。只要您记住这是“Lua-in-TeX”,这里的逻辑就很容易理解。

当 LuaTeX 解析文件时,其工作方式与“传统”TeX 相同。因此,每个标记都会被读取并根据需要扩展、执行或排版。当 LuaTeX 找到一个\directlua原语时,它首先以 TeX 方式抓取参数:

\directlua{<argument goes here>}

然后,它会像往常一样对论点进行扩展\edef。唯一需要注意的是,它\directlua是可扩展的(如果你不明白这是什么意思,它可能不会对你产生影响)。

然后,Lua 接收 TeX 扩展的结果并执行代码。TeX 等待 Lua 运行完成,然后拾取 Lua 进程返回的第一个标记。例如

\directlua{tex.print("Foo")}

将插入FooTeX 输入流。Lua 返回的标记使用当前活动的类别代码进行标记,因此这里我将字母Fo(两次)插入到 TeX 所看到的内容中。

如您所见,这两个过程交织在一起。因此,可以从 TeX 中获取一些信息,对其进行处理并将其返回给 TeX 进行进一步操作。一个简单的例子

\documentclass{article}
\def\luauppercase#1{%
  \directlua{tex.print(string.upper("\luatexluaescapestring{#1}"))}
}
\begin{document}

\luauppercase{foo}

\end{document}

使用 Lua 进行输入的可扩展大写。


注意:还有第二个用于执行 Lua 代码的原语\latelua。除非您担心将东西附加到输出例程,否则这无关紧要!

相关内容