-
Notifications
You must be signed in to change notification settings - Fork 0
References and Zotero
TeXLeaf 在 \cite{...} 及用户配置的其他 citation 命令中提供 VS Code 原生 Suggest。候选按来源排序:
- 当前 bibliography 中已经存在的有效条目;
- Zotero/Better BibTeX 中尚未加入该 bibliography 的条目。
接受已有条目只插入 citation key;接受 Zotero 条目时,TeXLeaf 先导出 BibTeX/BibLaTeX,再把 bibliography 追加和 TeX citation 修改作为同一批文本编辑提交。
使用 bibliography 已有条目的补全需要:
- 工作区已信任;
-
texleaf.enabled和texleaf.zoteroCitations开启; - 当前文件已保存为
.tex; - language ID 位于
texleaf.languageIds; - 光标位于
texleaf.citationCommands中某个命令的必需大括号参数内。
读取 Zotero 候选还需要:
- Zotero 桌面端正在运行;
- Zotero 允许本机其他应用通信;
-
texleaf.zoteroPort与 Zotero/Better BibTeX 端口一致; - 推荐安装与当前 Zotero 版本兼容的 Better BibTeX。
TeXLeaf 面向 VS Code 桌面版。浏览器版 VS Code、纯 Web 扩展环境或无法运行 Node 扩展宿主的环境不能直接使用本机 Zotero 集成。
TeXLeaf 自己创建的候选左侧只显示:
- 主标签:文献标题;
- 来源说明:bibliography 文件名,或
Zotero。
左侧不会显示 citation key,也不会再把“作者 · 期刊 · 年份”作为 detail 塞入紧凑列表。这样标题能获得更多横向空间。
选中一个 TeXLeaf 条目后,右侧详情按字段显示:
- 完整标题;
- 作者;
- 期刊 / 出版物;
- 年份;
- Citation key;
- 来源;
- 已收录 / 未导入状态和接受后的操作说明。
右侧顶部不会再重复一行“作者 · 期刊 · 年份”汇总;这些信息只在下方各自字段中出现。Citation key 仍然保留在详情中,便于接受前核对实际将插入的 key。
TeXLeaf 会自行对以下字段进行规范化子串匹配:
- 标题;
- 作者;
- 年份;
- citation key。
搜索会折叠大小写、常见重音和标点差异。例如输入作者姓氏、标题中的几个词、2025 或 key 的一部分,都可以保留相应条目。
在一个 citation 中添加多篇:
\cite{ExistingKey, NewQuery, AnotherKey}补全只替换光标所在的逗号分段,保留左右 sibling keys;已经出现在同一 \cite{...} 其他分段中的 key 不会再次建议。接受一篇后输入逗号,可以继续搜索并接受下一篇。
如果输入查询、退格删回空分段,再继续输入,TeXLeaf 会用文档版本和当前分段身份重新触发 Suggest,不要求把光标先移出大括号。
默认文件是:
reference.bib
可通过 texleaf.bibliographyFile 使用工作区内相对 .bib 路径,例如:
安全规则:
- 不接受绝对路径、URI 或含
..的越界路径; - 简单文件名会优先使用从当前 TeX 文件向工作区根方向找到的最近同名文件;
- 文件不存在时在当前工作区根按设置路径创建;
- 多根工作区按当前 TeX 文档所属根解析,不会跨根选错;
- 已打开且有未保存修改的
.bib使用当前 VS Code 文档模型,不会绕过编辑器从磁盘覆盖它。
TeXLeaf 解析常见的花括号、引号、连接值、注释和嵌套字段。未闭合外层条目、重复 key、不安全 key 或明确冲突会阻止自动追加。
候选和提交阶段按以下身份比较:
- 精确 citation key;
- 规范化 DOI;
- 规范化 ISBN;
- 字段足够时,规范化标题 + 第一作者 + 年份。
如果 Zotero 中的同一文献已经以另一个 key 存在于 .bib,只保留 bibliography 中现有项;提交期间才被另一个窗口导入的等价条目,也会复用最新 bibliography key,而不是追加重复记录。
若相同 key 已被明显不同的文献占用,TeXLeaf 会报错并停止,不覆盖原条目。
texleaf.bibliographyFormat 可选:
-
bibtex:默认; -
biblatex。
切换格式只影响之后从 Zotero 导入的新条目,不会重新格式化已有 .bib 内容。
接受 Zotero 候选时:
- 重新确认当前 citation、文档版本和逗号分段没有变化;
- 从同一个 Zotero library 导出单条记录;
- 验证导出只含一个条目,且 key 安全、与候选一致;
- 重新读取当前 bibliography 模型并做重复/冲突检查;
- 保留原文件的 LF/CRLF 换行风格和条目间空行;
- 用同一个
WorkspaceEdit修改.tex和.bib; - 干净 bibliography 可自动保存;原本 dirty 的 bibliography 保留为 dirty,不替用户保存其他修改。
导出或校验失败时,citation 会恢复/保留用户原来输入的查询,不提交半份导入。一次 Undo 可以一起撤销同一批文本改动。
TeXLeaf 首先访问:
http://127.0.0.1:<port>/better-bibtex/json-rpc
使用 Better BibTeX 的 library、search 和单条 export 能力,直接采用其权威 citekey,不在 VS Code 端按作者/年份重新生成。
若 Better BibTeX 路由或所需方法不可用,TeXLeaf 会回退 Zotero 官方 Local API:
http://127.0.0.1:<port>/api/
回退路径从 Zotero 的 BibTeX/BibLaTeX 导出文本中取得实际 citation key。缺少可安全导出 key 的记录会单独跳过,不应让整个文库不可用。
默认端口是 23119;Juris-M 常用 24119。端口必须是 1–65535 的整数,主机地址不可配置。
texleaf.zoteroLibrary 默认是 My Library,也可以写:
- Zotero UI 中显示的库名称;
- 群组库名称;
- 内部数字 library ID。
名称不区分大小写匹配时仍要求唯一。两个库同名时,请改用数字 ID。搜索和单条导出使用同一个 library ID,避免从群组库搜索后又错误地到 My Library 导出。
三种桌面系统使用相同的 127.0.0.1 HTTP 边界和设置键:
- Windows:确认 Zotero 桌面进程正在同一个登录会话运行;安全软件不应阻止本机回环连接。无需开放公网防火墙端口。
- macOS:首次运行或升级 Zotero/BBT 后,确认 Zotero 已完全启动;系统网络权限不应被解释为允许外网访问,TeXLeaf 仍只请求回环地址。
- Linux:本机 VS Code 与本机 Zotero 最直接;Flatpak/Snap 等沙箱版 Zotero 或 VS Code 可能隔离回环/文件访问,需要检查对应沙箱权限。
TeXLeaf 不发现 LAN 中另一台电脑的 Zotero,不接受 192.168.x.x、域名或任意 URL,也不把 Zotero 凭据发送到网络。
127.0.0.1 始终指 TeXLeaf 扩展宿主所在的机器/网络命名空间,不是抽象意义上的“用户电脑”。
TeXLeaf 的 extensionKind 优先 ui,因此在 VS Code Desktop 的 WSL、Remote SSH 或 Dev Container 窗口中,如果 TeXLeaf 安装并运行在本地 UI extension host,它有机会访问桌面 Zotero,同时通过 VS Code Workspace FS 编辑远程项目文件。但最终宿主位置仍由 VS Code 的安装状态和扩展宿主决策决定。
排查方法:
- 确认 TeXLeaf 安装在 Local 一侧,而不只是 SSH/WSL/Container 一侧;
- 查看 Output → TeXLeaf 的连接错误;
- 若扩展实际运行在远程 host,
127.0.0.1:23119指远程机器或容器,本机 Zotero 不可达; - 不要把
zoteroPort当作端口转发地址,它只能改变端口数字,不能改变固定主机; - GitHub Codespaces/浏览器版 VS Code 中不能假设能访问桌面 Zotero,本功能应视为不可用,先在本地导出 bibliography 或使用桌面 Remote 窗口并确认宿主位置。
不要为了绕过这一边界把 Zotero API 暴露到公网。TeXLeaf 有意不支持可配置远程主机。
VS Code 会把当前上下文中所有 Completion Provider 的返回结果合并到一个 Suggest 中。TeXLeaf 只能决定自己返回什么,不能选择性删除、改写或隐藏 LaTeX Workshop 等第三方扩展的候选。
TeXLeaf 0.8.11 为 [latex] 和 [tex] 提供:
"editor.wordBasedSuggestions": "off"这会默认隐藏 VS Code 自己从文档单词收集的 Text/word 候选,用户显式设置仍可覆盖。但 LaTeX Workshop 有独立 citation provider;其默认配置可能继续用 citation key 作为标签,这些不是 word-based suggestions,TeXLeaf 无法删除。
如果只是不希望 LaTeX Workshop 的行显示 key,可以在用户或工作区设置中让它显示标题:
{
"latex-workshop.intellisense.citation.label": "title"
}此设置由 LaTeX Workshop 定义,版本升级后以它的文档为准;结果可能是 TeXLeaf 标题条目和 LaTeX Workshop 标题条目同时出现。
不建议把 editor.suggest.showReferences 设为 false:LaTeX Workshop citation 和 TeXLeaf citation 都属于 CompletionItemKind.Reference,这样会同时隐藏 TeXLeaf 文献,并可能连 \ref{...} 补全一起关闭。LaTeX Workshop 的 citation.type=browser 会改弹它自己的 Quick Pick,也不等于禁用 citation provider。
若必须只保留 TeXLeaf,当前可靠办法是通过 VS Code 的扩展启用范围停用提供冲突候选的第三方扩展;代价是同时失去该扩展的编译/预览/语言服务功能。通常建议保留共存,只调整第三方 label。
Zotero 文献列表默认在内存缓存 30 秒。以下操作会刷新或失效:
- 运行 TeXLeaf: 刷新 Zotero 参考文献缓存;
- Zotero 相关设置改变;
- 缓存过期后再次进入 citation。
自动加载失败有短暂冷却,避免每次按键都轰炸本机端口;手动刷新会立即重试并显示可读错误。Zotero 不可用时,bibliography 中已有条目仍应可搜索和插入。
未信任工作区中:
- 不访问 Zotero/Better BibTeX 端口;
- 不自动弹出 Zotero citation picker;
- 不创建或修改 bibliography;
- 手动命令显示明确受限提示。
TeXLeaf 只发往回环地址,bibliography 只允许工作区内相对 .bib 路径,写入前重新验证文档和 key。即使项目设置试图写入任意主机 URL或 .. 路径,也不会采用。
| 症状 | 首要检查 |
|---|---|
\cite{} 没有 TeXLeaf 条目 |
文件是否已保存为 .tex、工作区是否信任、两个总开关、citation command 列表 |
只有 .bib 现有条目,没有 Zotero |
Zotero 是否运行、本机通信、端口、library、输出日志 |
| 仍出现纯 key 行 | 判断是 VS Code word 候选还是 LaTeX Workshop provider;见上节 |
| Zotero 文献已存在却显示“未导入” | 检查 DOI/ISBN/标题/第一作者/年份是否完整,及 .bib 是否未保存 |
| 导入到错误文件 | 检查 bibliographyFile、当前文档所属 workspace root 和同名 .bib 层级 |
| 群组库无结果 | 使用准确名称或数字 library ID |
| 一直超时 | 检查 extension host 位置、端口、沙箱/Remote 边界,不要开放公网 |
| bibliography 未自动保存 | 如果导入前它已经 dirty,这是保护行为;手动审阅后保存 |
完整排查见 故障排查。
开始
片段
AI 写作
文献
预览
贡献与发布
{ "texleaf.bibliographyFile": "bib/sources.bib" }