#author("2021-05-28T19:45:27+09:00","default:Miyashita","Miyashita")
#author("2021-05-28T19:46:04+09:00","default:Miyashita","Miyashita")
* bibliographystyle (.bst) ファイル [#qe579fe2]
#contents
** 基本 [#p1aaeb37]
参考文献 (References) の本文中・リストでの書式について定めたファイル.~
junsrt.bst というファイルがあるとすると
#codeprettify(lang-latex){{
\bibliographystyle{junsrt}
}}
のように使う.
~
~

** ファーストネームを省略したい/和文のときには省略しない [#d65bc278]
文献の bibtex スタイルは比較的容易に入手できるが,ファーストネームが頭文字だけのこともあるし,フルネームもある.~
これらが混在していると,junsrt.bst などでは
 First name, Last name
と
 F Last name
のように bib ファイルの author に書いた通りに出てきて,統一感がない.~
全参考文献の著者全員のフルネームを調べるのは大変だし,調べたとしても bib ファイルを全部編集するのがだるい.~
ということで, bst ファイルを編集し,フルネームを bib ファイルに書いてもファーストネームは頭文字だけになるように変更する.~
~
まず,Ubuntu で junsrt.bst がどこにあるかを調べて,手元にコピーする.~
混同してはいけないので別名でコピー.
#codeprettify{{
$ 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} というところにある.
#codeprettify{{
#codeprettify(lang-tex){{
    { 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 を使うようにプリアンブルでファイルを指定する.
#codeprettify(lang-latex){{
\bibliographystyle{myjunsrt}
}}
~
~

**和文の参考文献で最後の著者の前に and を入れない [#lfe75a71]
下記は土木学会論文集の jsce.bst を編集したやつ.~
namesleft というのは書き出していない著者の残りの数で,これが 1 の場合に,英文なら and, 和文なら単なるカンマで済ませるというもの.~
#codeprettify(lang-tex){{
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$
}
}}
~
~

***参考 [#k52c5240]
-[[.bstファイルをいじって著者名表記を変える>http://may46onez.hatenablog.com/entry/2018/02/01/140136]]

Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes