裏紙に雑文

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

Ebib のススメ --- Emacs で文献管理 (その 3: 設定編)

その 1 および その 2 に続いて, Ebib の個人的なカスタマイズについてまとめます. その 1 でも書きましたが Ebib のマニュアルを読むと Customize を用いて設定されるのを想定しているように思えます. が,私は init.el に色々と書き込んでしまったので,その様に本記事でも記述します. 本稿は個人的な備忘録代わりですのでちゃんとマニュアルを読むことをおすすめします.

また下記の設定 (の一部) は私の GitHub のレポジトリに上げてあったりもします*1

データベースのプリロード

Ebib は起動時に指定した .bib ファイルを読み込ませることができます. これは ebib-preload-bib-files 変数で設定できます. MacTeX では .bib ファイルの類は ~/Library/texmf/bibtex/bib 以下に置いておくのが良さそうですので, ここに置いた特定のファイルを起動時に読み込むようにしています.

~/Library/texmf/bibtex/bib 以下に

  • articles.bib ... 論文やプロシーディングスなど
  • books.bib ... 教科書など
  • others.bib ... その他 (preprint など)

などのデータベースを配置し init.el

(setq ebib-preload-bib-files
      '("~/Library/texmf/bibtex/bib/articles.bib"
        "~/Library/texmf/bibtex/bib/books.bib"
        "~/Library/texmf/bibtex/bib/others.bib"))

と記述します.

extra fields

個人的に extra field には

などが欲しいので

  • MRNUMBER
  • MRCLASS
  • archivePrefix
  • eprint
  • primaryClass

などの項目を ebib-extra-fields にセットします.

(setq ebib-extra-fields
      '((BibTeX "annote" "keywords" "doi" "archivePrefix" "primaryClass" "eprint" "MRCLASS" "MRNUMBER" "file")
        (biblatex "annotation" "keywords" "archivePrefix" "primaryClass" "MRCLASS" "MRNUMBER" "file")))

BibTeX から始まる行は BibTeX 使用時の,biblatex から始まる行は biblatex 使用時の extra field の設定です. Ebib で BibTeX (または biblatex) をデフォルトとして使うには ebib-bibtex-diarect 変数に BibTeX (または biblatex) をセットします.

entry key の自動生成

新しく文献を追加して q を押下したあと,または ! を押下すると自動的に entry key が生成されます. この自動生成規則は bibtex-mode の bibtex-generate-autokey を利用しているようです.

ここでは <第一著者の姓><出版年>:<論文タイトルの最初の 1 語> の形の entry key を作成します. ただし <出版年> は 4 桁で, <論文タイトルの最初の 1 語>A An The On などを除くように設定します.

(setq bibtex-autokey-name-case-convert 'capitalize)
(setq bibtex-autokey-titleword-case-convert 'capitalize)
(setq bibtex-autokey-titleword-separator "")
(setq bibtex-autokey-titleword-length nil)
(setq bibtex-autokey-titlewords 1)
(setq bibtex-autokey-year-length 4)
(setq bibtex-autokey-year-title-separator ":")
(setq bibtex-autokey-titleword-ignore
      '("A" "An" "On" "The" "a" "an" "on" "the"
        "Le" "La" "Les" "le" "la" "les"
        "Zur" "zur"))

keywords list

keywords list の設定についてです. その 2 でも述べたように, 私は一つの ebib-keywords.txt をすべてのデータベースで共有して利用しています. また,新規に追加したキーワードはEbib 終了時に自動的に保存するように設定しています. 例えば ~/Library/texmf/bibtex/ebib-keywords.txt を keywords list として利用する場合,次のように設定します.

(setq ebib-keywords-use-only-file t)
(setq ebib-keywords-file "~/Library/texmf/bibtex/ebib-keywords.txt")
(setq ebib-keywords-file-save-on-exit 'always)

PDF を開く

まず PDF/PS を開くためのコマンドを標準の xpdf / gv から macOSopen に変更します.

(setq ebib-file-associations
      '(("pdf" . "open")
        ("ps" . "open")))

open コマンドではなく Skim.app を利用したい場合は /Applications/Skim.app/Contents/MacOS/Skim に書き換えれば OK です. open -a Skim 等ではうまくいきません. また ("拡張子" . "コマンド") のドット対を追加することで PDF/PS 以外のファイルも開けるようになります.

File Search Dirs

index buffer で f を押下したとき,file フィールドに記述されたファイルを開きます. file フィールドにはフルパスを記述する必要はありません. Ebib は File Serch Dirs に設定したディレクトリの下にあるファイルを探して開きます. File Search Dirs 以下のサブディレクトリは 検索しません

私の場合,Dropbox 内の BibFile というディレクトリをホームディレクトリにシンボリック・リンクを貼って利用しています.

  • ~/BibFile/Papers/ ... 論文など
  • ~/BibFile/Books/ ... 教科書など
  • ~/BibFile/Proceedings/ ... プロシーディングス集など

を File Serch Dirs にセットします.

(setq ebib-file-search-dirs '("~/BibFile/Papers" "~/BibFile/Books" "~/BibFile/Proceedings"))

この状況で,例えば file = {Denef/Denef2002Motivic.pdf} というフィールド値を持つ entry を選択した状態で f を押下すると ~/BibFile/Papers/Denef/Denef2002Motivic.pdf~/BibFile/Books/Denef/Denef2002Motivic.pdf, ~/BibFile/Proceedings/Denef/Denef2002Motivic.pdf のいずれかが開きます*3

ebib-name-transform-function

file フィールド値が空の場合,Ebib は entry key から定まる PDF を探して開いてくれます. 標準では <entry key>.pdf という名前の PDF を探します. Ebib が探すファイル名を変更するには ebib-name-transform-function を適当に定義します.

私の場合 <第一著者の姓><出版年>:<論文タイトルの最初の 1 語> の形の entry key から <第一著者の姓>/<第一著者の姓><出版年><論文タイトルの最初の 1 語>.pdf というファイルを探して欲しいので, そのように適当な関数を定義します.

例えば

(defun my/ebib-name-transform-function (key)
       "Serach file"
       (format "%s/%s"
               (substring key (string-match "[A-Za-z]+" key) (match-end 0))
               (replace-regexp-in-string ":" "" key)))

という関数を定義して ebib-name-transform-function にセットします.

(setq ebib-name-transform-function #'my/ebib-name-transform-function)

Emacs Lisp はまったくわからないので,上の関数は見よう見まねです. なにかあっても責任はとれませんのであしからず.

それでは,なにかありましたらコメントいただければ幸いです.

*1:explicit に本名を掲示したくないのでリンクは張りません

*2:MathSciNet のアレ

*3:複数ある場合どうなるかは確認していません