任何人只要在 Linux 下写过文档、投过稿、交过报告,大概率都会遇到同一个尴尬局面:Word 排版排到怀疑人生,Markdown 写得行云流水,可导师或编辑非要一个 docx,又或者你在 Ubuntu 上写了一篇漂亮的 Markdown 笔记,想转成 PDF 发给同事,结果格式乱成一锅粥。Pandoc 就是专门解决这个问题的瑞士军刀,它能让你用最舒服的语法写文档,然后一键转换成任何你需要的格式。这篇文章完全围绕 Ubuntu 平台从零安装 Pandoc 这件事展开,我会把三种安装方式、环境配置、PDF 导出依赖坑、以及和 Typora、VS Code 配合的实战经验都梳理清楚,保证你照着做就能顺利用起来。
1. 装 Pandoc 之前,先把它的定位和版本迷思理清楚
1.1 Pandoc 到底是个什么工具
Pandoc 本质上是一个文档格式转换器,由哲学家兼程序员 John MacFarlane 开发,用 Haskell 语言写成。它的核心竞争力有两个:一是支持的格式极多,二是转换质量极高。官方手册列出的支持格式有几十种,从你日常用的 Markdown、HTML、docx、PDF、LaTeX、EPUB,到学术圈的 reStructuredText、JATS、ODT,再到冷门的 ICML、DocBook,几乎没有它转不了的。更关键的是,Pandoc 内部有一个统一的文档模型,所有格式输入都会先被解析成这个模型,再由模型生成目标格式。理解了这一点,你就能明白为什么 Pandoc 转换出来的文档逻辑清晰,因为它并不是粗暴地做字符串替换,而是真的"读懂"了你的文档结构。
很多新手会混淆 Pandoc 和 LaTeX 的关系。Pandoc 是转换器,它本身不生成 PDF,而是把文档转换成 LaTeX 源码,再调用 LaTeX 引擎编译成 PDF。所以如果你要在 Ubuntu 上让 Pandoc 输出 PDF,需要另外安装 LaTeX 发行版,比如 TeX Live,这一点我后面第三部分会详细讲。你可以把 Pandoc 想象成一个万能翻译官,而 LaTeX 是它身后负责"排版印刷"的印刷厂,翻译官再厉害,没有印刷厂也交不出成品。
1.2 为什么说"Ubuntu 上装 Pandoc"值得单独写一篇
我在各种系统上装过 Pandoc,坦白讲,Ubuntu 算是坑比较多的一个平台,但这恰恰是它值得单独写一篇的原因。Ubuntu 的软件源里确实自带了 Pandoc,版本通常比较旧。以常见的 Ubuntu 22.04 LTS 为例,官方源里是 Pandoc 2.9.2.1,而 Pandoc 官方在 2023 年已经发布到了 2.19.2,如今 3.x 系列也已经成熟。旧版本在语法解析、PDF 导出、格式支持上都有不少差距,比如旧版对 Markdown 内嵌属性、图表支持的力度远远不如新版。
另一个坑是系统架构。很多人装完之后一运行 pandoc -v,发现是 32 位架构或者版本号奇奇怪怪,这多半是用了 Ubuntu 源里那个"假"的 pandoc 或者装错了包。Pandoc 官方为 Ubuntu 提供了 amd64 和 arm64 的 .deb 安装包,下载之前先用 uname -m 确认一下你的机器架构,别一股脑装错。还有一点,Ubuntu 20.04 和 22.04 的依赖库版本不同,用 Ubuntu 源装的 Pandoc 能跑,不代表你行为一个文档转换器下载的独立二进包就一定能跑。这些细节听起来琐碎,但恰恰是新手最容易反复踩坑的地方。
2. 三种安装方式详解:从最快到最稳
2.1 最快上手:直接用 apt 安装(适合尝鲜和应急)
如果你只是临时用一下,或者不太在乎版本新旧,直接在终端里执行安装是效率最高的方案。Ubuntu 的软件源默认包含了 Pandoc,所以不需要额外添加任何 PPA,两条命令就能搞定。
sudo apt update sudo apt install pandoc装完之后用pandoc -v验证,能看到类似 pandoc 2.9.2.1 这样的输出就说明成功了。这个方案的优点非常明显:安装速度快,依赖自动处理,后续卸载也干净(sudo apt remove pandoc一键搞定)。但缺点也摆在那里——版本滞后。我在 Ubuntu 22.04 上实测,apt 源里的版本是 2.9.2.1,这个版本对 Mermaid 流程图解析、CSL 引用样式更新、以及一些 Markdown 扩展语法的支持明显不如新版本。如果你只是做简单的 Markdown 转 HTML 或 docx,用 apt 版本完全没问题;但如果你要处理学术论文、投期刊、输出复杂图表,建议还是往下看第二种方式。
补充一个实用小技巧:apt 装完之后,强烈建议顺手安装pandoc-citeproc,这是处理引文和参考文献的独立工具。老版本的 Pandoc 把它拆出来了,没有这个东西,你在转换含引文的 Markdown 时会直接报错。Ubuntu 源里正好有这个包,所以用 apt 方案时一条命令补上是最好不过的。
sudo apt install pandoc-citeproc2.2 版本求新求稳:官方 .deb 包安装(主力推荐方案)
如果你需要最新版 Pandoc 的功能,同时又希望安装和卸载符合 Ubuntu 的包管理规范,那官方 .deb 包是首选。Pandoc 的 GitHub Releases 页面会发布pandoc-x.x.x-amd64.deb这样的安装包,把它下载到本地后,用 dpkg 命令安装。
wget https://github.com/jgm/pandoc/releases/download/3.1.11.1/pandoc-3.1.11.1-1-amd64.deb sudo dpkg -i pandoc-3.1.11.1-1-amd64.deb这里有个坑要提前提醒你:很多人在这一步会遇到依赖错误,提示缺这个缺那个。因为 .deb 包在某些情况下不会自动拉取依赖,尤其是当你系统里缺少一些基础库时。解决办法很简单,安装完 .deb 之后立刻执行一次修复命令:
sudo apt --fix-broken installapt 会自动把缺的依赖补上,然后再重新执行sudo dpkg -i或者直接运行pandoc -v验证。实际上我测试过,Pandoc 的官方 .deb 包依赖非常少,通常只需要 libc6 和 zlib1g,绝大多数 Ubuntu 系统早就满足条件了。真正导致依赖报错的场景,往往是你之前装过某个软件破坏了系统的依赖树,所以 apt fix 一下基本都能解决。
选择官方 .deb 还有一个隐藏好处:它会自动添加到系统的 alternatives 机制里,后续如果你同时装了 TeX Live 或者别的文档工具,不会出现路径覆盖的问题。而且卸载非常干净,sudo dpkg -r pandoc就能完全移除,不留残余文件。
2.3 终极灵活:下载独立二进制包解压即用
第三种方式是直接下载 Pandoc 官方提供的压缩包,这个包解压后就是一个完整可运行的二进制文件,不需要安装,拷贝到任何目录都能跑。适合什么样的场景呢?我见过几种情况:一是你没有 root 权限的服务器,无法执行 dpkg 或 apt install;二是你想在 U 盘或移动硬盘里塞一个便携版 Pandoc,在别人的机器上临时用;三是你有多版本共存的需求,比如系统里已经装着老版本,但新项目要用新语法,需要临时调用不同版本。
具体操作如下,先下载对应架构的 tar.gz 包:
wget https://github.com/jgm/pandoc/releases/download/3.1.11.1/pandoc-3.1.11.1-linux-amd64.tar.gz tar xvzf pandoc-3.1.11.1-linux-amd64.tar.gz cd pandoc-3.1.11.1/bin ./pandoc --version解压之后直接运行./pandoc就能用。为了全局调用方便,你可以把它软链到一个已经存在于 PATH 的目录,比如 /usr/local/bin:
sudo ln -s /path/to/pandoc-3.1.11.1/bin/pandoc /usr/local/bin/pandoc这种解压方案的坑在于:你得自己留意 PATH 的优先级。如果用which pandoc检查时发现指向的还是 /usr/bin/pandoc,你需要调整 PATH 顺序或者把旧版本删掉。另一个小细节是,解压版 Pandoc 不会自动创建 man page,所以用man pandoc时可能看不到帮助文档,不过对日常使用影响不大,因为在线文档已经很全了。
把三种方案放在一起对比会更直观:
| 安装方式 | 版本新旧 | 安装复杂度 | 卸载便捷度 | 适用场景 |
|---|---|---|---|---|
| apt 安装 | 较旧 | 低 | 高 | 应急使用、新手尝鲜 |
| 官方 .deb | 新 | 中 | 高 | 日常主力开发环境 |
| 解压二进制 | 最新 | 低 | 手动 | 无 root 权限、便携使用 |
我个人的建议是:在 Ubuntu 主力机上,直接用官方 .deb 包,一劳永逸,版本最新,兼容性也好。如果某天你要在多台机器上快速复现环境,再把解压方案作为备用。
3. 装完只能算一半,PDF 导出依赖必须配好
3.1 从 Markdown 到 PDF 的全链路逻辑
在 Ubuntu 上装好 Pandoc 之后,你立马会测试一个最常见的需求:把 Markdown 转成 PDF。直接执行:
pandoc test.md -o test.pdf如果你是在刚装完 Pandoc 的系统上跑,大概率会看到一串红色报错,提示找不到 pdflatex、xelatex 或者 lualatex。这个报错的原因我们前面已经提到:Pandoc 不是打印机,它需要借用 LaTeX 引擎来渲染 PDF。在 Linux 生态里,最主流的 LaTeX 发行版是 TeX Live,Ubuntu 源里也有,直接安装就能解决。
sudo apt install texlive texlive-xetex texlive-lang-chinese texlive-fonts-recommended这里我要特别强调texlive-xetex和texlive-lang-chinese这两个包。Pandoc 默认使用的 PDF 引擎是 pdflatex,它对中文的支持非常糟糕,几乎无法直接处理中文文档。而 XeLaTeX 引擎天然支持 Unicode 和系统字体,配合-V CJKmainfont参数就能完美渲染中文。
如果你只是偶尔转一下英文文档,装 texlive 基础版就够了。但如果你要转中文,我强烈建议你直接装上面这一整条命令里的所有包,否则后面缺个字体要么缺个样式文件,排查起来非常耗时。完整 TeX Live 安装包有好几个 GB,但按需装这些核心包只需占用几百 MB,性价比很高。
3.2 中文 PDF 输出的字体与参数配置
装好 TeX Live 之后,用 XeLaTeX 引擎转换中文文档还要解决字体问题。Ubuntu 系统默认不一定安装了中文字体,你先用fc-list :lang=zh查看一下系统里有哪些中文字体。如果一片空白,装一下文泉驿或者 Noto CJK 字体:
sudo apt install fonts-noto-cjk然后你就可以用这样的命令转换中文 Markdown 为 PDF:
pandoc test.md -o test.pdf --pdf-engine=xelatex -V CJKmainfont="Noto Sans CJK SC"实测下来,用 Noto Sans CJK SC 渲染的中文文档清晰锐利,字间距和标点处理都远超默认配置。如果你喜欢宋体风格,可以换成 "Noto Serif CJK SC",显示效果更接近传统书籍。
除了字体,页边距和文档结构也可以直接在命令行里指定,比如-V geometry:margin=2.5cm设置页边距,-V fontsize=12pt设置基础字号。这些参数拼在一起,转换出来的 PDF 已经能直接拿去打印或提交了。
写一个最简单的完整示例:
pandac中文输入法配置可能还需要按 Ctrl+Space 切换。至于 VS Code,我在 settings.json 里加了一个快捷键,选中待转换的 Markdown 文件后按 Ctrl+Alt+P,自动在终端执行 pandoc 转换命令,无缝衔接写作和交付流程。 ## 5. 写在最后的避坑清单与个人体会 围绕 Ubuntu 上安装 Pandoc 这件事,我把踩过的坑和总结的经验整理成一份速查清单,方便你边装边查。 | 故障现象 | 可能原因 | 解决思路 | | --- | --- | --- | | 运行 pandoc -v 报找不到命令 | PATH 未包含 Pandoc 所在目录或未完成安装 | 检查 which pandoc,软链二进制到 /usr/local/bin | | 转换 docx 中图片显示异常 | 图片路径包含中文或空格 | 统一使用纯英文路径,图片相对路径置于同目录 | | PDF 转换报 pdflatex not found | 未安装 TeX Live | 安装 texlive 及 xetex、中文支持包 | | 中文 PDF 显示方块 | 系统缺少中文字体 | 安装 fonts-noto-cjk,指定 CJKmainfont 参数 | | Markdown 中表格列宽错乱 | 表格语法不符合 Pandoc 扩展规则 | 用管道对齐的表格语法,行首行尾不加多余空格 | | 参考文献不生效 | 缺 pandoc-citeproc 或参数写错 | 使用 --citeproc 参数并确认 CSL 文件路径正确 | 再分享一个小技巧:Pandoc 支持 --verbose 参数,转换失败时会输出非常详细的调试日志,包含每一步调用的引擎和参数。遇到问题先别急,加个 --verbose 跑一遍,信息量远大于那行红色报错本身。 我个人从 Pandoc 2.x 时代一直用到现在 3.x,最大的体会是,安装只是开始,真正值钱的是理解转换链路背后的逻辑。Ubuntu 的包管理机制、LaTeX 引擎的角色、字体系统的运作方式,这些东西单独学都很枯燥,但通过装 Pandoc 和调通 PDF 输出,你能把这一整条链路串起来。当你第一次写完 Markdown、敲下 pandoc 命令、几秒钟后拿到排版精美的 PDF 时,那种感觉就是折腾 Linux 的快乐所在。希望这篇教程能让你少走点弯路,赶紧用起来。