BibTeX標準4スタイル——名前がそのまま仕様書だった時代

plain、unsrt、alpha、abbrv。BibTeXを使ったことがある人なら、一度は見たことのある名前だと思います。けれど、この4つの名前は略号やブランド名ではありません。1980年代から残る標準スタイルの名前は、それぞれのスタイルが何をするかを一語で言い切った、短い仕様書でした。

4つの名前をまず読む

  • plain — 飾り気のない標準形。著者・年・タイトルを基準に並べ、番号ラベルを使う。
  • unsrt — unsorted、つまりソートしない。引用された順に並べる。
  • alpha — alphanumeric labels。[Kin80] のような英数字ラベルを使う。
  • abbrv — abbreviated。plain を基準に、著者名や月名などを略記する。

この時点で、名前と挙動の対応はかなり明快です。では、本当に実装もその説明どおりなのでしょうか。CTANで配布されている .bst ファイルを直接読んで確かめました。

unsrt.bst には本当にソート命令がない

最も気持ちよく名前と実装が一致していたのは unsrt.bst でした。ファイルの処理は、おおまかに READ、ラベル幅の測定、call.type$ へ進みますが、並び替えを行う SORT 命令そのものが存在しません。

途中にある longest.label.pass は、各ラベルの幅を調べて thebibliography に渡す幅を決めるための処理です。全エントリを巡回するので一見ソートの準備にも見えますが、目的はレイアウトであって順序の変更ではありません。「unsorted」は比喩ではなく、命令レベルの事実でした。

plain と alpha はキーの作り方が違う

plain.bst の presort 関数は、著者・年・タイトルを連結して sort.key$ に積みます。その後の SORT が、そのキーに従って文献を並べます。普段「著者順」と呼んでいる挙動は、専用の魔法ではなく、ソートキーを組み立てる関数と SORT の組み合わせです。

alpha.bst では先にラベルを計算します。著者キーから頭文字を取り、3人目より後の著者は + を使って省略し、そこへ西暦の下2桁を接続します。たとえばラベルは Kin80 のような形になります。presort はこのラベルを先頭にしたキーを作るため、まずラベル順、同じラベルなら著者・年・タイトルという順序になります。同じラベルが衝突したときの a、b、c は extra.label が担当します。

4つのスタイルは一つのソースから生まれた

さらに面白いのは、これらのスタイルが完全に別々に書かれたものではないことです。plain.bst、unsrt.bst、alpha.bst、abbrv.bst の先頭コメントには、標準スタイルを同じ状態に保つため、単一のソース btxbst.doc から生成しているという趣旨が記されています。

つまり、4つの名前は4種類の実装を区別するラベルであると同時に、一つの設計をどの方向へ変形したかを示す差分でもあります。unsrt は順序を変えず、alpha はラベルを変え、abbrv は表示を短くする。名前を見れば、共通部分と差分の位置まで推測できます。

歴史の中で名前と仕様が少しずつ固まった

Patashnik の BIBTEXing によると、0.99bではソートキーに年が加わりました。以前は著者とタイトルが中心だったため、現在よく知られている「著者・年・タイトル」という説明も、最初から不変だったわけではありません。alpha の省略記号も古い版では *、現行の標準スタイルでは上付きの + へ変わっています。

この変化は、名前が仕様を要約していても、仕様そのものが時間の中で更新されることを示しています。名前だけで判断せず、必要なときは実際の .bst と一次資料を読む。この距離感がちょうどよいのでしょう。

名前が短いほど、コードを読む入口になる

現在の biblatex では、alpha に相当するスタイル名が alphabetic というフルネームになっています。これは単なる表記の違いですが、短い名前だけで意味が通じたBibTeXの時代との対比が見えます。

古いソフトウェアの名前には、説明書より先に設計者の判断が埋め込まれていることがあります。今回の4スタイルは、その好例でした。unsrt の中に SORT がないことを確認した瞬間、名前は単なる慣習ではなく、実装を読むための見出しになります。

参照した資料

  • Oren Patashnik, BIBTEXing (1988)
  • Nicolas Markey, Tame the BeaST
  • CTANで配布されている plain.bst、unsrt.bst、alpha.bst、abbrv.bst(v0.99b)

標準スタイルの原典は CTANのBibTeX baseコレクションから確認できます。

コメントする

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

上部へスクロール