如何实现LaTeX中仅保留于Pandoc转Markdown的隐形区块?
解决方案
要实现「LaTeX编译PDF忽略指定区块,Pandoc转Markdown保留该区块」的需求,分两步处理即可:
1. LaTeX端:让PDF编译忽略markdown-only环境
在你的LaTeX文档开头添加以下代码,定义一个空的markdown-only环境——这样用pdflatex等工具编译PDF时,环境内的内容会被直接丢弃:
\usepackage{environ} \NewEnviron{markdown-only}{}
2. Pandoc端:用Lua过滤器提取并保留markdown-only内容
Pandoc默认会忽略未识别的LaTeX环境,所以需要写一个简单的Lua过滤器,专门捕获markdown-only环境内的内容,并将其转换为Markdown格式保留。
创建一个名为extract-markdown-only.lua的文件,内容如下:
local in_markdown_only = false local markdown_content = {} function RawBlock(el) -- 进入markdown-only环境 if el.text == "\\begin{markdown-only}" then in_markdown_only = true return {} -- 移除环境起始标记 -- 退出markdown-only环境 elseif el.text == "\\end{markdown-only}" then in_markdown_only = false -- 将收集的内容转为Markdown原始块 return pandoc.RawBlock("markdown", table.concat(markdown_content, "\n")) end -- 如果在环境内,收集内容 if in_markdown_only then table.insert(markdown_content, el.text) return {} -- 暂时移除原块,后续统一转换 end end -- 确保文档结束时如果仍在环境内,输出内容 function Pandoc(doc) if in_markdown_only then table.insert(doc.blocks, pandoc.RawBlock("markdown", table.concat(markdown_content, "\n"))) end return doc end
之后用Pandoc转换时,指定这个过滤器即可:
pandoc your-document.tex -o your-document.md --lua-filter=extract-markdown-only.lua
效果验证
用上述方法处理你给出的示例LaTeX代码:
- 编译PDF时,只会保留
Section 1及正文内容; - Pandoc转换后的Markdown会包含
markdown-only环境内的Front Matter和正文内容,完美适配Docusaurus的需求。
内容的提问来源于stack exchange,提问作者M.X
相关产品推荐
相关产品推荐

