Agent-almanac manage-bibliography
git clone https://github.com/pjt222/agent-almanac
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/ja/skills/manage-bibliography" ~/.claude/skills/pjt222-agent-almanac-manage-bibliography-09ea1d && rm -rf "$T"
i18n/ja/skills/manage-bibliography/SKILL.md参考文献の管理
BibTeX参考文献データベースの作成、検証、保守を行う。エントリの追加、必須フィールドの検証、重複の検出と解決、引用キーの標準化、およびRパッケージ(RefManageR、bibtex)を用いたプログラム的な操作を含む。
使用タイミング
- 研究プロジェクト用の新しいBibTeXデータベースをゼロから作成する場合
- DOI、PubMed ID、またはISBNからエントリを追加する場合
- 既存の
ファイルの重複エントリや不整合を検出する場合.bib - 引用キーの命名規則を標準化する場合
- 複数の
ファイルを一つの統合データベースに結合する場合.bib - RのRefManageRまたはbibtexパッケージを使用してプログラム的に参考文献を操作する場合
入力
- 必須: BibTeXデータベースファイルのパス(既存の
ファイルまたは新規作成先パス).bib - 必須: 操作内容(エントリの追加、検証、重複検出、キーの標準化、またはファイルの結合)
- 任意: DOI、PubMed ID、またはISBNのリスト(エントリ追加時)
- 任意: 引用キーの命名規則(例:
、AuthorYear
)Author_Year_Journal - 任意: 検証するBibTeXフィールドのリスト
手順
ステップ1: BibTeXファイルの読み込みと検査
既存のデータベースの読み込みまたは新規データベースの初期化を行う:
- ファイルの読み込み: RのRefManageRパッケージの
またはbibtexパッケージのReadBib()
を使用してread.bib()
ファイルを読み込む。.bib - エントリタイプの分布: エントリタイプ(article、book、inproceedingsなど)ごとの数を集計する。
- フィールドの完全性: 各エントリタイプの必須フィールドが存在するか確認する。
- エンコーディング: ファイルのエンコーディングがUTF-8であることを確認する。LaTeXの特殊文字エスケープ(
、{\"o}
など)とUnicode文字の混在をチェックする。{\ss} - 統計の記録: 総エントリ数、エントリタイプ別内訳、不完全なエントリの数を記録する。
library(RefManageR) bib <- ReadBib("references.bib", check = "warn") summary(bib)
期待結果: BibTeXデータベースが正常に読み込まれ、エントリの概要統計が生成される。
失敗時: パースエラーが発生した場合は、対応する行番号を確認する。一般的なエラーには、括弧の不一致、フィールド値の引用符の欠落、エントリ間のカンマの欠落がある。
ステップ2: エントリの追加と拡充
新しい参考文献エントリをデータベースに追加する:
- DOIからの追加:
を使用してCrossref APIからメタデータを取得する。GetBibEntryWithDOI() - PubMedからの追加:
を使用してPubMedからメタデータを取得する。ReadPubMed() - 手動追加: 必須フィールドを含むBibTeXエントリを手動で作成する。
- フィールドの検証: 追加された各エントリが該当するエントリタイプの必須フィールドをすべて含んでいることを確認する。
- 引用キーの割り当て: 指定された命名規則に従って引用キーを生成する。
# DOIからエントリを追加 new_entry <- GetBibEntryWithDOI("10.1234/example.2024") bib <- c(bib, new_entry)
期待結果: 新しいエントリが完全なメタデータと標準化された引用キーでデータベースに追加される。
失敗時: DOIの解決に失敗した場合は、DOIの正確性を確認する。APIレート制限に達した場合は、リクエスト間に遅延を入れるか、手動でエントリを作成する。
ステップ3: 重複の検出と解決
重複エントリを特定して解決する:
- 完全一致: DOI、タイトル、または著者+年の組み合わせで完全一致を検索する。
- あいまい一致: タイトルの類似度(レーベンシュタイン距離、コサイン類似度)を用いてほぼ重複を検出する。
- 引用キーの衝突: 同じ引用キーを持つ異なるエントリを特定する。
- 解決: 重複が確認されたペアについて、より完全なエントリを保持するか、フィールドをマージする。
- 記録: 削除または統合されたエントリをログに記録する。
期待結果: すべての重複が特定され、解決方法(保持、マージ、削除)が文書化される。
失敗時: あいまい一致で偽陽性が多い場合は、類似度の閾値を上げる。同じタイトルで異なるバージョン(プレプリントと出版版)の場合は、両方を保持して注記を追加する。
ステップ4: 引用キーの標準化
すべての引用キーを一貫した命名規則に統一する:
- 現在のキーの分析: 既存の引用キーのパターンを分析する。
- 命名規則の適用: 指定された命名規則(例:
→AuthorYear
、Smith2024
→Author_Year_Short
)を適用する。Smith_2024_NatComm - 衝突の回避: 同じキーが生成される場合は、サフィックス(a、b、c)を追加する。
- 参照の更新:
ファイル内の.tex
コマンドも同時に更新する(提供されている場合)。\cite{}
期待結果: すべての引用キーが一貫した命名規則に従い、衝突がない。
失敗時: 関連する
.texファイルが提供されていない場合は、引用キーの変更マッピングを出力し、ユーザーに手動更新を依頼する。
ステップ5: データベースの書き出しと検証
更新されたデータベースを保存し、最終検証を行う:
- 書き出し:
を使用して更新されたWriteBib()
ファイルを書き出す。.bib - 再読み込みテスト: 書き出されたファイルを再度読み込み、エラーが発生しないことを確認する。
- 差分の確認: 元のファイルとの差分を確認し、意図しない変更がないことを検証する。
- バックアップ: 元のファイルのバックアップを作成する。
WriteBib(bib, file = "references_updated.bib") bib_check <- ReadBib("references_updated.bib", check = "error")
期待結果: 更新されたBibTeXファイルがエラーなく書き出され、再読み込みで正常に検証される。
失敗時: 書き出し時にエンコーディングエラーが発生した場合は、UTF-8エンコーディングを明示的に指定する。再読み込み時にエラーが発生した場合は、書き出されたファイルの該当箇所を手動で確認する。
バリデーション
- BibTeXファイルが正常に読み込まれ、パースエラーがない
- 各エントリタイプの必須フィールドがすべて存在する
- 重複エントリが検出され、解決されている
- 引用キーが一貫した命名規則に従っている
- 引用キーの衝突がない
- ファイルのエンコーディングがUTF-8である
- 更新されたファイルが再読み込みで正常に検証される
よくある落とし穴
- LaTeXエスケープとUnicodeの混在: 同じファイル内で
と{\"o}
を混在させると、一部のツールで問題が発生する。どちらか一方に統一すること。ö - 必須フィールドの欠落:
タイプにはarticle
、author
、title
、journal
が必須。これらが欠けるとLaTeXコンパイル時に警告が出る。year - 引用キーの特殊文字: 引用キーにスペース、日本語文字、特殊記号を使用しないこと。英数字、ハイフン、アンダースコアのみを使用する。
- DOI APIのレート制限: 大量のDOIを一度に解決しようとするとAPIレート制限に達する可能性がある。バッチ処理時は遅延を入れること。
- バックアップの忘れ: 大規模な変更を行う前に必ず元のファイルをバックアップすること。
関連スキル
-- BibTeXデータベースを使用した引用のフォーマットformat-citations
-- 参考文献の整合性と正確性の検証validate-references