ill-identified diary

所属組織の見解などとは一切関係なく小難しい話しかしません

(u)pBibTeX から biblatex に移行できるか (備忘録) (未完成)

この記事は最終更新日から3年以上が経過しています
  • まじでメモ
  • まじで情報がない

能書き

BibLaTeX はマジで日本語情報が不足してるのでとりあえずメモ. 「BiBLaTeXに移行して日本語文献がうまく出力できないので調べている」とかでやってきたのがあなたなら, たぶん以下を読んでも問題は解決できない. 昔は Biblatex - TeX Wiki にもう少しなんか書いてあったような気がしたが, 今確認したらリンクをいくつか羅列してあるだけになっていた (qiitaの検索結果のリンクを張る意味とは……). そしてリンク切れになっているものも多い.

私がBibLaTeXでやりたかったのは, 「和文と欧文のまじった文献リストを適切な書式と順序で表示したい」をXeLaTeXとUnicodeのテキスト使ってやることだったが, 上記の記事ではわからないことのほうが多い.

とりあえず上記の中で簡潔かつ正確だと思われる記事は 『BibLaTeXの使い方まとめ - むしゃくしゃしてやった,今は反省している日記』 くらいか (5年以上前であることからも本件の情報がとにかく少ないことがわかる). わかりやすいがもちろんこれが全貌ではない. よって残された道は 公式ドキュメントを読むしかない. 幸いにも公式ドキュメントは量は多いが分かりやすく書かれている. (以下, ver. 3.15, 2020/8/19 版をもとに書いた)

BibLaTeX は (u)pBibTeX のように文字コードに制約があったり, わけわからん構文のスタイル (.bst) を使ったりしない. 最初から Unicode に対応し, フォーマットは LaTeX のマクロで制御しており, いくつかのオプションだけでよくあるスタイルを使い分けられる. が, しかしそれは欧文限定で, Unicode対応のおかげで日本語は表示できるものの明らかに和文のスタイルにならない. もちろん.bstをフォーマットを使いまわすこともできない.

基本は LaTeX の他のパッケージと同様に \usepackage[...]{biblatex} で読み込み, この時に OPTION1=VALUE1,OPTION2=VALUE2,... というふうにおおまかな書式を指定できる.

主なオプション

以下, 重要なオプションのみ紹介.

style

詳細は公式ドキュメント 3.3 節.

style=に指定する, 名前通りスタイル. 引用リスト(巻末の詳細な文献情報リストとその見出し)と, 本文中に表示される記号 (以下, 引用子) の書式.

名前 概要
numeric [1], [1, 2]のような番号方式
alphabetical 数学, 計算機科学系によくある(?)[A+B19] のような著者名と出版年の略称
authoryear 社会科学系によくある著者姓 - 出版年 方式 (これまでnatbib.sty/harvard.sty)で使用できたやつ
authortitle 著者 - タイトル, リストでの出版年は後置され, 引用子は医療系?でよくある脚注になる
verbose authortitleとほぼ同じだが, 引用子の脚注に引用リストと同等の情報が表示される
reading 個人的なリーディングリスト作成用. さらにmemoとかfileとか普通のフォーマットでは表示しないフィールドも表示する. 書式も独特のものになる
draft さらに引用子はBibTeXデフォルトのように .bibの参照名になる. 動作確認用
debug draftに加え, .bibの全フィールドを表示するようになる

また, ieee, apa のような著名な国際学会準拠スタイルも用意されている. これらは Overleaf のサイト "Biblatex bibliography styles - Overleaf, Online LaTeX Editor" に出力例がある (しかし全て欧文用なので日本語の出力例はない).
これらは引用リストと引用子の書式がセットになっているが, それぞれ bibstyle, citestyle オプションに分けて指定することもできる.


natbib

こっちは 著者 - 年 方式にするかどうかではなく, \citeit{}, \citep{}など natbib.sty が用意した多彩な引用子の書式との互換のために作られたオプション. true/falseで指定

sorting, sortlocale

sortingは引用リストをソートするルール. noneはソートせず, 本文に引用された順そのままで表示. デフォルトは ntyで, 名前 (n), タイトル (t), 出版年 (y), の並びで指定できる. 同様に巻数 (v) なども加えて, その並びでルールが分かるようなオプション名がいくつか用意されている (公式 3.1.1 節)

sortlocale ソートロケール. おそらく欧文圏にしか対応していない. デフォルトの autobabel/polygrossiaの設定を参照するらしいが, 私は普段どちらも使ってないので意味がなかった. が, 逆に言えばこれらで定義されている識別名を手動指定できる, ということで sortlocale=ja_JP としたら, 順番は変わったがおそらく音読みで判定している (まあ特殊な読みの対応までは期待してないが). なら sortnameフィールドを指定すれば? とおもってひらがなで書いてみたらソートされるらしい. そしてそもそも sortlocaleなしでもできてしまうのだった*1. まあこれなら yomiフィールドの中身をコピペするスクリプトとかでまとめて修正すれば後方互換とかもあまり気にならないし最低限の労力で対応できそう (私の検証はすごくいい加減で, 巻末のような .bib ファイルを適当に引用して確認した).
なお, これらソートに関するオプションは backend=biber (デフォルト) のときのみ有効.

