![PDF 阅读器中的正则表达式搜索](https://linux22.com/image/170058/PDF%20%E9%98%85%E8%AF%BB%E5%99%A8%E4%B8%AD%E7%9A%84%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%90%9C%E7%B4%A2.png)
我正在使用 zathura,因为我喜欢它的极简主义方法,但如果这能解决我的问题,我也会切换到 mupdf 或其他任何东西。
我需要从头到尾逐个突出显示每个单词(在 PDF 和 epub 文档中),因为如果文本中有某种动作,我可以更好地专注于文本。我的方法是执行匹配每个单词的正则表达式搜索,但 zathura 和 mupdf 都不支持搜索中的正则表达式。有没有办法做到这一点?
我会尝试分叉 zathura,但说实话,如果有另一个最小的 Gnu/Linux 兼容文档查看器可以满足我的需要,我真的不想花那么多时间。如果有任何方法可以使用终端工具(例如 pdfgrep
在 zathura 中突出显示结果),也可以完成这项工作。
答案1
基本文本选择
根据扎图拉维基百科页面:
Zathura 可以搜索文本并将文本复制到主 X 选区
这意味着您在阅读时选择文本的能力是内置的,尽管它可能需要使用鼠标(您很难找到键盘控制选择的解决方案)。
您需要多简约?我用阿特里尔,一个重量稍轻的叉子表明(GNOME 文档查看器)。 Atril 是作为MATE桌面版(GNOME 2 的延续)。它非常轻量,尽管它仍然具有 GTK+ 依赖性。
另一种选择是Xpdf应用。也可以看看维基百科的 PDF 软件列表 § Linux 和 Unix。
正则表达式
我所知道的唯一(可用的)正则表达式搜索实现,除了诸如命令行工具之外pdfgrep,实际上是您的网络浏览器。这不太好用,但 Firefox 中有一个解决方案:在 Firefox 中打开 PDF,然后打开开发人员工具 Javascript 控制台(F12 或 Ctrl+Shift+K)。运行这些命令:
» pdf = document.getElementById("viewer").innerText.replace(/[ \t]+/g, " ");
» function grep(what, context=100) { return pdf.match(RegExp(`[\\s\\S]{0,${context}}${what}[\\s\\S]{0,${context}}`), "img"); }
» grep("put your regex here")
» grep("get more context", 300)
请注意,您必须转义反斜杠。该grep
命令有一个可选的第二个参数,即每侧提供的上下文字符数(默认= 100)。
Chrome 和其他带有内置 PDF 查看器的浏览器应该非常相似,但是您必须弄清楚哪个 HTML 对象保存了实际的 PDF 内容(这是id="viewer"
Firefox 的元素,不确定其他浏览器 - 在最坏的情况下,只是使用document.body
代替document.getElementById("viewer")
. 您可以匹配目录中的项目。)
答案2
如果我没记错的话,Adobe Acrobat Reader
有一个名为的函数read out loud
,它从头到尾选择每个单词。