Можно ли использовать блоки метаданных yaml для расширения синтаксиса pandoc?

Сначала немного контекста:

Я пишу академическую статью о pandoc / yaml + Leo Editor . С этой комбинацией я могу писать по-настоящему органично. Дерево редактора Leo используется для организации записи нелинейным способом, поэтому я могу видеть основные темы написания, вложенные в них глубоко, выбрать, на что сосредоточиться в следующем сеансе написания, и поместить некоторые части записи на холдинг и так далее. Узлы Ямл в дереве хранят библиграфические ссылки, а собственный узел сценария используется для преобразования этого дерева Лео в уценку pandoc и этот файл используется для создания pdf.

Сегодня я написал что-то вроде этого:

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. ... 

Это блок yaml внутри документа markdown pandoc (ведущий «—» не отображается должным образом), определяя некоторые свойства и синтаксис, которые я хотел бы иметь для изображений в pandoc, таких как масштаб, псевдоним и лучший способ поддержки длинных подписей , Внешне к блоку ямля я поставил некоторую ссылку на фигуру псевдонима, используя и придумал сокращенную («[# hs-world-map]»), аналогичную той, что [@cite] для библиографических ссылок.

Я видел из примера lua и руководства по написанию pandoc, который позволяет писать пользовательские сценарии, которые изменяют вывод pandoc, но я не знаю, как извлекать данные из блоков yaml и, если использовать мою собственную сокращенную форму для перекрестных ссылок ([ #alias]) будет работать. Поэтому мой вопрос:

  • Существует какой-либо пример того, как извлекать данные yaml-блоков в pandoc markdown и использовать его для вставки этих данных в модифицированный вывод (желательно LaTeX и HTML)? Я бы не хотел изучать lua, если это необходимо, но было бы лучше, если бы этот пример был на python, просто чтобы сосредоточиться на написании статьи.

(Я думаю, что этот пользовательский синтаксис мог бы стать способом разделить блоки yaml на основе pandoc и пользовательские авторы, по крайней мере, это хороший эксперимент о том, как это можно сделать).

Я обнаружил, что невозможно сделать что-то подобное.

В документации говорится, что в документе может быть более одного блока 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, они считаются частями одного объекта метаданных.

Да,

  1. существует простой способ извлечения yaml-данных с помощью pandoc и использования его для создания LaTeX: отредактируйте шаблон. Однако есть важное ограничение.

  2. пример находится в шаблоне 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$ 

И использовать этот ямль как входной

 --- author: - name: Mr. Smart email: smart@author.com - name: Mr. Brilliant email: brilliant@author.com ... 

Таким образом, существует важное ограничение : все блоки yaml такого же типа должны следовать без (yaml) прерывания. Каждый блок должен начинаться с «-».

Я 'злоупотребляю' метаданными yaml таким образом, чтобы написать полный контент оценочных документов в очень минималистичном синтаксисе yaml, который легко писать сейчас, и упростит автоматическую обработку в будущем. Я использую pandoc как простой в использовании ямль для конвертера LaTex (pdf) .

Возможно, стоит добавить запрос функции для улучшения чтения ямлов pandoc, чтобы также принять несколько полей с тем же именем (например, автор) и разрешить их прокрутку.