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

Pandoc markdown+raw_tex模式下\textbackslash提前出现致编译失败问题

Pandoc raw_tex模式下TeX编译失败的成因与解决办法

问题成因

  • Pandoc的raw_tex模式默认仅对**文档主体(\begin{document}之后)中的TeX代码原样保留,对前置区(\begin{document}之前)**的内容会按Markdown语法解析。
  • 当你在Markdown前置内容中直接写\renewcommand时,Pandoc会把反斜杠\识别为Markdown转义字符,将其编码为TeX的\textbackslash命令,破坏原本的TeX命令结构,最终导致编译失败。

解决办法

方法1:通过header-includes参数传递前置TeX代码

直接用命令行参数指定前置修改内容,绕过Markdown解析环节:

pandoc input.md -o output.pdf --pdf-engine=xelatex -V header-includes='\renewcommand{\@mkboth}[2]{}'

这种方式下,Pandoc会直接把header-includes中的代码插入TeX文件前置区,不会进行转义处理。

方法2:用Raw Block包裹前置TeX代码

在Markdown的TeX代码外包裹Pandoc的Raw Block标记,明确告知这是纯TeX代码无需解析:

---
header-includes:
    - |
      ```{=latex}
      \renewcommand{\@mkboth}[2]{}
      ```
---

也可以直接使用未命名的Raw Block:

```{=latex}
\renewcommand{\@mkboth}[2]{}
注意:放在YAML元数据的`header-includes`中时,要保证缩进格式正确,Raw Block标记完整。

### 方法3:修改Pandoc的TeX模板
如果需要频繁使用这类前置修改,可编辑Pandoc默认TeX模板:
1. 导出默认模板:
```bash
pandoc -D latex > my-template.latex
  1. 在模板前置区(\begin{document}之前)添加\renewcommand{\@mkboth}[2]{}代码
  2. 编译时指定自定义模板:
pandoc input.md -o output.pdf --pdf-engine=xelatex --template=my-template.latex

提示:若使用LuaTeX,只需将--pdf-engine参数改为lualatex,上述方法同样适用。

内容的提问来源于stack exchange,提问作者Dmitri Nesteruk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 06:23:11