Awesome Scientific Writing保姆级教程:用Quarto、Zotero和Pandoc搭建可复现的科研写作工作流

它不是一个自动写论文的AI Skill,而是一张科学写作工具地图。本文将从零带你完成文献管理、公式与图表引用、论文编写、多格式导出和版本管理。

写在前面

科研写作看起来是在"写文字",真正做起来却远不只是打开Word或者LaTeX输入内容。

一篇完整论文往往同时包含:

  • 正文;
  • 数学公式;
  • 参考文献;
  • 实验数据;
  • 统计结果;
  • 科研图表;
  • 算法伪代码;
  • 补充材料;
  • 期刊格式;
  • 合作者修改;
  • 投稿版本;
  • 返修版本。

如果这些内容分别保存在不同软件中,论文很容易出现一系列问题:

  • 数据已经更新,正文中的数值却没有同步;
  • 图表重新生成后,图号和正文引用错位;
  • Zotero、EndNote和BibTeX中的文献字段不一致;
  • 投稿时需要PDF,合作者却只接受Word;
  • 更换期刊后,需要重新调整所有引用格式;
  • 文件夹里出现"最终版""最终版2""绝对最终版"等大量副本;
  • 不知道某一段文字是谁在什么时候修改的;
  • 论文中的实验结果无法追溯到原始数据和代码。

因此,现代科研写作真正需要解决的问题,并不是"选择哪个文字处理软件",而是:

如何让文字、文献、代码、数据、图表和最终文档组成一条可以重复执行、可以检查、可以追溯的工作流?

GitHub项目awesome-scientific-writing正是理解这类工作流的一个好入口。

项目地址:

writing-resources/awesome-scientific-writing


一、先纠正一个常见误解:它不是Agent Skill

看到"Scientific Writing"这个名字,很多人会以为它是一个可以安装到Codex、Claude Code或其他AI智能体中的科研写作技能。

事实上并不是。

awesome-scientific-writing是一个"Awesome List",也就是经过整理的工具和资源清单。它没有SKILL.md,没有统一执行程序,也没有规定一个AI智能体应该怎样自动撰写论文。

它收录的是一组科学写作相关资源,包括:

  • Markdown编辑器;
  • 文献管理软件;
  • BibTeX工具;
  • 科研插图工具;
  • 文档转换工具;
  • 文本检查工具;
  • 论文模板;
  • 科研写作教程;
  • 其他相关资源合集。

项目的核心理念是:

科学写作不必完全局限于传统LaTeX,还可以使用Markdown、reStructuredText、Jupyter Notebook等格式,并通过Pandoc、Quarto等工具生成不同类型的最终文档。

这一定位可以在项目的GitHub仓库在线资源页中看到。

1. Awesome List和Agent Skill有什么区别?

对比项 Awesome List Agent Skill
核心内容 工具、项目和教程链接 AI执行规则和标准工作流
能否自动运行 不能 通常可以
是否需要SKILL.md 不需要 通常需要
是否具有固定输入输出 没有 通常有
是否可以直接生成论文 不能 可在限定范围内协助
主要价值 帮助用户发现和选择工具 帮助AI稳定执行特定任务
使用方式 阅读、筛选、组合 安装后由智能体调用

因此,下面这种理解是错误的:

text 复制代码
克隆awesome-scientific-writing
        ↓
安装完成
        ↓
AI自动帮助我写论文

正确理解应该是:

text 复制代码
浏览awesome-scientific-writing
        ↓
认识不同科研写作工具
        ↓
根据自己的研究场景选择工具
        ↓
组合成个人科研写作工作流

2. 克隆仓库不等于安装工具

你当然可以把项目下载到本地:

bash 复制代码
git clone https://github.com/writing-resources/awesome-scientific-writing.git

但这条命令只是把README和项目配置文件下载到本地,并不会自动安装Zotero、Quarto、Pandoc或其他软件。

如果你只是想浏览资源,直接打开GitHub网页就足够了。


二、这个项目到底收录了什么?

截至2026年7月21日,项目主要将资源分为八类。

1. Word Processors:写作与编辑环境

这一部分收录了用于撰写纯文本、Markdown、R Markdown和其他科研文档的编辑器,包括:

  • MarkText;
  • RStudio;
  • bookdown;
  • R Markdown;
  • Vim;
  • VS Code;
  • Zettlr。

它们的主要区别并不是"哪个看起来更漂亮",而是:

  • 是否支持Markdown;
  • 是否支持文献引用;
  • 是否支持图表和章节交叉引用;
  • 是否支持执行Python或R代码;
  • 是否适合Git版本管理;
  • 是否适合非技术用户;
  • 是否能够预览和导出最终文档。

2. Bibliography:文献管理

这一部分包括:

  • Citation Style Language;
  • JabRef;
  • Zotero;
  • Better BibTeX for Zotero;
  • ZoteroBib。

需要区分四个概念:

文献管理器

例如Zotero和JabRef,用于存储作者、题名、期刊、年份、DOI和PDF等资料。

文献数据库文件

例如:

  • .bib
  • .bibtex
  • .ris
  • .enw

这些是保存文献元数据的文件格式。

引用键

例如:

text 复制代码
settles2009active

正文通过引用键指向文献数据库中的某一条记录。

引用样式

例如APA、IEEE、Vancouver或某个期刊的参考文献样式。CSL文件负责描述引用最终应当怎样显示。

3. Illustrations:科研插图

项目收录了:

  • diagrams.net
  • Graphviz;
  • Mermaid;
  • Vega-Lite;
  • PlantUML。

这些工具可以分成两类。

图形界面工具

例如diagrams.net,通过拖拽元素制作图形。

声明式工具

例如Mermaid、Graphviz和PlantUML。用户不直接拖拽每个元素,而是通过文本描述图形结构。

