大家有使用插件pdf-tools 的吗,出来交流下

由于自己经常和pdf文件打交道,每天接触很多的paper,自己在emacs环境下使用pdf-tools来浏览并且管理自己的pdf文件,使用这个插件的原因主要是这个插件可以将 自己的工作整合到一起,比如和org-mode的配合使用,latex配好使用。但是一直感觉这个 pdf-tools 的速度真实奇怪,有时候快,有时候感觉特别慢。这个很大程度上已经已经影响到自己的日常工作。 平时自己还是用 Evince, Zathura等pdf阅读器,也都是自己经常使用的阅读器。

什么速度了?具体什么时候什么东西快?什么时候什么东西慢?

这个不太清楚,给我的感觉,有时候觉得很快,有时候觉得很慢。没感觉什么特定的时候。

你写过 PDF 阅读器的代码就知道了.

本质上是读取PDF文档数据, 然后放到 poppler 或者 mupdf 这种库去渲染成图片, 然后放到绘制引擎去渲染 cairo/gtk/qt

像Linux传统的PDF阅读器, 都是把所有PDF的数据读完以后, 然后统一渲染, 这样的结果结果就是大文件的时候, 你会看到这些PDF阅读器打开有一个进度条, 那就是正在读取所有PDF页面的数据, 这样做的就是用空间换时间, 加载的时候慢, 但是一旦都读到内存中以后, 切换就超快了, 因为本质都是在内存中抓取数据进行实时渲染, 当然内存占用也大.

还有一种方法, 就是像PDF-Tools这样, 只读第一页, 这样的问题就是启动速度和内存在用都小, 换来的问题就是, 读取页面后, 在已经读取的当前页面滚动会快, 因为内存数据, 但是一旦你要翻页的时候, 它会临时从文档中抓取下一页的PDF内容, 然后根据屏幕做图片资源转换和渲染工作. 读取/转换/渲染就需要时间, 所以你会看到卡一下. 一旦读取后就又快了, 所以 PDF-Tools虽然用了 poppler 库, 但是没有使用任何缓存机制, 导致一换页就卡一下, 然读完就流畅, 如果你读书很快, 就会有一顿滑行一段, 又一顿又滑行一段时间的感觉.

https://github.com/manateelazycat/emacs-application-framework EAF后端渲染是用的 mupdf (mupdf 比 poppler 性能快太多了) 采用的是读取用户进度的当前页的做法, 启动速度快而且内存超低, 同时, 当你在滚动当前页面空闲的时候, 自动预先缓存上一页和下一页的内容, 这样就保证既快速加载, 又不会卡顿.

目前Emacs读PDF和预览Org-mode/Markdown的体验最好的还是 EAF, 当然只是在 Linux 下, Mac 的Swift太封闭了, 我尝试过几次用Emacs编写Swift移植EAF, 但是网上的资料除了用 XCode 外就不会Swift编程一样, 尝试几次就厌烦Swift了, 虽然 Swift 设计的很好, 但是离开Emacs就不想写代码了.

9 个赞

你做的插件,有没有单独的一个插件pdf浏览的,我看到你的框架好像都放到一起了。另外,你的pdf插件好像没有标注批注复制功能,选中复制这个基本功能自己还是经常使用到的。

楼上是写好了英文,然后翻译成中文的吗?

咳,你可以搜一下「欧化中文」

1 个赞

什么鬼,直接中文啊

歪楼警告:

因为你说的中文受英语等西方语言的语法侵蚀有点严重, 显得比较重复和啰嗦. 你可以自己上网搜索一下"欧化中文"看看, 就能明白了. 其实另一方面也能说明汉语的包容力和表现能力很强, 哈哈


另附一个你那层楼回复的一个比较传统中文的表述:

你做的框架里的pdf浏览功能有单独分开一个插件吗, 我看你好像都放在一起了.

另外, 你的pdf插件好像没有标注批注复制功能, 我还是经常用到选中复制这个基本功能的.