evince魔改记
正如我在前文使用 evince 和 Papers所述,evince、Papers和Edge都是优秀的软件,但也都有不足之处。
仅从功能性上而言,Papers完美契合需求。但它处理含大图片文件时的速度太慢,影响使用者阅读体验,阅读感被切碎的感觉。这个问题在Papers的Issues已被提到。但我感觉到这个Issue可能并不会被快速修复。因此我决定在Papers修复该Bug前,魔改Evince来契合我的需求。嗯,干这件事,对于正处于学术焦虑期的我而言,可能和刷一晚上视频类似(或许稍微好点),狠狠耽误主线剧情。。。奈何忍不住。。。
从源码安装
嗯,第一个问题就让我头疼。鉴于我的技术水平,我想我最讨厌的就是需要从源码安装软件了。
首先,现在是2025年11月5日,evince的最新releases版本是48.1,
[未完待续]
修改
同样由于我的代码水平和时间,我只能用最小的修改来达到类似的目的。一切都是在GPT和它的兄弟姐妹们的协助下完成的。
2025-11-05 在我用Llama3这篇文章测试,发现好像evince也不是很快啊。。。edge这么强吗?
为侧边栏的注释添加颜色
evince的侧边栏注释没有颜色,而我一般喜欢用不同颜色的注释表达不同的含义(这点我喜欢Papers)。

首先根据路径evince -> shell -> ev-sidebar-annotations.c,找到ev-sidebar-annotations.c文件,然后定位到job_finished_callback函数。可以看到下图的代码。

嗯,这个代码可太可爱了。这意味着我只需要拿到此时注释的颜色,然后用html就可以给它添加颜色了。
在中间添加
GdkRGBA rgba;
gchar *color_str = NULL;
ev_annotation_get_rgba (annot, &rgba);
color_str = g_strdup_printf ("#%02X%02X%02X",(int)(rgba.red * 255),(int)(rgba.green * 255),(int)(rgba.blue * 255));
再修改上图的代码为
if (contents && *contents != '\0')markup = g_strdup_printf ("<span foreground='%s' size='large'>★</span>%s", color_str, contents);
elsemarkup = g_strdup_printf ("<span foreground='%s' size='large'>★</span>%s", color_str, _("No Comment"));
在后面添加
g_free (color_str);
大致上就是这样

效果如下

其实我也不喜欢这个按照页面划分的多层注释,每次想要看注释都需要按按钮才能完整显示。如下图修改即可。

