Using pdf-tools & org-noter in Emacs and add my own features
安装pdftools
1 | (use-package pdf-tools |
注意:
配置完之后如果打不开pdf文件还要手动M-x执行一下 ‘pdf-tools-install’
原先在emacs中打开稍大点的pdf性能实在堪忧,欲Deprecated
仔细查看文档,原来文档里已经说了对linum mode支持不是很好,既然这样关闭pdf模式下的linum-mode就行了, 你可以写一个mode hook,在pdf-view-mode-hook下设置linum-mode 0。
PDFView模式
pdf-toolshttps://github.com/vedang/pdf-tools (PDF Tools is dead, long live PDF Tools. Development continues with this fork)https://github.com/politza/pdf-tools (An older/archived one)
不会产生一个可以保存使用的具体文件
对文件的annotaion会嵌入到pdf文件中。
可以实现对annotation的list展示/插入。在list中移动光标到notes,可以让pdf滚动到对应位置,一可以关闭同步滚动
C-c C-a l : list annotation (在pdfmode 窗口中按下)
C-c C-f : pdf annot list follow enable/diable (在Annots mode窗口中按下)
summary:是对于pdf文件的直接操作。
org-noter
https://github.com/weirdNox/org-noter
本身不带生成quota标签,需要一些手动地改造。
会生成一个具体文件。里面包含了pdf文件位置。
可以实现插入 i/M-i 一个在pdf中不可见的notes
滚动pdf使得org-noter自动光标跳转到指定位置。
可以通过快捷键,C-M-n/p/. Sync selected/next/current notes,在pdf跳转和note在光标,两边保持同步跳动,pdf上辉县市一个对应的位置箭头org-noter-create-skeleton: 可以将pdf中的outline/annotaion导出,与org-pdftools共存时会有bug,会出错,但是下面的org-pdftools中使用几乎同名的方法可以成功
summary:提供一个与pdf文件分离的annotaion文件,human-readable。通过org-noter可以实现pdf文件与annotaion文件的同步滚动。
(Optional) org-pdftools
https://github.com/fuxialexander/org-pdftools
可以在pdf文件中生成一个annotation,并且生成一个连接,这个连接记录了annotaion的具体信息比如id,因此可以具体找到他。
依赖pdf-tool,本身和org-noter无关,但是提供了与org-noter的一些集成,比如convert旧的org-noter为新的格式org-noter-pdftools-create-skeleton:可以将pdf中的outline/annotaion导出,org-noter的加强版,会带anno-idorg-store-link 可以创建一个annotaion,并生成复制一个当前页面的url,如果有选中文字的话会在pdf中高亮,并且url也会带上该anno-idorg-insert-last-stored-link 可以已经store的命令生成的url
org-noter-pdftools-convert-old-notes 旧格式到新格式:从原先NOTER_PAGE的属性转换为带id的url的形式,并且新增一个ID属性,也就是Anno-idorg-noter-pdftools-embed-all-org-note-to-pdf 在上一部转换过格式之后,可以将org文件中带anno-id的head嵌入到对应的pdf对应anno中,对于不带anno-id的head,会在该页面对应行上前面生成一个圆形白点的annotation。命令会把head所有内容一股脑儿全部写入comment中,包括properties
summary:提供连接本身很有用,其由于其本身并不提供一些联动的功能,连接包含的信息其实org-noter里生成的head里已经包含了,只不过org-noter的信息不是具体的annotaion,而是行的位置。
Summary 比较:
想要在分离的标注文件里保留必要信息,并解耦,还能够和pdf保持阅读时同步滚动,这个就是org-noter在做的事情。
想要包含annotaion的信息,就要记录pdf里annotaion的信息,这样虽然精确,但是这样耦合就大了,pdf里的annotaion一旦变更就和org-noter里信息对不上了,所以我想这也是org-noter没有做具体annotaion记录的原因。
其实想要精确的记录标注信息的话除了annotaionId还有一个信息可以记录,并且耦合性不那么大,那就是annotaion的region,也就是范围,可以作为org-noter记录行号的补充,同步仍然用行号,我们不去影响org-noter原本的逻辑,但是记录的region可以用作往pdf文件中插入标注数据,因为org-noter只能在emacs环境中使用,所以pdf文件中嵌入的标注在别的平台上使用的时候也是很重要的,嵌入的标注适用范围更广。
注意这里嵌入标注到pdf只是一个附加选项,因为从始至终所有标注信息都保存在一个对应的org文本文件中,这很解耦,也易于保存和进行version-control,信噪比高,你不需要保存一堆pdf标注软件为你生成的数据库或者信息,因为其中很多信息并不是我们所需要的。并且很重要的是human-readable,即使在恶劣的情况下,只要有基本的文本文件阅读设备,你的标注信息就是始终可读的。
魔改:
不过遗憾的事org-noter并没有提供这个根据org文件在pdf中同步插入标注的方法,于是我只能手动写了一个。
Emacs pdf-tools/ org-noter setting and modifier
added main features:
| keybind | funtion |
|---|---|
M-i |
create quote automatically (and insert hightlight region data into heading property) |
d |
org noter embed all org note to pdf (have to insert hightlight region data into heading property first) |
some mine navigation keybind
| keybind | funtion |
|---|---|
j |
scroll page up (don’t allow to across pages when reach edges) |
k |
scroll page down (don’t allow to across pages when reach edges) |
n |
scroll page up (allow to across pages when reach edges) |
p |
scroll page down (allow to across pages when reach edges) |