例如:
#mermaid-svg-tHsrRgnospPxxbwn{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-tHsrRgnospPxxbwn .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-tHsrRgnospPxxbwn .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-tHsrRgnospPxxbwn .error-icon{fill:#552222;}#mermaid-svg-tHsrRgnospPxxbwn .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tHsrRgnospPxxbwn .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-tHsrRgnospPxxbwn .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tHsrRgnospPxxbwn .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tHsrRgnospPxxbwn .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-tHsrRgnospPxxbwn .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tHsrRgnospPxxbwn .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tHsrRgnospPxxbwn .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tHsrRgnospPxxbwn .marker.cross{stroke:#333333;}#mermaid-svg-tHsrRgnospPxxbwn svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tHsrRgnospPxxbwn p{margin:0;}#mermaid-svg-tHsrRgnospPxxbwn .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-tHsrRgnospPxxbwn .cluster-label text{fill:#333;}#mermaid-svg-tHsrRgnospPxxbwn .cluster-label span{color:#333;}#mermaid-svg-tHsrRgnospPxxbwn .cluster-label span p{background-color:transparent;}#mermaid-svg-tHsrRgnospPxxbwn .label text,#mermaid-svg-tHsrRgnospPxxbwn span{fill:#333;color:#333;}#mermaid-svg-tHsrRgnospPxxbwn .node rect,#mermaid-svg-tHsrRgnospPxxbwn .node circle,#mermaid-svg-tHsrRgnospPxxbwn .node ellipse,#mermaid-svg-tHsrRgnospPxxbwn .node polygon,#mermaid-svg-tHsrRgnospPxxbwn .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tHsrRgnospPxxbwn .rough-node .label text,#mermaid-svg-tHsrRgnospPxxbwn .node .label text,#mermaid-svg-tHsrRgnospPxxbwn .image-shape .label,#mermaid-svg-tHsrRgnospPxxbwn .icon-shape .label{text-anchor:middle;}#mermaid-svg-tHsrRgnospPxxbwn .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-tHsrRgnospPxxbwn .rough-node .label,#mermaid-svg-tHsrRgnospPxxbwn .node .label,#mermaid-svg-tHsrRgnospPxxbwn .image-shape .label,#mermaid-svg-tHsrRgnospPxxbwn .icon-shape .label{text-align:center;}#mermaid-svg-tHsrRgnospPxxbwn .node.clickable{cursor:pointer;}#mermaid-svg-tHsrRgnospPxxbwn .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-tHsrRgnospPxxbwn .arrowheadPath{fill:#333333;}#mermaid-svg-tHsrRgnospPxxbwn .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tHsrRgnospPxxbwn .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tHsrRgnospPxxbwn .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tHsrRgnospPxxbwn .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-tHsrRgnospPxxbwn .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tHsrRgnospPxxbwn .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-tHsrRgnospPxxbwn .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tHsrRgnospPxxbwn .cluster text{fill:#333;}#mermaid-svg-tHsrRgnospPxxbwn .cluster span{color:#333;}#mermaid-svg-tHsrRgnospPxxbwn div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tHsrRgnospPxxbwn .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-tHsrRgnospPxxbwn rect.text{fill:none;stroke-width:0;}#mermaid-svg-tHsrRgnospPxxbwn .icon-shape,#mermaid-svg-tHsrRgnospPxxbwn .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-tHsrRgnospPxxbwn .icon-shape p,#mermaid-svg-tHsrRgnospPxxbwn .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-tHsrRgnospPxxbwn .icon-shape .label rect,#mermaid-svg-tHsrRgnospPxxbwn .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-tHsrRgnospPxxbwn .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-tHsrRgnospPxxbwn .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-tHsrRgnospPxxbwn :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 未标记数据
查询策略
选择样本或特征
获得新信息
更新模型

声明式图形的优势是:

  • 源文件是纯文本;
  • 适合Git管理;
  • 修改结构比较容易;
  • 可以重复生成;
  • 更容易与论文源文件放在一起。

4. Converters and Filters:格式转换

这一部分包括:

  • Pandoc;
  • Quarto;
  • Jupyter Book;
  • MyST;
  • nbconvert;
  • docutils;
  • Panflute;
  • Pandoc Filters。

其中最重要的两个工具是Pandoc和Quarto。

Pandoc

Pandoc是通用文档转换工具,可以在Markdown、HTML、Word、LaTeX和其他格式之间进行转换。

Quarto

Quarto建立在Pandoc之上,进一步整合了Markdown写作、文献引用、交叉引用、代码执行、图表和多格式发布。

Quarto官方将其定位为开源科学与技术出版系统,并支持通过Jupyter、Knitr等机制嵌入Python、R、Julia和JavaScript计算内容。Quarto官方项目

5. Spell Checking and Linting:文本检查

项目收录了:

  • GNU Aspell;
  • Hunspell;
  • LanguageTool;
  • LanguageCheck;
  • Markdownlint;
  • proselint;
  • remark-lint;
  • restructuredtext-lint;
  • textlint;
  • textidote;
  • Vale;
  • write-good。

这些工具处理的问题不完全相同:

类型 主要检查内容
拼写检查 单词是否拼错
语法检查 主谓一致、冠词、时态等
风格检查 句子过长、表达含糊、冗余用词
标记语言检查 Markdown、reStructuredText格式
LaTeX文本检查 LaTeX论文中的语言和格式问题
自定义规范检查 术语、禁用词、组织写作规范

6. Templates:模板

项目提供了论文、书籍和博士论文等模板入口。

模板能够帮助统一:

  • 页面大小;
  • 字体;
  • 标题格式;
  • 页眉页脚;
  • 目录;
  • 图表样式;
  • 参考文献格式。

但需要注意:

模板只能解决排版问题,不能解决论文内容、论证和证据问题。

7. Tutorials:教程

这里提供了不同科研写作工作流的学习入口,例如:

  • 使用纯文本和Pandoc进行可持续写作;
  • 使用R Markdown撰写博士论文;
  • 将Jupyter Notebook转换为论文或演示文稿;
  • 使用RStudio、Zotero和其他工具组织论文。

8. Other Lists:其他资源合集

包括:

  • Awesome Jupyter;
  • Awesome LaTeX;
  • Awesome Markdown;
  • Delightful Open Science。

它们可以看作awesome-scientific-writing向相邻领域延伸的入口。


三、现代科研写作的六层结构

面对如此多的工具,新手最容易陷入一个误区:

先把所有软件都安装一遍,再看看哪个能用。

这种方式通常会得到一个混乱的电脑环境,却没有形成稳定工作流。

