引言
在学术写作或撰写技术报告时,Markdown 以其简洁的语法让我们专注于内容。然而,当涉及到复杂的文献引用管理和生成格式严谨的 PDF 文档时,单纯的 Markdown 就显得力不从心了。
这时候,我们需要引入神器 Pandoc 以及其背后的排版引擎 LaTeX。
本文将结合实际操作中经常遇到的"坑",详细介绍如何配置环境、在 Markdown 中规范地插入引用,并最终使用一条命令导出包含中文的完美 PDF。
第一步:工欲善其事,必先利其器
要实现"Markdown -> 带有引用的精美 PDF",我们需要安装以下核心工具。请务必确保安装完成后重启你的编辑器(如 VS Code)。
1. 文档转换核心:Pandoc
Pandoc 是一个万能的文档转换器,它负责读取你的 Markdown 文件,处理文献引用,然后调用外部引擎生成 PDF。
- 下载地址 :Pandoc 官方 GitHub Release
- Windows 用户注意 :下载
.msi安装包进行安装。安装过程中务必勾选 类似 "Install for all users" 或 "Add to PATH" 的选项,这样才能在命令行中直接使用pandoc命令。
2. PDF 排版引擎:LaTeX 环境
Pandoc 自身不能生成 PDF,它依赖 LaTeX 引擎来完成排版工作。这是最容易劝退新手的一步,因为完整的 LaTeX (如 TeX Live) 体积巨大。
为了顺利支持中文并获得最佳兼容性,推荐以下方案:
- 方案 A(推荐,一劳永逸):安装完整版 TeX Live
- 虽然体积大(需下载约 5GB 的 ISO 镜像),但它包含了所有可能用到的宏包和字体支持,后续使用极少出错。建议通过国内镜像源(如清华 TUNA)下载 ISO 进行安装。
在 Windows 上配置 本地 TeX Live(用于配合 Pandoc 生成 PDF)主要有两种方式:
✅ 推荐普通用户使用 MiKTeX(自动安装缺失宏包,对新手友好)
🧠 高级用户/需要完整控制 → 安装 TeX Live
- 虽然体积大(需下载约 5GB 的 ISO 镜像),但它包含了所有可能用到的宏包和字体支持,后续使用极少出错。建议通过国内镜像源(如清华 TUNA)下载 ISO 进行安装。
但既然你明确问的是 TeX Live,下面将详细说明如何在 Windows 上 安装并配置 TeX Live,使其能被 pandoc 调用生成 PDF。
📥 第一步:下载 TeX Live
-
打开官网:
-
点击 "Acquire TeX Live" → "Download ISO image"
直接下载地址(可能较慢):
http://mirror.ctan.org/systems/texlive/Images/texlive.iso💡 建议使用国内镜像(如清华、中科大)加速:
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/
下载 texlive.iso(约 6--8 GB)
-
挂载 ISO 文件(Windows 10/11 可直接双击挂载为虚拟光驱)
🛠️ 第二步:安装 TeX Live
- 进入挂载的光盘目录,以 管理员身份运行 install-tl-windows.bat
- 安装界面启动后,建议选择:
Scheme: scheme-full(完整安装,避免后续缺包)
⚠️ 如果磁盘空间有限,可选 scheme-basic,但后续需手动安装缺失宏包(不推荐初学者)
安装路径:默认是 C:\texlive\2025(年份随版本变),不要包含中文或空格
勾选 "Add to PATH"(关键!否则系统找不到 xelatex) - 点击 "Install",等待 30 分钟~数小时(取决于网络和硬盘速度)
🔧 第三步:验证安装 & 配置环境变量
- 检查是否加入 PATH
安装完成后,重启 PowerShell 或 CMD,然后运行:
powershell
xelatex --version
应看到类似输出:
XeTeX 3.141592653-2.6-0.999995 (TeX Live 2025)
...
❌ 如果提示"无法识别命令",说明 PATH 未正确设置。
- 手动添加 PATH(如果自动添加失败)
按 Win + R 输入 sysdm.cpl → "高级" → "环境变量"
在 系统变量 中找到 Path,点击"编辑"
添加以下路径(根据你的安装年份调整):
C:\texlive\2025\bin\win32
注意:如果你是 64 位系统且安装了 64 位 TeX Live,可能是 win64 目录。但 TeX Live 官方 Windows 版默认只提供 win32(兼容 64 位)。
✅ 第四步:测试 Pandoc + TeX Live 生成 PDF
确保你已安装 Pandoc(见前文),然后运行:
powershell
pandoc survey.md --citeproc --bibliography=reference_v2.bib -o paper.pdf
Pandoc 默认会调用 pdflatex,但中文或复杂排版建议强制使用 xelatex:
powershell
pandoc survey.md --citeproc --bibliography=reference_v2.bib --pdf-engine=xelatex -o paper.pdf
✅ 加上 --pdf-engine=xelatex 可更好支持 Unicode 和中文字体。
- 方案 B(轻量级):安装 TinyTeX
-
这是一个专为 Pandoc 优化的轻量级 TeX 发行版。它会在需要时自动联网下载缺少的组件。
-
Windows Powershell 安装命令:
powershellInvoke-WebRequest -Uri "[https://yihui.org/tinytex/ov7.ps1](https://yihui.org/tinytex/ov7.ps1)" -OutFile "$env:TEMP\install-tinytex.ps1" & "$env:TEMP\install-tinytex.ps1"
-
第二步:准备你的文件
你需要两个核心文件:
.md主文件:你的论文或报告正文。.bib参考文献数据库:存储所有引用的 BibTeX 格式数据。
示例 .bib 文件 (reference.bib)
你可以从谷歌学术、百度学术或 Zotero 导出 BibTeX 格式。
bibtex
@article{osman2025ai,
title = {Artificial Intelligence and Robotics in Minimally Invasive Surgery},
author = {Abdalla Osman and others},
journal = {Cureus},
year = {2025},
publisher = {Cureus, Inc.}
}
@book{turing1950computing,
title={Computing machinery and intelligence},
author={Turing, Alan M},
year={1950},
publisher={Oxford University Press}
}
第三步:在 Markdown 中插入引用
Pandoc 使用 [@引用Key] 的格式来标记引用。
第四步:一条命令导出 PDF
一切准备就绪,打开你的终端(Terminal 或 PowerShell),进入到文件所在的目录。
基础命令(适用于纯英文文档)
bash
pandoc your_paper.md --citeproc --bibliography=reference.bib -o output.pdf
--citeproc:告诉 Pandoc 处理文献引用。--bibliography=reference.bib:指定你的参考文献数据文件。
进阶命令(解决中文无法显示的问题)🌟
如果你直接运行基础命令导出包含中文的文档,你大概率会得到一个全是方框或者空白的 PDF,甚至会收到类似 Missing character 或 hPutChar: invalid argument 的报错。
这是因为默认的 LaTeX 引擎不知道使用什么字体来渲染中文。我们需要指定使用 xelatex 引擎,并明确告诉它使用系统中支持中文的字体(例如 Windows 自带的"微软雅黑"或"宋体")。
请使用以下命令:
powershell
pandoc your_paper.md --citeproc --bibliography=reference.bib --pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei" -o paper_cn.pdf
命令详解:
--pdf-engine=xelatex:切换使用对 Unicode 和中文字体支持更好的 XeLaTeX 引擎。-V CJKmainfont="Microsoft YaHei":传入一个变量,告诉引擎对于中日韩(CJK)字符,使用 "Microsoft YaHei"(微软雅黑)字体来显示。你也可以换成 "SimSun"(宋体)。
到这里可以成功生成一个带参考文献的pdf,但是文末的参考文献没有序号,文中引用的地方也没有序号。如下图所示:


