
摘要: 介绍一个好用的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 风格操作、标记、书签、同步等高级功能。
本节所有快捷键均为默认设置,可通过编辑 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 驱动的应用。