объявление произвольных переменных для преобразования pandoc с использованием блока метаданных YAML - PullRequest
0 голосов
/ 18 ноября 2018

Я только недавно обнаружил Pandoc, так что я все еще привыкаю ко многим его функциям. Это похоже на невероятно полезный инструмент, и я с нетерпением жду, чтобы найти некоторые приложения для него. Я консультировался с Руководством пользователя, и хотя есть раздел о том, что я хотел бы знать , я не могу получить желаемый результат. Я не уверен, правильно ли я читаю запись.

Проще говоря, у меня есть документ в .markdown, который действует как шаблон. Из этого шаблона я хотел бы создать несколько других документов (вероятно, .odt и .docx). Эти документы будут в основном идентичны, за исключением нескольких частей информации, которые я хотел бы изменить. Я хотел бы знать, можно ли изменить эти фрагменты информации, объявив переменную в метаданных YAML в верхней части документа.

Например, скажем, в моем шаблоне .markdown было следующее:

---
key-one: "value-one"
key-two: "value-two"
key-three: "value-three"
---
# DocumentTitle
## DocumentSubtitle

This line contains the first value, called $key-one$

This line contains the second value, called $key-two$

This line contains the third value, called $key-three$

Есть ли способ, которым я могу заставить pandoc заменить 'заполнители', т.е. key-one, key-two и т. Д., Информацией, которая объявлена ​​в метаданных YAML? Это приведет к:

This line contains the first value, called value-one
This line contains the second value, called value-two
This line contains the third value, called value-three

В руководстве пользователя написано:

Если переменная не задана, pandoc будет искать ключ в метаданных документа, которые можно установить с помощью блоков метаданных YAML или с параметром --metadata.

Из того, что я могу найти в Руководстве пользователя, кажется, что я не могу объявить значения произвольно в метаданных. Я нашел некоторую информацию о шаблонах Pandoc , но я не уверен, как мне пришлось бы редактировать их (или создавать пользовательские), чтобы получить желаемый результат.

Пожалуйста, дайте мне знать, если что-то не ясно, и я постараюсь быть более конкретным. Заранее спасибо.

1 Ответ

0 голосов
/ 19 ноября 2018

Шаблоны Pandoc содержат только верхний / нижний колонтитул и т. Д. Вокруг текста документа, который размещается там, где вы видите $body$ в шаблоне. Поэтому шаблоны не могут использоваться для замены переменных в теле документа.

Для этого вы можете использовать этот фильтр Пандока , сохранить его, чтобы сказать meta-vars.lua:

local vars = {}

function get_vars (meta)
  for k, v in pairs(meta) do
    if v.t == 'MetaInlines' then
      vars["$" .. k .. "$"] = {table.unpack(v)}
    end
  end
end

function replace (el)
  if vars[el.text] then
    return pandoc.Span(vars[el.text])
  else
    return el
  end
end

return {{Meta = get_vars}, {Str = replace}}

И назовите это с pandoc input.md --lua-filter meta-vars.lua

...