关于 org-noter 令人烦恼的问题

【更新】目前尝试用 Zotero 来代替 Calibre,同时用 Bibtex 记录来保证笔记的引用,用 Org-noter 来找回引用的原始资料和上下文。

相关设置的参考这位数学博士的做法:金色飞贼小米的个人空间-金色飞贼小米个人主页-哔哩哔哩视频


有点烦恼,Calibredb.el 和 Org-noter 无法完美的配合,主要因为 Org-noter 采用古怪的定位笔记文件路径的方式(它采用启动一个 session 的方式来安排笔记文件的路径,而这个路径不可自定义)

而我努力了差不多有 4, 5 天, 也找不到合适的解决方案.

我现在希望重新确立一个更加严谨的笔记系统, 希望里面所记录的内容是可以找到对应出处的. 而整个流程最不能让人满意的, 就是 Org-noter, 我应该怎么弄, 才能够改变这个令人讨厌的插件呢? 一个想法是, 它应该采用类似 Org-roam V2 一样的做法, 将引用文献与笔记之间的关系储存在数据库里, 这样就可以避免倚赖文件名来进行检索和定位了.

我看到, Logseq 也在尝试推荐它的「数据库」版本, 做法也和 Org-roam V2 一样, 将关系储存在数据库里, 以提高检索的效率, 以及避免倚赖文件名定位这一脆弱的方法.

之前在 emacs-china 看到 @cireu 分享的 <终极 OS之梦>, 主要提到 “万物皆是数据库” 的思想, 这一思想的关键所在, 是在文件名之外, 提供了更多的 metadata, 为文件提供更丰富的维度; 此外, 也让文件以更丰富的方法进行组织和发现, 比如像 Calibre 这样为文件进行排序, 打标签, 打星标等等, 甚至可以提供更多的字段来丰富维度.

希望尽快提高自己的工程能力, 可以在 Org-noter 的基础上进行开发,形成 Org-roam + Calibredb + Org-noter + Org-roam-bibitex + helm-bibitex + org-ref 比较完美的笔记流组合.

2 个赞

最近正在将 pdf 文件,存入 “git lfs” 中。并且修改笔记的链接形式, 也是为了摆脱org link 的路径依赖。

希望对你有所帮助, 简单说明如下:

  1. 书的信息,存在 org 文件的entry 下面。 org文件就是“数据库”了。 org-ql 可以用作搜索工具。
* xxxx.pdf
:PROPERTIES:
:LFS-SHA256: 1341cdc9f8609757533f9abbe023d7abcb60cc034af92fafbe6a97b0225bc257
:LFS-NAME: xxxx.pdf
:LFS-SIZE: 83084304
:LFS-ORI:  /home/r/Downloads/xxxx.pdf
:ID:       92e108c7-3e0a-4f13-a432-7cfd015d0d4a
:END:

书本的介绍,任何信息。

  1. 原本pdf 的链接, 变成了。
[[lfs:pdf:92e108c7-3e0a-4f13-a432-7cfd015d0d4a::1][xxxx.pdf]]

lfs 是自己链接格式,主要功能是通过 org id ( “92e108c7-3e0a-4f13-a432-7cfd015d0d4a“),查找到 对应的 org entry(* xxxx.pdf) 。 最后,获得 “LFS-SHA256”,是该pdf的 “sha256” 。

  1. 文件存于 Large File Storage (lfs) 中。根据文件的“sha256”,从lfs 服务端,下载文件到本地 cache 文件架。 然后,修改链接信息,最终打开文件。

lfs 工具是 giftless (server 和 client)

4 个赞

我已经自己开始写笔记软件了…

树加编辑栏。

才开始使用 org-mode + org-roam,我的笔记里图片比较多, org-mode(emacs) 显示图片还是有点捉急, 放弃。

又体验了 logseq,纯大纲编辑,感觉不如一边是大纲一边是编辑栏符合我的胃口,放弃。

后来发现了 trilium,一边是树一边是编辑区(多种类型),不支持提醒,魔改又比较麻烦,放弃。

最终,感觉还是自己从头写一个符合自己的最好。

采用 react-arborist + tiptap || axum + deadpool-postgreSQL 的架构,网页编辑,私有部署,感觉快要折腾到我笔记管理的尽头了。。。

所以我感觉楼主

希望尽快提高自己的工程能力

后,也会走上自己写一个的道路,野心是随着自己的能力增长的。

5 个赞

一种做法是,不用 org-noter ,手动用 store link 方式插入链接

pdf 等基于文件路径的链接用 #+LINK: 新建一个变量名引用到具体的文件路径,如果文件位置移动了,修改一下赋值就可以,只需要改一个地方。

