使用Pandoc将LaTeX转换为Markdown时,如何保留指定LaTeX命令(如\ref)?
Pandoc将LaTeX转换为Markdown时,如何保留指定LaTeX命令(如\ref)?
嗨,我来帮你搞定这个问题!要在Pandoc转换LaTeX到Markdown时保留\ref{...}这类原始命令(同时让其他命令比如\textbf正常转成Markdown格式),有两种实用方案,你可以根据需求选:
方案一:用Lua过滤器精准拦截(推荐)
这是最灵活的方式,能针对性保留你想要的LaTeX命令,不影响其他内容的正常转换。
- 新建一个Lua脚本,比如命名为
keep-refs.lua,内容如下:
function RawInline(el) -- 匹配\ref{...}格式的命令,你可以扩展正则来包含更多命令(比如\eqref) if el.format == "tex" and string.match(el.text, "^\\ref{.*}$") then return el -- 原样保留这个LaTeX命令 end end
如果需要保留\eqref这类类似命令,只需要修改正则部分:
string.match(el.text, "^\\(ref|eqref){.*}$")
- 转换时调用这个过滤器:
pandoc minimal.tex --lua-filter=keep-refs.lua -o minimal.md
这样处理后,你的示例输入就会输出你想要的结果:
Refer to example \ref{example1}, blabla
方案二:用内置参数保留所有未解析的LaTeX命令
如果你想保留更多Pandoc无法自动解析的LaTeX命令,可以直接用Pandoc的内置参数:
pandoc minimal.tex --from latex+raw_tex -o minimal.md
这个参数会让Pandoc把它识别不了的LaTeX命令原样保留,但要注意,它可能会保留一些你本来希望转换的内容,所以适合需要保留大量原始LaTeX的场景。
为什么默认转换会把\ref转成链接?因为Pandoc会自动解析LaTeX的交叉引用,把它转换成Markdown的链接格式。上面的方法就是要拦截这个解析行为,让指定命令保持原始状态,方便你后续用自定义过滤器处理这些引用。
备注:内容来源于stack exchange,提问作者Ute
相关产品推荐
相关产品推荐

