Babelbib with ptexlive

ptexlive で多言語文献参照パッケージ Babelbib を使ってみた。

LaTeX のマルチリンガルインタフェースとして Babel はデファクトスタンダードになっている。文献参照機能 BibTeX の世界でも Babelbib という Babel の言語切替に対応したパッケージが公開されている。Babelbib 2009 年 10 月の版でロシア語もサポートされた。ptexlive には初期導入されていて,すぐ使いはじめることができる。

pLaTeX2e においては BibTeX は jBibTeX を用いるのが主流だったが,ptexlive における日本語対応版は pBibTeX (pbibtex コマンド) という名称になっている。しかしながら,Babelbib を ptexlive で使う場合,pBibTeX ではなく BibTeX (bibtex コマンド) を使う。pBibTeX で文献データベース処理を行うとロシア語などでエラーになるからである。ptexlive ではキリル文字を欧文として扱う場合エスケープ形式 (文字を十六進数で表現した形式。例えば Ю^^d0^^ae で表す) にしなければならないが,pbibtex がこれをうまく処理できない。本家 bibtex ならうまく通るのである。

Babel を用いて ptexlive で日本語と外国語を混植するとき,稲垣さんの japanese.ldf 日本語言語定義を使っている人は多いと思う。Babelbib でも同様に japanese 環境に応じて文献参照の言語を切替えたい場合,Babelbib 用の日本語言語定義ファイル japanese.bdf を準備しなくてはならない。これの作り方はそんな難しいものではなく,すでにある言語定義をコピーして "Volume" などの文献項目表示ラベルを UTF-8 日本語で書直せばよい。私が試験的に準備した japanese.bdf を置いておく。ただし,これ,英語用を複製して japanese で動くようにしただけのしろもので,ほとんどラベルの書換をしていない。(※ 4.18 付記: nippon.ldf でも動くようにした。)

Babelbib の使い方は,端末から texdoc babelbib と打ち込めば表示される Babelbib PDF ドキュメントを参照していただきたい。ごくごく簡単に記すと,プリアンブルに以下のように書いておく。

\usepackage[utf8x]{inputenc}
\usepackage[T2A,T1]{fontenc}
\usepackage[italian,german,french,russian,english,japanese]{babel}
\usepackage[japanese]{babelbib}% load japanese.bdf

japanese.bdf は Babelbib 標準言語ではないので,パッケージ・オプションに japanese を指定してロードするよう指示しておくことがポイントである。

日本語 BibTeX では \bibliographystyle として jplainjabbrv が用意されているが,Babelbib では babplain などを使う。ただし,私が試した範囲では,ptexlive との組み合わせで,babplain, babplai3, babunsrt スタイル以外は動作しなかった。

サンプルを以下に示す。LaTeX 原稿 (mlbibjp.tex):

% -*- coding: utf-8; -*-
% mlbibjp.tex: BibTeX Babelbib test
% coded by isao yasuda.
\documentclass[b5paper]{jsarticle}
\usepackage[utf8x]{inputenc}
\usepackage[T2A,T1]{fontenc}
\usepackage[italian,german,french,russian,english,japanese]{babel}
\usepackage[japanese]{babelbib}
\setlength{\textwidth}{30zw}
\begin{document}
\begin{center}
  \Large\bf ptexlive Babelbib試験
\end{center}
 
Bib\TeX{}は\texttt{pbibtex}ではなく\texttt{bibtex}で実行した。
 
\vspace{1em}
ロシア語:
\selectlanguage{russian}
Юрий Лотман написал это в лит.\cite[с. 256]{lotman1970}.
 
\vspace{1em}
\selectlanguage{japanese}
イタリア語:
\selectlanguage{italian}
Nel 1930 venne pubblicato ``\textit{La carne, la morte e 
il diavolo nella letteratura romantica}'' (\cite{mario1930}), 
un testo che tradotto in inglese nel 1933 contribuirà 
ad estendere la sua fama in Gran Bretagna e Stati Uniti, 
e provocherà invece forti reazioni contrarie in Italia, 
fra cui quella di Benedetto Croce.
 
\nocite*
%% Choose one BibTeX style:
\bibliographystyle{babplain}% OK
%\bibliographystyle{bababbrv}% NG
%\bibliographystyle{babalpha}% NG
%\bibliographystyle{babunsrt}% OK
%\bibliographystyle{babamspl}% NG
\bibliography{ml}% see ml.bib
\end{document}

文献データベースファイル例 (ml.bib) は以下のとおり。書誌情報 language に Babel 言語名を指定すると,その言語でのマナーで文献出力がなされる。例にあるとおり,著者名,書名の文字列は UTF-8 で直接入力ができる。ロシア語もキリル文字をそのまま書いてよいし,独・仏語もアクセント付き文字をそのまま入力できる。

% -*- coding: utf-8; -*-
% ml.bib: babelbib test
% coded by isao yasuda.
@book{curtius1961,
  author={Curtius, E. R.},
  title={Europäische Literatur und lateinisches Mittelalter},
  year={1961},
  address={Berlin},
  language={german}
}
@inBook{mario1930,
  author={Praz, M.},
  title={La carne, la morte e il diavolo nella letteratura romantica},
  year={1930},
  address={Milano},
  language={italian}
}
@book{lotman1970,
  author={Лотман, Ю. М.},
  title={Структуры художественного текста},
  year={1970},
  publisher={Искусство},
  address={Москва},
  language={russian}
}
@book{tynyanov1969,
  author={Тынянов, Ю. Н.},
  title={Пушкин и его современники},
  year={1969},
  publisher={Наука},
  address={Москва},
  language={russian}
}
@Book{gracq1938,
  author={Gracq, Julien},
  title={Au château d’Argol},
  publisher={José Corti},
  year={1938},
  address={Paris},
  language={french}
}
@Book{basho1970,
  author={松尾 芭蕉},
  editor={中村俊定},
  title={芭蕉句集},
  publisher={岩波書店},
  year={1970},
  address={東京},
  language={japanese}
}

上記原稿をコンパイルし,PDF を生成するには以下のようにする。

% eplatex mlbibjp.tex
% bibtex mlbibjp.aux
% eplatex mlbibjp.tex
% eplatex mlbibjp.tex
% dvipdfmx mlbibjp.dvi

このとき注意が必要なのは,ロシア語,ギリシア語が原稿,文献データベースに含まれている場合,エスケープ形式にしておかないといけない点である。PTEX_IN_FILTER 環境変数にここであげたフィルタを指定して実行すれば,利用者が意識しなくても ptexlive (UNIX 版) がこの処理を通してくれる。

組版結果は以下のとおり。ここでは文献一覧をイタリア語環境で出力してみた。

babelbib-test.png
mlbibjp.tex 処理出力