更好的做法是先理解科研写作的结构。
#mermaid-svg-LpeVgsvVFy6yXSnx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LpeVgsvVFy6yXSnx .error-icon{fill:#552222;}#mermaid-svg-LpeVgsvVFy6yXSnx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LpeVgsvVFy6yXSnx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LpeVgsvVFy6yXSnx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LpeVgsvVFy6yXSnx .marker.cross{stroke:#333333;}#mermaid-svg-LpeVgsvVFy6yXSnx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LpeVgsvVFy6yXSnx p{margin:0;}#mermaid-svg-LpeVgsvVFy6yXSnx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx .cluster-label text{fill:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx .cluster-label span{color:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx .cluster-label span p{background-color:transparent;}#mermaid-svg-LpeVgsvVFy6yXSnx .label text,#mermaid-svg-LpeVgsvVFy6yXSnx span{fill:#333;color:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx .node rect,#mermaid-svg-LpeVgsvVFy6yXSnx .node circle,#mermaid-svg-LpeVgsvVFy6yXSnx .node ellipse,#mermaid-svg-LpeVgsvVFy6yXSnx .node polygon,#mermaid-svg-LpeVgsvVFy6yXSnx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LpeVgsvVFy6yXSnx .rough-node .label text,#mermaid-svg-LpeVgsvVFy6yXSnx .node .label text,#mermaid-svg-LpeVgsvVFy6yXSnx .image-shape .label,#mermaid-svg-LpeVgsvVFy6yXSnx .icon-shape .label{text-anchor:middle;}#mermaid-svg-LpeVgsvVFy6yXSnx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LpeVgsvVFy6yXSnx .rough-node .label,#mermaid-svg-LpeVgsvVFy6yXSnx .node .label,#mermaid-svg-LpeVgsvVFy6yXSnx .image-shape .label,#mermaid-svg-LpeVgsvVFy6yXSnx .icon-shape .label{text-align:center;}#mermaid-svg-LpeVgsvVFy6yXSnx .node.clickable{cursor:pointer;}#mermaid-svg-LpeVgsvVFy6yXSnx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LpeVgsvVFy6yXSnx .arrowheadPath{fill:#333333;}#mermaid-svg-LpeVgsvVFy6yXSnx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LpeVgsvVFy6yXSnx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LpeVgsvVFy6yXSnx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LpeVgsvVFy6yXSnx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LpeVgsvVFy6yXSnx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LpeVgsvVFy6yXSnx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LpeVgsvVFy6yXSnx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LpeVgsvVFy6yXSnx .cluster text{fill:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx .cluster span{color:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LpeVgsvVFy6yXSnx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LpeVgsvVFy6yXSnx rect.text{fill:none;stroke-width:0;}#mermaid-svg-LpeVgsvVFy6yXSnx .icon-shape,#mermaid-svg-LpeVgsvVFy6yXSnx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LpeVgsvVFy6yXSnx .icon-shape p,#mermaid-svg-LpeVgsvVFy6yXSnx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LpeVgsvVFy6yXSnx .icon-shape .label rect,#mermaid-svg-LpeVgsvVFy6yXSnx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LpeVgsvVFy6yXSnx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LpeVgsvVFy6yXSnx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LpeVgsvVFy6yXSnx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 写作层

Markdown、Quarto、MyST
引用层

Zotero、BibTeX、CSL
计算层

Python、R、Julia、Jupyter
可视化层

Matplotlib、Mermaid、Graphviz
转换层

Quarto、Pandoc
输出层

HTML、PDF、DOCX
质量控制层

Vale、LanguageTool、Git

第一层:写作源文件

这是你真正维护的论文内容。

传统方式的源文件可能是:

  • Word文档;
  • LaTeX文件;
  • Markdown文件;
  • Quarto文件;
  • Jupyter Notebook。

本文选择Quarto的.qmd文件作为主源文件。

第二层:文献与引用

文献不应当手工复制到论文末尾,而应通过结构化数据库管理。

本文采用:

text 复制代码
Zotero
  ↓
Better BibTeX
  ↓
references.bib
  ↓
Quarto正文中的引用键
  ↓
自动生成参考文献列表

第三层:数据与计算

论文中的数值、统计和图表应尽量来自:

  • CSV;
  • Excel;
  • 数据库;
  • Python;
  • R;
  • Julia;
  • Jupyter Notebook。

第四层:图表和可视化

图表可以来自:

  • Python;
  • R;
  • Mermaid;
  • Graphviz;
  • diagrams.net
  • 其他科研绘图软件。

第五层:转换与渲染

Quarto和Pandoc负责把源文件转换为最终格式。

第六层:质量控制

包括:

  • 拼写和语言检查;
  • 引用核验;
  • Git版本管理;
  • 输出文件检查;
  • 期刊规范检查;
  • 人工科学审查。

理解这六层后,就不会再问:

Zotero和Quarto哪个更好?

因为二者解决的是不同问题。


四、三套推荐工具组合

路线一:零代码入门

推荐组合:

text 复制代码
Zettlr + Zotero + Pandoc

适合:

  • 不熟悉命令行;
  • 主要撰写文字内容;
  • 不需要嵌入Python或R;
  • 希望获得接近传统编辑器的体验。

路线二:科研人员推荐路线

推荐组合:

text 复制代码
VS Code + Quarto + Zotero + Better BibTeX + Git

按需增加:

  • Python或R;
  • Mermaid;
  • LanguageTool或Vale。

适合:

  • 硕士生和博士生;
  • 机器学习研究者;
  • 数据科学研究者;
  • 需要公式、代码和实验图表;
  • 希望输出PDF、Word和HTML;
  • 希望进行版本管理。

本文将重点演示这条路线。

路线三:可复现科研进阶路线

推荐组合:

text 复制代码
Quarto/Jupyter Book
+ Jupyter Notebook
+ Python/R/Julia
+ Zotero
+ Git/GitHub
+ 自动构建

适合:

  • 计算科学;
  • 数据分析论文;
  • 在线教材;
  • 技术报告;
  • 需要定期更新的数据产品;
  • 需要重新执行代码并生成论文的项目。

五、本文将完成什么?

我们将创建一个小型科研论文项目:

面向序分类的预算约束主动学习方法

最终项目包含:

text 复制代码
active-learning-paper/
├── paper.qmd
├── _quarto.yml
├── references.bib
├── data/
│   └── results.csv
├── scripts/
│   └── plot_results.py
├── figures/
│   └── active-learning-workflow.svg
├── styles/
│   └── journal.csl
├── output/
├── README.md
└── .gitignore

最终能够输出:

text 复制代码
output/
├── paper.html
├── paper.pdf
└── paper.docx

需要说明:本文中的研究题目和实验数据只用于演示写作工作流,不能作为真实论文结果使用。


六、安装写作环境

1. 安装VS Code

从VS Code官方网站下载适合自己系统的安装程序:

Visual Studio Code

安装后打开扩展页面,建议安装:

  • Quarto;
  • Python;
  • Markdown相关扩展;
  • Git相关扩展。

Quarto官方的VS Code扩展提供:

  • Quarto文档预览;
  • Markdown语法高亮;
  • YAML配置提示;
  • 嵌入式代码补全;
  • 代码块运行功能。

具体功能可以查看Quarto的VS Code入门教程

2. 安装Quarto

从Quarto官方下载页面选择Windows、macOS或Linux版本:

下载Quarto

安装后打开终端,输入:

bash 复制代码
quarto --version

如果能够返回版本号,说明Quarto已经可以使用。

还可以检查安装状态:

bash 复制代码
quarto check

3. 安装Zotero

从Zotero官方下载页面安装桌面端:

下载Zotero

同时安装浏览器连接器。Zotero官方说明,桌面端配合Connector可以从Chrome、Firefox、Edge或Safari中保存文献和元数据。Zotero添加文献说明

安装后建议完成:

  1. 创建Zotero账户;
  2. 登录桌面端;
  3. 开启同步;
  4. 创建专门的论文Collection;
  5. 安装浏览器Connector;
  6. 测试能否从期刊网页保存论文。

