メインコンテンツへスキップ

BibLaTeXで日本語文献を扱う

··10 分

BibLaTeXで日本語文献を扱うための設定を紹介する。BibLaTeXの使い方はBibLaTeXの導入メモ | はたらく双対性が参考になる。日本語文献の扱いは、BibLaTeXで日本語文献と英語文献の混在を扱う - Qiitabiblatex-jpa: 日本心理学会2022年版文献スタイルが大いに参考になる。この記事ではスタイルを自作するほど高度なものではなく、簡易的に日本語文献の書式を整える。

BibLaTeXとは? #

BibLaTeXはLaTeX用の文献管理ツールだ。BibTeXよりも高機能であり、UTF-8に対応している。文献表示の書式をTeXマクロで制御しているので、複雑なBibTeXスタイルファイルを書くよりも、簡単にカスタマイズできる(はずである)。ただ、日本語情報がほとんどないので、実際にカスタマイズするのは難しいかもしれない。

BibLaTeXの設定 #

BibLaTeXの設定はbiblatex.cfgファイルに書くといい。プリアンブルに書くよりも、LaTeXソースファイルがすっきりする。コピペで使いまわしも簡単にできる。biblatex.cfgファイルはLaTeXソースファイルと同じフォルダーに置くと自動的に読み込まれる。

設定の詳細はCTAN: Package BibLaTeX公式マニュアルに書いてある。しかし英語で分量も多い。具体的にどうすればいいかわかりにくい。plk/biblatex: biblatexにあるソースコードが理解の助けとなる。

biblatex.defに標準で定義されたマクロやコマンドがある。standard.bbxに標準のスタイルがある。この2つを見ればだいたいわかる。また、公式サンプル集も参考になる。WindowsならソースコードはC:\texlive\2023\texmf-dist\tex\latex\biblatexにある。サンプル集はC:\texlive\2023\texmf-dist\doc\latex\biblatex\examplesにある。

日本語文献のためのbiblatex.cfg #

日本語文献を表示するためのbiblatex.cfgを作ってみた。BibLaTeXの標準スタイルを使用することを想定している。日本語文献の判定のために、bibファイルのエントリーにlangidフィールドを追加し、japaneseとしておく必要がある。

標準スタイルについてはbiblatex の標準スタイルの解説 - Qiitaに詳しい。

\ProvidesFile{biblatex.cfg}[2023/04/10 biblatex configuration for Japanese]
\ExecuteBibliographyOptions{
  date = year,  % 日付は年のみを表示
  maxbibnames=20,  % 参考文献リストで表示する著者の最大数
  maxnames=3,  % 表示する著者の最大数。超えるとminnamesだけ表示して後は省略する
  minnames=1,  % 表示する著者の最小数
}

%% 著者名のフォーマットを宣言
%% biblatex.defのfamily-givenとlabelnameを日本語用に
\DeclareNameFormat{japanese}{%参考文献リストでのフォーマット
  \usebibmacro{name:family-given}
  {\namepartfamily}
  {\namepartgiven}
  {\namepartprefix}
  {\namepartsuffix}%
  \usebibmacro{name:andothers}}