参考文献编号和引用跳转
powershell
pandoc survey.md --citeproc --csl=ieee.csl --bibliography=reference_v2.bib --pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei" -M link-citations=true -V colorlinks=true -o paperv4.pdf
参考文献编号
这是因为 Pandoc 默认使用的参考文献格式是 "Chicago Author-Date"(芝加哥作者-年代法),这种格式就是不带编号,而是直接显示作者名字和年份。
要实现你想要的 "数字编号" ([1], [2]...) 风格(通常是 IEEE 标准格式),你需要告诉 Pandoc 使用特定的 CSL (Citation Style Language) 文件。
请按照以下三个步骤操作,立刻就能解决:
第一步:下载 IEEE 格式文件
你需要一个后缀为 .csl 的样式文件。
- 点击下载 :IEEE CSL 样式文件 (来自 Zotero 官方仓库)
(如果浏览器直接打开了代码,请右键点击页面并选择"另存为",保存为ieee.csl) - 放置位置 :把下载好的
ieee.csl文件放到和你 Markdown 文件 (survey.md) 同一个文件夹里。
第二步:修改你的 Pandoc 命令
你需要在这个命令中加入 --csl=ieee.csl 参数。
请使用这条更新后的完整命令:
powershell
pandoc survey.md --citeproc --csl=ieee.csl --bibliography=reference_v2.bib --pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei" -o paper.pdf
第三步(可选):写入 Markdown 头部(更推荐)
如果你不想每次都在命令行里敲 --csl=ieee.csl,你可以把这个设置直接写在 Markdown 文件的最开头(YAML 区域):
markdown
---
title: "你的报告标题"
csl: ieee.csl
bibliography: reference_v2.bib
CJKmainfont: "Microsoft YaHei"
---
这里是正文...
这样设置后,你以后的运行命令就可以简化,Pandoc 会自动读取这些设置。
效果对比
-
修改前 (默认):
文中:(Osman et al. 2025) 指出...
参考文献列表:Osman, Abdalla... 2025. "Title..."
-
修改后 (IEEE):
文中:[1] 指出...
参考文献列表:
1\] A. Osman et al., "Title...", *Journal*, 2025.
引用跳转
在 Pandoc 中,你需要设置 link-citations 变量为 true。为了让点击效果更明显(例如让序号变成蓝色),建议同时开启颜色设置。
你可以选择以下两种方法之一来实现:
方法一:修改 Markdown 文件的头部(最推荐)
直接在你的 .md 文件开头的 YAML 区域添加两行配置。这样你就不需要每次输很长的命令了。
yaml
---
title: "你的报告标题"
bibliography: reference_v2.bib
csl: ieee.csl
CJKmainfont: "Microsoft YaHei"
# 👇 添加下面这两行
link-citations: true # 开启引用跳转
colorlinks: true # 将链接显示为彩色(否则虽然能点,但是是黑色的看不出来)
---
方法二:通过命令行参数
如果你不想改文件头,可以在你原本的命令中增加 -M link-citations=true 参数。
更新后的命令:
powershell
pandoc survey.md --citeproc --csl=ieee.csl --bibliography=reference_v2.bib --pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei" -M link-citations=true -V colorlinks=true -o paper.pdf
效果说明
link-citations: true:这会让文中的[1]变成一个超链接,点击它就会直接跳转到文档末尾对应的参考文献条目。colorlinks: true:这会让引用的数字(如[1])和目录变成红色 或蓝色(取决于 LaTeX 默认设置),而不是默认的黑色。这样读者就能一眼看出哪里是可以点击的。
💡 进阶:自定义颜色
如果你觉得默认的红色太刺眼,想改成蓝色,可以在 YAML 头中指定颜色:
yaml
link-citations: true
colorlinks: true
linkcolor: blue # 内部链接(目录、引用)的颜色
urlcolor: blue # 网页 URL 的颜色