
Я использую Zathura, так как мне нравится его минималистичный подход, но я бы также перешел на MuPDF или что-нибудь еще, если бы это решило мою проблему.
Мне нужно выделить каждое слово (в документах PDF и epub) одно за другим от начала до конца, потому что я могу лучше сосредоточиться на тексте, если в нем есть какое-то движение. Мой подход заключался бы в выполнении поиска по регулярным выражениям, который соответствует каждому слову, но ни zathura, ни mupdf не поддерживают регулярные выражения в поиске. Есть ли способ сделать это?
Я бы попробовал форкнуть zathura, но, честно говоря, я не хочу тратить столько времени, если есть другой минимальный просмотрщик документов, совместимый с Gnu/Linux, который делает то, что мне нужно. И если есть какой-либо способ использовать терминальные инструменты, например, pdfgrep
для выделения результатов в zathura, это также справится с этой задачей.
решение1
Базовый выбор текста
СогласноЗатура страница Википедии:
Затура может искать текст и копировать текст в основное выделение X.
Это значит, что возможность выделять текст во время чтения встроена, хотя для этого, скорее всего, потребуется мышь (вам будет сложно найти решение для выделения с помощью клавиатуры).
Насколько минималистичный вам нужен? Я используюАтрил, немного облегченная вилкаЭвинс(Просмотрщик документов GNOME). Atril был создан как частьMATE Настольный компьютер(продолжение GNOME 2). Он довольно легкий, хотя все еще имеет зависимость от GTK+.
Другой вариант -Xpdfприложение. Смотрите такжеСписок программного обеспечения для работы с PDF в Википедии § Linux и Unix.
Регулярное выражение
Единственная (пригодная для использования) реализация поиска по регулярным выражениям, о которой я знаю, помимо инструментов командной строки, таких какpdfgrep, на самом деле ваш веб-браузер. Это не так удобно, но вот решение в Firefox: откройте PDF в Firefox и откройте Developer Tools Javascript Console (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
, которая выбирает каждое слово от начала до конца.