You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 20:22:14