Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] 同步主笔记文件夹到obsidian #45

Closed
kitaev-chen opened this issue Jun 5, 2022 · 19 comments
Closed

[Feature] 同步主笔记文件夹到obsidian #45

kitaev-chen opened this issue Jun 5, 2022 · 19 comments

Comments

@kitaev-chen
Copy link

kitaev-chen commented Jun 5, 2022

有没有考虑搞个ob插件,同步zotero的main notes到ob?以后主笔记多了还是有这个需求的。

可以参考ob微信读书插件的做法 ( https://github.com/zhaohongxuan/obsidian-weread-plugin ),
每个主笔记放入对应子文件夹,自己对这些笔记的再加工可以copy同步的主笔记,在上级目录编辑,以后再做进一步的整理 (当然也可以引用外部block的方式来reference这些主笔记):

-- Main Notes Folder for Synchronizing/
-- -- Folder 1 for Main Note 1/
-- -- -- Main Note 1.md
-- -- Folder N for Main Note N/
-- -- -- Main Note N.md
-- -- Self-Created Note 1.md (对Main Note 1的进一步加工和优化)
-- -- Self-Created Note M.md (整合几个Main Notes的自建文档)

加粗部分插件每次同步都会检查是否有更新/更改,自建部分插件不会改动。

@windingwind
Copy link
Owner

只能实现zo->ob的单向同步,从markdown转换回zo笔记将丢失信息。
另,如果用户手动更改了ob的笔记,自动同步会导致覆盖。

@kitaev-chen
Copy link
Author

只能实现zo->ob的单向同步,从markdown转换回zo笔记将丢失信息。 另,如果用户手动更改了ob的笔记,自动同步会导致覆盖。

对,微信读书插件也是这么干的,足够了。

zotero特别适合卡片式和主节点式的信息管理,ob则适合复杂精细的主题消化,以及大章节的书写(通过longform插件)。
也就是说,zotero负责系统化的收集和归总外在信息,ob则负责内在产出。zotero->ob的单向同步,以及同步信息的覆盖,已经很够用这种"ob参考,引用zotero的信息块"的workflow了。

至于引用的情况下,ob对同步内容的引用链,在更新后是否还有效,就不得而知了。实在不行,可以留几个特殊占用符,作为不覆盖区域的标记。

@yingker
Copy link

yingker commented Jun 8, 2022

我个人觉得单向同步就够了。但是我不会自动同步,就是简单的把main note导出为markdown格式,然后手动将markdown格式的main note 复制到OB的目录下,问题1:怎么做到自动同步呢?大神能否指点一下。
另外,问题2:将pdf标注的子笔记导入到主笔记后,主笔记只显示部分内容,不知为何?如下图,只显示红色字体那里,后面的内容就省略了,显得不太好看。

Snipaste_2022-06-09_06-29-37

@windingwind
Copy link
Owner

@yingker 链接文本是笔记的标题,也就是笔记第一行的内容。过长时会截取部分。
可以在第一行写一些文字。

@windingwind windingwind mentioned this issue Jun 14, 2022
Closed
38 tasks
@windingwind
Copy link
Owner

同步在实现过程中主要的问题是:笔记输出的过程中会发生转换,例如嵌入子笔记。这使同步并非简单地将笔记文件导出。
希望了解为何需要自动同步,比起导出有什么优势,在什么场景下使用?@kitaev-chen

@kitaev-chen
Copy link
Author

kitaev-chen commented Jun 15, 2022

@windingwind

同步的主要目的/优势在于:

  1. 多个 / 高频 改动文件导出的快速自动化
  2. 将有价值的参考笔记统一导入到ob (微信读书,zotero等),实现全md管理(图片可以用picgo图床),从而摆脱工具的依赖,也方便github版本控制

从第2点来看,其实所有的zotero notes都应该导出。不过从笔记方法的角度而言,zotero无非是个信息汇集器,全部导出没有必要。main notes的概念很好,相当于是这些notes的hub,是提炼过一遍的汇总型的notes。这些main notes在不多的时候,确实不需要同步,一个个手动就好了。但比较多的时候,尤其是高频改动的时候,还是在ob中一键同步比较方便。

使用场景的话,比如在zotero中会形成这样的文件结构:

-- zotero main notes folder/collection
-- -- 文献综述1
-- -- 文献综述2
-- -- ... ...
-- -- 课程A笔记
-- -- 课程B笔记
-- -- ... ...
-- -- 语料库_科研 // 科研文献中的英语表达,持续更新
-- -- 语料库_人文EN // 英文报刊小说中的英语表达,持续更新
-- -- 语料库_人文CN // 人文学科中的语言表达,持续更新
-- -- ... ...
-- -- 引文库_科研 // 科研文献中的观点提炼及转述,持续更新
-- -- 引文库_人文 // 人文学科中的观点提炼及转述,持续更新
-- -- ... ...

(注:语料或者引文可以在高亮/标注的时候用tag或者颜色管理,个人习惯用高亮的颜色来区分,比较方便过滤后导入不同的notes)

随着main notes的广泛使用,会有更多有新意的方法来汇总zotero中的notes和annotation,main notes的数量快速膨胀是必然的。

值得注意的是,微信读书插件在处理导出的时候,有一个比较聪明的做法值得借鉴:

对于每条高亮或者划线,都会预先自动生成了一个固定的块ID。这样在ob内部引用的时候,随着更新的覆盖,同样一个引用块的ID不变,从而不会造成无效引用。

@yingker
Copy link

yingker commented Jun 15, 2022 via email

@windingwind
Copy link
Owner

关于(自动)同步功能,基于快速实现的角度我有如下设想

  1. 不使用嵌入子笔记的导出方式,而是通过子笔记导出为单个markdown文件的方式。这是在近期版本引入的新功能,旨在将子笔记之间的互相链接关系保留,见[Feature] 模板中能否插入citation key,或者自动生成@citationkey这样命名的markdown,或者是能自定义默认文件名? #32 。优势是无需生成临时笔记,并可以只更新链接笔记中有修改的笔记,实现容易。
  2. 在导出文件时,如果采用子笔记导出为单个markdown文件的导出方式,则增加一个“自动同步”的选项。开启自动同步则会后台监视这个主笔记的变化,并在修改时执行后台导出。

欢迎各位从用户角度发表意见建议。

@yingker
Copy link

yingker commented Jun 16, 2022 via email

@windingwind
Copy link
Owner

@yingker
关于按照颜色或者标签导出,使用现有的模板功能即可实现根据某些标签or颜色将笔记或者条目批量合并入当前主笔记,再导出这个笔记即可。模板功能在主页有文档,如果有不明白可以再单独开一个issue讨论,我可以协助你制作你需要的模板。
关于付费,我所有的工作都是基于兴趣,也没有经济紧张,因此不需要付费。开通打赏很麻烦并且会给我带来压力,最好的支持就是使用、反馈并在网络和身边分享给有需要的人。

@windingwind
Copy link
Owner

@kitaev-chen @yingker
按照上述想法的自动同步实现已在v0.5.17支持。
导出的时候增加了一个自动同步选项(需要在”链接子笔记导出为单独md文件“模式下可用——实际上就是双链笔记模式)。选择自动同步导出后,本次导出的所有笔记都会被自动监听修改并定期自动导出。大约会在修改后30s进行一次同步,具体的同步逻辑由程序处理。
如果需要手动关闭同步,可以重新在主笔记中点击导出按钮,可以看同步目录、最近同步时间等。取消勾选自动同步并确定就可以永久关闭主笔记及其子笔记的自动同步。
image

@kitaev-chen
Copy link
Author

鼓掌,散花!

初步测试效果还不错,无论是 main note 还是 sub note,无论是 zotero 中 annotation 区域生成的图片,还是自己截图放进去的图片,都能成功同步。单就这一点而言,已经比以往的 mdnotes,bibnotes formatter, zotero integration 三套导出方案更胜一筹了。

导出标题略有点尴尬,尤其是 annotation 本身的导出,不过无关大局,一般很少有人单独导出 annotation 到 main note?

另外就是缺定制化模板了,以及定制化 attachements 的路径,甚至配置直接送图上图床,这个以后可以慢慢完善。

同步管理的话,要不要像 Better BibTeX 的 Automatic export 选项一样,在 zotero preferences 里面统一管理?

已经可以用起来了,非常赞,多谢!

@windingwind
Copy link
Owner

导出标题由模板控制,可以自定义格式和内容;定制化模板也是需要社区的分享和努力。我近期会把模板方面的文档整理一下。
同步管理后面计划做的。谢谢支持!
觉得方便的话,也欢迎在网上写教程或者视频推广,我自己开发以外没有太多时间去整理教程之类的,好用欢迎分享!

@yingker
Copy link

yingker commented Jun 23, 2022 via email

@kitaev-chen
Copy link
Author

发现个小问题,如果 main note 里引用了 annotation,所有同步取消之后 annotation 单独形成的文件依然在同步,禁用插件再开启同步别的文件后,也无法消除这个独立的 annotation 文件。当前同步文件列表及取消管理,有必要上了。

@windingwind
Copy link
Owner

发现个小问题,如果 main note 里引用了 annotation,所有同步取消之后 annotation 单独形成的文件依然在同步,禁用插件再开启同步别的文件后,也无法消除这个独立的 annotation 文件。当前同步文件列表及取消管理,有必要上了。

@kitaev-chen 取消主笔记同步的同时会把当前链接的笔记都一并取消同步,但有可能某些笔记先前链接但现在不再链接导致没有被取消同步。
目前可以在编辑-首选项-高级-设置编辑器里搜索syncNoteIds并修改值为空来取消所有同步。

image

@windingwind
Copy link
Owner

@kitaev-chen @yingker
新版本已支持同步列表功能,可批量/单独删改。在文件->Better Notes同步管理中,选中对应行进行操作。
4238395f84f49c304f2b5deb7e2141b

@yingker
Copy link

yingker commented Jul 8, 2022 via email

@windingwind
Copy link
Owner

@yingker 感谢分享,不过这个文章好像和插件没啥关系哈哈。笔记本身实现一个功能的路径很多,选择适合自己的方法和工具就好,效率第一

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants