[英]How to use pandoc filter to change a RawBlock to RawInline?
我现在正在使用pandoc将markdown转换为HTML。 我想将某些嵌入式LaTeX环境转换为SVG。 我可以通过使用Pandoc过滤器将RawBlock
转换为Para [Image]
来为RawBlocks做到这一点。 但是我有一个问题:
➜ pandoc -R -t native
A command \foo{bar}. An environment \begin{test} test \end \end{test} appears here.
\begin{rawblock}
test
\end{rawblock}
[Plain [Str "A",Space,Str "command",Space,RawInline (Format "tex") "\\foo{bar}",Str ".",Space,Str "An",Space,Str "environment"]
,RawBlock (Format "latex") "\\begin{test} test \\en \\end{test}"
,Para [Str "appears",Space,Str "here."]
,RawBlock (Format "latex") "\\begin{rawblock}\ntest\n\\end{rawblock}"]
如上所示,内联环境也将被解析为RawBlock
而不是RawInline
,因此内联环境之后的文本将成为新的段落。
所以我的问题是:
将内联LaTeX环境带到RawInline
是否可行,例如Pandoc如何处理内联命令。
如何使用Pandoc过滤器(在python中更好)实现此功能?
抱歉,这个答案并非真的,但我还不能发表评论。
Pandoc有一个预定义的环境列表,它可以识别为内联。 所有其他环境默认为块级。 由于LaTeX在涉及块级环境的语法上比较宽松,因此pandoc确实无法知道给定环境是内联还是块级。
如果您确实想使用LaTeX环境,可以,但是编写上下文相关的python过滤器并不是一件容易的事(使用Haskell稍微容易一些,但我认为这不是一种选择)
但是,有一个更简单的选择:使用span
代替内联LaTeX环境,使用div
代替块级环境。 语法有点笨拙,但是对于任何受支持的语言,编写适用于给定类的跨度的过滤器相对简单。
pandoc -t native <<< "Replace inline environments with spans: <span class='span-class'>like this</span>"
[Para [Str "Replace",Space,Str "inline",Space,Str "environments",Space,Str "with",Space,Str "spans:",Space,Span ("",["span-class"],[]) [Str "like",Space,Str "this"]]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.