TeX」カテゴリーアーカイブ

apsrev4-2.bst 日本語文献対応への一歩

概要

以下の2つの記事を参考にしてアメリカ物理学会(APS)の標準のbibtexのスタイルファイルapsrev4-2.bstで日本語の本も表示することができるようにしてみた。

これまで、bstファイルは何が書いてあるのかさっぱりわからなかったが、上記の記事で、雰囲気はわかるようになった。大変すばらしい記事だ。今回はapsrev4-2.bstを使って日本語の本を処理するための改造法について記載する。

これで本の日本語表記ができるようになった。具体的には”[1] 山田 一郎 , 山田 次郎 , 山田 三郎 , 山田 四郎 , 「文献 1 」 ( 五郎社 , 2019).”とできるようになる。

とりあえず現時点でのバージョンを以下のようにアップロードしておく:

以下のコードをtexファイルに追加して使用できる。

\usepackage[sort&compress,numbers]{natbib}
\usepackage{doi}\usepackage{hyperref}
\bibliographystyle{apsrev4-2ja}

bibファイルには以下のようにisjapaneseを追加する:

@book{jt,
author = {一郎, 山田 and 次郎, 山田 and 三郎, 山田 and 四郎, 山田},
year = {2019},
title = {文献1},
publisher = {五郎社},
isjapanese = {true}
}

isjapaneseを自動追加するコードが「日本語と英語の共存するbibtexのスタイルファイルを作る」に公開されている。

変更の詳細

日本語文献用の変数を追加

まず、上の参考サイトにあるように日本語文献情報の設定をbibファイルに入れれるようにする:

41a42
>     isjapanese
186c187
< INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed }
---
> INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed japanese.flag}
220,221d220
<   #0
<   'japanese.flag  :=

さらに、bookで日本語が扱えるようにするために、FUNCTION {book}に以下のような日本語化フラグの設定を追加。

2699c2733,2741
< { output.bibitem
---
> {
>   %%変更箇所1:日本語エントリに何かあれば日本語化するフラグを立てる
>   isjapanese empty$
>     {skip$}
>     {#1 'japanese.flag :=}
>   if$
>   %%変更箇所1ここまで
>   
>   output.bibitem
2742a2785,2788
> 
>   %%変更箇所2:次の文献のために日本語化フラグの解除(0に戻しておく)
>   #0 'japanese.flag :=
>   %%変更箇所2ここまで  

and抑制

日本語文献に対してandを抑制するにはbbl.and関数を書き変えるとよい。

828c839,847
<   "and"
---
>   % 日本語の場合はandを抑制
>   japanese.flag #0 =
>   {
>     "and"
>   }
>   {
>     ""
>   }
>   if$   

名前を「山田 太郎」のような日本語表記に

format.names.morfont関数内を書き変える。

1487,1493c1506,1518
<     control.author.initials {
<       "f"                        % default: name + surname + comma junior
<     } {
<       "ff"
<     } if$
<     control.author.dotless 'skip$ {
<       "." *                    % nm-init   % Initials. + surname (J. F. Smith)                                           control.author.initials
---
>     
>     % 日本語の場合は名前を略さない
>     japanese.flag #1 =
>     {"ff"}
>     {    
>       control.author.initials {
> 	  "f"                        % default: name + surname + comma junior
> 	} {
> 	"ff"
>       } if$
>       control.author.dotless 'skip$ {
> 	"." *                    % nm-init   % Initials. + surname (J. F. Smith)                                           control.author.initials
>       } if$
1494a1520
>     
1497c1523,1531
<       { tie.or.space.prefix bib.fname.font swap$ * }
---
>     {
>       % 日本語の場合は名前と名字を入れ変える
>       japanese.flag #1 =
> 	{swap$}
> 	{skip$}
>       if$
>       
>       tie.or.space.prefix bib.fname.font swap$ *
>     }

文献の強調を「」にする

761,766c760,777
<   duplicate$ empty$
<     { pop$ "" }
<     {
<       "\emph {" swap$ * "}" *
<     }
<   if$
---
>   % 日本語の場合はemphasizeを「」で包むだけにする
>   japanese.flag #0 =
>   {
>     duplicate$ empty$
>     	{ pop$ "" }
> 	{
> 	  "\emph {" swap$ * "}" *
> 	}
>     if$
>   }
>   {
>     duplicate$ empty$
>     	{ pop$ "" }
> 	{
> 	  "「" swap$ * "」" *
> 	}
>     if$
>   } if$

arXivは表示しないようにする

#0 ‘control.eprint :=としてディフォルトではarXiv情報は表示しない。

216c217
<   #0
---
>   #1