
我正在使用 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
可以從頭到尾選擇每個單字。