#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]]