我正在寻找使用 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")}
将插入Foo
TeX 输入流。Lua 返回的标记使用当前活动的类别代码进行标记,因此这里我将字母F
和o
(两次)插入到 TeX 所看到的内容中。
如您所见,这两个过程交织在一起。因此,可以从 TeX 中获取一些信息,对其进行处理并将其返回给 TeX 进行进一步操作。一个简单的例子
\documentclass{article}
\def\luauppercase#1{%
\directlua{tex.print(string.upper("\luatexluaescapestring{#1}"))}
}
\begin{document}
\luauppercase{foo}
\end{document}
使用 Lua 进行输入的可扩展大写。
注意:还有第二个用于执行 Lua 代码的原语\latelua
。除非您担心将东西附加到输出例程,否则这无关紧要!