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

如何避免Pandoc导出PDF时代码块内出现分页?

解决Pandoc导出PDF时代码块内分页的问题

全局生效方案

方法1:命令行嵌入LaTeX预处理代码

直接在导出命令中添加LaTeX规则,强制所有代码块禁止内部分页:

pandoc input.md -o output.pdf --pdf-engine=xelatex -V preamble="\usepackage{etoolbox}\AtBeginEnvironment{Shaded}{\vspace*{0pt}\nobreak\interlinepenalty=10000}\AtEndEnvironment{Shaded}{\nobreak\vspace*{0pt}}\AtBeginEnvironment{verbatim}{\vspace*{0pt}\nobreak\interlinepenalty=10000}\AtEndEnvironment{verbatim}{\nobreak\vspace*{0pt}}"
  • Shaded是Pandoc带语法高亮时的代码块环境,verbatim是无高亮时的环境
  • \interlinepenalty=10000大幅提升代码行间的分页惩罚值,阻止分页触发
  • \nobreak确保代码块前后不会触发分页

如果命令行过长,可将LaTeX代码写入单独文件(如no-code-pagebreak.tex),再通过参数引入:

% no-code-pagebreak.tex 内容
\usepackage{etoolbox}
\AtBeginEnvironment{Shaded}{\vspace*{0pt}\nobreak\interlinepenalty=10000}
\AtEndEnvironment{Shaded}{\nobreak\vspace*{0pt}}
\AtBeginEnvironment{verbatim}{\vspace*{0pt}\nobreak\interlinepenalty=10000}
\AtEndEnvironment{verbatim}{\nobreak\vspace*{0pt}}

执行导出命令:

pandoc input.md -o output.pdf --pdf-engine=xelatex -H no-code-pagebreak.tex

方法2:修改自定义LaTeX模板

若需长期使用该设置,可修改Pandoc默认模板:

  1. 导出默认模板:
pandoc -D latex > my-custom-template.tex
  1. 在模板的\usepackage{...}代码块末尾,添加上述LaTeX设置代码
  2. 导出时指定自定义模板:
pandoc input.md -o output.pdf --pdf-engine=xelatex --template=my-custom-template.tex

单个代码块生效方案

方法1:用LaTeX作用域包裹代码块

通过{}限制分页规则的作用范围,仅对目标代码块生效:

{\interlinepenalty=10000
# 此代码块不会被分页打断
def calculate_sum(numbers):
    total = 0
    for num in numbers:
        total += num
    return total
}

方法2:代码块前后添加分页禁止标记

在目标代码块的前后插入LaTeX命令,直观控制分页:

\vspace*{0pt}\nobreak

// 无分页的代码块示例
const arr = [1, 2, 3, 4, 5];
const doubled = arr.map(item => item * 2);
console.log(doubled);

\nobreak\vspace*{0pt}

  • \vspace*{0pt}确保命令正常触发,避免与周围内容的排版冲突

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:12:34