4. 安装Better BibTeX

Better BibTeX是Zotero扩展,可以帮助生成稳定引用键和自动导出BibTeX文件。

安装步骤:

  1. 打开Better BibTeX安装页面
  2. 下载最新.xpi文件;
  3. 打开Zotero;
  4. 进入"工具";
  5. 打开插件管理;
  6. 点击右上角齿轮;
  7. 选择"Install Plugin From File";
  8. 选择刚才下载的.xpi文件;
  9. 完成安装并按提示重启Zotero。

需要注意:

  • Better BibTeX安装在Zotero中,不是安装到浏览器;
  • 使用Firefox下载时,应保存.xpi文件,不要让Firefox尝试把它作为浏览器插件安装。

5. 安装Git

前往Git官方网站:

下载Git

安装后验证:

bash 复制代码
git --version

6. 安装Python

如果论文需要运行Python代码,可以安装Python或Conda环境。

验证:

bash 复制代码
python --version

部分系统使用:

bash 复制代码
python3 --version

7. 安装PDF支持

Quarto生成PDF通常需要TeX环境。官方推荐使用TinyTeX,可执行:

bash 复制代码
quarto install tinytex

安装后查看工具状态:

bash 复制代码
quarto list tools

Quarto的PDF输出要求和TinyTeX安装方法可以参考PDF Basics


七、创建第一个Quarto科研项目

1. 创建项目

打开终端,进入希望保存论文的目录,然后运行:

bash 复制代码
quarto create project default active-learning-paper

也可以只运行:

bash 复制代码
quarto create project

然后根据提示选择项目类型和名称。

Quarto项目本质上是一个包含共享配置和论文源文件的目录。项目可以统一管理输出目录、引用文件、渲染方式和代码执行设置。Quarto项目说明

进入项目目录:

bash 复制代码
cd active-learning-paper

使用VS Code打开:

bash 复制代码
code .

如果系统没有配置code命令,也可以在VS Code中手动选择"打开文件夹"。

2. 创建目录

在项目中建立:

text 复制代码
data/
scripts/
figures/
styles/
output/

最终结构为:

text 复制代码
active-learning-paper/
├── paper.qmd
├── _quarto.yml
├── data/
├── scripts/
├── figures/
├── styles/
└── output/

3. 编写项目配置

创建或修改_quarto.yml

yaml 复制代码
project:
  type: default
  output-dir: output

bibliography: references.bib

execute:
  echo: false
  warning: false

format:
  html:
    toc: true
    number-sections: true
    embed-resources: true

  docx:
    toc: true
    number-sections: true

  pdf:
    toc: true
    number-sections: true
    keep-tex: true

配置含义:

配置 作用
output-dir 将生成文件集中放到output
bibliography 指定参考文献数据库
echo: false 默认不在论文中显示代码
warning: false 不显示普通运行警告
toc 生成目录
number-sections 自动给章节编号
embed-resources 将HTML资源嵌入单文件
keep-tex 生成PDF时保留中间LaTeX文件

4. 创建论文源文件

建立paper.qmd

markdown 复制代码
---
title: "Budget-aware Active Learning for Ordinal Classification"
subtitle: "A Reproducible Scientific Writing Example"
author: "Your Name"
date: last-modified
abstract: |
  本文使用一个面向序分类的预算约束主动学习问题,
  演示如何在Quarto中组织正文、引用、公式、图表、
  代码和多格式输出。所有实验数据均为教学示例,
  不代表真实研究结果。
---

# Introduction

Active learning attempts to reduce data acquisition costs by
selectively querying informative information.

# Method

本节介绍示例方法。

# Experiments

本节展示教学用实验结果。

# Discussion

本节讨论结果与局限性。

# References

5. 第一次预览

运行:

bash 复制代码
quarto preview paper.qmd

浏览器应当自动打开预览页面。

如果只想生成文件:

bash 复制代码
quarto render paper.qmd

Quarto官方CLI支持:

bash 复制代码
quarto render document.qmd
quarto render document.qmd --to html
quarto render document.qmd --to docx
quarto render document.qmd --to pdf

详细参数可参考Quarto Render命令


八、使用Zotero建立论文文献库

1. 创建论文Collection

在Zotero左侧区域新建Collection,例如:

text 复制代码
Active Learning Paper

不要直接把整个Zotero文献库全部导出到论文项目。更好的方式是:

每篇论文或每个项目对应一个Collection。

这样可以减少:

  • 无关文献;
  • 重复文献;
  • 过大的BibTeX文件;
  • 引用键冲突;
  • 合作者难以理解的问题。

2. 从网页保存文献

打开论文的正式页面,例如:

  • 出版商页面;
  • Crossref;
  • PubMed;
  • arXiv;
  • DBLP;
  • IEEE Xplore;
  • ACM Digital Library;
  • 学校图书馆数据库。

点击浏览器中的Zotero Connector按钮。

保存后必须检查:

  • Item Type;
  • Title;
  • Author;
  • Year;
  • Journal或Conference;
  • Volume;
  • Issue;
  • Pages或Article Number;
  • DOI;
  • URL;
  • 预印本和正式版本的关系。

自动导入不等于元数据一定正确。

3. 处理重复文献

Zotero左侧通常提供重复项目检查入口。合并前确认:

  • 是否确实为同一篇文献;
  • 是否一个是预印本、一个是正式发表版;
  • 哪条记录的DOI更完整;
  • 哪条记录包含PDF和笔记;
  • 是否需要保留两个版本。

4. 理解引用键

Better BibTeX会为文献生成引用键,例如:

text 复制代码
settlesActiveLearningLiterature2009

正文引用时不需要复制完整文献信息,只需要引用这个键。

引用键一旦已经用于论文,最好不要随意改变,否则正文中的引用会失效。


九、从Zotero自动导出references.bib

1. 导出Collection

在Zotero中:

  1. 右键论文Collection;
  2. 选择导出;
  3. 选择Better BibTeX或Better BibLaTeX;
  4. 将文件保存为:
text 复制代码
active-learning-paper/references.bib

Better BibTeX支持为纯文本写作工作流自动导出文献,并允许配置引用键生成方式。Better BibTeX导出说明

2. 开启自动更新

导出时如果出现"Keep Updated"或类似选项,应将其启用。

这样以后在Zotero中:

  • 新增文献;
  • 修改作者;
  • 修正标题;
  • 添加DOI;
  • 调整引用键;

references.bib可以自动更新。

3. 不要手工维护两个文献源

如果已经决定让Zotero作为文献主库,就不要同时:

  • 在Zotero中修改一份;
  • 又在references.bib中手工维护另一份。

更合理的规则是:

text 复制代码
Zotero = 权威文献源
references.bib = 自动导出的中间文件

