備忘録とか日常とか

学んだこととかを書きます。

.bstファイルをいじって著者名表記を変える

bibtexで引用する際に注意すべき点として、

  • 引用順をどうするか
  • 著者名表記をどうするか

がまずあげられる。分野によると思うが、自分がよく使うのは

  • 文献を引用された順にソート
  • 著者名のファーストネームはイニシャル

なので、それに合わせて.bstファイルをいじる方法をメモする。

デフォルトのテンプレ

欧文用ではplain.bst, unsrt.bstを使い、和文にはjplain.bst, junsrt.bstを使う。
plainでは参考文献がアルファベット順に出力し、
unsrtでは引用された順に出力する。

特に設定を書き換えない場合は参考文献を載せたい場所で

\bibliographystyle{plain}
\bibliography{reference.bib}

みたいに書けば良いが、自分でいじった.bstファイルを使う場合はtexソースと同じディレクトリに.bstファイルを置く。

ここではjunsrt.bstをいじって自分用のmyjunsrt.bstをつくる。
/usr/local/texlive/2016/texmf-dist/pbibtex/bst/junsrt.bstを適当にコピー。
jplain.bstも同じ場所にある。バージョンとかは適宜読み換える。
見つからない場合は

find /usr/local/ -name junsrt.bst

とかしたら出てくる。windowsもtexlive/以下にあるんじゃないかな。知らんけど。

書き換え

.bstファイル内では、

FUNCTION {---定義名---} {
    ----定義の内容----
}

という形で各種表記の仕方が定義される。
こんな感じ↓

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }

    { s nameptr "{ff}{ll}" format.name$ is.kanji.str$
	{s nameptr "{ff}{ll}" format.name$ 't :=}                        
 	{s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=}
      if$

      nameptr #1 >
	{ namesleft #1 >

	    {", " * t * }


	    { t "others" =

 		{ s is.kanji.str$

 			{"$B$[$+(B" * }


 			{", et~al." * }

 		  if$
 		}
 		{ s is.kanji.str$

 		    {", " * t * }



		    { numnames #2 =
 			{" and " * t * }
 			{", and " * t * }
		      if$
		    }


 		   if$
 		}
	      if$
	    }
	  if$
	}
	't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

著者名の出力を変えるにはFUNCTION {format.names}の中身を書き換える。
上記nameptrとか書いているあたりを見る

       {s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=}

この部分。
{ff~}{vv~}{ll}{, jj}で著者名の表記を指定する。

  • {f}でファーストネームを頭文字のみ表示、{ff}で全て表示
  • {l}でラストネームを頭文字のみ表示、{ll}で全て表示
  • {v}でミドルネームを頭文字のみ表示、{vv}で全て表示
  • {j}でJr.を頭文字のみ表示、{jj}でJr.全て表示
  • `~`をつけるとそこで改行されなくなる。姓と名で改行されないようにするために使われる。
  • `.`をつけるとその位置にピリオドを表示
  • `, `をつけるとその位置にカンマを表示

で変えられる。
例えばJohn Fitzgerald Kennedyが著者名の時、

  • {f.~}{v.~}{ll}{, jj} で J. F. Kennedy
  • {ff~}{v.~}{l.}{, jj} でJohn F. K.

みたいになる。

【追記 18/2/5】
一行前の

	{s nameptr "{ff}{ll}" format.name$ 't :=}

の部分は日本語表記に使用される。ここを書き換えると漢字の苗字の一文字目だけ表示されたりするのでいじらない。


他にもタイトルや出版年の出力を変えることができるらしい。
少なくとも情報系の学会や研究会ではtexフォーマットが与えられることが多いので使う機会はなさそうだが・・・
自前で作る必要がある場合に役立つかもしれない。

○参考元
bst ファイルのカスタマイズ - Okomeda Net
LaTeXで参考文献の形式を変更する方法(bstファイルの編集) - けつあご日記