markdown插入文献引用并导出pdf

引言

在学术写作或撰写技术报告时,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

但既然你明确问的是 TeX Live,下面将详细说明如何在 Windows 上 安装并配置 TeX Live,使其能被 pandoc 调用生成 PDF。

📥 第一步:下载 TeX Live

  1. 打开官网:

    👉 https://www.tug.org/texlive/

  2. 点击 "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)

  3. 挂载 ISO 文件(Windows 10/11 可直接双击挂载为虚拟光驱)

🛠️ 第二步:安装 TeX Live

  1. 进入挂载的光盘目录,以 管理员身份运行 install-tl-windows.bat
  2. 安装界面启动后,建议选择:
    Scheme: scheme-full(完整安装,避免后续缺包)
    ⚠️ 如果磁盘空间有限,可选 scheme-basic,但后续需手动安装缺失宏包(不推荐初学者)
    安装路径:默认是 C:\texlive\2025(年份随版本变),不要包含中文或空格
    勾选 "Add to PATH"(关键!否则系统找不到 xelatex)
  3. 点击 "Install",等待 30 分钟~数小时(取决于网络和硬盘速度)

🔧 第三步:验证安装 & 配置环境变量

  1. 检查是否加入 PATH
    安装完成后,重启 PowerShell 或 CMD,然后运行:
powershell 复制代码
xelatex --version

应看到类似输出:

复制代码
XeTeX 3.141592653-2.6-0.999995 (TeX Live 2025)

...

❌ 如果提示"无法识别命令",说明 PATH 未正确设置。

  1. 手动添加 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 安装命令:

      powershell 复制代码
      Invoke-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"

第二步:准备你的文件

你需要两个核心文件:

  1. .md 主文件:你的论文或报告正文。
  2. .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 characterhPutChar: 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 的样式文件。

  1. 点击下载IEEE CSL 样式文件 (来自 Zotero 官方仓库)
    (如果浏览器直接打开了代码,请右键点击页面并选择"另存为",保存为 ieee.csl)
  2. 放置位置 :把下载好的 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

效果说明

  1. link-citations: true :这会让文中的 [1] 变成一个超链接,点击它就会直接跳转到文档末尾对应的参考文献条目。
  2. colorlinks: true :这会让引用的数字(如 [1])和目录变成红色蓝色(取决于 LaTeX 默认设置),而不是默认的黑色。这样读者就能一眼看出哪里是可以点击的。

💡 进阶:自定义颜色

如果你觉得默认的红色太刺眼,想改成蓝色,可以在 YAML 头中指定颜色:

yaml 复制代码
link-citations: true
colorlinks: true
linkcolor: blue   # 内部链接(目录、引用)的颜色
urlcolor: blue    # 网页 URL 的颜色
相关推荐
月屯3 小时前
pandoc安装与使用(html、makdown转docx、pdf)
前端·pdf·html·pandoc·转docx、pdf
摸森堡1 天前
vs code + latex使用攻略
latex
星空椰1 天前
Java Excel转PDF
pdf·excel
Charlene Fung1 天前
如何使用 Markdown 生成带参考文献的 PDF
论文阅读·pdf·markdown
std860211 天前
微软发布 Edge 143 稳定版:PDF 注释支持撤销重做
microsoft·edge·pdf
shadowcz0071 天前
关于GEO的研究总结#使用 Notebooklm 来研究论文和整理报告#PDF分享
人工智能·pdf
BlackPercy2 天前
【markdown】 绘图总结
markdown·绘图
czliutz2 天前
使用pdfplumber库处理pdf文件获取文本图片作者等信息
python·pdf
archko2 天前
用rust+slint编写一个pdf阅读器
pdf