手工修改自动导出的BibTeX文件,下一次自动导出时可能被覆盖。


十、在Quarto中插入引用

Quarto使用Pandoc生成引用和参考文献。至少需要:

  1. 包含引用语法的.qmd文档;
  2. 一个BibTeX或BibLaTeX文献文件;
  3. 可选的CSL引用样式。

官方说明见Quarto Citations

1. 括号式引用

markdown 复制代码
Active learning has been studied as a strategy for reducing
annotation costs [@settlesActiveLearningLiterature2009].

渲染后可能显示为:

text 复制代码
Active learning has been studied as a strategy for reducing
annotation costs (Settles, 2009).

具体格式由CSL决定。

2. 叙述式引用

markdown 复制代码
@settlesActiveLearningLiterature2009 provides a broad review
of active learning methods.

渲染后可能显示:

text 复制代码
Settles (2009) provides a broad review...

3. 同时引用多篇文献

markdown 复制代码
Several studies have examined related querying strategies
[@referenceA; @referenceB; @referenceC].

4. 引用特定页码

markdown 复制代码
[@referenceA, pp. 10-12]

5. 不要在找不到文献时编造引用键

下面这种做法是不正确的:

markdown 复制代码
[@smith2024novelmethod]

除非references.bib中确实存在这条记录。

如果尚未找到支撑文献,可以先写:

text 复制代码
[CITATION NEEDED]

等检索和核验完成后再插入。


十一、使用CSL切换参考文献格式

CSL即Citation Style Language,用于控制:

  • 文内引用;
  • 作者显示;
  • 年份;
  • 题名;
  • 期刊名称;
  • 卷期页码;
  • DOI;
  • 参考文献排序。

1. 获取CSL

可以通过Zotero的样式管理器安装样式,也可以从CSL样式库下载文件。

Zotero官方说明,用户可以从Style Repository中搜索并安装样式,也可以从本地.csl文件安装。Zotero引用样式说明

将样式保存到:

text 复制代码
styles/journal.csl

2. 在Quarto中配置

修改_quarto.yml

yaml 复制代码
bibliography: references.bib
csl: styles/journal.csl

重新渲染:

bash 复制代码
quarto render paper.qmd

正文和参考文献格式会根据CSL变化。

3. 投稿前仍需检查

即使CSL名称与期刊相同,也应检查:

  • 是否为最新版本;
  • 作者数量截断规则;
  • 期刊名是否缩写;
  • DOI格式;
  • 页码格式;
  • 在线优先论文;
  • 预印本;
  • 会议论文;
  • 数据集引用;
  • 软件引用。

十二、插入数学公式

Quarto支持常见LaTeX数学语法。

1. 行内公式

markdown 复制代码
The acquisition budget is denoted by $B$.

2. 独立公式

markdown 复制代码
$$
x^\star =
\arg\max_{x \in \mathcal{U}}
\frac{\mathcal{I}(x;Y \mid \mathcal{D})}{c(x)} .
$$

3. 带编号公式

