bibliographystyle (.bst) ファイル

基本

参考文献 (References) の本文中・リストでの書式について定めたファイル.
junsrt.bst というファイルがあるとすると

\bibliographystyle{junsrt}

のように使う.

ファーストネームを省略したい/和文のときには省略しない

文献の bibtex スタイルは比較的容易に入手できるが,ファーストネームが頭文字だけのこともあるし,フルネームもある.
これらが混在していると,junsrt.bst などでは

First name, Last name

F Last name

のように bib ファイルの author に書いた通りに出てきて,統一感がない.
全参考文献の著者全員のフルネームを調べるのは大変だし,調べたとしても bib ファイルを全部編集するのがだるい.
ということで, bst ファイルを編集し,フルネームを bib ファイルに書いてもファーストネームは頭文字だけになるように変更する.

まず,Ubuntu で junsrt.bst がどこにあるかを調べて,手元にコピーする.
混同してはいけないので別名でコピー.

$ locate junsrt.bst
/usr/share/texlive/texmf-dist/pbibtex/bst/junsrt.bst
$ cp -p /usr/share/texlive/texmf-dist/pbibtex/bst/junsrt.bst  ./myjunsrt.bst

コピーしてきたファイルを編集する.参考文献リストの著者名の書式を指定しているところは
FUNCTION {format.names} というところにある.

    { 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$
    }

この{ff}という部分が first name を示し,ff だと省略なし,f だと頭文字になるので ff を f または f. に変更.
最初の行の is.kanji.str という行は条件式で, 次の行は真(true)の場合の処理,つまり(和文用).和文で名を省略するのは変なので, {ff}{ll} とする.
その次の行は偽(false)の場合の処理で,英文用.ここでは{ff~}{vv~}{ll}{, jj}となる.
bibtex style は逆ポーランド記法で,条件式の真偽の処理の記述の後に if がくることに注意.

あとは編集後の bst を使うようにプリアンブルでファイルを指定する.

\bibliographystyle{myjunsrt}



和文の参考文献で最後の著者の前に and を入れない

下記は土木学会論文集の jsce.bst を編集したやつ.
namesleft というのは書き出していない著者の残りの数で,これが 1 の場合に,英文なら and, 和文なら単なるカンマで済ませるというもの.

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 "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=}
      if$
      nameptr #1 >
	      { namesleft #1 >
	          { ", " * t * }
	          { numnames #2 >
		            { "," * }
                { t is.kanji.str$
		                { "," * }
                    'skip$
                  if$
                }
	            if$
	            t "others" =
		            { " et~al." * }
                { t is.kanji.str$
		                { " " * t * }
		                { " and " * t * }
                  if$
                }
              if$
	          }
	        if$
	      }
	      't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}



参考


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2021-05-28 (Fri) 10:46:04 (62d)