裏紙に雑文

日記とか,とりとめのないこと

Ebib のススメ --- Emacs で文献管理 (その 1: 基礎編)

修士論文を書くためにいろいろと参考文献を集めた際,その管理に Emacs を使ったという話をします. おおよそ package.el を用いてパッケージをインストールできる程度には Emacs に慣れた人を対象にしています.

本記事では .bib ファイルの基本的な編集方法について述べます. 文献の検索・閲覧や,ユーザ設定のカスタマイズなどは別記事で述べます*1

Ebib について

Emacs には標準で .bib ファイルの編集支援用の bibtex-mode があります. が,正直なところ bibtex-mode だけでは .bib ファイルの編集だけならともかく, 閲覧や検索は厳しいものがあります. そこで Ebib を使います. マニュアルは

joostkremers.github.io

で読めます. Ebib を用いると,たとえば

  1. file フィールドで設定した PDF (または PS ファイル) を開く
  2. urldoi フィールドで設定したアドレスを Web ブラウザで開く
  3. フィルター機能を用いた検索
  4. entry key の自動生成

などが簡単にできるようになります. 本稿では私の備忘録を兼ねて Ebib の紹介と設定について述べます.

Ebib のマニュアルを読むと,ユーザー設定は Customize を用いて行うのが期待されているようです. 私は init.el に設定を書き込んでしまいましたが,M-x customize-group RET ebib RET として Customize を利用するのが良さそうです. 本稿執筆時の環境は

OS: macOS 10.13.6
Emacs: GNU Emacs 26.1
Ebib: 20190201.1528

となります.

用語について

BibTeX まわりの用語について,次の凡例のとおり用いることにします.

@entry-type{entry-key,
    field-name1 = "field-value1",
    field-name2 = "field-value2",
    ......,
}

例えば

@article{Denef2002:Motivic,
    keywords = {motivic integration, quotient singularities, the McKay correspondence},
    author = {Denef, Jan and Loeser, François},
    title = {Motivic integration, quotient singularities and the {M}c{K}ay correspondence},
    journal = {Compositio Mathematica},
    volume = {131},
    year = {2002},
    number = {3},
    pages = {267--290},
    ISSN = {0010-437X},
    MRCLASS = {14B05 (14A15 14C15 14C30 14C35 14E15 14L30)},
    MRNUMBER = {1905024},
    doi = {10.1023/A:1015565912485}
}

の entry-type は article で,entry-key は Denef2002:Motivicauthor フィールドの値は Denef, Jan and Loeser, François となります.

拡張子が .bib のファイルを文献データベース,あるいは単にデータベースということにします.

インストール

MELPA からインストールできます. Emacs のバージョンは 25.3 以上が必要なようです. 詳しくはマニュアルを読みましょう.

起動とデータベースの読み込み

Ebib を起動するには M-x ebib とタイプします. データベースを開くには o を押下します. データベースは複数開くことができ,方向キーで切り替えができます. データベースを開くと次のように,ウィンドウが上下に二分割された状態になります.

f:id:mtino1594:20190203021432p:plain

上の部分を index buffer とよび,下の部分を entry buffer とよびます.

index buffer での基本操作

基本的な操作は次の表の通り.

key 操作
o データベースを開く
c データベースを閉じる
s 保存
q 終了
z 一時休止
n 次の entry へ
p 前の entry へ
g 最初の entry へ
G 最後の entry へ
a entry の追加
e entry の編集
E entry key の編集
m 現在行をマーク
C-u m 全ての行をマーク/全ての行のマークを外す
d entry を削除
k entry を kill
y entry を yank
f file を開く
u url を開く
I doi を開く
i 他の buffer へ entry を送る
x entry のエクスポート
! entry key の自動生成
K s keywords の保存

保存と終了

編集したデータベースを保存するには s を押下します. データベースを閉じるには c を,Ebib 自体を終了するには q を押下します. 一時的に Ebib を閉じて他のバッファの編集にもどるには z を押下します. Ebib に戻るには再度 M-x ebib とします.

entry の追加・編集

entry を追加するには a を,既存の entry を編集するには e を押下します. するとカーソルが entry buffer に移動するので内容を追加・修正します. 詳しくは下の entry buffer での基本操作を見てください.

entry key を編集するには E を押下します. また ! を押下することで author, yeartitle フィールドから自動的に entry key を生成することができます. この自動生成は bibtex-generate-autokey 関数を利用しています. この関数のカスタマイズについては後で述べます.

また,それぞれ d, k, y を押下することで entry の削除,kill-ring, yank ができます. Ebib で開いている他のデータベースに entry をエクスポートするには x を押下します. これらの操作は m 等でマークした entry に対して一斉に行うことができます.

entry buffer での基本操作

基本的な操作は次の表の通り.

key 操作
n 次のフィールドへ
p 前のフィールドへ
g 最初のフィールドへ
G 最後のフィールドへ
e field value の編集
a field の追加
m multiline edit buffer へ
d field value の削除
k field value の kill
y field value の yank
q index buffer に戻る

フィールドについて

entry buffer を見ると,フィールドがおおよそ 4 つに分けられます.

f:id:mtino1594:20190203223611p:plain

一番上のグループ (author から year まで) は required field です. これらは entry type (ここでは article type) ごとに必須とされるフィールドです. 二番目のグループ (volume から note まで) は optinal field です. これらは必須ではありませんが,field value が空でない場合 BibTeX で使われます. これら 2 つのグループは,当然ですが entry type ごとに異なります. 詳しくは BibTeX の使い方についてググってください.

三番目のグループ (crossref から file まで) は extra field です. これはユーザ変数 ebib-extra-fields で設定できます. 私の場合,arXiv の ID や MathSciNet で用いられている MRNUMBER などを設定しています.

最後のグループは,required でも optinal でもなく,ebib-extra-fields で設定されてもいないフィールドです. あまり使わないし ebib-extra-fields で設定するまでもない場合に使います.

フィールドの編集・追加

上述の表にあるように ea でフィールドの編集や追加が行なえます. また index buffer と同じ様にフィールド値の削除, kill-ring, yank が行えます.

m を押下することで multiline edit buffer へ移ります. これは,例えば annoteabstract フィールドのように複数行にわたって記述されるフィールド値を編集するのに使います. multiline edit buffer を編集を保存して終了するには C-c | q を,保存せず終了するには C-c | c をタイプします. よく利用する人は適当なキーバインドを設定するのが良いでしょう.

文献情報のインポート

すでに存在する .bib ファイルから,または CiNii や MathSciNet などの BibTeX 出力を用いて文献情報を追加することができます.

例えば CiNii や MathSciNet の BibTeX 出力をコピーし,適当なバッファ (例えば *scrach* バッファ) にペーストします. そこで M-x ebib-import とすれば現在開いているデータベースに文献情報が追加されます. また,リージョン選択中に M-x ebib-import とすれば,選択範囲内の文献情報のみが追加されます.

もし追加される文献の entry key が重複していた場合は Ebib が適当に書き換えます. E などを押下して entry key を変更しましょう.

また Ebib で開いている 2 つのデータベースをマージすることもできます. 詳しくはマニュアルを参考にしてください.

*1:後で書くぞ書くぞ