markdown 复制代码
$$
x^\star =
\arg\max_{x \in \mathcal{U}}
\frac{\mathcal{I}(x;Y \mid \mathcal{D})}{c(x)} .
$$ {#eq-acquisition}

正文中引用:

markdown 复制代码
The acquisition rule is defined in @eq-acquisition.

这样公式编号会自动维护。

4. 多格式输出时避免过度依赖原始LaTeX

如果目标只有PDF,原始LaTeX环境非常灵活。

但Quarto官方特别提醒,原始LaTeX内容在渲染HTML或Word时可能被忽略。Quarto PDF说明

因此,如果计划同时导出HTML、PDF和DOCX,应尽量使用:

  • 标准Markdown;
  • Quarto交叉引用;
  • 标准数学语法;
  • 原生表格;
  • 通用图片格式。

十三、插入图片并自动编号

假设已有:

text 复制代码
figures/active-learning-workflow.svg

paper.qmd中写:

markdown 复制代码
![Budget-aware active learning workflow.](figures/active-learning-workflow.svg){#fig-workflow}

正文引用:

markdown 复制代码
The overall procedure is illustrated in @fig-workflow.

Quarto要求可交叉引用的图片标签以fig-开头。官方示例和规则见Quarto Figures

为什么不要手工写"图3"?

如果你手工写:

text 复制代码
如图3所示......

后来在前面插入一张新图,原来的图3可能变成图4,但正文不会自动更新。

使用:

markdown 复制代码
如@fig-workflow所示......

系统会自动维护编号。


十四、插入表格并自动引用

1. Markdown表格

markdown 复制代码
| Method | Macro-F1 | Acquisition Cost |
|:--|--:|--:|
| Proposed | 0.82 | 25 |
| Baseline A | 0.78 | 31 |
| Baseline B | 0.75 | 20 |

: Teaching example only. {#tbl-main-results}

正文中:

markdown 复制代码
The main teaching results are summarized in @tbl-main-results.

可交叉引用的表格标签应以tbl-开头。Quarto Tables

2. 表格中的数据必须可追溯

真实论文中需要知道:

  • 结果来自哪个数据文件;
  • 使用哪个脚本生成;
  • 使用多少个随机种子;
  • 报告均值、标准差还是置信区间;
  • 最优结果是否使用粗体;
  • 是否在相同数据划分上比较;
  • 是否存在缺失实验。

十五、让图表由实验数据自动生成

这是可复现写作最有价值的部分之一。

1. 准备数据

建立:

text 复制代码
data/results.csv

示例结构:

csv 复制代码
method,budget,seed,macro_f1
Proposed,10,1,0.68
Proposed,10,2,0.70
Proposed,20,1,0.75
Proposed,20,2,0.77
Baseline,10,1,0.63
Baseline,10,2,0.64
Baseline,20,1,0.69
Baseline,20,2,0.70

再次强调:这些数值仅用于教学。

2. 安装Python依赖

bash 复制代码
python -m pip install pandas matplotlib

如果使用虚拟环境,可以先创建:

bash 复制代码
python -m venv .venv

macOS或Linux激活:

bash 复制代码
source .venv/bin/activate

Windows PowerShell激活:

powershell 复制代码
.venv\Scripts\Activate.ps1

然后安装依赖。

3. 在Quarto中直接生成图

paper.qmd中加入:

markdown 复制代码
```{python}
#| label: fig-budget-performance
#| fig-cap: "Macro-F1 under different acquisition budgets. Teaching data only."
#| echo: false

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data/results.csv")

summary = (
    df.groupby(["method", "budget"], as_index=False)
      .agg(
          mean_macro_f1=("macro_f1", "mean"),
          std_macro_f1=("macro_f1", "std")
      )
)

for method, part in summary.groupby("method"):
    plt.plot(
        part["budget"],
        part["mean_macro_f1"],
        marker="o",
        label=method
    )

plt.xlabel("Acquisition budget")
plt.ylabel("Macro-F1")
plt.legend()
plt.tight_layout()
plt.show()
```

正文引用:

markdown 复制代码
The teaching result is shown in @fig-budget-performance.

4. 数据变化后会发生什么?

results.csv更新后:

  1. 重新渲染论文;
  2. Python代码重新读取数据;
  3. 图表重新生成;
  4. 新图自动进入论文;
  5. 图号和正文引用保持一致。

这比在Excel中手工复制数据、截图、再粘贴到Word更容易追踪。

5. 但自动生成不等于统计正确

上面的代码只演示自动化工作流,并没有完成严格统计分析。

真实论文还需要明确:

  • 每个种子是否构成独立重复;
  • 是否使用均值和标准差;
  • 是否报告标准误;
  • 置信区间如何计算;
  • 多算法比较是否需要多重校正;
  • 不同预算点是否来自相同实验运行;
  • 是否适合使用配对检验;
  • 数据集间的平均是否合理。

十六、使用Mermaid制作算法工作流

可以直接在Quarto中加入:

markdown 复制代码
```{mermaid}
flowchart LR
    A["Observed features"] --> B["Ordinal classifier"]
    B --> C["Uncertainty estimation"]
    C --> D["Feature utility evaluation"]
    D --> E["Acquire one feature"]
    E --> F["Update prediction"]
    F --> C
```

Mermaid特别适合:

  • 算法流程;
  • 数据处理流程;
  • 系统架构;
  • 决策流程;
  • 实验工作流。

对于需要高度自由排版的复杂论文示意图,diagrams.net、Illustrator、Inkscape或专业科研绘图工具可能更合适。

原则是:

流程图优先考虑结构是否清楚,科研示意图还需要考虑视觉层次和科学含义。


十七、一份源文件输出三种格式

1. 输出HTML

bash 复制代码
quarto render paper.qmd --to html

HTML适合:

  • 在线阅读;
  • 交互式图表;
  • 研究项目主页;
  • 补充材料;
  • 教学文档;
  • 内部分享。

Quarto的HTML格式支持目录、章节锚点、公式、响应式图片和引用悬停等功能。HTML输出说明

2. 输出Word

bash 复制代码
quarto render paper.qmd --to docx

Word适合:

  • 与不使用Markdown的合作者沟通;
  • 使用修订模式;
  • 期刊要求DOCX投稿;
  • 编辑部进行文字处理。

Quarto支持使用reference-doc指定Word参考样式文档。Quarto Word格式说明

例如:

yaml 复制代码
format:
  docx:
    reference-doc: styles/reference.docx

3. 输出PDF

bash 复制代码
quarto render paper.qmd --to pdf

PDF适合:

  • 正式投稿;
  • 打印;
  • 存档;
  • 固定版式阅读;
  • 预投稿检查。

4. 一次生成全部格式

如果_quarto.yml已经配置三个格式:

bash 复制代码
quarto render

Quarto会尝试生成所有目标格式。

5. 多格式输出不等于完全一致

三个格式可能存在差异:

内容 HTML PDF DOCX
交互图 支持较好 通常静态化 通常静态化
字体控制 CSS TeX或Typst Word样式
复杂LaTeX 有限 可能不兼容
页面布局 流式 固定 可编辑
SVG 通常良好 依赖工具链 需检查
期刊模板 有限 LaTeX模板较强 Word模板较常见

因此,每一种最终输出都必须单独验收。


十八、定制Word输出

有些期刊或课题组要求:

  • 特定标题字体;
  • 特定正文行距;
  • 指定图题和表题样式;
  • 特定页边距;
  • 指定参考文献格式。

可以先生成Word参考文档,再修改其样式。

Quarto官方给出了使用Word reference document控制DOCX外观的方法。Word Templates

典型思路:

  1. 生成默认参考文档;
  2. 用Word打开;
  3. 修改"标题1""标题2""正文""Caption"等样式;
  4. 保存为reference.docx
  5. 在Quarto中指定该文件;
  6. 重新生成论文。

需要注意:

reference document适合控制Word样式,但不能保证自动复刻所有复杂期刊模板。

特别复杂的投稿模板可能仍需最后在Word中调整。


十九、文本检查:让工具发现低级问题

科研论文中的问题可以分为四层。

第一层:拼写

例如:

text 复制代码
classfication

第二层:语法

例如:

text 复制代码
The experimental results shows...

第三层:表达

例如:

text 复制代码
It is very obvious that our method is extremely better.

第四层:科学论证

例如:

text 复制代码
Our method is universally superior to all existing methods.

文本检查工具通常擅长前三层的一部分,却不能自动验证第四层。

一个示例

原句:

text 复制代码
The results clearly proves that our method is very novel
and significantly better in all cases.

可能存在:

  • resultsproves主谓不一致;
  • clearly缺少必要性;
  • very novel是自我评价;
  • significantly可能暗示统计检验;
  • in all cases范围过大;
  • "证明"可能超过实验能够支持的结论。

更保守的版本:

text 复制代码
Across the evaluated datasets, the proposed method achieved
higher average Macro-F1 than the included baselines under
several acquisition budgets.

但即便这个版本,也需要核查:

  • 是否真的所有已评估数据集都更高;
  • 比较了哪些基线;
  • 是否只在部分预算下更高;
  • 报告的是平均值还是统计显著性。

推荐的检查顺序

text 复制代码
拼写
→ 语法
→ 风格
→ 术语一致性
→ 引用检查
→ 数值检查
→ 科学论证检查

不要试图用一个语法工具完成所有审稿工作。


二十、使用Git管理论文版本

1. 初始化仓库

进入项目目录:

bash 复制代码
git init

2. 创建.gitignore

例如:

gitignore 复制代码
.venv/
__pycache__/
.ipynb_checkpoints/
.DS_Store
*.aux
*.log
*.out
*.synctex.gz

是否忽略output/取决于团队策略。

如果希望Git只管理源文件,可以忽略:

gitignore 复制代码
output/

如果需要保存每个正式输出版本,则可以保留投稿节点的PDF或DOCX。

3. 第一次提交

bash 复制代码
git add .
git commit -m "Initialize reproducible paper project"

4. 完成一项修改后提交

例如:

bash 复制代码
git add paper.qmd references.bib
git commit -m "Add introduction and initial references"

加入实验结果:

bash 复制代码
git add data scripts paper.qmd
git commit -m "Add budget-performance experiment"

修改Discussion:

bash 复制代码
git add paper.qmd
git commit -m "Revise discussion and limitations"

5. 查看修改

bash 复制代码
git diff

查看已经暂存的修改:

bash 复制代码
git diff --staged

6. 为什么比"最终版2"更可靠?

传统方式:

text 复制代码
论文初稿.docx
论文修改版.docx
论文最终版.docx
论文最终版2.docx
论文最终版2导师修改.docx
论文最终版2导师修改最终.docx

Git方式:

text 复制代码
Commit 1:建立项目
Commit 2:完成引言
Commit 3:增加实验
Commit 4:重写讨论
Commit 5:提交前检查
Commit 6:Reviewer 1返修

每一个节点都有时间、修改内容和差异记录。


二十一、与合作者怎样协作?

工具选择不能只考虑主作者,还要考虑团队成员。

模式一:所有人都使用Git和Quarto

适合:

  • 计算机;
  • 机器学习;
  • 数据科学;
  • 软件工程;
  • 计算生物学;
  • 熟悉纯文本工具的团队。

优点:

  • 版本清晰;
  • 容易审查修改;
  • 数据和论文可同步;
  • 可以使用Pull Request。

缺点:

  • 学习成本较高;
  • 多人同时修改同一段文字可能发生冲突。

模式二:主作者使用Quarto,合作者使用Word

流程:

text 复制代码
主作者维护paper.qmd
        ↓
导出paper.docx
        ↓
合作者使用Word修订
        ↓
主作者查看修改
        ↓
把确认内容回写paper.qmd

这是比较现实的折中方案。

缺点是Word修订无法自动无损回写到Markdown,需要主作者人工整合。

模式三:正文Word,数据和图表使用可复现项目

如果团队无法接受Markdown,可以只把以下部分纳入Git:

  • 数据;
  • 绘图脚本;
  • 统计脚本;
  • 图表;
  • 补充材料;
  • 分析记录。

正文继续使用Word。

可复现写作不是非黑即白的,部分采用也有价值。


二十二、三套可直接采用的工作流

方案A:零代码科研写作

text 复制代码
Zotero
  ↓
Zettlr
  ↓
Pandoc
  ↓
Word/PDF

适合:

  • 人文社科;
  • 以文字为主的综述;
  • 不使用Python或R;
  • 不想接触大量命令。

方案B:机器学习科研写作

text 复制代码
Zotero + Better BibTeX
        ↓
VS Code + Quarto
        ↓
Python实验和绘图
        ↓
自动引用、公式、图表
        ↓
PDF + DOCX + HTML
        ↓
Git版本管理

适合:

  • 主动学习;
  • 深度学习;
  • 数据挖掘;
  • 模式识别;
  • 算法论文;
  • 实验驱动论文。

方案C:R语言科研写作

text 复制代码
Zotero
  ↓
RStudio + Quarto
  ↓
R代码和统计结果
  ↓
自动表格和图形
  ↓
HTML/PDF/DOCX
  ↓
Git

适合:

  • 统计学;
  • 医学研究;
  • 生态学;
  • 生物信息学;
  • 社会科学定量研究。

二十三、常见故障排查

1. quarto命令不存在

可能原因:

  • Quarto没有安装;
  • 安装后终端没有重启;
  • 系统PATH没有更新;
  • 使用了错误的终端环境。

检查:

bash 复制代码
quarto --version

如果失败,重新安装并重启终端或VS Code。

2. HTML可以生成,PDF失败

最常见原因是缺少TeX环境。

执行:

bash 复制代码
quarto install tinytex

然后检查:

bash 复制代码
quarto list tools

其他原因包括:

  • LaTeX包缺失;
  • 中文字体不可用;
  • SVG转换失败;
  • 原始LaTeX代码错误;
  • 文件路径包含异常字符。

3. 找不到引用

典型错误:

text 复制代码
citation not found

检查:

  • references.bib是否存在;
  • _quarto.yml中的路径是否正确;
  • 引用键大小写是否一致;
  • 引用键是否发生变化;
  • Zotero是否完成自动导出;
  • BibTeX文件是否包含该文献。

4. 文末没有参考文献

检查:

  • 正文是否实际使用了引用;
  • bibliography配置是否正确;
  • 是否存在拼写错误;
  • 文档是否成功完成渲染;
  • 是否需要显式添加References章节。

5. 图表不显示

检查:

  • 图片路径是否相对于paper.qmd
  • 文件是否真实存在;
  • 大小写是否一致;
  • SVG是否被目标格式支持;
  • Python代码是否成功运行;
  • 代码是否调用了plt.show()

6. 图号无法交叉引用

检查:

  • 图片标签是否以fig-开头;
  • 表格标签是否以tbl-开头;
  • 公式标签是否以eq-开头;
  • 正文是否使用@fig-name
  • 标签中是否使用了不推荐的下划线。

Quarto官方列出了交叉引用支持的图、表、公式、章节、定理和算法等标签。Cross References

7. Word排版与PDF差异很大

这是正常的。

解决方式:

  • 使用reference-doc控制Word样式;
  • 减少原始LaTeX;
  • 使用标准Markdown表格;
  • 检查图片格式;
  • 分别验收PDF和DOCX;
  • 最终投稿前允许少量格式调整。

8. Zotero更新后BibTeX没有变化

检查:

  • 是否启用了自动导出;
  • 导出的Collection是否正确;
  • 文件路径是否改变;
  • Better BibTeX插件是否正常;
  • 是否需要手动刷新自动导出。

9. 更改Zotero引用键后论文报错

说明正文仍然使用旧引用键。

解决方法:

  • 恢复原来的固定引用键;
  • 或全局替换正文引用键;
  • 在论文开始后尽量固定引用键;
  • 不要随意修改Better BibTeX引用键规则。

10. Git显示大量无意义文件变化

检查.gitignore,排除:

  • 临时文件;
  • Python缓存;
  • TeX中间文件;
  • Notebook检查点;
  • 系统隐藏文件;
  • 不需要跟踪的输出目录。

二十四、这套工作流不能解决什么?

1. 不能自动提高研究创新性

工具能够改善:

  • 文件组织;
  • 引用管理;
  • 格式一致性;
  • 图表更新;
  • 版本追踪。

但不能自动保证:

  • 问题重要;
  • 方法原创;
  • 理论正确;
  • 实验充分;
  • 结论可信。

2. 不能替代文献核验

Zotero导入的文献也可能有错误。

仍需检查:

  • 标题;
  • 作者;
  • 年份;
  • DOI;
  • 卷期页码;
  • 预印本与正式版本;
  • 文献是否支持具体论断。

3. 不能保证一键满足期刊模板

不同期刊可能要求:

  • Word模板;
  • LaTeX类文件;
  • 特定图像格式;
  • 单独上传图表;
  • 指定参考文献样式;
  • 独立的补充材料;
  • 特定元数据。

Quarto可以提供统一源文件,但最终仍需根据投稿指南处理。

4. 不能替代统计审查

自动生成的图表可能在技术上正确,但统计意义仍可能错误。

5. 不能完全消除Word

如果导师、合作者和编辑只使用Word,DOCX仍然是重要交付格式。


二十五、怎样与Codex结合?

再次强调:

awesome-scientific-writing本身不是Codex Skill。

但Codex非常适合帮助建立和维护这套工作流。

1. 让Codex推荐工具组合

text 复制代码
请阅读awesome-scientific-writing项目:

https://github.com/writing-resources/awesome-scientific-writing

我是机器学习研究者,主要使用Python、Zotero和Word。
请从项目收录的工具中,为我选择一套最小科研写作工具链。

要求:
1. 使用Quarto作为主源文件;
2. 支持BibTeX引用;
3. 支持Python自动生成图表;
4. 支持PDF、Word和HTML输出;
5. 使用Git管理版本;
6. 不要安装功能重复的软件;
7. 说明每个工具在工作流中的职责。

2. 让Codex创建论文项目

text 复制代码
请为一篇机器学习论文创建Quarto项目。

需要包含:
paper.qmd
_quarto.yml
references.bib
data/
scripts/
figures/
styles/
output/
README.md
.gitignore

要求:
1. 支持HTML、PDF和DOCX;
2. 使用references.bib;
3. 支持图表、公式和交叉引用;
4. 不要生成虚构实验结果;
5. 创建完成后执行一次最小渲染验证。

3. 让Codex处理渲染错误

text 复制代码
这个Quarto项目生成HTML成功,但生成PDF失败。
请先读取完整错误日志,定位根本原因。

只进行必要修改,不要删除论文内容,
也不要通过关闭PDF输出绕过问题。
修改后重新渲染并验证PDF能够打开。

4. 让Codex检查论文项目

text 复制代码
请审查这个科研写作项目,检查:

1. 所有引用键是否存在;
2. 所有图片路径是否有效;
3. 所有交叉引用是否解析;
4. 表格和公式是否自动编号;
5. Python图表能否重新生成;
6. HTML、PDF和DOCX是否都能输出;
7. 是否存在不应提交到Git的临时文件;
8. 是否存在写死在正文中的实验数值;
9. 不要修改研究结论。

5. 将个人规范封装成Skill

如果长期使用同一套规则,可以创建个人科研写作Skill,例如:

text 复制代码
scientific-writing-workflow/
├── SKILL.md
├── references/
│   ├── project-structure.md
│   ├── citation-policy.md
│   ├── figure-policy.md
│   └── submission-checklist.md
├── templates/
│   ├── paper.qmd
│   ├── _quarto.yml
│   └── .gitignore
└── scripts/
    └── verify_project.py

这个Skill可以规定:

  • 新论文采用什么目录;
  • 文献如何导出;
  • 引用键如何命名;
  • 图表输出哪些格式;
  • 如何生成Word和PDF;
  • 哪些内容禁止AI推测;
  • 投稿前必须执行哪些检查。

这是使用awesome-scientific-writing资源进一步构建的个人扩展,并不是原项目自带功能。


二十六、如何判断这套工作流是否适合自己?

非常适合

  • 使用Python或R开展研究;
  • 论文包含大量图表和公式;
  • 经常更新实验数据;
  • 需要生成多种格式;
  • 希望使用Git管理论文;
  • 希望论文和代码放在一起;
  • 愿意学习少量Markdown和命令行。

部分适合

  • 主要使用Word;
  • 合作者不熟悉纯文本;
  • 期刊只提供复杂DOCX模板;
  • 论文代码和数据较少;
  • 只写一次性短报告。

可能不适合

  • 完全不愿接触纯文本;
  • 团队规定所有内容必须在特定在线平台完成;
  • 论文涉及大量只能在Word中维护的复杂修订;
  • 没有时间学习和维护工具链;
  • 研究材料存在不适合进入当前计算环境的保密要求。

二十七、给初学者的五天入门路线

第一天:只安装Quarto

目标:

  • 创建一个.qmd文件;
  • 写标题和两个章节;
  • 生成HTML。

不要一开始就处理PDF、引用和Python。

第二天:接入Zotero

目标:

  • 建立一个Collection;
  • 保存三篇论文;
  • 检查元数据;
  • 导出references.bib
  • 在正文插入一条引用。

第三天:学习公式和交叉引用

目标:

  • 插入一个公式;
  • 插入一张图片;
  • 插入一个表格;
  • 在正文自动引用它们。

第四天:自动生成图表

目标:

  • 从CSV读取数据;
  • 用Python或R生成一张图;
  • 将图嵌入论文;
  • 修改数据后重新渲染。

第五天:多格式输出和Git

目标:

  • 输出HTML;
  • 输出Word;
  • 输出PDF;
  • 初始化Git;
  • 完成第一次提交;
  • 查看一次修改差异。

五天之后,再决定是否增加:

  • CSL;
  • Word参考模板;
  • Vale;
  • GitHub;
  • 自动构建;
  • 个人Codex Skill。

二十八、总结

awesome-scientific-writing不会替你写论文。

它不是一个AI Agent Skill,也不是安装后自动工作的科研平台。它更像是一张科学写作工具地图,帮助研究者认识:

  • 除了Word和LaTeX,还有哪些写作方式;
  • 如何管理参考文献;
  • 如何让数据自动生成图表;
  • 如何维护公式、图片和表格编号;
  • 如何从同一份源文件生成多种格式;
  • 如何检查文字质量;
  • 如何使用Git管理论文版本;
  • 如何把论文写作变成可以重复执行的流程。

真正值得学习的,不是清单中每一个工具,而是工具之间的分工:

text 复制代码
Zotero负责文献
Quarto负责组织论文
Python或R负责计算和图表
Pandoc负责格式转换
CSL负责引用样式
Git负责版本管理
文本检查工具负责低级错误
研究者负责科学事实、论证和结论

对于机器学习、主动学习和数据科学研究者,一条实用路线是:

text 复制代码
Zotero + Better BibTeX
        ↓
VS Code + Quarto
        ↓
Python实验和科研图表
        ↓
自动引用与交叉引用
        ↓
HTML + PDF + DOCX
        ↓
Git版本管理
        ↓
人工科学审查

这套工作流的价值不在于让论文写得更快,而在于让论文中的文字、引用、数据、图表和版本关系更加清楚。

最终目标不是"一键生成论文",而是:

让论文中的每一项关键内容都能够被找到、被检查、被更新和被追溯。


项目与官方文档

版本说明:本文依据2026年7月21日的公开项目与官方文档整理。工具版本、安装界面和配置选项可能继续变化,实际操作时请以对应项目的最新官方文档为准。

相关推荐
智慧地球(AI·Earth)10 个月前
智能体版中科院学术GPT上线内测!AI与科研的深度碰撞
人工智能·gpt·科研助手·学术智能体