0

有没有办法在 pandoc 中使用“pandocfilters”包(https://github.com/jgm/pandocfilters/tree/master/examples)使文本加粗?

作为一个最小的工作示例,假设我有一个降价文件('foo.md'):

foobar.

我想把'filter.py'写成类似

from pandocfilters import toJSONFilter, Str,Emph

def boldify(key, val, fmt, meta):
    if key == 'Str' and "foo" in val:
        # this is the part I can't don't know how to do
        # I would like to make the value be bold
        return [Emph(val)]

if __name__ == '__main__':
    toJSONFilter(boldify)

所以我们运行整个事情就像

pandoc 'foo.md' --filter='filter.py' -o 'foo.docx'

使用它,我收到以下错误:

pandoc: Error in $.blocks[0].c[0].c: expected [a], encountered String
CallStack (from HasCallStack):
error, called at pandoc.hs:144:42 in main:Main

任何帮助,将不胜感激。

4

1 回答 1

0

我找到了答案,我将发布我发现的内容(以及我是如何发现的),希望能帮助别人。

我发现了什么

Strong(或粗体)元素需要一个 Str 元素列表作为其输入才能工作

我们应该更改 filter.py 以返回

[Strong([Str(val)])]

代替

[Strong(val)]

或者

[Strong(Str(val))]    

我是如何找到答案的

如果我们将“foo.md”更改为:

**(foo)** bar

并通过以下方式获取抽象语法树:

pandoc -t json -s foo.md

我们得到

{"blocks":[{"t":"Para","c":[{"t":"Strong","c":[{"t":"Str","c":"(foo)"}]},{"t":"Space"},{"t":"Str","c":"bar"}]}],"pandoc-api-version":[1,17,0,5],"meta":{}}[1]+ 

特别是,位:

{"t":"强","c":[{"t":"Str","c":"(foo)"}]}

告诉我们获得工作 AST 所需的格式。

于 2017-06-18T22:12:54.873 回答