我确实有一些想法,但估计不会自己写,而是在 org-roam 的基础上进行二次拓展

和 org-noter 结合还是很有必要的,因为它可以随时回到笔记、标注的上下文中,而不必重头再翻阅一次原始资料。我之前就是用 Obsidian 来同步所有我在网络上标记的内容,但脱离了上下文之后,这些标注就死掉了,是没有意义和价值的。

橘生淮南则为橘,生淮北则为枳的感觉。

1 个赞

我发现,你的需求可能用 Supermemo 就能满足。不过,那个软件只有 Win,Mac 下还没见过同等强大的软件,除了 Emacs + Org-mode(但在间歇记忆法的表现上,也不如 Supermemo)。

提供一个不用 org-noter 的方法:如果是用 zotero 管理,需要引用原始资料的话,直接在 zotero 的 highlight 上复制粘贴就好了。粘贴过来是这样的。

“xxx” ([Ye 等, 2024, p. 3](zotero://select/library/items/3DLXUGX5)) ([pdf](zotero://open-pdf/library/items/94QWCZTL?page=3&annotation=Z7IXDCNE))

不过粘贴过来是一个markdown类型的连接,需要再处理一下。第二个链接就可以回到高亮处了。

这个确实因人而异了,我更倾向以下回答里的观点,笔记都是草稿性质的,不需要那么精确的对原文引用,有时候要注明出处,先贴一个总体链接,然后就像在纸质笔记上的,注明 p100 页或者第 3 段这样的标记就够了,根据这些信息打开链接很快也能找到(pdf mode 都可以直接输入页码跳转),如果上下文比较少,直接全部复制到 org 也更容易阅读,精确同步的代价比较大,会导致org 文件里meta 信息太杂乱,有时候甚至比笔记内容还多

我也使用 org-noter 来梳理一本书的主要脉络。对于需要连接到其他 PDF 的引用出处,我是使用 store-link 的方式。

比如:

图中光标的连连,回车后,就会弹出一个临时的 frame,跳转到出处的精确位置。

2024-05-27 15.37.58

看完出处后使用 delete-frame,杀掉临时的 frame。

1 个赞

这个观点蛮好的。 我以前做什么管理(时间任务、笔记)都要做的很精细很精细。最后发现,太精细了反而成为一种负担。大部分东西只需要粗糙即可。

这个功能不需要 org-noter ,只需要对org-ref 的 cite link进行hack就行,我的思路在 把阅读作为方法:从选书到笔记的经验分享 有简单分享:

关键是bib文件,这样就避免了文件路径的不稳定性。而有了bib文件,可以用zotero,也可以用calibre,只要保证生成的key保持不变就好。

可以看到,这是个cite链接,只是描述部分记录了页码和百分比(参考了org-pdftool的pdf链接)。光标放在上面会显示 bib 条目的信息:

点击链接可以打开org-ref的helm菜单,我定义了一些函数,可以用pdftool打开对应页面,也可以用pdf expert打开页面(借助keyboard maestro):

这也避免了使用zotero链接,只能用zotero浏览的问题。现在记录了文件路径+页码,就可以用喜欢的方式来打开pdf了。

保存这种链接,有两种方式:

  1. 是看完书批量导出,用脚本很容易实现,我用的 pdfhelper。这是一个处理pdf文件的python脚本,可以导出pdf中的注释。org-noter-plus配合pdfhelper使用,这样不会卡死emacs。online应该还是老版的依赖org-noter,有时间我再更新这个插件,还得想个合适的名字。
  2. 在emacs边看边记录,hack一下pdf中的store link方法就好

这种思路也可以用在epub文件,这次链接描述是参考了nov链接

1 个赞

非常棒的分享,不知道是否愿意公开你自定义的函数?

另,我现在对整个流程的理解和你类似,最终是 bib 文件,至于是 zotero 还是 calibre 都没关系,Emacs 只需要阅读 bib 这份索引即可。

我目前还没实现到 cite 的时候还能够直接引用到页码这个颗粒度,实际上我暂时放弃了直接回顾到原文的做法,而是尽量加强自己的笔记能力,和记忆能力。

让笔记足够的言简意赅,发现也很有好处,总结归纳逻辑能力均有所提高,记忆力也得到增强。因为我不是做学术,因此重判断,轻论据,目前这种情况还足够使用。

我现在用 zotero 7 来搜集和整理(能够兼容网页的搜集和整理,这点比较重要),希望有机会多切磋交流。

刚刚产生了一个想法,可以用 zotero 7 收集网页,用 calibre 来管理电子书,然后让 org-ref 或 org-citar 不同的插件来阅读不同的 bib 文件,你觉得可行吗?

自用,有点乱,可能有些调用函数没贴上来,您暂且将就

用pdftool或者nov打开cite链接

(defun yuchen/filter-file (file-list ext)
  (let* ((ext-files (cl-remove-if-not (lambda (file)
                                        (string-suffix-p (concat "." ext) file))
                                      file-list))
         (num-matches (length ext-files)))
    (cond
     ((= num-matches 0) nil)
     ((= num-matches 1) (car ext-files))
     (t (cl-find-if (lambda (file)
                          (and (not (string-match-p "中文翻译" file))  ;; 当有多个文件时,打开原文件,排除翻译
                               ))
                        ext-files)))))

(defun yuchen/get-target-doc (docs &optional doc-location)
  (let* ((epub-path (yuchen/filter-file docs "epub"))
         (pdf-path (yuchen/filter-file docs "pdf")))
    (cond
     ((= 0 (length docs)) nil)
     (doc-location (if (string-match ":" doc-location)
                       epub-path
                     pdf-path))
     (t (or epub-path pdf-path)))))

  (defun yuchen/org-ref-open-file-at-point-in-emacs (&optional ask-where-to-open)
    "Open the pdf for bibtex key under point if it exists."
    (interactive)
    (let* ((results (org-ref-get-bibtex-key-and-file))
           (key (car results))
           (docs (bibtex-completion-find-pdf key))
           (doc-location (nth 3
                              (org-link-edit--link-data)))
           (epub-path (yuchen/filter-file docs "epub"))
           (pdf-path (yuchen/filter-file docs "pdf"))
           (doc-path (yuchen/get-target-doc docs doc-location))
           (doc-type (file-name-extension doc-path))
           doc-buffer doc-window
           link-path)
      (if (and doc-path
               (file-exists-p doc-path))
          (progn
            (if doc-location
                (setq link-path (format "%s::%s" doc-path doc-location))
              (setq link-path doc-path))
            (setq doc-buffer (find-buffer-visiting doc-path))
            (setq doc-window (get-buffer-window doc-buffer t))
            (if (and (not ask-where-to-open)
                     doc-buffer
                     doc-window)
                (select-window doc-window)
              (ace-select-window))
            (cond
             ((string= doc-type "pdf")
              (org-pdftools-open-pdftools link-path))
             ((string= doc-type "epub")
              (if doc-location
                  (nov-org-link-follow link-path)
                (find-file doc-path))
              )))
        (message "No document found for %s" key))))

  (setq org-ref-open-pdf-function 'yuchen/org-ref-open-file-at-point-in-emacs)

从pdftool储存带有页码的cite链接

  (defun yuchen/org-pdftools-store-link ()
    "Store a link to a pdfview/pdfoccur buffer."
    (cond
     ((eq major-mode 'pdf-view-mode)
      (let* ((file (file-name-base (pdf-view-buffer-file-name)))
             (key (yuchen/org-ref-get-bibtex-key-by-file-path
                   file))
             (page (number-to-string (pdf-view-current-page)))
             )
        (if key
            (progn
              (org-link-store-props :type "cite"
                                    :link (format "cite:%s" key)
                                    :description page)
              )
          (org-link-store-props :type org-pdftools-link-prefix
                                :link (org-pdftools-get-link):description
                                page))))
     ((eq major-mode 'pdf-occur-buffer-mode)
      (let* ((paths (mapconcat #'identity
                               (mapcar #'car pdf-occur-search-documents)
                               "%&%"))
             (occur-search-string pdf-occur-search-string)
             (link (concat org-pdftools-link-prefix ":" paths
                           "@@" occur-search-string)))
        (org-link-store-props :type org-pdftools-link-prefix
                              :link link
                              :description (concat "Search: " occur-search-string))))))

  (advice-add #'org-pdftools-store-link :override #'yuchen/org-pdftools-store-link)
1 个赞

这当然是正道,我比较依赖引用到页码这个颗粒度是因为:

  1. 个人的输入的速度要大于输出的速度,可能输入七八本,才有一本会比较认真地深度加工。但是其他的笔记我也希望在未来被搜索到的时候,可以快速跳转到原文,进一步处理。
  2. 我的阅读和笔记过程是异步的,前者是在平板进行,大都是地铁通勤时间;后者在电脑进行。在电脑整理笔记的时候,有时需要跳转到原文,回顾上下文

没问题,zotero和calibre都可以导出bib且输出稳定的bib key。我现在用前者管理论文,后者管理图书。

1 个赞