backend

文献データベースを読み込み, 処理する際のエンジンで, デフォルトは biber. 表示順にも影響する. 公式ドキュメントにも bibtexが指定できると書いてあるが, ならと思ってか (u)pBibTeXで試している人がちらほらいる*2. そんなややこしいことが必要な場面があるのか? という気がするが, 現在の R Markdown の制約では (u)pBibTeX を使うことができない (より正確には tinytex の制約も絡んでいる) ので, 制約を回避するためならこういう裏道もありかも? と思って試してみる. pBibTeX すらできない. たぶんUTF-8モードで使っているから. どちらにしろ .bstファイルが使えるようになるわけでもないし, 古い環境でない限り指定するメリットはほとんどなさそう.

結論

ソートが鬼門と予想していたが意外となんとかなった. しかし現状, 日本語文献の表示に対応したBibLaTeXフォーマットがないのであまり見た目はよくない. 特にはっきりした違和感の1つは, 複数著者がいると姓名の順番がおかしくなる, というか欧文スタイルのままである, という点である. なぜか日本語の記事では, 避けてごまかしているのか本当にたまたまなのか分からないが, この記述が抜けていることが多い. 例えば巻末の .bibを出力するとこうなった.

f:id:ill-identified:20200920225441p:plain
biblatexでの和文献出力例

BibLaTeXの書式の多くはLaTeXマクロで制御するので, 書体とかカギカッコでくくるとかのフォーマット修正は比較的簡単そうであるが, こういうのはどうなるのか(まだ確認していない)

なお, pandoc の biblio-style で指定できるのは style オプションの部分だけだが, これは biblatex の読み込み時オプションに代入してるだけなので authoryear,natbib=true,sortlocale=ja_JPのようにカンマでつなげて無理やり他のオプションを入れることもできる (natbib=true はpandocではあまり意味がないが).

補足: 記述例

TeX Live 2020で

xelatex test
biber test
xelatex test

もちろん latexmk とかでやってもいい

test.tex ファイルは以下

\documentclass{bxjsarticle}
\usepackage{fontspec}
\setmainfont{DejaVu Serif}
\setsansfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
\usepackage[AutoFallBack=true]{zxjatype}
\usepackage[noto]{zxjafont}
\usepackage{xeCJKfntef}
% ----
% ここが問題の箇所
\usepackage[style=authoryear,backend=biber,natbib=true,sortlocale=ja_JP,sorting=nty]{biblatex}
\addbibresource{test.bib}
% ----
\begin{document}
\autocite{Okumura2017LaTeX,Ban1991,hasegawa2004}
\autocite{AsanoNakamura2009}
\printbibliography[title=参考文献] % 参考文献リストの表示位置
\end{document}

test.bib ファイルは以下

@book{Okumura2017LaTeX,
  title = {{LATEX2{$\epsilon$}美文書作成入門}},
  author = {奥村, 晴彦 and 黒木, 裕介},
  year = {2017},
  edition = {7},
  language={Japanese},
  publisher = {{技術評論社}},
  address = {{東京}},
  isbn = {978-4-7741-8705-1},
  language = {Japanese},
  sortname = {おくむらくろき}
}
@book{Ban1991,
  title = {マクロ計量モデル分析},
  author = {伴, 金美},
  year = {1991},
  publisher = {{有斐閣}},
  language = {Japanese},
  yomi = {ばん},
  sortname = {ばん}
}
@book{hasegawa2004,
  title = {線型代数 {{Linear Algebra}}},
  author = {長谷川, 浩司},
  year = {2004},
  edition = {First},
  publisher = {{日本評論社}},
  yomi = {はせがわこうじ},
  sortname = {はせがわ}
}
@book{AsanoNakamura2009,
  title = {計量経済学},
  author = {浅野, 皙 and 中村, 二朗},
  year = {2009},
  edition = {Second},
  publisher = {{有斐閣}},
  sortname = {あさのせきなかむらじろう}
}

*1:そしてローマ字で入力すると当然ながらABC順になるし, 欧文と一緒くたにもされてしまう. このページでは (これも古いのだが) ローマ字で入力している例を提示しているが, あきらかに「よしなに」やってはくれないので誤り: https://konn-san.com/prog/why-not-latexmk.html というか直後にバックエンドにbibtexを使ってるって書いてあるので関係ないのでは? この人の勘違いなのか, 更新で仕様がすっかり変わってしまったのかまでは確認したくないが...

*2:https://konoyonohana.blog.fc2.com/blog-entry-96.html