通过LuaTeX解析文件

通过LuaTeX解析文件

这个问题分为两部分:

  1. 假设文件仅包含由空格、逗号或分号分隔的数据,通常如何使用 LuaTeX 解析文件。

  2. 您将如何解析文件(如果它包含(所有)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
 }

答案2

一种可能性是使用液化石油气. ConTeXt 使用 LPEG(带有一些增强功能) 到

这些文件本身没有文档记录。要了解用法,您需要阅读*.mkiv调用 lua 函数的相应文件。

相关内容