可以使用YAML元数据块来扩展Pandoc语法吗?
首先提供一些背景:
我正在撰写一篇有关 pandoc/yaml + Leo Editor 的学术文章。使用这种组合,我可以以一种非常有机的方式写作。Leo Editor 树被用于以非线性的方式组织写作,因此我可以看到写作的主要主题和随后的重点选择,把一些写作内容暂停等等。Leo 树中的 yaml 节点用于存储参考文献,并使用自定义脚本节点将该 Leo 树转换为 pandoc 的 markdown 文件,该文件用于创建 pdf。
今天我写了这样一段话:
看见图像 [#hs-world-map]
---
type: image
file: ../Imagenes/hackerspaces-mapa-2014-ene.png
scale: 50
alias: hs-world-map
caption: |
Mapa mundial de los hackerspaces a enero 4 de 2014 registrados en
http://hackerspaces.org. Las concentraciones de hackerspaces están denotadas
por dos indicadores: el número y el color. Los colores rojos y números
grandes indican mayor concentración de hackerspaces, seguidos por los
naranja y números medianos y terminando en los azules, con números pequeños.
Se puede ver cómo este es un fenómeno global con mayor preminencia
anglo-europea (la costa este de Estados Unidos tiene 110 hackerspaces y
Europa 175) y menor notoriedad en Sur América, India, China y Africa.
Algunos de los contrastes respecto a la cultura hackers y como se
contextualiza en el Norte Global y en el Sur Global que se han mencionado en
este escrito, se hacen evidentes en este mapa。
…
这是 pandoc 的 markdown 文档中的一个 yaml 块(前缀 "---" 未被正确显示),定义了一些我想在 pandoc 中作为图片拥有的属性和语法,比如缩放、别名等等以及更好地支持长标题。在 yaml 块外部,我用了一些关于别名图片的参考,使用了一种类似于 [@cite] 用于参考文献的创造性简写符号 ("[#hs-world-map]")。
我从 lua example 和 pandoc scripting guide 中看到了可编写自定义 writer 的示例,以修改 pandoc 的输出,但我不知道如何从 yaml 块中提取数据,以及是否使用我的自定义简写符号进行交叉引用图像 ([#alias]) 的工作。所以我的问题是:
- 有没有任何示例说明如何提取 markdown 的 pandoc 中的 yaml 块数据,并将它用于插入修改后的输出中的数据(最好是 LaTeX 和 HTML)?如果必要,我不介意学习 lua,但最好的情况是有 python 的例子,这样能够更专注于写作论文。
(我认为这种自定义语法可能是一种发展 pandoc 共享 yaml 块和自定义写入者的方式,至少是一个关于如何完成的好实验。)
好的,
使用 pandoc 提取 yaml 数据并用它生成 LaTeX 是一种简单的方法:编辑模板。但是有一个重要的限制。
LaTeX 模板中有一个例子。
要获取完整的 LaTeX 模板,请使用
pandoc -D latex
相关的部分是从元数据中提取作者的代码。
$if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$
它将从以下 yaml 元数据部分提取多个作者:
---
author:
- Mr. Smart
- Mr. Brilliant
...
您可以扩展模板
$if(author)$
\author{
$for(author)$
$author.name$ \\
$author.email$
$sep$ \par
$endfor$
}
$endif$
并使用此 yaml 作为输入
---
author:
- name: Mr. Smart
email: smart@author.com
- name: Mr. Brilliant
email: brilliant@author.com
...
因此存在一个重要的限制:所有同类的 yaml 块都应该相继而行,没有(yaml)间断。每个块应以“-”开始。
我以这种方式“滥用” yaml 元数据,以非常简洁的 yaml 语法编写评估文档的完整内容,这样易于编写,将来可以简化自动处理。我使用 pandoc 作为一个容易使用的 yaml 到 LaTex(pdf)转换器。
值得提出一个功能请求,以改善 pandoc 的 yaml 读取,也接受相同名称字段(如作者)的多个字段,并允许循环遍历它们。
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我所发现的是,不能像你想的那样做。
文档中提到,文档中可以有多个 YAML 块,但它们会合并成一个单独的块,始终保留每个属性的第一个出现位置。
让我们考虑这个示例文档,我称之为
test.md:--- a: Hola b: mundo ... --- a: Lorem c: ipsum ...如果我将其转换为 Pandoc 的本地表示形式,你会注意到第二次使用
a被丢失了,并且没有办法将两个块区分开来:$ pandoc test.md -t native -s Pandoc (Meta {unMeta = fromList [ ("a",MetaInlines [Str "Hola"]), ("b",MetaInlines [Str "mundo"]), ("c",MetaInlines [Str "ipsum"]) ]})所以,虽然可以有多个 YAML 块,但它们被认为是单个元数据对象的一部分。