这个问题分为两部分:
假设文件仅包含由空格、逗号或分号分隔的数据,通常如何使用 LuaTeX 解析文件。
您将如何解析文件(如果它包含(所有)TeX 代码以及文本代码),例如
ini
其中一些字段以 TeX 编写的文件。
这个问题旨在找到一个在帖子中也有详细记录的解决方案。由于 LuaTeX 仍处于大力开发阶段,我发现文档很少,这是我打算发布的一系列问题中的第一个(有赏金),以便答案可以在网络上(以及我们最喜欢的网站上)提供某种形式的文档!
编辑:
第一部分是一个简单的 CSV 文件。如果您愿意,可以使用我的答案中的示例
向书籍类添加传记列表由于答案包括使用 TeX 进行字母排序,因此它可能是一个很好的例子,其中 LuaTeX 应该比普通(所有)TeX 具有优势。
Ini 文件通常用作配置文件,尽管我曾将它们用于各种数据捕获。如果您愿意,也可以使用Yaml 格式。
[general]
languages=en,ngerman
;This is a comment
[article]
pagewidth=15cm
pageheight=20cm
paper=a4
[book]
includeparts=true
;defines chapter
[chapter]
;packages
[graphicx]
keys="keya,keyb,keyc"
对于 TeX 代码,向ini
文件添加一个命令。
texcode="\def\test#1#2{}"
答案1
根据我上面针对实际案例写的两条评论,我认为一般的做法是这样的:
如果您要解析的文件格式或多或少是标准化的,通常已经有一些现成的 lua 代码可以读取它并从文件内容中生成 lua 表。否则,通常最好的解决方案是使用 LPEG 来执行相同操作(请参阅 Aditya 回复中的链接)。
完成后,您必须弄清楚如何将文件名提供给执行实际解析的现有(或新的 lua)代码,以及返回值的结构。
解析的结果很有可能是一个 Lua 表,你只需要获取
tex.sprint()
你想要的位。
例如,模块\directlua
的输入inilazy
可能如下所示:
\directlua { require ("inilazy")
local tt = assert (inilazy.get"try.ini")
for k,v in pairs(tt['graphicx']['keys']) do
tex.print(k)
end
}