如何让Pandoc将LaTeX的\begin{answer}转换为Markdown或HTML?
问题解决方案
- 完全可行,必须使用Lua过滤器实现自定义转换逻辑,因为Pandoc默认不处理
answer这类非标准LaTeX环境。
1. 编写Lua过滤器
创建名为answer-filter.lua的文件,代码如下:
function RawBlock(el) -- 匹配LaTeX的answer环境起始标签 if el.text:match('\\begin{answer}') then -- 提取环境内的文本内容 local content = el.text:gsub('\\begin{answer}\n?(.-)\n?\\end{answer}', '%1') -- 返回内嵌HTML的Markdown块 return pandoc.RawBlock('markdown', '<span style="color:red">\n' .. content .. '\n</span>') end end
如果需要兼容不支持内嵌HTML的场景,也可以换成纯文本标识的实现(二选一即可):
function RawBlock(el) if el.text:match('\\begin{answer}') then local content = el.text:gsub('\\begin{answer}\n?(.-)\n?\\end{answer}', '%1') -- 生成带加粗标识的纯文本内容 return pandoc.Plain({pandoc.Strong('ANSWER: '), pandoc.Str(content)}) end end
2. 执行转换命令
在终端运行以下Pandoc命令,指定使用上述Lua过滤器:
pandoc 你的输入文件.tex -o 输出文件.md --lua-filter=answer-filter.lua
转换效果
- 若使用HTML版本,输出的Markdown会包含红色样式的文本块;
- 若使用纯文本版本,输出内容会显示为ANSWER: Lorem ipsum的加粗标识格式。
内容的提问来源于stack exchange,提问作者SRobertJames
相关产品推荐
相关产品推荐

