Quarto 1.10.18 Mac PDF 导出失败时,先保存完整日志,再用最小文档复现;不要先重装 Quarto。适用于论文、研究报告或课程作业在 Mac 上无法生成 PDF、内容缺失,或渲染过程报错的情况。接着按文档解析、代码执行、PDF 引擎、字体与文献依赖逐层定位。
谁该看这篇:在 Mac 上用 Quarto 写论文、需要尽快恢复 PDF 渲染的研究生。
也适合:维护 Quarto 项目的科研人员,以及负责高校 macOS 环境的技术支持人员。
01 先区分“没生成”“报错”和“内容不对”
先复制完整命令、终端输出、出错文档和项目配置。失败后不要立刻清理缓存、更新 TeX 或改 YAML;这些动作可能改变故障现场,让你失去前后对照依据。需要更详细诊断时,可按 Quarto 故障排查文档 使用 --log-level debug,并保留原始日志。
| 你看到的症状 | 优先怀疑的阶段 | 第一项低风险检查 |
|---|---|---|
| 没有生成 PDF,命令直接失败 | 命令入口、项目配置、文档解析 | 确认当前目录、输入文件和输出格式 |
| 执行到代码块时中止 | R、Python 或 Jupyter 执行 | 对照错误块检查解释器、内核与依赖 |
| 日志显示 LaTeX 错误 | PDF 引擎或 TeX 工具链 | 查看实际引擎命令、路径和缺失宏包提示 |
| 文件生成,但中文、图表或引用异常 | 字体、资源路径、文献处理或缓存 | 在最小样例中只复现一种异常 |
在项目副本或临时目录建立一份不含研究数据的最小 .qmd 文件,只保留简单标题和一段正文,然后运行:
quarto --version
quarto check
quarto render mini.qmd --to pdf --log-level debug
先确认本机实际报告的版本,再与 Quarto 官方发布页 对照;该页面列有 1.10.18。不要因为文章标题含有这个版本,就假定你的终端正在运行它。
Quarto 官方文档说明,PDF 输出可使用不同的 PDF 引擎,并提供 TeX 环境与故障排查建议。不同症状需要检查的环节不同,不能把所有失败都当成 LaTeX 故障。引擎与 PDF 配置可查阅 Quarto PDF 配置参考。
02 第一步:排除目录、入口与项目配置
确认执行的是预期的 Quarto,而不是其他安装路径中的旧版本:
command -v quarto
quarto --version
pwd
然后检查输入文件是否在预期目录、项目根目录是否有 _quarto.yml,以及最终渲染命令是否指向正确的文件和格式。Quarto 项目会合并项目级、目录级与文档级配置;文档选项可以覆盖上层设置。因此,单看 .qmd 文件里的 YAML,未必能知道最终生效的参数。配置继承规则可参阅项目配置说明。
继续检查 YAML 缩进、模板、过滤器、引用文件和图片路径。不要一次改多个设置:每次只改一项,记录修改前后的错误行及实际渲染结果。如果模板或过滤器来自项目外部,先在副本中暂时移除,再确认错误是否消失。
如果命令报输入文件不存在、格式不支持,或解析阶段就失败,先停在这里。基础文档尚未通过渲染前,不要动 TeX 安装。
03 把代码执行和 PDF 编译分开验证
有代码块时,Quarto PDF 渲染至少涉及两个不同环节:先按文档设置执行代码,再由 PDF 工具链排版输出。判断哪一步先失败,可以在副本中尝试跳过执行:
quarto render report.qmd --to pdf --no-execute
如果跳过执行后仍在相近位置报错,检查日志是否进入 TeX 编译阶段。如果 PDF 能生成但代码结果是空的或过期的,重点检查执行环境、冻结输出和缓存;不要把旧结果误认为刚刚成功执行的结果。渲染命令支持控制代码执行,具体参数见 Quarto render 命令参考。
| 诊断线索 | R 代码块 | Python 代码块 |
|---|---|---|
| 执行前就找不到运行环境 | 检查 R 与项目使用的执行引擎 | 检查 Python 路径与 Jupyter 内核 |
| 已进入代码执行,报包或模块错误 | 核对当前 R 环境中的依赖 | 核对当前内核对应环境中的依赖 |
| 代码执行完成,随后出现 TeX 错误 | 转查 PDF 引擎和 LaTeX 日志 | 转查 PDF 引擎和 LaTeX 日志 |
| PDF 有输出,但结果不像本次运行 | 检查缓存、冻结输出与执行设置 | 检查是否实际执行、内核选择与冻结输出 |
在 Python 项目中,quarto check jupyter 可用于检查 Jupyter 配置;Python 版本会受系统 PATH 或 QUARTO_PYTHON 影响。对于 R 或 Python 代码块,先用不含敏感数据的代表性代码复现,再分别验证解释器、内核和项目依赖。若执行阶段先失败,优先检查运行环境;若已经进入 TeX 编译阶段,再转查 PDF 工具链。
04 PDF 引擎与 TinyTeX:确认实际调用链
看到 lualatex、缺少宏包或 TeX 相关错误时,先从调试日志确认 Quarto 实际运行了什么命令。再检查配置中的 pdf-engine、引擎路径和当前工具链:
quarto list tools
command -v lualatex
lualatex --version
command -v 展示的是当前 shell 的查找结果;若 Quarto 配置指定了其他路径,或工具由 Quarto 管理,二者可能不同。Quarto 支持多个 PDF 引擎,默认值还可能随输出格式而不同,因此不能只凭电脑上安装过哪套 TeX,就断定渲染时使用了它。引擎选项和路径配置见 PDF 选项参考。
提醒:不要同时切换 PDF 引擎、更新 TeX、重装宏包。一次只动一套工具链,否则即使故障消失,也很难知道真正起作用的改动。
如果现有 TeX 与 Quarto 管理的 TinyTeX 都可能参与编译,先依据日志确认实际使用者,再决定是否进行对照测试。
| 排查方向 | 现有 TeX 安装 | Quarto 管理的 TinyTeX |
|---|---|---|
| 先核对什么 | 引擎可执行文件路径、发行版与宏包状态 | quarto list tools 中的工具状态 |
| 常见误判 | 终端能找到引擎,就认定 Quarto 使用同一份 | 看到 TinyTeX 已安装,就认定当前项目调用它 |
| 适合的动作 | 保留现有环境,查看日志中的真实调用 | 在副本中单独测试,不同时改动另一套 TeX |
| 何时停止 | 路径与版本仍无法确认时,先别更新宏包 | 与现有 TeX 的日志未区分时,不要并行重装 |
Quarto 文档说明,它可以安装和管理 TinyTeX,也可通过 latex-tinytex: false 避免使用其管理的安装;自动安装缺失宏包的行为还取决于所用 TeX 发行版。要测试 TinyTeX,先在项目副本中验证同一最小文档,并保存切换前后的日志。相关细节见 PDF 引擎与 TinyTeX 说明。
05 字体、图表与引用:按缺失内容追依赖
字体或中文字符缺失
先确认 PDF 引擎、字体配置和字体实际名称。LuaLaTeX 支持 Unicode,但特定字符仍要求所选字体具备相应字形;可用 mainfont、CJKmainfont 等选项配置字体。字体能在你自己的 Mac 上找到,不代表隔离环境中也有相同字体。应在目标环境用只包含问题汉字、符号和标题的文档测试,不要未经验证就把某个字体名写进正式模板。
图表异常或文件丢失
核对资源路径是相对于文档目录还是项目执行目录,并确认图像文件格式与生成步骤能在副本中复现。若图表来自代码块,先确认代码是否运行、输出文件是否生成,再查 PDF 编译日志;路径错误和字体错误不是同一类问题。
文献没有更新或交叉引用不完整
检查 bibliography 路径、引用键和文献处理方式。Quarto 的引用处理可使用 Pandoc 的 citeproc,也可为 PDF 配置 natbib 或 biblatex;不同方式可能需要不同依赖和编译步骤。先看日志中缺失的是文献文件、引用键还是后端工具,再做对应处理。可参阅引用与参考文献说明。
06 常见问题:按错误位置缩小范围
Quarto 在 Mac 上出现 LaTeX 错误,先查哪一项?
先看调试日志中最后一个失败命令和引擎路径,再用最小文档渲染。最小文档失败,优先检查 PDF 引擎和 TeX;它通过而原项目失败,则回查模板、字体、引用或图表依赖。不要先重装 Quarto,也不要仅凭错误提示中的一个宏包名称就批量安装依赖。
中文字体或字形缺失,换成 XeLaTeX 就能解决吗?
不一定。更换引擎不能保证目标环境已安装所需字体,也不能保证字体覆盖文档中的全部字符。先核对字体名称与字符覆盖,再用少量代表性汉字和符号复测;若最小样例成功,继续检查项目模板是否覆盖字体配置,以及最终 PDF 中的字体和页面效果。
怎么确认找不到 lualatex 是路径问题还是引擎没安装?
对照 Quarto 调试日志、项目中的 pdf-engine 设置、quarto list tools 和 command -v lualatex。这几项回答的问题不同:前两者帮助确认 Quarto 的实际配置与调用,后两者用于查看 Quarto 管理工具和当前 shell 的查找结果。仍无法确认时,先停止改动环境,保留命令和日志。
R 或 Python 代码执行失败,怎样判断不是 PDF 编译问题?
在项目副本中跳过代码执行并再次渲染,同时查看错误是否发生在执行阶段或 TeX 阶段。跳过执行仍报 TeX 错误,继续查引擎;跳过后通过,但正常执行失败,就单独检查 R 环境、Python 解释器、Jupyter 内核和依赖。两种故障也可能同时存在,需分别记录。
07 用项目副本完成验收,再决定是否换环境
最小样例通过,只能说明基础渲染路径可用,不代表论文的研究结果正确,也不代表格式已经满足投稿或学校要求。将原项目复制到隔离目录,逐类恢复组件:先配置与模板,再代码执行,然后字体、图表和文献。每加回一类就重新渲染;出现故障时回退到上一个通过状态。
- ✅ 确认版本与入口:记录
quarto --version、工作目录、输入文件和输出格式。 - ✅ 确认执行结果:复核代码块确实重新运行;检查结果是否来自当前环境,而非缓存或冻结输出。
- ✅ 确认文献与资源:检查引用、交叉引用、图表文件和项目相对路径。
- ✅ 确认 PDF 页面:抽查页面完整性、中文和符号字形、图表显示及参考文献格式。
- ✅ 保存复现条件:归档渲染命令、环境信息和错误日志;项目含敏感数据时,改用脱敏样例。
- ⚠️ 触发停止条件:故障尚未缩小到单一组件时,不继续改原项目;无法在本机稳定复现时,转到隔离环境验证同一份脱敏项目。
如果你的 Mac 环境反复失败,先比较“继续修当前工具链”和“隔离环境复测”的代价。前者可能受到多份 Quarto 或 TeX 安装、共享配置及项目依赖的干扰;后者能帮助判断故障是否随项目迁移,但不能替你验证科研结果或完成论文格式验收。若课题确实依赖 macOS,可先查看 CALMVPS 的使用方案与费用信息,再用脱敏项目确认隔离环境是否适合你的渲染流程;确认匹配后,再了解按周期使用 macOS 环境的方式。如果需要长期稳定的本地重负载处理,或必须连接实验室物理设备,则先评估自有 Mac 或实验室现有设备是否更合适。