输入 M-x org-zettel-ref-init
命令, 即可调用 “概览窗口”, 里面显示在原文里记录的注释, 以及被标记的文本.
- 每一次形成概览, 都将自动形成一份文献笔记, 保存到你自定义的文件夹里
- 快速笔记,
M-x org-zettel-ref-add-quick-note
即可直接在输入笔记 - 回顾文献笔记时, 可以从注释直接跳转回原文对应的位置, 重新阅读上下文
- 提供一套将其他格式的文档, 转换成 org 格式的方法
- 提供快速标记功能, 快速高亮标记
- 支持与 org-roam 和 denote 等知识管理工具的集成
- 灵活的文件关联机制,支持多种知识管理模式(普通模式、Denote、Org-roam)
如题所示, 左边是窗口显示的是原文, 右边窗口显示的是概览.
TL;DR 版本:
- 简单保存, 摘录或复制资料是不够的,需要对信息进行加工和处理才能转化为有用的知识
- Zettelkasten方法强调用自己的话总结/回顾和建立联系, 提供了多次信息加工的机会, 但很多介绍忽视了Luhmann处理大量文献笔记的方法
- 文献笔记是一种兼顾效率和深度的方法, 它记录要点和启发, 便于快速回顾和深入阅读, 同时有助于区分存量信息和增量信息
完整版本:
作为多年的笔记爱好者, 文字工作者, 我逐步体会到一些 “反常识”:
- 直接保存, 几乎是无用的.
- 直接摘录, 几乎是无用的.
- 直接复制, 几乎是无用的.
背后的原因是, 简单的搬运, 只是增加了资料, 而忽略将资料的再加工. 还记得这个经典的层递关系吗? 资料 -> 信息 -> 知识 -> 智慧.
Zettelkasten 方法总是强调让我们用自己的话总结, 要经常回顾过去的笔记, 增加笔记与笔记之间的联系, 从方法的角度, 它起码提供了 4-7 次信息加工的机会.
即便如此, 市面上讲述 Zettelkasten 的文字或视频, 总沉迷在介绍双链的狂热中, 陷入到直接资料保存的误区里 – 基本上忽略了 Niklas Luhmann 通过海量文献笔记处理资料的方法.
我引用一个数字, 在 Luhmann 留下的 90000 多张笔记卡片里, 有 10000 多张是文献笔记.
Luhmann 那令人惊叹的高产, 来自夸张的资料处理数量, 而这背后, 是他处理这些资料时体现的高效, 也就是文献笔记的制作.
Luhmann 有一个习惯, 是一边读, 一边记文献笔记. 他的书或者资料, 没有划线, 没有边注, 非常干净, 就好像没读过一样. 每一个文献笔记, 基本上是一份资料的索引. 只在必要时候, 他才会摘录书中的原文.
不过, 当我了解科研人员的制作文献笔记之后, 就发现, Luhmann 的文献笔记几乎和一般的科研文献笔记是一致的. 也是用自己的话注释, 同时记录这句话灵感在论文具体的出处, 等以后有机会再深入阅读.
换言之, 文献笔记这种方法, 是兼顾了效率和深度.
在没有必要对一份资料深入了解时, 用文献笔记记录要点(不是重要的内容, 而是对自己有用的启发); 等有必要深入时,再通过文献笔记快速找到对应上下文, 进行深度阅读和思考, 不用浪费时间重头再读.
除了兼顾效率和深度之外, 文献笔记还有一个好处, 那就是非常容易分辨存量信息和增量信息. 已经为类似概念, 重点做过注释的, 就是存量信息, 下次再另外一个资料里遇到, 就没有必要进行注释; 反之, 完全没有了解过的概念, 数据, 就值得添加注释, 记录出处. 让新知的发现变得更加容易.
org-zettel-ref-mode
仅能在 org-mode 启动时生效:
- 直接面向 org 文件
- 其他用户自定义由 org-mode 方式进行处理的文本格式文件, 比如: md, txt 等 在这种情况下, 面向该格式文件的 major-mode 的功能可能会受影响
不过, 我一般是将资料直接转成 org 格式保存, 因此第二种情况虽然存在, 但不常见.
- 下载
org-zettel-ref-mode.el
文件。 - 将文件放置在您的 Emacs 加载路径中(例如 =~/.emacs.d/lisp/=)。
- 在您的 Emacs 配置文件(如 ~/.emacs 或 ~/.emacs.d/init.el)中添加:
配置示例:
(use-package org-zettel-ref-mode
:ensure nil
:load-path "~/Documents/emacs/package/org-zettel-ref-mode/"
:init
(setq org-zettel-ref-overview-directory "~/Documents/notes/source-note/")
:config
(setq org-zettel-ref-mode-type 'denote)
;; (setq org-zettel-ref-mode-type 'org-roam)
;; (setq org-zettel-ref-mode-type 'normal)
(setq org-zettel-ref-python-file "~/Documents/emacs/package/org-zettel-ref-mode/convert-to-org.py")
(setq org-zettel-ref-temp-folder "~/Documents/temp_convert/")
(setq org-zettel-ref-reference-folder "~/Documents/ref/")
(setq org-zettel-ref-archive-folder "/Volumes/Collect/archives/")
(setq org-zettel-ref-debug t)
)
在任何 org-mode 缓冲区中,运行:
M-x org-zettel-ref-init
由于添加笔记的核心功能是在原文里添加 <<>> 目标链接(target link),但很多资料转换成 org 格式之后, 会自带很多 <<>> 的文本。
在第一次对 org 文件进行注释或标记文本之前, 可以用 org-zettel-ref-clean-targets
清理一下格式, 确保快速笔记的功能正常工作。
- 将光标放置在您想添加笔记的位置
M-x org-zettel-ref-add-quick-note
- 输入笔记名称和内容
- 在源文件中选中文本
M-x org-zettel-ref-quick-markup
- 选择自己希望的标记风格
默认自动同步:默认在保存源文件时自动执行。 手动同步:=M-x org-zettel-ref-sync-overview=
- 启动面板
M-x org-zettel-ref-list
提醒: 以下命令, 均在面板界面中执行.
- 重命名源文件 (“r”)
M-x org-zettel-ref-list-rename-file
按照 AUTHOR__TITLE==KEYWORDS.org 的固定格式进行重命名.
- 编辑/添加关键词 (“k”)
M-x org-zettel-ref-list-edite-keywords
可独立为源文件添加一个或多个关键词.
- 删除源文件
删除单个文件 (“d”)
M-x org-zettel-ref-list-delete-file
在列表里按下 “m” 标记多个文件, 然后执行 M-x org-zettel-ref-list-delete-marked-files
如果标记的文件不对, 按下 “u” 即可清除标记状态, 按下 “U” 可以直接清除所有标记状态
- 使用过滤器
简单过滤 (“/ r”): 使用 Author, Title, Keywords 作为过滤条件, 每次只能应用一个过滤条件
M-x org-zettel-filter-by-regexp
复杂过滤 (“/ m”): 可应用多个 Author, Title, Keyowrds 的过滤条件作为条件
- 不要随便修改笔记文件名. 如果修改了, 在源文件上再次添加快速笔记/标记, 在同步时, 会生成重复的笔记.
参考如下例子:
(setq org-zettel-ref-highlight-types
(append org-zettel-ref-highlight-types
'(("warning" . (:char "w"
:face (:background "#FFA726"
:foreground "#000000"
:extend t)
:name "warning"
:prefix "⚠️"))
("success" . (:char "s"
:face (:background "#66BB6A"
:foreground "#FFFFFF"
:extend t)
:name "success"
:prefix "✅")))))
高亮类型的配置。 每种类型应包含:
- :char 类型的单字符标识符
- :face 高亮的 face 属性
- :name 类型的显示名称
- :prefix 在概览中显示的符号
无需在标记两旁添加空格,即可让标记生效。该配置来自 @lijigang 和 @Eli 的贡献。
org-zettel-ref-mode 现在支持多种文件关联机制,不再完全依赖于文件名中的 “-overview” 后缀:
- 普通模式:仍然使用 “-overview” 后缀(为了向后兼容)
- Denote 模式:使用 Denote 的命名约定
- Org-roam 模式:使用 Org-roam 的命名约定和 ID 属性
如果您从旧版本升级,您的现有 “-overview” 文件仍然可以正常工作。但对于新文件,我们建议使用新的关联机制。
M-x org-zettel-ref-check-roam-db
函数,用于检查 org-roam 数据库状态。
(2024-08-29 更新)org-zettel-ref-mode 提供了 normal、org-roam、denote 三种模式,让笔记文件能够以对应的格式进行保存,比如,选用 org-roam 模式之后, 所保存的笔记文件, 会自动附上 id,方便检索。
配置方法:
(setq org-zettel-ref-mode-type 'normal) ;可选:'normal, 'denote, 'org-roam)
(setq org-zettel-ref-overview-directory "~/my-notes/overviews/")
禁用自动同步:
(org-zettel-ref-disable-auto-sync)
启用自动同步:
(org-zettel-ref-enable-auto-sync)
如果您在使用过程中遇到问题,可以启用调试模式来获取更多信息:
(setq org-zettel-ref-debug t)
org-zettel-ref-mode 现在支持直接通过 Emacs 调用外部 Python 脚本,用于将多种不同格式的电子文档转换成 org 文件。
- 多格式支持:
- 支持将 PDF、EPUB、HTML、Markdown 和 TXT 等格式转换为 Org 格式。
- 能够处理电子版和扫描版 PDF,支持中英文混合文档。
- OCR 功能:
- 使用 OCR 技术处理扫描版 PDF,支持中英文识别。
- 文件管理:
- 自动进行文件大小检查,防止处理过大的文件。
- 转换完成后,可以自动将源文件归档。
- 灵活配置:
- 支持自定义临时文件夹、参考资料文件夹和归档文件夹路径。
- 可以选择使用系统 Python、Conda 环境或虚拟环境。
- 配置 Python 环境:
(setq org-zettel-ref-python-environment 'conda) ; 或 'system, 'venv (setq org-zettel-ref-python-env-name "your-env-name") ; 如果使用 Conda 或 venv
- 设置脚本路径和文件夹:
(setq org-zettel-ref-python-file "~/path/to/document_convert_to_org.py") (setq org-zettel-ref-temp-folder "~/Documents/temp_convert/") ; 该文件夹用于存放等待转换的文档 (setq org-zettel-ref-reference-folder "~/Documents/ref/") ; 该文件夹用于存放转换后的参考资料 (setq org-zettel-ref-archive-folder "/Volumes/Collect/archives/") ; 该文件夹用于存放转换后的归档文件
- 运行转换脚本:
使用
M-x org-zettel-ref-run-python-script
命令来执行转换操作。
- 确保已安装所有必要的 Python 库(如 PyPDF2、pdf2image、pytesseract 等)。
- 对于扫描版 PDF,转换过程可能较慢,且效果可能不如电子版理想。
- 建议优先使用该脚本处理电子版 PDF、EPUB、Markdown 和 TXT 文档。
- 使用浏览器扩展(如 Markdownload)将网页保存为 Markdown 文件。
- 使用 org-zettel-ref-mode 的 Python 脚本将 Markdown 文件转换为 Org 格式。
- 对于音频文件,可以先使用 Whisper 转换为文本,然后再使用脚本转换为 Org 格式。
这一功能极大地扩展了 org-zettel-ref-mode 的应用范围,使其成为一个更全面的知识管理工具。
推荐使用该脚本对 ePub, markdown, txt, 电子版 PDF 文档进行转换.
不推荐将该脚本用于转换扫描版 PDF, 原因是转换速度慢, 而且转换的效果也不非常好.
以下是 org-zettel-ref-mode 提供的主要可调用指令:
M-x org-zettel-ref-init
: 初始化 org-zettel-ref-mode,创建或打开概览文件M-x org-zettel-ref-add-quick-note
: 在当前位置添加快速笔记M-x org-zettel-ref-sync-overview
: 手动同步概览文件M-x org-zettel-ref-quick-markup
: 快速为选中文本添加标记M-x org-zettel-ref-clean-multiple-targets
: 清理源文件中的多余标记- (新增)
M-x org-zettel-ref-list
: 打开源文件管理面板 - (已弃用)
M-x org-zettel-ref-enable-auto-sync
: 启用自动同步 - (已弃用)=M-x org-zettel-ref-disable-auto-sync=: 禁用自动同步
M-x org-zettel-ref-check-roam-db
: 检查 org-roam 数据库状态M-x org-zettel-ref-run-python-script
: 运行指定的 Python 脚本
以下是 org-zettel-ref-mode 的主要可配置变量:
setq org-zettel-ref-overview-directory "~/org-zettel-ref-overviews/"
: 设置概览文件存储目录setq org-zettel-ref-mode-type 'normal
: 设置模式类型(可选:’normal, ‘denote, ‘org-roam)
- =setq org-zettel-ref-include-empty-notes nil=: 设置是否包含空的快速笔记
setq org-zettel-ref-quick-markup-key "C-c m"
: 设置快速标记的快捷键setq org-zettel-ref-add-quick-note "C-c n"
: 设置快速笔记的快捷键setq org-zettel-ref-python-environment 'system
: 设置 Python 环境类型(可选:’system, ‘conda, ‘venv)setq org-zettel-ref-python-env-name nil
: 设置 Python 环境名称setq org-zettel-ref-python-file "~/path/to/script.py"
: 设置 Python 脚本文件路径setq org-zettel-ref-temp-folder "~/Documents/temp_convert/"
: 设置临时文件夹路径(该文件夹用于存放等待转换的文档)setq org-zettel-ref-reference-folder "~/Documents/ref/"
: 设置参考资料文件夹路径setq org-zettel-ref-archive-folder "/Volumes/Collect/archives/"
: 设置归档文件夹路径setq org-zettel-ref-debug nil
: 设置是否启用调试模式setq org-zettel-ref-overview-width-ratio 0.3
: 设置概览窗口宽度比例setq org-zettel-ref-overview-min-width 30
: 设置概览窗口最小宽度setq org-zettel-ref-highlight-types
: 设置标记文本的类型与高亮样式setq org-zettel-ref-overview-image-directory
”~/Documents/org-zettel-ref-images/”=: 设置概览笔记中图片的保存路径
Q: 如何在多个项目之间使用 org-zettel-ref-mode?
A: 您可以为每个项目设置不同的概览目录,使用 let-bound
的方式在项目切换时动态改变 org-zettel-ref-overview-directory
的值。
Q: 概览文件变得太大怎么办?
A: 考虑按主题或时间周期分割概览文件。您可以自定义 org-zettel-ref-create-or-open-overview-file
函数来实现这一点。
Q: 如何备份我的笔记? A: 将源文件和概览文件都纳入您的版本控制系统(如 Git)中。另外,定期执行文件系统级别的备份也是好的做法。
Q: 如何检查org-roam数据库的状态?
A: 您可以使用 M-x org-zettel-ref-check-roam-db
命令来检查org-roam数据库的状态,包括版本信息、节点数量等。
如果遇到问题:
- 确保您使用的是最新版本的 org-zettel-ref-mode。
- 检查您的 Emacs 配置,确保没有冲突的设置。
- 尝试在一个干净的 Emacs 配置(emacs -q)中重现问题。
- 查看
*Messages*
缓冲区中的任何错误消息。 - 如果问题与Python脚本或Conda环境有关,请检查您的Python环境配置。
- 启用调试模式(设置
org-zettel-ref-debug
为t
)以获取更详细的日志信息。
如果问题持续存在,请通过 GitHub 仓库提交 issue,附上问题描述、重现步骤和调试日志。
- v0.5.2 (2024-11-24)
- 修复:恢复 convert-to-org.py 转换文件后,保留原文件里的图片的特性,转换后的 org 文件也可以浏览原文件里的图片
- 优化:改进交互逻辑,当源文件切换或关闭时,其对应的 overview 文件会自动关闭
- 新增:org-zettel-ref-rename-source-file 命令,在管理面板之外,也能够用 AUTHOR__TITLE==KEYWORDS.org 的格式重命名当前的源文件
- 优化:org-zettel-ref-remove-makred 命令,让它可以移除源文件中的高亮,在移除之后,会自动重新为高亮,和笔记编号
- v0.5.1 (2024-11-19)
- 优化:convert-to-org.py 的转换流程,恢复使用 Pandoc 处理 txt、md、epub 等格式,增加简单的文件名处理逻辑
- 修复:创建概览文件时的逻辑,不再创建“* Marked Text” 和 “* Quick Notes” 的标题,因为在新的标记和笔记系统下,无需再创建这些标题
- v0.5 (2024-11-12)
- 升级:标记与笔记系统重大升级 (升级之后变化见 #Demo)
- 与 org-mode 自带样式解耦
- 笔记 ID 自动编号
- 自动高亮所标记的内容
- 概览 headline 下的内容不会被清理
- 标记图片,将标记的图片同步到概览笔记
- 必须运行
org-zettel-ref-add-image
命令,将图片添加到概览笔记 - 使用前需要设置
org-zettel-ref-overview-image-directory
配置项
- 必须运行
- 概览笔记的样式升级:
- 笔记的标题现在显示笔记的 ID
- 使用 org-mode 的 Headlines 样式
- 笔记的图标前缀,区分笔记类型
- 新增自定义配置项 (自定义标记文本类型与高亮样式,见 #高级功能):
org-zettel-ref-highlight-types
定义/添加标记的类型与高亮的样式org-zettel-ref-overview-image-directory
定义概览笔记的图片保存路径
- 无痛升级,沿用过去的习惯命令
- 注意:在执行 org-zettel-ref-mark-text 时,请不要选择 note 类型,和 image 类型
- 如需要添加快速笔记,请继续使用过去的命令 org-zettel-ref-add-quick-note
- 如此设计的缘由,是需要为快速笔记和图片笔记提供高亮样式
- 升级:标记与笔记系统重大升级 (升级之后变化见 #Demo)
- v0.4.4 (2024-11-09)
- 修复
- 运行 org-zettel-ref-list-rename-file 后,org-zettel-ref-watch-directory 报错的问题
- 修复
- v0.4.3 (2024-11-08)
- 优化
- 概览文件窗口的显示方式。新增定义概览窗口宽度的配置项:
org-zettel-ref-overview-width-ratio
依照源文件窗口的比例设置概览窗口的宽度,默认 0.3 - 新增定义概览窗口最小宽度的配置项:
org-zettel-ref-overview-min-width
设置概览窗口的最小宽度,默认 30
- 概览文件窗口的显示方式。新增定义概览窗口宽度的配置项:
- 优化
- v0.4.2 (2024-11-08)
- 修复
- 在 org-zettel-ref-db-init 中的错误 #15
- 执行 org-zettel-ref-init 后,源文件光标位置丢失的问题
- 在概览文件中,无法正确跳转回源文件的问题
- 修复
- v0.4.1 (2024-11-06)
- 优化 conver_to_pdf.py
- 放弃使用 OCR 转换 PDF
- 优化 conver_to_pdf.py
- v0.4 (2024-11-04)
- 注意! 如果是之前使用过 org-zettel-ref-mode 的用户,新版本第一次运行时, 需执行
M-x org-zettel-ref-migrate
升级哈希表里的数据结构。 - 新功能: 为源文件提供可视化管理面板
org-zettel-ref-list
(详细见 基本用法 -> 管理源文件) :- 可视化: 提供参考文献管理面板
- 多栏目列表: 以列表的方式展示当前的参考文献, 目前有 Title, Author, Keywords 等关键栏目
- 重命名: 在该面板上可按照 AUTHOR__TITILE==KEYWORDS.org 的格式重命名文件
- 排序: 点击栏目名, 可以按照以字母顺序为列表里的内容排序
- 过滤: 按照条件过滤源文件条目, 可以按照 Author, Title 或 Keywords 来过滤. 当前只能过滤 1 个条件.
- 升级
org-zettel-ref-db.el
哈希表的数据结构 - 升级
org-zettel-ref-clean-multiple-targets
- 修复:
- 恢复不小心删除的自定义配置项
org-zettel-ref-debug
- 恢复不小心删除的自定义配置项
- 提醒
- 由于存储源文件和概览文件之间映射关系的哈希表升级到 2.0, 以下函数废弃:
- org-zettel-ref-check-and-repair-links, org-zettel-ref-maintenance-menu, org-zettel-ref-refresh-index, org-zettel-ref-rescan-overview-files, org-zettel-ref-status.
- 由于存储源文件和概览文件之间映射关系的哈希表升级到 2.0, 以下函数废弃:
- 注意! 如果是之前使用过 org-zettel-ref-mode 的用户,新版本第一次运行时, 需执行
- v0.3.3 Stable release (2024-09-28)
- 后端优化,继续提高代码的健壮性,模块化,改善插件的稳定性
- 修复 0.3.2 版本中,由于更新概览文件过快,导致快速笔记和标记文本同步时产生错乱的问题
- 修复 0.3.2 版本中,因为文件名创建策略的原因,导致 Denote 模式下,概览文件经常重复创建的问题
- 修复 0.3.2 版本中,因为索引文件未能正确检索,导致概览文件未能正确同步的问题
经过这段时间的开发,org-zettel-ref-mode 的代码终于变得模块化,开始具备一定的健壮性,在 0.4 版本之前将不会推出新功能,转而对代码进一步的组件化,提供更多自定义选项。
- v0.3.2 (2024-09-24)
- 改善 Org-roam v2 兼容性:可以将文献笔记的记录更新到 Org-roam 的数据库
- 文件命名的细微改善
- 精简代码,模块化
- v0.3.1 (2024-09-15)
- 兼容 emacs 30 以后的版本
- 概览文件现在有更加优雅的文件名,减少 overview 这个字眼的重复出现
- 修复偶发的恶性 (setq, 5) 错误
- 去除 org-zettel-ref-mode.el 代码里对 conda.el 的依赖,将 Python 运行环境的判断完全交给 convert-to-org.py
- 自动通过 python venv 命令设置虚拟环境,并安装所需的库(!注意:更新到该版本后启动 convert-to-org.py 时,会重新安装第三方库,如果对运行环境有洁癖,请自行手动清理)
- 改进概览文件的同步机制,不再出现针对同一个源文件重复新建概览文件的情况,同时改进功能的健壮性和稳定性
- 使用哈希表记录源文件与概览文件之间的映射关系,有一点很棒,你不必手动设置哈希表文件的位置
- 为此概览文件的文件头增加了新的属性块:
#+SOURCE-FILE:
以确认映射关系 - 新增命令:
org-zettel-ref-check-and-repair-links - Check and repair links between source files and overview files.org-zettel-ref-maintenance-menu - Display a menu for org-zettel-ref-mode maintenance operations.org-zettel-ref-refresh-index - Manually refresh the overview index.org-zettel-ref-rescan-overview-files - Rescan the overview directory and update the index.org-zettel-ref-status - Display the current status of org-zettel-ref-mode.
- v0.3 (2024-09-03)
- 增强了与org-roam的集成
- 改进了Conda环境支持
- 优化了文件处理逻辑
- 改进了概览文件同步机制
- 添加了调试功能
- 集成了外部Python脚本功能
- v0.2 (2024-08-29)
- 完善整体工作流, 提供自动化脚本处理不同格式的电子文档
- 改善与其他工具的连接性, 通过自定义配置, org-zettel-ref-mode 生成的笔记文件可以以 denote, org-roam 的方式进行保存
- 提供快速标记功能, 在源文件中高亮了某一个段落后, 可启动
org-zettel-quick-markup
快速为高亮文本添加加粗、斜体、下划线等标记
- v0.1 (2024-8-21): 初始发布
- 实现基本的快速笔记和标记功能
- 添加自动同步机制
- 提供自定义选项
我们欢迎社区贡献! 以下是一些参与方式:
- 报告 bugs 或提出功能建议。
- 提交补丁或拉取请求。
- 改进文档或编写教程。
- 分享您使用 org-zettel-ref-mode 的经验和技巧。
org-zettel-ref-mode 的灵感借鉴了朋友 @lijigang 的 org-marked-text-overview, 由于自己改造的地方太多, 在经过沟通的情况下, 单独发布为 org-zettel-ref-mode.
✅ 改进性能,优化大型文件的处理
✅ 与其他知识管理 Package 的集成, 比如 org-roam, denote
✅ 提供源文件管理面板
- 持续优化 conver_to_org.py 脚本
- 支持更多文件格式(可能)
- 增加更多自定义选项
- 优化文件关联机制,减少对特定文件名后缀的依赖
如果喜欢, 请 Star.