bibtex2htmlを利用したクールな文献管理

はじめに
========

TeXで論文を作成する際などは、bibファイルで参考文献の管理をすると便利です。bibファイルの管理の仕方として、いくつかメジャーな方法は、文献管理ソフト[Mendeley](http://blog.mendeley.com/)を使って管理する方法や、同じく文献管理ソフトの[JabRef reference manager](http://jabref.sourceforge.net/)を使う方法があると思います。

- [HOWTO: Use Mendeley to create citations using LaTeX and BibTeX. | Mendeley Blog](http://blog.mendeley.com/tipstricks/howto-use-mendeley-to-create-citations-using-latex-and-bibtex/)
- [JabRefによるBibTeX文献管理とJab2HTML](http://keijisaito.info/arc/biblio/jabref_jbib.htm)

[BibTeX関連ツール - TeX Wiki](http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?BibTeX%E9%96%A2%E9%80%A3%E3%83%84%E3%83%BC%E3%83%AB)にはその他にも役に立ちそうなアプリケーションやスクリプトが紹介されているので、ぜひ参考にしてみてください。

しかしながら、所詮自分が文献管理するにあたって欲しい機能は、それぞれの文献の情報を見やすく表示することと、ローカルに保存したpdf形式の論文と対応がつくことだけなので、MendeleyやJabRefに頼るのはあまり気が進みません。また、いざMendeleyを使おうとするときに、それに対応していないサイトから持ってくるときには結局手作業が必要になるなどの煩わしさもあります。

現在のセッティング
==================

で、本題ですが、自分はできるだけ簡潔な構成で論文を管理したいと思ったので、次のような構成で文献を管理することにしました。

<table><tbody>
<tr>
<td>bibファイルの入手</td>
<td>各文献サイトからインストール or Google Scholarアドオン</td>
</tr>
<tr>
<td>論文pdfの入手</td>
<td>各文献サイトからローカルにインストール</td>
</tr>
<tr>
<td>bibファイルの編集</p></td>
<td>Vim (formatprg=bibclean; plugin: vim-quickrunで保存時にHTMLファイルを作成; bibtex2html)</td>
</tr>
<tr>
<td>文献情報の閲覧</td>
<td>bibtex2htmlで変換されたHTMLファイル</td>
</tr>
<tr>
<td>論文pdfの閲覧</p></td>
<td>bibtex2htmlで変換されたHTMLファイルからリンク(ブラウザの設定でブラウザ内で閲覧)</td>
</tr></tbody>
</table>

この表に挙げた内容について、それぞれ少し説明を加えておきます。

bibファイルの入手: Google Scholarアドオン
-----------------------------------------

論文のタイトルをハイライトした状態で、Googleから提供されているGoogle Scholarアドオンを使用すると、体感的に普通に検索するよりも良い精度で論文を探しだしてくれます。
また、論文を管理しているサイトなどによってはbibファイルのエクスポートをサポートしていない場合もありますが、
ポップアップの引用ボタンを押すと、引用形式の書式設定がされた参考文献が表示されるので、これを自分のbibファイルにコピペすれば、TeXから参考文献として呼ぶことができるようになります。

- [Google Scholar ボタン :: Add-ons for Firefox](https://addons.mozilla.org/ja/firefox/addon/google-scholar-button/)
- [Google Scholar ボタン - Chrome ウェブストア](https://chrome.google.com/webstore/detail/google-scholar-button/ldipcbpaocekfooobnbcddclnhejkcpn)

ただし、上の方法ではabstractなどの情報が抜けることもあるので、論文をホストしているサイトがbibファイルのエクスポートをサポートしていれば、そちらから持ってくることをおすすめします。

論文pdfの入手
-------------

これは言うまでもないかもしれませんが、上のようにGoogle Scholarなどを使用して目的の論文を見つけることができたら、そのサイトで論文をpdf形式でダウンロードします。
大学や会社のネットワーク内であれば、提携しているサイトにおいては無料でダウンロードできるといった恩恵があると思います。
それ以外の場合は、論文1本あたり、もしくは月額・年額で購読することができます。
ダウンロードするときの名前付けは、それぞれ流儀があるでしょうが、僕の場合、後述するようにHTMLファイルの中からリンクで見るようにしているので、ファイル名は何でも大丈夫です。

bibファイルの編集: Vim (bibclean, vim-quickrun, bitex2html)
-----------------------------------------------------------

大きなカテゴリごとに、それぞれ一つのbibファイルにまとめておいたほうが、後々見直すときやTeXファイルの中から引用するときに楽かと思います。
また、コンパイル時のエラーを防ぎ、またファイルを生で見てもわかりやすくするために、bibcleanなどを使って整形することをおすすめします([bibcleanでbibファイルを整形【Vim】 - Qiita](http://qiita.com/ssh0/items/3fa170023f462913f9ac))。

それから、ここからが今回の肝なのですが、Vimのプラグイン[vim-quickrun](https://github.com/thinca/vim-quickrun)とbibファイルをHTMLファイルに変換するコマンドラインアプリケーション[bibtex2html](https://www.lri.fr/~filliatr/bibtex2html/)を使い、bibファイルを保存するたびにHTML形式に変換します。

### bibtex2htmlのインストール

[bibtex2html](https://www.lri.fr/~filliatr/bibtex2html/)を参照して、それぞれの環境にあわせてインストールしてください。
Ubuntuなどaptでパッケージ管理しているなら、

```
sudo apt-get install bibtex2html
```

でインストールできます。

### bib2html_wrapper.sh

まず、quickrunから使いやすいように、適当にbibtex2htmlをラップするシェルスクリプトを用意しました。
ちょっとだけ賢いのは、ファイルが`source`ディレクトリ(`$sourcedir`で名前は変更可能)にあるときは、その上のディレクトリにHTMLファイルを出力します。
それから、出力されるディレクトリの中に、`html`というディレクトリがある場合、その下にHTMLファイルを出力してくれるようにしました。
変換時に好きなcssを指定できるので、表が綺麗に表示できるcssファイルを指定しておきます。

- [dotfiles/bib2html_wrapper.sh at master · ssh0/dotfiles](https://github.com/ssh0/dotfiles/blob/master/bin/bib2html_wrapper.sh)

```sh
#!/bin/sh
# written by Shotaro Fujimoto (https://github.com/ssh0)
# first edited: 2015-05-29

style='junsrt'
bibtex_command='pbibtex'
css="$HOME/Workspace/blog/styles/bootstrap-md.css"
# If the choosed file is in $sourcedir, default outputdir is setted to one
# level upper directory.
sourcedir='source'

dir="$(cd "$(dirname $1)"; pwd)"
namewithext=$(basename "$1")
name=${namewithext%.*}

currentdir="$(basename $dir)"
dir_up="$(dirname $dir)"

if [ ${currentdir} = $sourcedir ]; then
  dir="${dir_up}"
fi

if [ -d "${dir}/html" ]; then
  output="${dir}/html/${name}"
else
  output="${dir}/${name}"
fi

bibtex2html -s "${style}" -c "${bibtex_command}" -css "${css}" -o "${output}" "$1"
```

忘れずに実行権限をつけておきましょう。

```
sudo chmod u+x ~/bin/bib2html_wrapper.sh
```

### Vim側の設定

次に、Vimからvim-quickrunを通じて、bibファイルの保存時に上のスクリプトbib2html_wrapper.shを実行するようにします。

まずは`~/.vimrc`に以下を追記して、拡張子bibをファイルタイプbibとして認識するようにします:

```vim
augroup filetype
  autocmd!
  " bib file
  autocmd BufRead,BufNewFile *.bib set filetype=bib
  autocmd Filetype bib let &formatprg="bibclean"
augroup END
```

vim-quickrunではファイルタイプごとに設定ファイルを分けることができるので、`~/.vim/ftplugin/bib_quickrun.vim`に以下のように書きます。

- [dotfiles/bib_quickrun.vim at master · ssh0/dotfiles](https://github.com/ssh0/dotfiles/blob/master/vimfiles/ftplugin/bib_quickrun.vim)

```vim
" for bib file
let g:quickrun_config.bib = {
\ 'command' : 'bib2html_wrapper.sh',
\ 'srcfile' : expand("%:p"),
\ 'outputter' : 'error',
\ 'outputter/error/success' : 'null',
\ 'outputter/error/error' : 'quickfix',
\ 'exec': '%c %o %s',
\}

autocmd BufWritePost,FileWritePost *.bib QuickRun -type bib
```

これで、bibファイルの保存時にHTMLファイルが作成されるようになりました。

文献情報の閲覧・論文pdfの閲覧
-----------------------------

さて、変換されたHTMLファイルについてですが、指定したスタイル(junsrtとか)に合わせた形で、表の中にそれぞれの文献情報が表示されます。
また、doiやURLが情報に含まれていれば、そのリンクを作成してくれます。
そこでこれを利用して、bibファイルにそのファイルを実際にダウンロードした相対パスを記述しておきます(今の場合、`html`ディレクトリと同じ階層に`pdf`ディレクトリがあって、そこにダウンロードしてきた論文があるとしています)。

```
@Article{20_Journal,
  title =        "Title of the article",
  author =       "Author1 and Author2 and Author3",
  journal =      "Journal name",
  volume =       "1",
  number =       "20",
  pages =        "100--120",
  year =         "2000",
  pdf =          "../pdf/20_Journal.pdf",
}
```

すると、作成されたHTMLファイルにはこのpdfファイルへのリンクが作成され、これを選択するとブラウザ上でpdfファイルを開くときのデフォルトの動作をします。
僕の場合にはFirefoxを使っているので、Firefox上でそのpdfファイルを閲覧することができます。

メリット
========

このように文献を管理するメリットしては、ファイル名などの情報だけでなく、様々な情報を含んだ形で文献リストを参照できるので、いざ中身を確認したいとなったときに簡単にpdfファイルを参照できる点にあります。
また、HTML形式にしてしまったことで、ブラウザからブックマークしておけばいつでも開けますし、ブログに貼りたいとか、メモに残すときに貼りたいとか言う時にもお手軽です。

デメリット
==========

いくらか自動化することができたとはいえ、手動で編集する必要のある場面も多いので、改善の余地があります(特にpdfファイルのリンクを追記する操作)。

まとめ
======

文献の管理のベストプラクティスがあるのかよくわからないので、もう自分が便利だと思うローカルミニマムを作ってしまえということでとりあえず完成しました。
自分とは違う使い方をしている人にとっては使いづらいかもしれないですが、同じような使い方、考え方の人の役に立つかもしれないので、記録として残しておきました。