通过pandoc lua过滤器添加元数据字段

时间:2018-03-10 19:49:15

标签: filter lua yaml pandoc

我正在处理降价文件,例如

---
title: "dummy title"
highlight: "c"
highlighted: 'highlighted'
---     
body text

进入高度定制的乳胶模板,其中“c”被突出显示为更大的tex宏的一部分。最后一步是拒绝我:这里不必指定虚拟元数据“突出显示”,但我找不到在下面的lua过滤器中生成它的方法:

text = require 'text'
newstring = '\\textit{a,b,c,d}'

function meta_vars (m)
       -- m.highlighted = 'highlighted' -- not working
        highlight = m.highlight
  return m
end

function replace (elem)
      if elem.text == 'highlighted' then
        newstring = newstring:gsub(pandoc.utils.stringify(highlight),
                       '{\\bfseries '..pandoc.utils.stringify(highlight)..'}')
        return pandoc.RawInline("latex", newstring)
        else
        return elem
      end
    end

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

使用以下自定义模板

\documentclass[12pt]{article}

\begin{document}

\title{$title$ -- $highlighted$}
\maketitle
$body$
\end{document}

运行此示例的命令是

pandoc +RTS -K512m -RTS test.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output test.tex --template _tpl.tex --lua-filter=filter.lua 
正如所宣传的那样

生产

enter image description here

如何摆脱YAML标头中的虚拟highlighted标记?

1 个答案:

答案 0 :(得分:0)

在这里,我真的不太了解您在使用乳胶宏在做什么,但是问题的症结似乎在于添加新的元数据元素。您用--not working注释掉的那行对我来说似乎很好。您可能要使用

显式设置类型。
m.highlighted=pandoc.MetaString('highlighted')

但我认为这不会改变任何事情。

我还注意到,每当文本中出现单词highlighted时,newstring变量都会被修改。使用两行highlighted,新字符串将等于\textit{a,b,{\bfseries {\bfseries c}},d}

也许您可以在删除了乳胶宏内容的情况下重新陈述您的问题,而只关注您希望过滤器执行的操作。