关于 journal-abbrev
journal-abbrev 是用于查询和规范期刊、杂志缩写的命令行技能。它先查本地 JabRef 数据库,再使用 AbbrevISO 和 NLM Catalog,并可处理 BibTeX 文件及期刊列表。
主要功能
- 01缩写或展开期刊名称
- 02模糊搜索与批量查询
- 03处理并展开 BibTeX 条目
- 04使用 JabRef、AbbrevISO 和 NLM 数据源
- 05输出机器可读的 JSON
适用场景
- 01规范 BibTeX 文件中的期刊名称
- 02查询参考文献中的期刊缩写
- 03确认不完整或不确定的刊名
- 04批量处理期刊名称列表
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agents365-ai/ 365-skills --skill journal-abbrev安装后在 Claude Code 中输入/journal-abbrev确认已加载。
附带文件.gitignorejabbrv.py
详细介绍
期刊缩写查询
使用多源级联查询期刊/杂志名称缩写:JabRef 数据库(约 25K 种期刊)→ AbbrevISO API(ISO 4)→ NLM Catalog(MEDLINE)。
重要规则: 查询时务必使用 jabbrv.py。切勿猜测缩写——即使是常见期刊,其缩写也可能不直观。
快速参考
| 用户想要…… | 层级 | 命令 |
|---|---|---|
| 缩写期刊名称 | read | python3 jabbrv.py abbrev "Nature Medicine" |
| 展开缩写 | read | python3 jabbrv.py expand "Nat. Med." |
| 自动检测方向 | read | python3 jabbrv.py lookup "J. Am. Chem. Soc." |
| 模糊搜索(分页) | read | python3 jabbrv.py search "biolog chem" --limit 10 --offset 0 |
| 处理 .bib 文件 | write | python3 jabbrv.py bib refs.bib |
| 预览 .bib 更改(不写入) | read | python3 jabbrv.py bib refs.bib --dry-run |
| 指定 .bib 输出路径 | write | python3 jabbrv.py bib refs.bib --output out.bib |
| 展开 .bib 中的缩写 | write | python3 jabbrv.py bib refs.bib --expand |
| 可安全重放的 .bib(重试时返回缓存的信封) | write | python3 jabbrv.py bib refs.bib --idempotency-key run-001 |
| 批量文本列表 | read | python3 jabbrv.py batch journals.txt |
| 将批量结果作为 NDJSON 流输出 | read | python3 jabbrv.py batch journals.txt --stream |
| 检查缓存状态 | read | python3 jabbrv.py cache status |
| 下载缺失的缓存文件 | write | python3 jabbrv.py cache update |
| 预览更新将获取的内容 | read | python3 jabbrv.py cache update --dry-run |
| 原子重建 | ⚠️ 破坏性操作 | python3 jabbrv.py cache rebuild --yes |
| 预览重建(不删除) | read | python3 jabbrv.py cache rebuild --dry-run |
| 禁止在 stderr 中显示进度 | read | python3 jabbrv.py --quiet cache update |
| 机器可读的 CLI 契约 | read | python3 jabbrv.py schema |
| 单个子命令的架构 | read | python3 jabbrv.py schema lookup |
输出格式
当 CLI 未连接到终端时(通过管道传输或由 Agent 捕获),标准输出为稳定的 JSON 信封;在 TTY 中运行时,则显示为面向用户的表格/缩进视图。强制指定格式:--format json|table|human|auto。--json 仍作为 --format json 的向后兼容别名保留。标志可置于子命令之前或之后。
信封结构(所有子命令始终包含相同字段):
- 成功:
{ "ok": true, "data": ..., "meta": { "schema_version", "cli_version", "cache", "latency_ms" } } - 部分成功(批量处理):
{ "ok": "partial", "data": { "succeeded": [...], "failed": [...] }, "meta": {...} } - 错误:
{ "ok": false, "error": { "code", "message", "retryable", ... }, "meta": {...} }
退出码
| 代码 | 含义 |
|---|---|
0 | 成功(包括部分成功) |
1 | 运行时/上游错误 |
2 | 验证错误/输入无效(文件缺失、标志错误) |
3 | 未找到(查询的期刊不存在) |
错误代码(位于 error.code 中)
| 代码 | 可重试 | 退出码 | 含义 |
|---|---|---|---|
not_found | 否 | 3 | 查询已完成,但未匹配到任何来源 |
upstream_unavailable | 是 | 1 | 一个或多个上游 API 暂时性故障;无法得出查询结果。包含列出各项故障的 error.sources[]。请稍后重试。 |
file_not_found | 否 | 2 | 输入文件路径不存在 |
validation_error | 否 | 2 | 参数错误或标志组合无效 |
runtime_error | 是 | 1 | 意外的内部错误 |
请根据 error.code + error.retryable 分支处理,而不要只依据退出码——退出码 1 同时涵盖 upstream_unavailable 和 runtime_error。完整的机器可读列表:python3 jabbrv.py schema → data.error_codes。
环境变量(由宿主设置,不通过 Agent 参数传入)
| 变量 | 效果 |
|---|---|
JABBRV_CACHE_DIR | 覆盖缓存目录(默认值:<install>/cache)。适用于安装目录为只读的沙箱。 |
JABBRV_OFFLINE | 设为真值(1/true/yes/on)时,跳过 AbbrevISO 和 NLM;仅查询本地 JabRef 缓存。未命中会变为确定的 not_found(不可重试),因为宿主已声明禁止访问上游。每个信封中都会出现 meta.offline: true,以便调用方了解此策略。 |
NO_COLOR | https://no-color.org 约定。任何非空值都会禁用颜色。目前不会输出 ANSI 转义序列;设置后会出现 meta.no_color: true,以便调用方了解此策略。 |
信任边界:这些变量从进程环境中读取,而非从参数中读取。宿主或沙箱负责设置;Agent 无法通过 argv 覆盖它们。架构内省:python3 jabbrv.py schema → data.global_env。
重试、幂等性与破坏性操作意图
- 根据
error.code和error.retryable分支处理,不要只看退出代码。退出代码1同时涵盖upstream_unavailable(重试)和runtime_error(重试一次,然后升级处理)。 bib --idempotency-key <token>会将成功信封与输出文件一同持久化,文件名为<output>.<token>.envelope.json。使用相同密钥重试时,会返回该信封,并设置meta.idempotent_replay: true,而不会重新执行改写。令牌必须匹配[A-Za-z0-9._-]{1,64}。cache rebuild是原子操作——下载内容会暂存到同级目录,只有所有文件均成功后才会进行切换。如果任一文件失败,则保留现有缓存,并返回upstream_unavailable(可重试)。添加--yes可记录meta.confirmed: true,用于审计策略;CLI 本身不会提示,因此--yes并非执行门槛。
工作流
步骤 1:识别意图
| 意图 | 操作 |
|---|---|
| 单个期刊名称/缩写 | 使用 lookup(自动检测)或 abbrev/expand(指定方向) |
| “X 的缩写是什么?” | 使用 abbrev |
| “X 是什么期刊?” | 使用 expand |
| 不完整或不确定的名称 | 使用 search 进行模糊匹配 |
| 修正 .bib 文件中的期刊名称 | 使用 bib |
| 要处理的期刊列表 | 使用 batch |
步骤 2:执行
运行相应的 jabbrv.py 命令。脚本会处理:
- 查询本地缓存(即时,从 JabRef 获取约 25K 种期刊)
- 回退到 AbbrevISO API(算法化 ISO 4 缩写,仅支持正向转换)
- 回退到 NLM Catalog(生物医学期刊,支持双向转换)
首次运行时会自动下载 JabRef CSV 缓存文件(约 2–5 MB)。
步骤 3:呈现结果
- 显示全名、缩写和来源
- 相关时注明所用标准(ISO 4 或 MEDLINE)
- 处理 .bib 文件时:确认前显示更改摘要
ISO 4 与 MEDLINE
常见的缩写标准有两种:
| 标准 | 句点 | 示例 | 用途 |
|---|---|---|---|
| ISO 4 | 有 | Nat. Med. | 大多数出版商、BibTeX |
| MEDLINE | 无 | Nat Med | PubMed、NLM 数据库 |
JabRef 使用 ISO 4 风格。NLM Catalog 使用 MEDLINE 风格。AbbrevISO 根据 LTWA(《标题词缩写表》)通过算法计算 ISO 4 缩写。
常见缩写模式
| 单词 | 缩写 | 单词 | 缩写 |
|---|---|---|---|
| Journal(期刊) | J. | International(国际) | Int. |
| American(美国) | Am. | European(欧洲) | Eur. |
| Science/Sciences(科学) | Sci. | Medicine/Medical(医学) | Med. |
| Biology/Biological(生物学) | Biol. | Chemistry/Chemical(化学) | Chem. |
| Physics/Physical(物理学) | Phys. | Engineering(工程学) | Eng. |
| Research(研究) | Res. | Review/Reviews(评论) | Rev. |
| Society(学会) | Soc. | National(国家) | Natl. |
| Proceedings(论文集) | Proc. | Transactions(汇刊) | Trans. |
| Letters(快报) | Lett. | Communications(通信) | Commun. |
| Applied(应用) | Appl. | Computational(计算) | Comput. |
注意: 根据 ISO 4 规则,单词标题(例如 “Nature”、“Science”、“Cell”)不会缩写。
集成示例
与 Zotero 配合使用
# Export BibTeX from Zotero, then standardize journal names
zot export COLLECTION_KEY --format bibtex > refs.bib
python3 jabbrv.py bib refs.bib
使用 LaTeX
# Before compiling, ensure all journal names are abbreviated
python3 jabbrv.py bib references.bib
# Use the output file (references_abbrev.bib) in your LaTeX document
批量处理
创建一个文本文件,每行写一个期刊名称:
Nature Medicine
Journal of Biological Chemistry
Proceedings of the National Academy of Sciences
然后运行:
python3 jabbrv.py batch journals.txt
故障排除
| 问题 | 解决方案 |
|---|---|
| “未找到结果” | 尝试使用部分名称执行 search,进行模糊匹配 |
| 缓存下载失败 | 检查网络连接,然后重试 cache update(或使用 cache rebuild 强制重建) |
| 缩写样式错误 | JabRef = ISO 4(带点),NLM = MEDLINE(不带点) |
| 未检测到 BibTeX 字段 | 确保格式为 journal = {Name}(花括号) |