\DeclareNameFormat{labelname-japanese}{% 文中でのフォーマット
  \ifcase\value{uniquename}%
    \usebibmacro{name:family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \or
    \usebibmacro{name:family-given}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \fi
  \usebibmacro{name:andothers}}

%% 参考文献リストでの表記を設定
\AtEveryBibitem{%
  \iffieldequalstr{langid}{japanese}
    {\DeclareNameAlias{default}{japanese}%
     \DeclareNameAlias{sortname}{japanese}%
     \renewcommand*{\revsdnamepunct}{}% 姓と名の間のコンマを消去
     \DeclareDelimFormat{multinamedelim}{・}% 著者名の区切り文字
     \DeclareDelimFormat{finalnamedelim}{・}% 著者名の最後の区切り文字
     \renewbibmacro*{bytranslator}{% 翻訳者の表記
       \ifnameundef{translator}
       {}
       {\printnames[bytranslator]{translator}\printtext[parens]{訳}}}%
     \renewbibmacro*{bytranslator+others}{\usebibmacro{bytranslator}}%
     % タイトルの書式
     \DeclareFieldFormat*{title}{「#1」}% タイトルを「」で囲む
     \DeclareFieldFormat[book]{title}{『#1』}% 本のタイトルを『』で囲む
     \DeclareFieldAlias{booktitle}[book]{title}% 文献を収録する本のタイトルを『』で囲む
     \DeclareFieldAlias{journaltitle}[book]{title}% 雑誌名を『』で囲む
     \renewbibmacro{in:}{}% In:を削除
    }{}%
}

%% 文中の引用での表記を設定
\AtEveryCitekey{%
  \iffieldequalstr{langid}{japanese}
    {\DeclareNameAlias{labelname}{labelname-japanese}%
	 \DeclareDelimFormat{multinamedelim}{・}%
     \DeclareDelimFormat{finalnamedelim}{・}%
	 \renewcommand*{\revsdnamepunct}{}%
    }{}%
}

\endinput

\ProvidesFile #

\ProvidesFile{<ファイル名>}[<追加情報>]は設定ファイルの宣言。クラスファイルやパッケージファイル以外のファイルに使う1。ログにファイル名と追加情報が表示される。

\ExecuteBibliographyOptions #

\ExecuteBibliographyOptions{<key=value>}はBibLaTeXのオプションを設定する。biblatex のオプションの解説 - Qiitaに詳しい。

\DeclareNameFormat #

\DeclareNameFormat{<フォーマット名>}{<コード>}は著者名に使うnameフォーマットを宣言する。ここでは日本語文献用に2つのnameフォーマットを定義している。中身はbiblatex.defにあるfamily-givenとlabelnameフォーマットからイニシャルの処理を省いたものだ。

family-givenは姓・名という順番で名前を表示するフォーマットだ。namepartfamilyは姓、namepartgivenは名である。

labelnameは本文中の引用表示での名前のフォーマットだ。

\AtEveryBibitem #

\AtEveryBibitem{<コード>}は参考文献リストにおいて、項目ごとに<コード>を実行する。つまり、.bibファイルのエントリーごとに処理を実行できる。

\iffieldequalstr #

\iffieldequalstr{<フィールド名>}{<文字列>}{<true>}{<false>}はフィールドの値が文字列に一致するかを判定する。一致したときはtrueのコード、一致しないときはfalseのコードを実行する。

bibアイテムのlangidフィールドの値がjapaneseかを判定し、真の場合に日本語文献用のコードを実行する。

\DeclareNameAlias #

\DeclareNameAlias{<エイリアス名>}{<フォーマット名>}は定義済みのnameフォーマットのエイリアス(別名)を宣言する。

ここでは"japanese"の別名に、defaultとsortnameを宣言している。この2つはbiblatex.defで定義されているnameフォーマットであり、エイリアスとして宣言したことで、japaneseフォーマットに上書きされる。

defaultフォーマットはnumericとalphabeticスタイル、sortnameフォーマットはauthroryearスタイルなどで使用される2

\revsdnamepunct #

\revsdnamepunctは姓・名の順に名前が表示されるとき、区切り文字を表示するコマンドだ。標準ではコンマ(,)を表示する。日本語の場合は不要なので\renewcommand*{<コマンド名>}{<定義>}でコマンドの中身を空にした。

\renewcommand*はコマンドを再定義する。*は\renewcommandの別バージョンという意味だ。*付きコマンドで再定義されたコマンドは、引数に段落を含むことができないという違いがある34

\DeclareDelimFormat #

\DeclareDelimFormat{<フォーマット名>}{<コード>}は、区切り文字のフォーマットを宣言する。定義済みのものは上書きされる。multinamedelimは著者名の区切りであり、標準ではコンマ(,)だ。finalnamedelimは最後の著者名の区切り文字であり、標準では"and"だ。

\renewbibmacro* #

\renewbibmacro*{<マクロ名>}{<定義>}はbibmacroを再定義する。*の意味は\renewcommand*と同じである。

bytranslatorという名のマクロを再定義している。もともとは"Trans. by <翻訳者>“という表記だったのを”<翻訳者> (訳)“に変えている。標準スタイルで実際に使われるのはbytranslator+othersというマクロだ。これをbytranslatorを使用するマクロに再定義している。

othersの部分の表記が消えるなど標準とは違った挙動になっている。具体的にはcommentatorやannotatorフィールドは出力されない。マクロが複雑なので省略した。詳細はbiblatex.defを参照してほしい。

\DeclareFieldFormat #

\DeclareFieldFormat[<エントリータイプ>]{<フォーマット名>}{<コード>}は、フィールド用のフォーマットを宣言する。エントリータイプにbookやarticleなど文献の種類を指定すると、その種類にのみ適用される。ここでは、文献タイトルは「」で囲むようにしている。文献の種類が@bookであれば『』で囲む。

詳しく説明すると、\printfield[<フォーマット名>]{<フィールド名>}\printtext[<フォーマット名>]{<テキスト>}コマンドで宣言したフォーマットが指定されるとコードが実行される。#1はこのとき渡される引数であり、表示するフィールドの値や文字列になっている。

つまり\DeclareFieldFormat{title}{「#1」}は、渡された文字列を「」で囲んで出力する。\printfield{title}を実行すると”「<titleフィールドの値>」“と出力される。

ちなみに\printfieldでフォーマットを指定しなかった場合は、フィールド名と同じ名前のフォーマットが自動的に適応される。つまり、\printfield{title}\printfield[title]{title}と同じである。

titleフォーマットは、biblatex.defで定義済みであり、文献タイトルの表示に使われる。ここで再定義することで文献タイトルが「」で囲まれることになる。

\DeclareFieldFormat*は、エントリータイプを指定したフォーマットをすべてクリアする。

\DeclareFieldAlias #

DeclareFieldAlias[<エントリータイプ>]{<エイリアス名>}[<フォーマットのエントリータイプ>]{<フォーマット名>}は、フォーマットのエイリアスを宣言する。DeclareNameAliasと同じようなものだ。 ここではbiblatex.defで定義済みのbooktitle、journaltitleフォーマットを、文献の種類が@bookの場合のフォーマットで上書きしている。

\AtEveryCitekey #

\AtEveryCitekey{<コード>}は、\citeなどの引用コマンドにbibファイルのエントリーが渡されるたびに、<コード>を実行する。

DeclareNameAliasで宣言しているlabelnameは、文中の引用表記におけるnameフォーマットだ。biblatex.defに定義済みのものを、日本語用のlabelname-japaneseフォーマットで上書きしている。

参考文献 #