首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用yaml元数据块来扩展pandoc语法?

是否可以使用yaml元数据块来扩展pandoc语法?
EN

Stack Overflow用户
提问于 2014-01-05 01:09:07
回答 2查看 2.7K关注 0票数 5

首先,给出一点背景:

我正在写一篇关于pandoc/yaml + Leo编辑的学术文章。有了这个组合,我可以用一种非常有机的方式写作。Leo编辑树是用来以非线性的方式组织写作的,所以我可以看到写作的主要主题和嵌套在它们上,选择在下一次写作会议中应该关注的内容,并将一些部分放在写作上等等。树中的Yaml节点存储书目图形引用,并使用定制的脚本节点将Leo树转换为pandoc的标记,该文件用于创建pdf。

今天我写了这样的文章:

代码语言:javascript
复制
See the image [#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的标记文档中的一个yaml块(前面的“-”没有正确显示),定义了一些属性和语法,用于pandoc中的图像,比如比例尺、别名和支持长标题的更好的方法。在yaml块之外,我使用并发明了速记(“#hs map”)来引用别名数字,类似于“引文参考书目”。

我从lua实例pandoc脚本指南中看到,可以编写修改pandoc输出的自定义编写器,但我不知道如何从yaml块中提取数据,以及使用自己的缩写来表示交叉引用数字(#别名)是否有效。所以我的问题是:

  • 有什么例子可以说明如何在markdown的pandoc中提取yaml块数据,并使用它将数据插入修改后的输出中(最好是LaTeX和HTML)?如果有必要的话,学习lua并不重要,但是如果这个例子是关于python的话,我会更好,只需要专注于写文章。

(我认为这种自定义语法可能是一种改进pandoc共享yaml块和自定义编写器的方法,至少是关于如何做到这一点的一个很好的实验)。

EN

回答 2

Stack Overflow用户

发布于 2014-01-07 20:04:44

我发现做你想做的事是不可能的。

文件上说表示文档中可以有多个YAML块,但它们将合并到一个单独的块中,始终保持每个属性的第一个外观。

让我们考虑一下这个示例文档,我将其称为test.md

代码语言:javascript
复制
---
a: Hola
b: mundo
...

---
a: Lorem
c: ipsum
...

如果我将其转换为Pandoc的本机表示形式,您将注意到a的第二次使用已经丢失,无法区分这两个块:

代码语言:javascript
复制
$ pandoc test.md -t native -s
Pandoc (Meta {unMeta = fromList [
    ("a",MetaInlines [Str "Hola"]),
    ("b",MetaInlines [Str "mundo"]),
    ("c",MetaInlines [Str "ipsum"])
]})

因此,虽然可以有多个YAML块,但它们被认为是单个元数据对象的一部分。

票数 3
EN

Stack Overflow用户

发布于 2015-06-25 09:07:46

是,

  1. 有一种使用pandoc提取yaml数据并使用它生成LaTeX的简单方法:编辑模板。但也有一个重要的限制。
  2. 一个例子是在LaTeX模板中。

要获得完整的LaTeX模板,请使用

代码语言:javascript
复制
pandoc -D latex

相关部分是从元数据中提取作者的代码。

代码语言:javascript
复制
$if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$

它将从yaml元数据的这一部分提取多个作者:

代码语言:javascript
复制
---
author:
    - Mr. Smart
    - Mr. Brilliant
...

您可以将模板扩展到

代码语言:javascript
复制
$if(author)$
  \author{
    $for(author)$
      $author.name$ \\
      $author.email$
      $sep$ \par
    $endfor$
  }
$endif$

并使用这个yaml作为输入

代码语言:javascript
复制
---
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阅读,同时也接受多个同名字段(例如,作者),并允许遍历这些字段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20928830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档