我正在读TUG 采访帕夫尼特·阿罗拉今年的组织者是谁TUG 会议在多伦多举行有一件事引起了我的注意。Arora 先生描述了如何使用 ConTeXt 来开发“规范驱动的文档”,并强调 YAML 是他目前专业工作的主要依据。YAML有些人可能知道它是人类可读的数据序列化语言,但对我个人而言,更重要的是它是用来编写剧本的语言Ansible,一种广泛使用的配置、管理和编排软件。
不幸的是,我不太能理解上面文章中描述的 ConTeXt 和 YAML 之间的联系,所以在这里我请求帮助。有人能帮我描述一下 ConTeXt 和 YAML 之间的关系吗?我有一个模糊的想法,那就是可以用 ConTeXt 编写 Ansible 剧本,然后可以将其“TeX”成 YAML 剧本,也可以将其“TeX”成可打印的文档。这个想法当然不是原创的,人们会认出 Don Knuth 的网络它既可以生成 Pascal 代码,又可以生成可打印的 TeX 文档。
答案1
我用过lyaml
产生一个无用的最小示例(它更像是一个概念证明)。
我在 Debian GNU/Linux 上安装了该软件包lua-yaml
。我必须对文件进行符号链接
/usr/share/lua/5.2/lyaml.lua
/usr/lib/x86_64-linux-gnu/lua/5.2/yaml.so
到工作目录,因为 ConTeXt 只搜索/usr/local/...
我。
\startluacode
local lyaml = require "lyaml"
function parseyaml(buf)
local input = buffers.getcontent(buf)
local struct = lyaml.load(input, { all = true })
for _,section in pairs(struct) do
context.startitemize()
for title,element in pairs(section) do
context.item(title)
context.startitemize()
for _,entry in pairs(element) do
context.item(entry)
end
context.stopitemize()
end
context.stopitemize()
end
end
\stopluacode
\startbuffer[grocery]
---
# A list of tasty fruits
fruits:
- Apple
- Orange
- Strawberry
- Mango
---
fruits: ['Apple', 'Orange', 'Strawberry', 'Mango']
...
\stopbuffer
\starttext
\startpacked
\ctxlua{parseyaml("grocery")}
\stoppacked
\stoptext