Skip to content

Obsidian + Zotero 高级学术工作流

Zotero 是学术界广泛使用的文献管理工具,与 Obsidian 深度整合后,可以构建从文献收集到论文写作的完整工作流。本文介绍高级整合技巧。

前置准备

必要工具

工具用途费用
Obsidian笔记管理免费
Zotero 7+文献管理免费
Better BibTeXZotero 插件:自动生成引用键免费
Zotero IntegrationObsidian 插件:导入文献免费
Zotero Connector浏览器插件:一键保存文献免费

安装流程

  1. 安装 Zotero 7+ 并创建文献库
  2. 在 Zotero 中安装 Better BibTeX 插件
  3. 在 Obsidian 中安装 Zotero Integration 插件
  4. 配置导入模板(见下文)

Better BibTeX 配置

引用键格式

# Zotero → Better BibTeX → Citation keys
推荐格式:auth + year + title
示例:
  smith2023deep   → Smith (2023) "Deep Learning"
  wang2024graph   → Wang (2024) "Graph Neural Networks"

高级格式设置:
  [auth:lower][year][shorttitle3:lower]
  → smith2024dee (Smith 2024, title starts with "Deep")

自动导出设置

# Zotero → File → Export Library
1. 选择 BetterBibTeX 格式
2. 勾选 "Keep updated"(自动同步)
3. 保存为:vault/references/library.json
4. 设置定期更新间隔:5 分钟

Zotero Integration 插件配置

导入模板

在 Obsidian 中创建模板文件 templates/zotero-import.md

markdown
---
type: literature
citekey: "{{citekey}}"
title: "{{title}}"
authors: {{authors}}
year: {{year}}
journal: "{{containerTitle}}"
doi: "{{DOI}}"
url: "{{url}}"
tags: [literature, {{hashTags}}]
rating: 
status: to-read
imported: {{importDate}}
zotero: {{zoteroURI}}
---

# {{title}}

> **{{authors}}** ({{year}}). *{{containerTitle}}*.

## 📄 摘要

{{abstractNote}}

## 💡 核心观点

- 

## 📝 阅读笔记

### 研究背景

### 方法

### 主要发现

### 局限性

### 与我研究的关联

## ✍️ 引用

```bibtex
{{bibEntry}}

🔗 相关文献

dataview
LIST
FROM "literature"
WHERE contains(authors, "{{firstAuthor}}")
  AND file.name != this.file.name
SORT year DESC

### 插件设置

Obsidian → Settings → Zotero Integration

Import Format: Markdown Template: templates/zotero-import.md Import Path: literature/ Database: BetterBibTeX Citation Key Format:


## 高级工作流

### 工作流 1:文献收集与筛选

浏览器 → Zotero Connector → 自动保存

Zotero 中:

  1. 添加颜色标签 🟢 绿色 = 紧密相关,重点阅读 🟡 黄色 = 部分相关,浏览摘要 🔴 红色 = 无关,已排除

  2. 添加笔记标签 #to-read 待阅读 #reading 阅读中 #read 已读完 #annotated 已批注

Obsidian 中: 通过 Zotero Integration 导入 → 自动创建笔记 → 颜色标签同步为属性


### 工作流 2:PDF 批注同步

使用 [Zotero PDF Reader] 的批注功能,自动同步到 Obsidian:

```markdown
<!-- templates/zotero-annotations.md -->
## 📋 批注摘要

{{annotations}}

## 🏷️ 批注分类

{{annotList
  filter: color = "#ffd400"
  format: "💡 **{{text}}** (p.{{page}})\n\n{{comment}}"
}}

{{annotList
  filter: color = "#ff6666"
  format: "❗ **{{text}}** (p.{{page}})\n\n{{comment}}"
}}

批注颜色映射:

颜色含义Obsidian 标记
🟡 黄色重要内容💡 重要
🔴 红色关键定义❗ 关键
🔵 蓝色方法描述🔬 方法
🟢 绿色结果发现📊 结果
🟣 紫色引用参考📎 引用

工作流 3:文献综述自动生成

dataviewjs
// 自动生成文献综述页面
const literature = dv.pages('"literature"')
  .where(p => p.status === "read")
  .sort(p => p.year, 'desc');

dv.header(2, "📚 文献综述");

// 按主题分组
const byTopic = {};
for (let p of literature) {
  const topics = p.tags || ["未分类"];
  for (let tag of topics) {
    if (!tag.startsWith("literature")) {
      if (!byTopic[tag]) byTopic[tag] = [];
      byTopic[tag].push(p);
    }
  }
}

for (let [topic, papers] of Object.entries(byTopic).sort()) {
  dv.header(3, `## ${topic} (${papers.length} 篇)`);
  
  dv.table(
    ["引用", "年份", "评分", "关键发现"],
    papers.map(p => [
      `[[${p.file.name}|${p.citekey}]]`,
      p.year,
      p.rating ? "⭐".repeat(p.rating) : "—",
      p.keyFindings || "—"
    ])
  );
}

// 引用统计
dv.header(3, "📊 引用统计");
const years = {};
for (let p of literature) {
  years[p.year] = (years[p.year] || 0) + 1;
}

dv.table(
  ["年份", "论文数"],
  Object.entries(years).sort()
);

