

摘要: 介绍一个好用的PDF阅读器:sioyek。该阅读器在GitHub上有8K Star。并且它能和Zotero结合使用。
Sioyek is a PDF viewer with a focus on textbooks and research papers.
Sioyek是一个专门为科研专业文本阅读而生的阅读器。它有类似于vim编辑器的键位操作,同时支持自定义键位和拓展插件。
Sioyek在阅读科研文章或是较长的工具手册时,有许多方便的功能。
下图是Sioyek的Usage:

它的功能亮点在于:
Vim编辑器类似的键位操作History Navigation,在长文本阅读中体验良好Smart Jump功能,能够智能跳跃想去到的文章位置Portals功能支持窗口关联总而言之,这是一个专门阅读专业文本的性能强大的PDF阅读器。
结合Zotero使用,需要在Zotero中将默认PDF阅读器修改成sioyek.exe的位置。这样,在Zotero中打开的pdf文本就会使用Sioyek打开。
但是会出现一个问题,那就是Sioyek上的注释和书签不能保存下来到Zotero中。这需要我们在Sioyek的相关配置文件中修改参数。以本人的win11操作系统为例子:
## Embed the annotations (highlights and bookmarks) into a new PDF file so they are visible to other PDF readers
embed_annotations ex
取消这一个命令的注释,后边添加的ex是保存含有注释的pdf的快捷键,你可以自定义为你自己喜欢的键位。
这样,在pdf文本中添加了新注释后,你可以ex保存一个含有注释的新pdf文件到指定的路径下。
但是,可以预想到,每次保存都这么操作:创建一个新的pdf文件、手动添加文件名、手动选择保存路径。尤其是Zotero的文件存储路径不好寻找、文件名不好识别。一连串负反馈,使得体验感很差。这时我们可以添加一个文件到Sioyek的安装路径之下:
let state = sioyek_api.get_json_state();
let path = state["document_path"];
let parts = path.split(/[\\/]/); // 兼容 Windows 路径
let file_name = parts[parts.length - 1];
let file_name_parts = file_name.split('.');
let today = new Date();
let yyyy = today.getFullYear();
let mm = String(today.getMonth() + 1).padStart(2, '0');
let dd = String(today.getDate()).padStart(2, '0');
let date_str = yyyy + mm + dd;
let new_name = file_name_parts[0] + "_" + date_str + "." + file_name_parts[1];
let dir = parts.slice(0, parts.length - 1).join('/');
let new_path = dir + '/' + new_name;
// 读取目录下所有pdf文件
let fs = sioyek_api.fs;
let files = fs.readdirSync(dir);
let base_name = file_name_parts[0];
let ext = file_name_parts[1];
let regex = new RegExp('^' + base_name + '_\\d{8}\\.' + ext + '$');
let matched = files.filter(f => regex.test(f));
// 如果匹配的文件超过3个,按日期排序,删除最旧的
if (matched.length > 3) {
matched.sort((a, b) => {
let da = a.match(/_(\\d{8})\./)[1];
let db = b.match(/_(\\d{8})\./)[1];
return da.localeCompare(db);
});
let toDelete = matched.slice(0, matched.length - 3);
for (let f of toDelete) {
fs.unlinkSync(dir + '/' + f);
}
}
// 执行批注嵌入
sioyek.embed_annotations(new_path);
然后在以下文件中添加命令:
new_js_command _embed embed.js
最后在配置文件中任意一个空白行添加键位绑定命令:
_embed es
这样,只要我们每次注释完,按下es,都能在当前编辑的PDF路径下创建一个新的、带有注释的PDF(文件名为:原文件名_日期.pdf)。同时,会检索新建文件前是否超过3个,如果超过就删除日期最早的文件。
一款高效的 PDF 阅读器,支持 Vim 风格操作、标记、书签、同步等高级功能。1
本节所有快捷键均为默认设置,可通过编辑 keys_user.config 文件自定义。每个按键都对应一个命令。
添加快捷键示例:
move_down j
| 操作 | 命令 | 默认按键 |
|---|---|---|
| 打开命令面板 | command | : |
| 向下移动 | move_down | j |
| 向上移动 | move_up | k |
| ... | ... | ... |
按
:可打开所有可用命令的可搜索列表。
| 操作 | 命令 | 快捷键 |
|---|---|---|
| 打开文件选择菜单 | open_document | o |
| 最近文件列表 | open_prev_doc | Shift+o (O) |
| 嵌入式文件浏览器 | open_document_embedded | Ctrl+o |
| 嵌入式浏览器(当前目录) | open_document_embedded_from_current_path | Ctrl+Shift+o |
| 新窗口打开文件 | --new-window | Ctrl+t |
| 窗口切换 | goto_window |
delete 可移除文件(不会从磁盘删除)。| 操作 | 命令 | 快捷键 |
|---|---|---|
| 向下/上/左/右移动 | move_down/up/left/right | 方向键 |
| 跳转首页/末页 | goto_begining/goto_end | gg / G |
| 跳转指定页 | goto_page_with_page_number | 页码+gg / HOME |
| 向下/上翻页 | screen_down/up | space / Shift+space |
| 下一页/上一页 | next_page/previous_page | Ctrl+PageDown / Ctrl+PageUp |
| 目录跳转 | goto_toc | t |
| 下一/上一章节 | next_chapter/prev_chapter | gc / gC |
| 切换滚动条 | toggle_scrollbar |
| 操作 | 命令 | 快捷键 |
|---|---|---|
| 放大/缩小 | zoom_in/zoom_out | + / - |
| 适应窗口宽度 | fit_to_page_width | f9 |
| 智能适应宽度 | fit_to_page_width_smart | f10 |
Sioyek 保留完整的浏览历史,支持跨文档跳转。
| 操作 | 命令 | 快捷键 |
|---|---|---|
| 后退/前进 | prev_state/next_state | Backspace / Shift+Backspace / Ctrl+←/→ |
` 再右键或再按 ` 可返回上次标记。j/k 移动可视标记。f7 切换可视滚动模式。ruler_mode 设为 0 仅高亮下方,1 为矩形。l 可对当前行引用创建概览。] 或 Ctrl+] 可创建 portal 或跳转到定义。/ 或 Ctrl+f 打开搜索菜单。n/N 跳转下/上一个匹配。c/ 仅在当前章节搜索。<起始页,终止页>关键词 限定搜索范围,如 <20,30>Figure。overview_next_item/overview_prev_item 可对搜索结果打开概览。m 后跟字母设定标记,如 ma。 `a 跳转到标记。b 添加书签,输入描述。gb 查看当前文档书签,gB 查看所有文档书签。db 删除最近书签,或在列表中选中后按 delete。h+字母创建高亮,如 ha。add_highlight_with_current_type 用当前类型高亮。toggle_select_highlight 切换高亮选择模式。gh 查看当前文档高亮,gH 查看所有文档高亮。goto_next_highlight/goto_prev_highlight 导航高亮。dh,或在高亮列表中选中后按 delete。p 创建 portal 起点,导航到目标后再按 p 完成。p 后点击 PDF 链接或中键点击可自动创建 portal。f12 打开/关闭辅助窗口。dp 删除最近 portal。goto_portal 跳转到 portal 目标。Shift+p 编辑 portal 目标。: 打开命令菜单,列出所有命令及其快捷键。ss/sl 可在 Google Scholar/Library Genesis 搜索。prefs_user.config 中的 search_url_* 配置。middle_click_search_engine 和 shift_middle_click_search_engine 配置中键搜索引擎。f4 切换 synctex 模式,右键点击文本可在 tex 文件中定位。prefs.config 中 inverse_search_command 配置反向搜索命令。例如 VS Code:inverse_search_command "C:\path\to\vscode\Code.exe" "C:\path\to\vscode\resources\app\out\cli.js" --ms-enable-electron-run-as-node -r -g "%1:%2"
"latex-workshop.view.pdf.external.synctex.command": "C:\\path\\to\\sioyek.exe",
"latex-workshop.view.pdf.external.synctex.args": [
"--inverse-search",
"\"C:\\path\\to\\vscode\\Code.exe\" \"C:\\path\\to\\vscode\\resources\\app\\out\\cli.js\" --ms-enable-electron-run-as-node -r -g \"%1:%2\"",
"--reuse-instance",
"--forward-search-file",
"%TEX%",
"--forward-search-line",
"%LINE%",
"%PDF%"
]
let g:vimtex_view_method = 'sioyek'
local.db 和 shared.db 两个数据库文件。local.db 存储本地数据,shared.db 存储可跨设备同步的数据(如标记、书签、portal 等)。prefs_user.config 可设置 shared_database_path,如设为 Dropbox 路径可自动同步。export/import 命令导出/导入数据。f12 切换全屏。copy_window_size_config 命令保存当前窗口配置。Ctrl+c 复制。f 并输入数字可用键盘打开 PDF 链接。f8 切换暗色模式。f5 切换演示模式。toggle_horizontal_scroll_lock 命令锁定水平滚动。toggle_custom_color 切换自定义配色方案。execute 打开命令行,可用 %1 表示当前文件完整路径,%2 表示文件名,%3 表示当前选中文本。embed_annotations 命令导出带有书签/高亮的 PDF 文件。rotate_clockwise 和 rotate_counterclockwise 命令旋转页面。💡 GenAI 应用 + MongoDB Atlas:你无需单独数据库即可开始构建 GenAI 驱动的应用。