工作流 4:引用插入

在写作时快速插入引用:

markdown
<!-- 使用 Obsidian 的 Templater 创建引用宏 -->

<%*
// templates/insert-citation.md
const citeKey = await tp.system.prompt("输入引用键(如 smith2023deep)");
const literature = dv.pages(`"literature/${citeKey}"`);

if (literature.length > 0) {
  const paper = literature[0];
  const citation = `(${paper.authors.split(",")[0]} et al., ${paper.year})`;
  tR += citation;
} else {
  tR += `引用键 "${citeKey}" 未找到`;
}
-%>

工作流 5:论文写作集成

使用 Pandoc 将 Obsidian Markdown 转换为学术格式:

bash
# Markdown → Word(带参考文献)
pandoc draft.md \
  -o draft.docx \
  --reference-doc=template.docx \
  --bibliography=references/library.json \
  --csl=apa-7th.csl \
  --citeproc

# Markdown → PDF(LaTeX 排版)
pandoc draft.md \
  -o draft.pdf \
  --pdf-engine=xelatex \
  --bibliography=references/library.json \
  --csl=ieee.csl \
  --citeproc \
  -V CJKmainfont="Noto Sans CJK SC"

# Markdown → LaTeX
pandoc draft.md \
  -o draft.tex \
  --bibliography=references/library.json \
  --csl=apa-7th.csl \
  --citeproc

在 Obsidian 中使用引用语法:

markdown
## 文献综述

深度学习在自然语言处理领域取得了突破性进展 [@smith2023deep]。
特别是 Transformer 架构的提出 [@wang2024transformer],
彻底改变了序列建模的方式 [@brown2023language, @chen2024scaling]。

> 多项研究表明 [@lee2023survey; @zhang2024benchmark],
> 大规模预训练模型在下游任务上展现出强大的迁移能力。

自动化脚本

批量导入文献

dataviewjs
// 检查 Zotero 中有但 Obsidian 中没有的文献
const zoteroEntries = dv.pages('"literature"')
  .where(p => p.citekey)
  .map(p => p.citekey);

// 从 Zotero 导出的 JSON 读取
const response = await fetch("references/library.json");
const library = await response.json();

const missing = library.items.filter(item => 
  !zoteroEntries.includes(item.id)
);

if (missing.length > 0) {
  dv.header(3, `📋 ${missing.length} 篇文献未导入`);
  dv.table(
    ["引用键", "标题", "年份"],
    missing.map(item => [
      item.id,
      item.title,
      item.date || "—"
    ])
  );
} else {
  dv.paragraph("✅ 所有文献已导入");
}

文献阅读进度追踪

dataviewjs
const literature = dv.pages('"literature"');

const status = {
  "📋 待阅读": literature.where(p => p.status === "to-read").length,
  "📖 阅读中": literature.where(p => p.status === "reading").length,
  "✅ 已读完": literature.where(p => p.status === "read").length,
  "📝 已批注": literature.where(p => p.status === "annotated").length
};

dv.header(3, "📊 阅读进度");

const total = literature.length;
const completed = status["✅ 已读完"] + status["📝 已批注"];
const progress = total > 0 ? Math.round(completed / total * 100) : 0;

dv.table(
  ["状态", "数量", "占比"],
  Object.entries(status).map(([s, count]) => [
    s, count, total > 0 ? `${Math.round(count / total * 100)}%` : "—"
  ])
);

dv.paragraph(`总进度: ${progress}% (${completed}/${total})`);

推荐文件夹结构

vault/
├── literature/              # 文献笔记
│   ├── zotero-imports/     # Zotero 自动导入
│   └── manual/             # 手动创建
├── topics/                  # 主题笔记(跨文献整合)
│   ├── deep-learning.md
│   └── graph-networks.md
├── writing/                 # 论文写作
│   ├── drafts/             # 草稿
│   └── published/          # 已发表
├── projects/                # 研究项目
├── references/             # 参考文件
│   ├── library.json        # Zotero 导出的 BibTeX
│   ├── csl/                # 引用格式文件
│   │   ├── apa-7th.csl
│   │   └── ieee.csl
│   └── templates/          # Word/LaTeX 模板
├── templates/               # Obsidian 模板
│   ├── zotero-import.md
│   └── zotero-annotations.md
└── assets/                  # 图片与附件

常见问题

引用键冲突

问题:两个文献生成了相同的引用键
解决:在 Zotero Better BibTeX 设置中:
  1. 启用 "Pin" 引用键(防止自动更改)
  2. 手动修改冲突的引用键
  3. 使用更长的格式增加唯一性

PDF 批注未同步

问题:Zotero 中的 PDF 批注未出现在 Obsidian
解决:
  1. 确认 Zotero Integration 模板中包含 {{annotations}}
  2. 检查批注颜色是否在模板中映射
  3. 重新导入该文献(覆盖现有笔记)

Pandoc 中文乱码

bash
# 解决方案:使用 xelatex 引擎 + 中文字体
pandoc draft.md -o draft.pdf \
  --pdf-engine=xelatex \
  -V CJKmainfont="Noto Sans CJK SC" \
  -V mainfont="Times New Roman"

相关文档