diff options
author | Karl Berry <karl@freefriends.org> | 2022-04-05 22:39:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-04-05 22:39:16 +0000 |
commit | f5f08bad2e09ad04fa2526df4b6639bbd3c1dd8f (patch) | |
tree | b8896afa8b688e16307987109ce3adff0ea489c6 /Master/texmf-dist/bibtex | |
parent | 7586cd554d81dbc4cccd6973bb553024afe77ff6 (diff) |
jieeetran (27mar22)
git-svn-id: svn://tug.org/texlive/trunk@62958 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/bibtex')
-rw-r--r-- | Master/texmf-dist/bibtex/bst/jieeetran/jIEEEtran.bst | 3192 |
1 files changed, 3192 insertions, 0 deletions
diff --git a/Master/texmf-dist/bibtex/bst/jieeetran/jIEEEtran.bst b/Master/texmf-dist/bibtex/bst/jieeetran/jIEEEtran.bst new file mode 100644 index 00000000000..1e2a025c5d9 --- /dev/null +++ b/Master/texmf-dist/bibtex/bst/jieeetran/jIEEEtran.bst @@ -0,0 +1,3192 @@ +%% +%% jIEEEtran.bst +%% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted) for Japanese users +%% +%% Version 0.18 (2022/03/26) +%% +%% Copyright (c) 2020-2022 Haruki Ejiri and Yoshi Ri +%% +%% Original starting code base and algorithms obtained from the output of +%% Patrick W. Daly's makebst package as well as from prior versions of +%% IEEE BibTeX styles: +%% +%% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988) +%% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993) +%% 3. Michael Shell's IEEEtran.bst (2003-2015) +%% +%% Support sites: +%% http://www.michaelshell.org/tex/ieeetran/ +%% http://www.ctan.org/pkg/ieeetran +%% and/or +%% http://www.ieee.org/ +%% and/or +%% https://github.com/ehki/jIEEEtran/ +%% +%% For use with pbibtex version 0.99d-j0.33 or later +%% +%% This is a numerical citation style. +%% +%%************************************************************************* +%% Legal Notice: +%% This code is offered as-is without any warranty either expressed or +%% implied; without even the implied warranty of MERCHANTABILITY or +%% FITNESS FOR A PARTICULAR PURPOSE! +%% User assumes all risk. +%% In no event shall the IEEE/IEEJ or any contributor to this code be liable for +%% any damages or losses, including, but not limited to, incidental, +%% consequential, or any other damages, resulting from the use or misuse +%% of any information contained here. +%% +%% All comments are the opinions of their respective authors and are not +%% necessarily endorsed by the IEEE/IEEJ. +%% +%% The original version of this code, i.e. IEEEtran.bst by, Michael Shell +%% was distributed under the LaTeX Project Public License (LPPL) +%% ( http://www.latex-project.org/ ) version 1.3, and may be freely used, +%% distributed and modified. A copy of the LPPL, version 1.3, is included +%% in the base LaTeX documentation of all distributions of LaTeX released +%% 2003/12/01 or later. +%% Retain all contribution notices and credits. +%% ** Modified files should be clearly indicated as such, including ** +%% ** renaming them and changing author support contact information. ** +%%************************************************************************* +%% +%% 日本人の電気系LaTeXユーザのためのBibTeXスタイルファイルです。本ファイル +%% はIEEE形式での引用スタイルで、オプションを変更することで電気学会形式へ +%% と変更することが可能です。 +%% 電気学会形式のIEEJtran.bst/IEEE形式のjIEEEtran.bstともに非公式です。 +%% ファイルの破損、データの損失、本コードを使用したことによるリジェクトなど +%% いかなる問題が生じた場合でも作者らは責任を負うことができません。 +%% コードはGitHub上で開発していますので、問題がありましたらIssueを立て、 +%% コミットをし、プルリクエストを投げてくださると嬉しいです。 +%% + + + +% +% Terminalに表示されるログメッセージのファイル名やURLの設定 +% + +FUNCTION{bst.file.name} { "jIEEEtran.bst" } +FUNCTION{bst.file.version} { "0.18" } +FUNCTION{bst.file.date} { "2022/03/26" } +FUNCTION{bst.file.website} { "https://github.com/ehki/jIEEEtran/" } +FUNCTION{bst.file.author} { "Haruki Ejiri and Yoshi Ri" } + + +%% オプション & 設定 + +% 電気学会形式の引用フォーマットを使用するかの設定 +% #0 : IEEEフォーマットで引用する。 +% 日本語が含まれるエントリでは、日本語の不自然な扱いを解消する。 +% 日本語が含まれないエントリでは、Languageフィールドの取り扱いを除き +% オリジナルのIEEEtran.bst通りの出力となる。 +% #1 : 電気学会フォーマットで引用する。 +% 日本語が含まれるエントリも、日本語が含まれないエントリも、 +% 全ての文献に電気学会形式に合わせて引用する。 +FUNCTION {use.ieej.setting} { #0 } + + +% 電気学会形式の場合に短縮表記をするかどうかの設定 +% #0 : 短縮しない +% #1 : 短縮する +FUNCTION {default.use.ieej.abbrev} { #0 } + + +% 電気学会形式の発行年の指定 +% default: {bbl.ieej.jp.year.pre} { "(" } +% {bbl.ieej.jp.year.aft} { ")" } +% {bbl.ieej.en.year.pre} { "(" } +% {bbl.ieej.en.year.aft} { ")" } +FUNCTION {bbl.ieej.jp.year.pre} { "(" } +FUNCTION {bbl.ieej.jp.year.aft} { ")" } +FUNCTION {bbl.ieej.en.year.pre} { "(" } +FUNCTION {bbl.ieej.en.year.aft} { ")" } + + +% 電気学会形式において、発行年の前にカンマを打つかの指定 +% #0 : 打たない +% #1 : 打つ +% default: { #0 } +FUNCTION {ieej.setting.comma.year.pre} { #0 } + + +% 電気学会形式において、発行年の後にピリオドを打つかの指定 +% #0 : 打たない +% #1 : 打つ +% default: { #0 } +FUNCTION {ieej.setting.punct.year.aft} { #0 } + + +% 電気学会形式において、英語の書籍名と雑誌名をemphasizeするかの指定 +% #0 : emphasize しない +% #1 : emphasize する +% default: {ieej.en.setting.emph.journal} { #1 } +% : {ieej.en.setting.emph.booktitle} { #0 } +FUNCTION {ieej.en.setting.emph.journal} { #1 } +FUNCTION {ieej.en.setting.emph.booktitle} { #0 } + + +% 電気学会形式において、日本語の書籍名と雑誌名をemphasizeするかの指定 +% #0 : emphasize しない +% #1 : emphasize する +% default: {ieej.jp.setting.emph.journal} { #0 } +% : {ieej.jp.setting.emph.booktitle} { #0 } +FUNCTION {ieej.jp.setting.emph.journal} { #0 } +FUNCTION {ieej.jp.setting.emph.booktitle} { #0 } + + +% IEEE形式において、日本語の書籍名と雑誌名をemphasizeするかの指定 +% #0 : emphasize しない +% #1 : emphasize する +% default: { #0 } +FUNCTION {ieee.jp.setting.emph.title} { #0 } + + +% 電気学会形式において、タイトル前後の文字を指定 +% default: {bbl.ieej.jp.title.pre} { "「" } +% {bbl.ieej.jp.title.aft} { "」" } +% {bbl.ieej.en.title.pre} { "``" } +% {bbl.ieej.en.title.aft} { "''" } +FUNCTION {bbl.ieej.jp.title.pre} { "「" } +FUNCTION {bbl.ieej.jp.title.aft} { "」" } +FUNCTION {bbl.ieej.en.title.pre} { "``" } +FUNCTION {bbl.ieej.en.title.aft} { "''" } + + +% 電気学会形式形式において、著者とタイトルの間の文字の指定 +% default: {bbl.ieej.jp.author.title.sep.F} { ":" } +% {bbl.ieej.en.author.title.sep.F} { ":" } +% {bbl.ieej.jp.author.title.sep.A} { "," } +% {bbl.ieej.en.author.title.sep.A} { "," } +FUNCTION {bbl.ieej.jp.author.title.sep.F} { ":" } +FUNCTION {bbl.ieej.en.author.title.sep.F} { ":" } +FUNCTION {bbl.ieej.jp.author.title.sep.A} { "," } +FUNCTION {bbl.ieej.en.author.title.sep.A} { "," } + + +% 日本語文献において、vol. の表記法の設定 +% .Fは非省略表記、.Aは省略表記 +% default: {bbl.ieej.vol.F} { "Vol." } +% {bbl.ieej.vol.A} { "\textbf{" } +FUNCTION {bbl.ieej.vol.F} { "Vol." } +FUNCTION {bbl.ieej.vol.A} { "\textbf{" } + + +% 日本語文献において、vol. を記載した後、 +% カンマの前に記載する文字列の指定 +% .Fは非省略表記、.Aは省略表記 +% default: {bbl.ieej.vol.aft.F} { "" } +% {bbl.ieej.vol.aft.A} { "}" } +FUNCTION {bbl.ieej.vol.aft.F} { "" } +FUNCTION {bbl.ieej.vol.aft.A} { "}" } + + +% 日本語文献において、no. の表記法の設定 +% .Fは非省略表記、.Aは省略表記 +% default: {bbl.ieej.no.F} { "No." } +% {bbl.ieej.no.A} { "(" } +FUNCTION {bbl.ieej.no.F} { "No." } +FUNCTION {bbl.ieej.no.A} { "(" } + + +% 日本語文献において、no. を記載した後、 +% カンマの前に記載する文字列の指定 +% .Fは非省略表記、.Aは省略表記 +% default: {bbl.ieej.no.aft.F} { "" } +% {bbl.ieej.no.aft.A} { ")" } +FUNCTION {bbl.ieej.no.aft.F} { "" } +FUNCTION {bbl.ieej.no.aft.A} { ")" } + + +% 日本語文献における、pp. の表記法の設定。 +% .Fは非省略表記、.Aは省略表記 +% default: {bbl.ieej.pages.F} { "pp." } +% {bbl.ieej.pages.A} { "" } +FUNCTION {bbl.ieej.pages.F} { "pp." } +FUNCTION {bbl.ieej.pages.A} { "" } + + +% 日本語文献における、p. の表記法の設定。 +% .Fは非省略表記、.Aは省略表記 +% default: {bbl.ieej.page.F} { "p." } +% {bbl.ieej.page.A} { "" } +FUNCTION {bbl.ieej.page.F} { "p." } +FUNCTION {bbl.ieej.page.A} { "" } + + +% 日本語と英語の etal の表記の設定 +% default: {bbl.etal.jp} { "他" } +% {bbl.etal.en} { "et~al." } +FUNCTION {bbl.etal.jp} { "他" } +FUNCTION {bbl.etal.en} { "et~al." } + + +% 電気学会形式において、日本語/英語文献の章番号前後文字、チルダ(~)を使用するかの設定 +% default: {bbl.ieej.jp.chapter.pre} { "第" } +% {bbl.ieej.jp.chapter.aft} { "章" } +% {bbl.ieej.jp.chapter.tie.pre} { #0 } +% {bbl.ieej.jp.chapter.tie.aft} { #0 } +% {bbl.ieej.en.chapter.pre} { "Chap." } +% {bbl.ieej.en.chapter.aft} { "" } +% {bbl.ieej.en.chapter.tie.pre} { #0 } +% {bbl.ieej.en.chapter.tie.aft} { #0 } +FUNCTION {bbl.ieej.jp.chapter.pre} { "第" } +FUNCTION {bbl.ieej.jp.chapter.aft} { "章" } +FUNCTION {bbl.ieej.jp.chapter.tie.pre} { #0 } % 章番号前文字と章番号の間にチルダを挿入しない +FUNCTION {bbl.ieej.jp.chapter.tie.aft} { #0 } % 章番号と章番号後文字との間にチルダを挿入しない +FUNCTION {bbl.ieej.en.chapter.pre} { "Chap." } +FUNCTION {bbl.ieej.en.chapter.aft} { "" } +FUNCTION {bbl.ieej.en.chapter.tie.pre} { #0 } % 章番号前文字と章番号の間にチルダを挿入する +FUNCTION {bbl.ieej.en.chapter.tie.aft} { #0 } % 章番号と章番号後文字との間にチルダを挿入しない + + +% 日本語文献において、著者間の仕切り文字の設定 +% default: {bbl.ieej.jp.author.sep} { "・" } +% {bbl.ieej.en.author.sep} { ", " } +FUNCTION {bbl.ieej.jp.author.sep} { "・" } +FUNCTION {bbl.ieej.en.author.sep} { ", " } + + +% 電気学会形式において、発行年と発行月の区切り文字の指定 +% default: { "-" } +FUNCTION {bbl.ieej.year.month.sep} { "-" } + + +% 電気学会形式において、発行月の表示形式の指定 +% #0 : "1", "2", ..., "12" のように数字で表示 +% #1 : "Jan", "Feb.", ..., "Dec." のようにアルファベットで表示 +% default: { #0 } +FUNCTION {format.month.ieej} { #0 } + + +% IEEE形式において、発行月の表示形式の指定 +% #0 : "1", "2", ..., "12" のように数字で表示 +% #1 : "Jan", "Feb.", ..., "Dec." のようにアルファベットで表示 +% default: { #1 } +FUNCTION {format.month.ieee} { #1 } + + +% 電気学会形式において、 +% 「手法Aと手法B、どちらが正しいのか?」 +% "Method A and B - Which is correct?" +% のように、?や.など文区切り文字がタイトル最後にきた場合でも +% 「手法Aと手法B、どちらが正しいのか?」,学会名 +% "Method A and B - Which is correct?", Journal title +% のように"の後にカンマを打つかの設定 +% #0: カンマを打たない, #1: カンマを打つ +% default: { #1 } +FUNCTION { bbl.ieej.force.punct.aft.quote } { #1 } + + +% languageにJapaneseやFrenchの指定がある場合に +% (in Language)を表記するかの設定 +% #0 言語表記しない +% #1 IEEE-Reference-Guideの通りに言語表記する +% https://ieeeauthorcenter.ieee.org/wp-content/uploads/IEEE-Reference-Guide.pdf +% #2 文献末尾に言語表記する +% default : {bbl.format.language.ieej} { #2 } +% {bbl.format.language.ieee} { #1 } +FUNCTION {bbl.format.language.ieej} { #2 } +FUNCTION {bbl.format.language.ieee} { #1 } +FUNCTION {bbl.format.language} +{ use.ieej.setting #1 = + { bbl.format.language.ieej } + { bbl.format.language.ieee } + if$ +} + + +% language表記の後にピリオドを打つかの設定 +% default : { #1 } % for jIEEEtran.bst (デフォルト通りで強制しない) +% { #0 } % for IEEJtran.bst (ピリオドを強制的に打たせない) +FUNCTION {bbl.format.language.punct.ieej} { #0 } +FUNCTION {bbl.format.language.punct.ieee} { #1 } +FUNCTION {bbl.format.language.punct} +{ use.ieej.setting #1 = + { bbl.format.language.punct.ieej } + { bbl.format.language.punct.ieee } + if$ +} + + +% select.language関数を用いてタイトルジャーナル名に +% \BIBforeignlanguage{Japanese} +% などのhyphenation設定の処理を行うかの設定。 +% { #1 } : hyphenation設定を行う(設定していないとWARNINGが出る。 +% { #0 } : hyphenation設定を行わない +% default : { #0 } +FUNCTION {bbl.use.select.language} { #0 } + + +% URLの表記をするかどうかの設定 +% default : {default.is.use.url.ieej} {#0} 電気学会形式ではURLを書かない +% {default.is.use.url.ieee} {#1} IEEE形式ではURLがあれば書く +FUNCTION {default.is.use.url.ieej} {#0} +FUNCTION {default.is.use.url.ieee} {#1} + + +% 同一著者の文献が連続した場合に著者名を長ダッシュで代用するかの設定 +% 電気学会形式では長ダッシュで代用はしない +% IEEE形式では長ダッシュで代用する +% default : { default.is.dash.repeated.names.ieej } { #0 } +% { default.is.dash.repeated.names.ieee } { #1 } +FUNCTION { default.is.dash.repeated.names.ieej } { #0 } +FUNCTION { default.is.dash.repeated.names.ieee } { #1 } + + +% IEEEtran.bstに元からあるオプション群 + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% These are the defaults for the user adjustable controls. The values used +% here can be overridden by the user via IEEEtranBSTCTL entry type. + +% NOTE: The recommended LaTeX command to invoke a control entry type is: +% +%\makeatletter +%\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}} +%\def\@bstctlcite[#1]#2{\@bsphack +% \@for\@citeb:=#2\do{% +% \edef\@citeb{\expandafter\@firstofone\@citeb}% +% \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}% +% \@esphack} +%\makeatother +% +% It is called at the start of the document, before the first \cite, like: +% \bstctlcite{IEEEexample:BSTcontrol} +% +% IEEEtran.cls V1.6 and later does provide this command. + + +% #0 turns off the display of the number for articles. +% #1 enables +FUNCTION {default.is.use.number.for.article} { #1 } + + +% #0 turns off the display of the paper and type fields in @inproceedings. +% #1 enables +FUNCTION {default.is.use.paper} { #1 } + + +% #0 turns off the display of urls +% #1 enables +FUNCTION {default.is.use.url} +{ use.ieej.setting #1 = + { default.is.use.url.ieej } + { default.is.use.url.ieee } + if$ +} + + +% #0 turns off the forced use of "et al." +% #1 enables +FUNCTION {default.is.forced.et.al} +{ % Note: "and" function is not declared yet + use.ieej.setting #1 = + { default.use.ieej.abbrev #1 = + { #1 } + { #0 } + if$ + } + { #0 } + if$ +} + + +% The maximum number of names that can be present beyond which an "et al." +% usage is forced. Be sure that num.names.shown.with.forced.et.al (below) +% is not greater than this value! +% Note: There are many instances of references in IEEE journals which have +% a very large number of authors as well as instances in which "et al." is +% used profusely. +FUNCTION {default.max.num.names.before.forced.et.al} +{ % Note: "and" function is not declared yet + use.ieej.setting #1 = + { default.use.ieej.abbrev #1 = + { #2 } % two authors are shown without et al. + { #10 } + if$ + } + { #10 } + if$ +} + + +% The number of names that will be shown with a forced "et al.". +% Must be less than or equal to max.num.names.before.forced.et.al +FUNCTION {default.num.names.shown.with.forced.et.al} { #1 } + + +% #0 turns off the alternate interword spacing for entries with URLs. +% #1 enables +FUNCTION {default.is.use.alt.interword.spacing} { #1 } + + +% If alternate interword spacing for entries with URLs is enabled, this is +% the interword spacing stretch factor that will be used. For example, the +% default "4" here means that the interword spacing in entries with URLs can +% stretch to four times normal. Does not have to be an integer. Note that +% the value specified here can be overridden by the user in their LaTeX +% code via a command such as: +% "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to +% that via the IEEEtranBSTCTL entry type. +FUNCTION {default.ALTinterwordstretchfactor} { "4" } + + +% #0 turns off the "dashification" of repeated (i.e., identical to those +% of the previous entry) names. The IEEE normally does this. +% #1 enables +FUNCTION {default.is.dash.repeated.names} { + use.ieej.setting #1 = + { default.is.dash.repeated.names.ieej } + { default.is.dash.repeated.names.ieee } + if$ +} + + +% The default name format control string. %change based on japanese +FUNCTION {default.name.format.en.string}{ "{f.~}{vv~}{ll}{, jj}" } +FUNCTION {default.name.format.jp.string}{ "{ff}~{vv~}{ll}{, jj}" } + + +% The default LaTeX font command for the names. +FUNCTION {default.name.latex.cmd}{ "" } + + +% The default URL prefix. +FUNCTION {default.name.url.prefix}{ "[Online]. Available:" } + + +% Other controls that cannot be accessed via IEEEtranBSTCTL entry type. + +% #0 turns off the terminal startup banner/completed message so as to +% operate more quietly. +% #1 enables +FUNCTION {is.print.banners.to.terminal} { #1 } + + + + +%%%%%%%%%%%% +%% BANNER %% +%%%%%%%%%%%% + +FUNCTION {banner.message} +{ is.print.banners.to.terminal + { "-- " bst.file.name * " " * bst.file.version * + " (" * bst.file.date * ") " * "by " * bst.file.author * "." * + top$ + "-- " bst.file.website * + top$ + "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * + " manual for usage information for IEEEtran.bst." * + top$ + "-- See also " quote$ * "howtouse.pdf" * quote$ * + " manual for usase information for jIEEEtran.bst and IEEJtran.bst." * + top$ + } + { skip$ } + if$ +} + +FUNCTION {completed.message} +{ is.print.banners.to.terminal + { "" + top$ + "Done." + top$ + } + { skip$ } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%% +%% STRING CONSTANTS %% +%%%%%%%%%%%%%%%%%%%%%% +FUNCTION {bbl.a}{ "A" } +FUNCTION {bbl.an}{ "An" } +FUNCTION {bbl.and}{ "and" } +%FUNCTION {bbl.etal}{ "et~al." } +FUNCTION {bbl.editors}{ "eds." } +FUNCTION {bbl.editor}{ "ed." } +FUNCTION {bbl.edition}{ "ed." } +FUNCTION {bbl.volume}{ "vol." } +FUNCTION {bbl.of}{ "of" } +FUNCTION {bbl.number}{ "no." } +FUNCTION {bbl.in}{ "in" } +FUNCTION {bbl.pages}{ "pp." } +FUNCTION {bbl.page}{ "p." } +FUNCTION {bbl.chapter}{ "ch." } +FUNCTION {bbl.paper}{ "paper" } +FUNCTION {bbl.part}{ "pt." } +FUNCTION {bbl.patent}{ "Patent" } +FUNCTION {bbl.patentUS}{ "U.S." } +FUNCTION {bbl.revision}{ "Rev." } +FUNCTION {bbl.series}{ "ser." } +FUNCTION {bbl.standard}{ "Std." } +FUNCTION {bbl.techrep}{ "Tech. Rep." } +FUNCTION {bbl.the}{ "The" } +FUNCTION {bbl.mthesis}{ "Master's thesis" } +FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" } +FUNCTION {bbl.st}{ "st" } +FUNCTION {bbl.nd}{ "nd" } +FUNCTION {bbl.rd}{ "rd" } +FUNCTION {bbl.th}{ "th" } + + +% This is the LaTeX spacer that is used when a larger than normal space +% is called for (such as just before the address:publisher). +FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " } + +% The LaTeX code for dashes that are used to represent repeated names. +% Note: Some older IEEE journals used something like +% "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along +% the baseline. However, the IEEE now uses a thinner, above baseline, +% six dash long sequence. +FUNCTION {repeated.name.dashes} { "------" } + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% PREDEFINED STRING MACROS %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +MACRO {jan} {"Jan."} +MACRO {feb} {"Feb."} +MACRO {mar} {"Mar."} +MACRO {apr} {"Apr."} +MACRO {may} {"May"} +MACRO {jun} {"Jun."} +MACRO {jul} {"Jul."} +MACRO {aug} {"Aug."} +MACRO {sep} {"Sep."} +MACRO {oct} {"Oct."} +MACRO {nov} {"Nov."} +MACRO {dec} {"Dec."} + + + +%%%%%%%%%%%%%%%%%% +%% ENTRY FIELDS %% +%%%%%%%%%%%%%%%%%% + +ENTRY + { address + assignee + author + booktitle + chapter + day + dayfiled + edition + editor + howpublished + institution + intype + journal + key + language + month + monthfiled + nationality + note + number + organization + pages + paper + publisher + school + series + revision + title + type + url + volume + year + yearfiled + CTLuse_article_number + CTLuse_paper + CTLuse_url + CTLuse_forced_etal + CTLmax_names_forced_etal + CTLnames_show_etal + CTLuse_alt_spacing + CTLalt_stretch_factor + CTLdash_repeated_names + CTLname_format_string + CTLname_latex_cmd + CTLname_url_prefix + CTLuse_ieej_abbrev + } + {} + { label } + + + + +%%%%%%%%%%%%%%%%%%%%%%% +%% INTEGER VARIABLES %% +%%%%%%%%%%%%%%%%%%%%%%% + +INTEGERS { prev.status.punct this.status.punct punct.std + punct.no punct.comma punct.period + prev.status.space this.status.space space.std + space.no space.normal space.large + prev.status.quote this.status.quote quote.std + quote.no quote.close + prev.status.nline this.status.nline nline.std + nline.no nline.newblock + status.cap cap.std + cap.no cap.yes + japanese.flag} + +INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames } + +INTEGERS { is.use.number.for.article + is.use.paper + is.use.url + is.forced.et.al + max.num.names.before.forced.et.al + num.names.shown.with.forced.et.al + is.use.alt.interword.spacing + is.dash.repeated.names + use.ieej.abbrev} + + +%%%%%%%%%%%%%%%%%%%%%% +%% STRING VARIABLES %% +%%%%%%%%%%%%%%%%%%%%%% + +STRINGS { bibinfo + longest.label + oldname + s + t + ALTinterwordstretchfactor + name.format.string + name.latex.cmd + name.url.prefix} + + + + +%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOW LEVEL FUNCTIONS %% +%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {initialize.controls} +{ default.is.use.number.for.article 'is.use.number.for.article := + default.is.use.paper 'is.use.paper := + default.is.use.url 'is.use.url := + default.is.forced.et.al 'is.forced.et.al := + default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al := + default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al := + default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing := + default.is.dash.repeated.names 'is.dash.repeated.names := + default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor := + default.name.format.en.string 'name.format.string := + default.name.latex.cmd 'name.latex.cmd := + default.name.url.prefix 'name.url.prefix := + default.use.ieej.abbrev 'use.ieej.abbrev := +} + + +% This IEEEtran.bst features a very powerful and flexible mechanism for +% controlling the capitalization, punctuation, spacing, quotation, and +% newlines of the formatted entry fields. (Note: IEEEtran.bst does not need +% or use the newline/newblock feature, but it has been implemented for +% possible future use.) The output states of IEEEtran.bst consist of +% multiple independent attributes and, as such, can be thought of as being +% vectors, rather than the simple scalar values ("before.all", +% "mid.sentence", etc.) used in most other .bst files. +% +% The more flexible and complex design used here was motivated in part by +% the IEEE's rather unusual bibliography style. For example, the IEEE ends the +% previous field item with a period and large space prior to the publisher +% address; the @electronic entry types use periods as inter-item punctuation +% rather than the commas used by the other entry types; and URLs are never +% followed by periods even though they are the last item in the entry. +% Although it is possible to accommodate these features with the conventional +% output state system, the seemingly endless exceptions make for convoluted, +% unreliable and difficult to maintain code. +% +% IEEEtran.bst's output state system can be easily understood via a simple +% illustration of two most recently formatted entry fields (on the stack): +% +% CURRENT_ITEM +% "PREVIOUS_ITEM +% +% which, in this example, is to eventually appear in the bibliography as: +% +% "PREVIOUS_ITEM," CURRENT_ITEM +% +% It is the job of the output routine to take the previous item off of the +% stack (while leaving the current item at the top of the stack), apply its +% trailing punctuation (including closing quote marks) and spacing, and then +% to write the result to BibTeX's output buffer: +% +% "PREVIOUS_ITEM," +% +% Punctuation (and spacing) between items is often determined by both of the +% items rather than just the first one. The presence of quotation marks +% further complicates the situation because, in standard English, trailing +% punctuation marks are supposed to be contained within the quotes. +% +% IEEEtran.bst maintains two output state (aka "status") vectors which +% correspond to the previous and current (aka "this") items. Each vector +% consists of several independent attributes which track punctuation, +% spacing, quotation, and newlines. Capitalization status is handled by a +% separate scalar because the format routines, not the output routine, +% handle capitalization and, therefore, there is no need to maintain the +% capitalization attribute for both the "previous" and "this" items. +% +% When a format routine adds a new item, it copies the current output status +% vector to the previous output status vector and (usually) resets the +% current (this) output status vector to a "standard status" vector. Using a +% "standard status" vector in this way allows us to redefine what we mean by +% "standard status" at the start of each entry handler and reuse the same +% format routines under the various inter-item separation schemes. For +% example, the standard status vector for the @book entry type may use +% commas for item separators, while the @electronic type may use periods, +% yet both entry handlers exploit many of the exact same format routines. +% +% Because format routines have write access to the output status vector of +% the previous item, they can override the punctuation choices of the +% previous format routine! Therefore, it becomes trivial to implement rules +% such as "Always use a period and a large space before the publisher." By +% pushing the generation of the closing quote mark to the output routine, we +% avoid all the problems caused by having to close a quote before having all +% the information required to determine what the punctuation should be. +% +% The IEEEtran.bst output state system can easily be expanded if needed. +% For instance, it is easy to add a "space.tie" attribute value if the +% bibliography rules mandate that two items have to be joined with an +% unbreakable space. + +FUNCTION {initialize.status.constants} +{ #0 'punct.no := + #1 'punct.comma := + #2 'punct.period := + #0 'space.no := + #1 'space.normal := + #2 'space.large := + #0 'quote.no := + #1 'quote.close := + #0 'cap.no := + #1 'cap.yes := + #0 'nline.no := + #1 'nline.newblock := + #0 'japanese.flag := +} + +FUNCTION {std.status.using.comma} +{ punct.comma 'punct.std := + space.normal 'space.std := + quote.no 'quote.std := + nline.no 'nline.std := + cap.no 'cap.std := +} + +FUNCTION {std.status.using.period} +{ punct.period 'punct.std := + space.normal 'space.std := + quote.no 'quote.std := + nline.no 'nline.std := + cap.yes 'cap.std := +} + +FUNCTION {initialize.prev.this.status} +{ punct.no 'prev.status.punct := + space.no 'prev.status.space := + quote.no 'prev.status.quote := + nline.no 'prev.status.nline := + punct.no 'this.status.punct := + space.no 'this.status.space := + quote.no 'this.status.quote := + nline.no 'this.status.nline := + cap.yes 'status.cap := +} + +FUNCTION {this.status.std} +{ punct.std 'this.status.punct := + space.std 'this.status.space := + quote.std 'this.status.quote := + nline.std 'this.status.nline := +} + +FUNCTION {cap.status.std}{ cap.std 'status.cap := } + +FUNCTION {this.to.prev.status} +{ this.status.punct 'prev.status.punct := + this.status.space 'prev.status.space := + this.status.quote 'prev.status.quote := + this.status.nline 'prev.status.nline := +} + + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ { skip$ } + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + { skip$ } + if$ +} + + +% convert the strings "yes" or "no" to #1 or #0 respectively +FUNCTION {yes.no.to.int} +{ "l" change.case$ duplicate$ + "yes" = + { pop$ #1 } + { duplicate$ "no" = + { pop$ #0 } + { "unknown boolean " quote$ * swap$ * quote$ * + " in " * cite$ * warning$ + #0 + } + if$ + } + if$ +} + + +% pushes true if the single char string on the stack is in the +% range of "0" to "9" +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +% multiplies the integer on the stack by a factor of 10 +FUNCTION {bump.int.mag} +{ #0 'multiresult := + { duplicate$ #0 > } + { #1 - + multiresult #10 + + 'multiresult := + } + while$ +pop$ +multiresult +} + +% converts a single character string on the stack to an integer +FUNCTION {char.to.integer} +{ duplicate$ + is.num + { chr.to.int$ "0" chr.to.int$ - } + {"noninteger character " quote$ * swap$ * quote$ * + " in integer field of " * cite$ * warning$ + #0 + } + if$ +} + +% converts a string on the stack to an integer +FUNCTION {string.to.integer} +{ duplicate$ text.length$ 'namesleft := + #1 'nameptr := + #0 'numnames := + { nameptr namesleft > not } + { duplicate$ nameptr #1 substring$ + char.to.integer numnames bump.int.mag + + 'numnames := + nameptr #1 + + 'nameptr := + } + while$ +pop$ +numnames +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% JAPANESE WORD TOGGLER %% +%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +FUNCTION {bbl.ieej.year.pre} +{ japanese.flag #1 = + { bbl.ieej.jp.year.pre } + { bbl.ieej.en.year.pre } + if$ +} +FUNCTION {bbl.ieej.year.aft} +{ japanese.flag #1 = + { bbl.ieej.jp.year.aft } + { bbl.ieej.en.year.aft } + if$ +} +FUNCTION {bbl.ieej.title.pre} +{ japanese.flag #1 = + { bbl.ieej.jp.title.pre } + { bbl.ieej.en.title.pre } + if$ +} +FUNCTION {bbl.ieej.title.aft} +{ japanese.flag #1 = + { bbl.ieej.jp.title.aft } + { bbl.ieej.en.title.aft } + if$ +} +FUNCTION {bbl.ieej.chapter.pre} +{ japanese.flag #1 = + { bbl.ieej.jp.chapter.pre } + { bbl.ieej.en.chapter.pre } + if$ +} +FUNCTION {bbl.ieej.chapter.aft} +{ japanese.flag #1 = + { bbl.ieej.jp.chapter.aft } + { bbl.ieej.en.chapter.aft } + if$ +} +FUNCTION {bbl.ieej.chapter.tie.pre} +{ japanese.flag #1 = + { bbl.ieej.jp.chapter.tie.pre } + { bbl.ieej.en.chapter.tie.pre } + if$ +} +FUNCTION {bbl.ieej.chapter.tie.aft} +{ japanese.flag #1 = + { bbl.ieej.jp.chapter.tie.aft } + { bbl.ieej.en.chapter.tie.aft } + if$ +} +FUNCTION {bbl.etal} +{ japanese.flag #1 = + { bbl.etal.jp } + { bbl.etal.en } + if$ +} +FUNCTION {bbl.ieej.jp.author.title.sep} +{ use.ieej.abbrev #0 = + { bbl.ieej.jp.author.title.sep.F } + { bbl.ieej.jp.author.title.sep.A } + if$ +} +FUNCTION {bbl.ieej.en.author.title.sep} +{ use.ieej.abbrev #0 = + { bbl.ieej.en.author.title.sep.F } + { bbl.ieej.en.author.title.sep.A } + if$ +} +FUNCTION {bbl.ieej.author.title.sep} +{ japanese.flag #1 = + { bbl.ieej.jp.author.title.sep } + { bbl.ieej.en.author.title.sep } + if$ +} +FUNCTION {bbl.ieej.vol} +{ use.ieej.abbrev #0 = + { bbl.ieej.vol.F } + { bbl.ieej.vol.A } + if$ +} +FUNCTION {bbl.ieej.vol.aft} +{ use.ieej.abbrev #0 = + { bbl.ieej.vol.aft.F } + { bbl.ieej.vol.aft.A } + if$ +} +FUNCTION {bbl.ieej.no} +{ use.ieej.abbrev #0 = + { bbl.ieej.no.F } + { bbl.ieej.no.A } + if$ +} +FUNCTION {bbl.ieej.no.aft} +{ use.ieej.abbrev #0 = + { bbl.ieej.no.aft.F } + { bbl.ieej.no.aft.A } + if$ +} +FUNCTION {bbl.ieej.pages} +{ use.ieej.abbrev #0 = + { bbl.ieej.pages.F } + { bbl.ieej.pages.A } + if$ +} +FUNCTION {bbl.ieej.page} +{ use.ieej.abbrev #0 = + { bbl.ieej.page.F } + { bbl.ieej.page.A } + if$ +} + + + +% The output routines write out the *next* to the top (previous) item on the +% stack, adding punctuation and such as needed. Since IEEEtran.bst maintains +% the output status for the top two items on the stack, these output +% routines have to consider the previous output status (which corresponds to +% the item that is being output). Full independent control of punctuation, +% closing quote marks, spacing, and newblock is provided. +% +% "output.nonnull" does not check for the presence of a previous empty +% item. +% +% "output" does check for the presence of a previous empty item and will +% remove an empty item rather than outputing it. +% +% "output.warn" is like "output", but will issue a warning if it detects +% an empty item. + +FUNCTION {output.nonnull} +{ swap$ + prev.status.quote quote.close = + { use.ieej.setting #1 = + { bbl.ieej.title.aft * } + { japanese.flag #1 = { "''" * } { skip$ } if$ } + if$ + } + { skip$ } + if$ + prev.status.punct punct.comma = + { japanese.flag #0 = { "," * } { "," * } if$ } + { skip$ } + if$ + prev.status.punct punct.period = + { japanese.flag #0 = { add.period$ } { "." * } if$ } + { skip$ } + if$ + use.ieej.setting #0 = japanese.flag #0 = and + { prev.status.quote quote.close = { "''" * } { skip$ } if$ } + { skip$ } + if$ + prev.status.space space.normal = + { japanese.flag #0 = { " " * } { skip$ } if$ } + { skip$ } + if$ + prev.status.space space.large = + { large.space * } + { skip$ } + if$ + write$ + prev.status.nline nline.newblock = + { newline$ "\newblock " write$ } + { skip$ } + if$ +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.warn} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + + +% "fin.entry" is the output routine that handles the last item of the entry +% (which will be on the top of the stack when "fin.entry" is called). + +FUNCTION {fin.entry} +{ this.status.punct punct.no = + { skip$ } + { japanese.flag #0 = { add.period$ } { "." * } if$ } + if$ + this.status.quote quote.close = + { "''" * } + { skip$ } + if$ + write$ + newline$ + %% for JP setting + #0 'japanese.flag := + default.name.format.en.string 'name.format.string := +} + + +FUNCTION {is.last.char.not.punct} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {is.multiple.pages} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ } + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION {do.name.latex.cmd} +{ name.latex.cmd + empty$ + { skip$ } + { name.latex.cmd "{" * swap$ * "}" * } + if$ +} + +% IEEEtran.bst uses its own \BIBforeignlanguage command which directly +% invokes the TeX hyphenation patterns without the need of the Babel +% package. Babel does a lot more than switch hyphenation patterns and +% its loading can cause unintended effects in many class files (such as +% IEEEtran.cls). +FUNCTION {select.language} +{ duplicate$ empty$ 'pop$ + { language empty$ bbl.use.select.language #0 = or 'skip$ + { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * } + if$ + } + if$ +} + +FUNCTION {tie.or.space.prefix} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ +} + +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {space.word} +{ " " swap$ * " " * } + + +% Field Conditioners, Converters, Checkers and External Interfaces + +FUNCTION {empty.field.to.null.string} +{ duplicate$ empty$ + { pop$ "" } + { skip$ } + if$ +} + +FUNCTION {either.or.check} +{ empty$ + { pop$ } + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {empty.entry.warn} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ url empty$ + and and and and and and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + + +% The bibinfo system provides a way for the electronic parsing/acquisition +% of a bibliography's contents as is done by ReVTeX. For example, a field +% could be entered into the bibliography as: +% \bibinfo{volume}{2} +% Only the "2" would show up in the document, but the LaTeX \bibinfo command +% could do additional things with the information. IEEEtran.bst does provide +% a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is +% currently not used as the bogus bibinfo functions defined here output the +% entry values directly without the \bibinfo wrapper. The bibinfo functions +% themselves (and the calls to them) are retained for possible future use. +% +% bibinfo.check avoids acting on missing fields while bibinfo.warn will +% issue a warning message if a missing field is detected. Prior to calling +% the bibinfo functions, the user should push the field value and then its +% name string, in that order. + +FUNCTION {bibinfo.check} +{ swap$ duplicate$ missing$ + { pop$ pop$ "" } + { duplicate$ empty$ + { swap$ pop$ } + { swap$ pop$ } + if$ + } + if$ +} + +FUNCTION {bibinfo.warn} +{ swap$ duplicate$ missing$ + { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" } + { duplicate$ empty$ + { swap$ "empty " swap$ * " in " * cite$ * warning$ } + { swap$ pop$ } + if$ + } + if$ +} + + +% The IEEE separates large numbers with more than 4 digits into groups of +% three. The IEEE uses a small space to separate these number groups. +% Typical applications include patent and page numbers. + +% number of consecutive digits required to trigger the group separation. +FUNCTION {large.number.trigger}{ #5 } + +% For numbers longer than the trigger, this is the blocksize of the groups. +% The blocksize must be less than the trigger threshold, and 2 * blocksize +% must be greater than the trigger threshold (can't do more than one +% separation on the initial trigger). +FUNCTION {large.number.blocksize}{ #3 } + +% What is actually inserted between the number groups. +FUNCTION {large.number.separator}{ "\," } + +% So as to save on integer variables by reusing existing ones, numnames +% holds the current number of consecutive digits read and nameptr holds +% the number that will trigger an inserted space. +FUNCTION {large.number.separate} +{ 't := + "" + #0 'numnames := + large.number.trigger 'nameptr := + { t empty$ not } + { t #-1 #1 substring$ is.num + { numnames #1 + 'numnames := } + { #0 'numnames := + large.number.trigger 'nameptr := + } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames nameptr = + { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$ + nameptr large.number.blocksize - #1 + global.max$ substring$ + large.number.separator swap$ * * + nameptr large.number.blocksize - 'numnames := + large.number.blocksize #1 + 'nameptr := + } + { skip$ } + if$ + } + while$ +} + +% Converts all single dashes "-" to double dashes "--". +FUNCTION {n.dashify} +{ large.number.separate + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + + +% This function detects entries with names that are identical to that of +% the previous entry and replaces the repeated names with dashes (if the +% "is.dash.repeated.names" user control is nonzero). +FUNCTION {name.or.dash} +{ 's := + oldname empty$ + { s 'oldname := s } + { s oldname = + { is.dash.repeated.names + { repeated.name.dashes } + { s 'oldname := s } + if$ + } + { s 'oldname := s } + if$ + } + if$ +} + +% Converts the number string on the top of the stack to +% "numerical ordinal form" (e.g., "7" to "7th"). There is +% no artificial limit to the upper bound of the numbers as the +% two least significant digits determine the ordinal form. +FUNCTION {num.to.ordinal} +{ duplicate$ #-2 #1 substring$ "1" = + { bbl.th * } + { duplicate$ #-1 #1 substring$ "1" = + { bbl.st * } + { duplicate$ #-1 #1 substring$ "2" = + { bbl.nd * } + { duplicate$ #-1 #1 substring$ "3" = + { bbl.rd * } + { bbl.th * } + if$ + } + if$ + } + if$ + } + if$ +} + +% If the string on the top of the stack begins with a number, +% (e.g., 11th) then replace the string with the leading number +% it contains. Otherwise retain the string as-is. s holds the +% extracted number, t holds the part of the string that remains +% to be scanned. +FUNCTION {extract.num} +{ duplicate$ 't := + "" 's := + { t empty$ not } + { t #1 #1 substring$ + t #2 global.max$ substring$ 't := + duplicate$ is.num + { s swap$ * 's := } + { pop$ "" 't := } + if$ + } + while$ + s empty$ + 'skip$ + { pop$ s } + if$ +} + +% Converts the word number string on the top of the stack to +% Arabic string form. Will be successful up to "tenth". +FUNCTION {word.to.num} +{ duplicate$ "l" change.case$ 's := + s "first" = + { pop$ "1" } + { skip$ } + if$ + s "second" = + { pop$ "2" } + { skip$ } + if$ + s "third" = + { pop$ "3" } + { skip$ } + if$ + s "fourth" = + { pop$ "4" } + { skip$ } + if$ + s "fifth" = + { pop$ "5" } + { skip$ } + if$ + s "sixth" = + { pop$ "6" } + { skip$ } + if$ + s "seventh" = + { pop$ "7" } + { skip$ } + if$ + s "eighth" = + { pop$ "8" } + { skip$ } + if$ + s "ninth" = + { pop$ "9" } + { skip$ } + if$ + s "tenth" = + { pop$ "10" } + { skip$ } + if$ +} + + +FUNCTION {month.word.to.num} +{ duplicate$ "l" change.case$ 's := + s "jan." = s "jan" = s "january" = or or { pop$ "1" } { skip$ } if$ + s "feb." = s "feb" = s "febuary" = or or { pop$ "2" } { skip$ } if$ + s "mar." = s "mar" = s "march" = or or { pop$ "3" } { skip$ } if$ + s "apr." = s "apr" = s "april" = or or { pop$ "4" } { skip$ } if$ + s "may." = s "may" = s "may" = or or { pop$ "5" } { skip$ } if$ + s "jun." = s "jun" = s "june" = or or { pop$ "6" } { skip$ } if$ + s "jul." = s "jul" = s "july" = or or { pop$ "7" } { skip$ } if$ + s "aug." = s "aug" = s "august" = or or { pop$ "8" } { skip$ } if$ + s "sep." = s "sep" = s "september" = or or { pop$ "9" } { skip$ } if$ + s "oct." = s "oct" = s "october" = or or { pop$ "10" } { skip$ } if$ + s "nov." = s "nov" = s "november" = or or { pop$ "11" } { skip$ } if$ + s "dec." = s "dec" = s "december" = or or { pop$ "12" } { skip$ } if$ +} + + +FUNCTION {month.num.to.word} +{ duplicate$ "l" change.case$ 's := + s "1" = { pop$ "Jan." } { skip$ } if$ + s "2" = { pop$ "Feb." } { skip$ } if$ + s "3" = { pop$ "Mar." } { skip$ } if$ + s "4" = { pop$ "Apr." } { skip$ } if$ + s "5" = { pop$ "May" } { skip$ } if$ + s "6" = { pop$ "June" } { skip$ } if$ + s "7" = { pop$ "July" } { skip$ } if$ + s "8" = { pop$ "Aug." } { skip$ } if$ + s "9" = { pop$ "Sep." } { skip$ } if$ + s "10" = { pop$ "Oct." } { skip$ } if$ + s "11" = { pop$ "Nov." } { skip$ } if$ + s "12" = { pop$ "Dec." } { skip$ } if$ +} + +% Converts the string on the top of the stack to numerical +% ordinal (e.g., "11th") form. +FUNCTION {convert.edition} +{ duplicate$ empty$ 'skip$ + { duplicate$ #1 #1 substring$ is.num + { extract.num + num.to.ordinal + } + { word.to.num + duplicate$ #1 #1 substring$ is.num + { num.to.ordinal } + { "edition ordinal word " quote$ * edition * quote$ * + " may be too high (or improper) for conversion" * " in " * cite$ * warning$ + } + if$ + } + if$ + } + if$ +} + + +%%%%%%%%%%%%%%%%%%%%%% +%% JAPANESE HANDLER %% +%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {chk.jp.kanji.str} +% pbibtexで用意されている is.kanji.str$ 関数を使用して日本語エントリか確認 +{ duplicate$ empty$ + { pop$ #0 } % フィールドが空ならチェックせず #0 を返す + { is.kanji.str$ #1 = { #1 } { #0 } if$ } + if$ +} + + +FUNCTION {chk.jp.entry.pbibtex} +% author, title, journal, publisher のフィールドについて +% 日本語文字を探索し、どれか一つでも日本語が含まれていたら +% japanese.flag に #1 を代入、名前フォーマットも上書き +{ author chk.jp.kanji.str #1 = + title chk.jp.kanji.str #1 = or + journal chk.jp.kanji.str #1 = or + publisher chk.jp.kanji.str #1 = or + { #1 'japanese.flag := + default.name.format.jp.string 'name.format.string := } + { skip$ } + if$ +} + + +FUNCTION {emphasize.title} +% タイトルの強調表示設定、emphasize すると \emph{} 内に入れるため、英語では斜体になる。 +% 日本語ではゴシック体となるが、不自然なためデフォルトでは \emph{} に入れる処理をスキップ。 +{ 's := + use.ieej.setting #0 = + { japanese.flag #1 = + % IEEE/JP は 設定により emphasize (斜体ではなく太字になり不自然なため) + { ieee.jp.setting.emph.title #1 = { emphasize } { skip$ } if$ } + % IEEE/EN は emphasize + { emphasize } + if$ + } + { japanese.flag #1 = + % 電気学会では、日本語も英語も設定で変更。 + { ieej.jp.setting.emph.journal #1 = s "journal" = and { #1 } { #0 } if$ + ieej.jp.setting.emph.booktitle #1 = s "booktitle" = and { #1 } { #0 } if$ + or { emphasize } { skip$ } if$ + } + { ieej.en.setting.emph.journal #1 = s "journal" = and { #1 } { #0 } if$ + ieej.en.setting.emph.booktitle #1 = s "booktitle" = and { #1 } { #0 } if$ + or { emphasize } { skip$ } if$ + } + if$ + } + if$ +} + + +FUNCTION {format.jp.edition} +% 版情報の整形 +% 日本語では 第n版 と、第と版で挟む。第1版は初版へと変更する。 +% 英語では 1st ed. 2nd ed. 等へと整形する。 +{ use.ieej.setting #1 = japanese.flag #1 = and + { duplicate$ "1" = { pop$ "初版" * } { "第" swap$ * * "版" * } if$ } + { convert.edition "l" change.case$ * "~" * bbl.edition * } + if$ +} + + +FUNCTION {bbl.title.edition.sep} +% 本のタイトルと版情報の間の区切り文字を制御。 +{ japanese.flag #1 = { "," * } { ", " * } if$ } + + +FUNCTION {format.jp.year} +% 電気学会形式では、出版社は ( と ) で挟む +% ただしオプションで変更可 +{ use.ieej.setting #1 = + { bbl.ieej.year.aft * bbl.ieej.year.pre swap$ * * } + { * } + if$ +} + + +FUNCTION {format.jp.title} +% 電気学会形式かつ日本語文献のときは、タイトルを 「 と 」 で挟む +% ただしオプションで変更可 +{ use.ieej.setting #1 = japanese.flag #1 = and + { bbl.ieej.title.pre swap$ * bbl.ieej.title.aft * } + { skip$ } + if$ +} + + +FUNCTION {author.sep} +% IEEEでも電気学会でも、最後の著者以外は +% 所定文字を場合分けして挿入する +{ use.ieej.setting #0 = + { japanese.flag #1 = { "," } { ", " } if$ } + { japanese.flag #1 = { bbl.ieej.jp.author.sep } { bbl.ieej.en.author.sep } if$ } + if$ +} + + +FUNCTION {author.sep.last} +{ use.ieej.setting #0 = + { japanese.flag #0 = % IEEE 形式の場合、and の取り扱いに注意 + { ", " * bbl.and space.word } % 英語ではカンマの後 and を挿入 + { "," } % 日本語では他と同様に全角カンマのみ + if$ + } + { japanese.flag #0 = % 電気学会形式の場合、and を使用せず、予め設定したものを返す + { bbl.ieej.en.author.sep } + { bbl.ieej.jp.author.sep } + if$ + } + if$ +} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LATEX BIBLIOGRAPHY CODE %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {start.entry} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + initialize.prev.this.status + chk.jp.entry.pbibtex +} + +% Here we write out all the LaTeX code that we will need. The most involved +% code sequences are those that control the alternate interword spacing and +% foreign language hyphenation patterns. The heavy use of \providecommand +% gives users a way to override the defaults. Special thanks to Javier Bezos, +% Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all +% the other gurus on comp.text.tex for their help and advice on the topic of +% \selectlanguage, Babel and BibTeX. +FUNCTION {begin.bib} +{ "% Generated by " bst.file.name * ", version: " * + bst.file.version * " (" * bst.file.date * ")" * + write$ newline$ + preamble$ empty$ 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{" longest.label * "}" * + write$ newline$ + "\providecommand{\url}[1]{#1}" + write$ newline$ + "\csname url@samestyle\endcsname" + write$ newline$ + "\providecommand{\newblock}{\relax}" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}" + write$ newline$ + "\providecommand{\BIBentryALTinterwordstretchfactor}{" + ALTinterwordstretchfactor * "}" * + write$ newline$ + "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus " + write$ newline$ + "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}" + write$ newline$ + "\providecommand{\BIBforeignlanguage}[2]{{%" + write$ newline$ + "\expandafter\ifx\csname l@#1\endcsname\relax" + write$ newline$ + "\typeout{** WARNING: " bst.file.name * ": No hyphenation pattern has been}%" * + write$ newline$ + "\typeout{** loaded for the language `#1'. Using the pattern for}%" + write$ newline$ + "\typeout{** the default language instead.}%" + write$ newline$ + "\else" + write$ newline$ + "\language=\csname l@#1\endcsname" + write$ newline$ + "\fi" + write$ newline$ + "#2}}" + write$ newline$ + "\providecommand{\BIBdecl}{\relax}" + write$ newline$ + "\BIBdecl" + write$ newline$ +} + +FUNCTION {end.bib} +{ newline$ "\end{thebibliography}" write$ newline$ } + +FUNCTION {if.url.alt.interword.spacing} +{ is.use.alt.interword.spacing + { is.use.url + { url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$ } + { skip$ } + if$ + } + { skip$ } + if$ +} + +FUNCTION {if.url.std.interword.spacing} +{ is.use.alt.interword.spacing + { is.use.url + { url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$ } + { skip$ } + if$ + } + { skip$ } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%%%%%% +%% LONGEST LABEL PASS %% +%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ type$ "ieeetranbstctl" = + { skip$ } + { number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + { skip$ } + if$ + } + if$ +} + + + +%%%%%%%%%%%%%%%%%%%%% +%% FORMAT HANDLERS %% +%%%%%%%%%%%%%%%%%%%%% + +%% Lower Level Formats (used by higher level formats) + +FUNCTION {format.pub} +{ 't := + "" + t empty$ + { skip$ } + { this.to.prev.status + this.status.std + cap.status.std + t * + } + if$ +} + +FUNCTION {format.address.org.or.pub.date} +{ 't := + "" + year empty$ + { "empty year in " cite$ * warning$ } + { skip$ } + if$ + address empty$ t empty$ and + year empty$ and month empty$ and + { skip$ } + { this.to.prev.status + this.status.std + cap.status.std + address "address" bibinfo.check * + t empty$ + { skip$ } + { japanese.flag #1 = + { punct.no 'prev.status.punct := } + { punct.period 'prev.status.punct := } + if$ + space.large 'prev.status.space := + address empty$ + { skip$ } + { ": " * } + if$ + t * + } + if$ + language empty.field.to.null.string + duplicate$ empty$ bbl.format.language #1 = not or + { * } + { capitalize " (in " swap$ * ")" * * } + if$ + year empty$ month empty$ and + { skip$ } + { t empty$ address empty$ and + { skip$ } + { use.ieej.setting #1 = + { japanese.flag #1 = { skip$ } { " " * } if$ } + { japanese.flag #1 = { "," * } { ", " * } if$ } + if$ + } + if$ + month empty$ + { year empty$ + { skip$ } + { year "year" bibinfo.check format.jp.year } + if$ + } + { month "month" bibinfo.check month.word.to.num + use.ieej.setting #1 = + { format.month.ieej #1 = { month.num.to.word } { skip$ } if$ } + { format.month.ieee #1 = { month.num.to.word } { skip$ } if$ } + if$ + * + year empty$ + { skip$ } + { " " * year "year" bibinfo.check * } + if$ + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + this.to.prev.status + this.status.std + 's := + japanese.flag #1 = { s purify$ 's := } { skip$ } if$ + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr name.format.string format.name$ + s nameptr "~{ll}" format.name$ = % check for insititution(s) without space + { s nameptr "{ll}" format.name$ } % for institution(s) without space + { s nameptr name.format.string format.name$ } % for usual author(s) + if$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { nameptr num.names.shown.with.forced.et.al #1 + = + numnames max.num.names.before.forced.et.al > + is.forced.et.al and and + { "others" 't := #1 'namesleft := } + { skip$ } + if$ + namesleft #1 > + { author.sep * t do.name.latex.cmd * } + { s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { japanese.flag #1 = + { "・" * bbl.etal } + { " " * bbl.etal emphasize } + if$ * + } + { author.sep.last * t do.name.latex.cmd * } + if$ + } + if$ + } + { t do.name.latex.cmd } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + cap.status.std + } if$ +} + + + + +%% Higher Level Formats + +%% addresses/locations + +FUNCTION {format.address} +{ address duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% author/editor names + +FUNCTION {format.authors} +{ author "author" format.names + use.ieej.setting #1 = + { bbl.ieej.author.title.sep * + punct.no 'this.status.punct := } + { skip$ } + if$ +} + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { ", " * + get.bbl.editor + capitalize + * + } + if$ +} + + + +%% date + +FUNCTION {format.date} +{ month "month" bibinfo.check month.word.to.num + use.ieej.setting #1 = + { format.month.ieej #1 = { month.num.to.word } { skip$ } if$ } + { format.month.ieee #1 = { month.num.to.word } { skip$ } if$ } + if$ + duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + "there's a month but no year in " cite$ * warning$ } + if$ + * + } + { this.to.prev.status + this.status.std + cap.status.std + use.ieej.setting #1 = + { swap$ + { * } + { use.ieej.abbrev #1 = + { swap$ pop$ } + { bbl.ieej.year.month.sep * swap$ * } + if$ + } + if$ + } + { swap$ 'skip$ { swap$ " " * swap$ } if$ * } + if$ + use.ieej.setting #1 = + { bbl.ieej.year.aft * bbl.ieej.year.pre swap$ * + ieej.setting.punct.year.aft #0 = + { punct.no 'this.status.punct := } + { skip$ } + if$ + ieej.setting.comma.year.pre #0 = + { punct.no 'prev.status.punct := } + { skip$ } + if$ + } + { skip$ } + if$ + } + if$ +} + +FUNCTION {format.date.electronic} +{ month "month" bibinfo.check duplicate$ empty$ + year "year" bibinfo.check duplicate$ empty$ + { swap$ + { pop$ } + { "there's a month but no year in " cite$ * warning$ + pop$ ")" * "(" swap$ * + this.to.prev.status + punct.no 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ + } + { swap$ + { swap$ pop$ ")" * "(" swap$ * } + { "(" swap$ * ", " * swap$ * ")" * } + if$ + this.to.prev.status + punct.no 'this.status.punct := + space.normal 'this.status.space := + quote.no 'this.status.quote := + cap.yes 'status.cap := + } + if$ +} + + + +%% edition/title + +% Note: The IEEE considers the edition to be closely associated with +% the title of a book. So, in IEEEtran.bst the edition is normally handled +% within the formatting of the title. The format.edition function is +% retained here for possible future use. +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + convert.edition + status.cap + { "t" } + { "l" } + if$ change.case$ + "edition" bibinfo.check + "~" * bbl.edition * + cap.status.std + } + if$ +} + +% This is used to format the booktitle of a conference proceedings. +% Here we use the "intype" field to provide the user a way to +% override the word "in" (e.g., with things like "presented at") +% Use of intype stops the emphasis of the booktitle to indicate that +% we no longer mean the written conference proceedings, but the +% conference itself. +FUNCTION {format.in.booktitle} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + intype missing$ + { japanese.flag #1 = + { "" } + { "booktitle" emphasize.title bbl.in " " * } + if$ + } + { intype " " * } + if$ + swap$ * + cap.status.std + } + if$ +} + + +% This is used to format the booktitle of collection. +% Here the "intype" field is not supported, but "edition" is. +FUNCTION {format.in.booktitle.edition} +{ booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + select.language + japanese.flag #1 = + { punct.comma 'prev.status.punct := } + { skip$ } + if$ + "booktitle" emphasize.title + edition empty$ + { skip$ } + { bbl.title.edition.sep edition format.jp.edition } + if$ + japanese.flag #1 = + { space.normal 'prev.status.space := } + { bbl.in " " * swap$ *} + if$ + cap.status.std + } + if$ +} + +FUNCTION {format.article.title} +{ title duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + "t" change.case$ + } + if$ + "title" bibinfo.check + duplicate$ empty$ 'skip$ + { quote.close 'this.status.quote := + is.last.char.not.punct + { punct.std 'this.status.punct := } + { use.ieej.setting #1 = bbl.ieej.force.punct.aft.quote #1 = and + { punct.std 'this.status.punct := } + { punct.no 'this.status.punct := } + if$ + } + if$ + select.language + use.ieej.setting #1 = + { bbl.ieej.title.pre swap$ * } + { "``" swap$ * } + if$ + cap.status.std + } + if$ +} + +FUNCTION {format.article.title.electronic} +{ title duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + "t" change.case$ + } + if$ + "title" bibinfo.check + duplicate$ empty$ + { skip$ } + { select.language } + if$ +} + +FUNCTION {format.book.title.edition} +{ title "title" bibinfo.check + duplicate$ empty$ + { "empty title in " cite$ * warning$ } + { this.to.prev.status + this.status.std + select.language + format.jp.title + "booktitle" emphasize.title + edition empty$ + { skip$ } + { bbl.title.edition.sep edition format.jp.edition } + if$ + use.ieej.setting #1 = + { space.normal 'prev.status.space := } + { skip$ } + if$ + cap.status.std + punct.comma 'this.status.punct := + use.ieej.setting #1 = + { skip$ } + { punct.comma 'prev.status.punct := } + if$ + } + if$ +} + +FUNCTION {format.book.title} +{ title "title" bibinfo.check + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + format.jp.title + "booktitle" emphasize.title + } + if$ +} + + + +%% journal + +FUNCTION {format.journal} +{ journal duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + select.language + "journal" emphasize.title + } + if$ +} + + + +%% how published + +FUNCTION {format.howpublished} +{ howpublished duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + + + +%% institutions/organization/publishers/school + +FUNCTION {format.institution} +{ institution duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.organization} +{ organization duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.publisher} +{ publisher "publisher" bibinfo.warn format.pub } + +FUNCTION {format.address.publisher.date} +{ publisher "publisher" bibinfo.warn format.address.org.or.pub.date } + +FUNCTION {format.address.publisher.date.nowarn} +{ publisher "publisher" bibinfo.check format.address.org.or.pub.date } + +FUNCTION {format.address.organization.date} +{ organization "organization" bibinfo.check format.address.org.or.pub.date } + +FUNCTION {format.school} +{ school duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + cap.status.std + } + if$ +} + +FUNCTION {format.language} +{ language empty.field.to.null.string + duplicate$ empty$ bbl.format.language #0 = or 'skip$ + { this.to.prev.status + this.status.std + capitalize + punct.comma 'this.status.punct := + bbl.format.language.punct #0 = + { punct.no 'this.status.punct := } + { skip$ } + if$ + "(in " swap$ * ")" * + cap.status.std + } + if$ +} + + +%% volume/number/series/chapter/pages + +FUNCTION {format.volume} +{ volume empty.field.to.null.string + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + use.ieej.setting #1 = + { bbl.ieej.vol swap$ "volume" bibinfo.check * bbl.ieej.vol.aft * + use.ieej.abbrev #1 = + { punct.no 'this.status.punct := + space.no 'this.status.space := + } + { skip$ } + if$ + } + { bbl.volume + status.cap + { capitalize } + { skip$ } + if$ + swap$ tie.or.space.prefix + "volume" bibinfo.check + * * + cap.status.std + } + if$ + } + if$ +} + +FUNCTION {format.number} +{ number empty.field.to.null.string + duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + use.ieej.setting #1 = + { bbl.ieej.no swap$ "number" bibinfo.check * bbl.ieej.no.aft * } + { status.cap + { bbl.number capitalize } + { bbl.number } + if$ + swap$ tie.or.space.prefix + "number" bibinfo.check + * * + cap.status.std + } + if$ + } + if$ +} + +FUNCTION {format.number.if.use.for.article} +{ is.use.number.for.article + { format.number } + { "" } + if$ +} + +% The IEEE does not seem to tie the series so closely with the volume +% and number as is done in other bibliography styles. Instead the +% series is treated somewhat like an extension of the title. +FUNCTION {format.series} +{ series empty$ + { "" } + { this.to.prev.status + this.status.std + bbl.series " " * + series "series" bibinfo.check * + cap.status.std + } + if$ +} + + +FUNCTION {format.chapter} +{ chapter empty$ + { "" } + { this.to.prev.status + this.status.std + use.ieej.setting #0 = + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + cap.status.std + } + { type empty$ + { bbl.ieej.chapter.pre } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter + bbl.ieej.chapter.tie.pre #1 = + { tie.or.space.prefix } + { "" } + if$ + "chapter" bibinfo.check + * * + bbl.ieej.chapter.aft + bbl.ieej.chapter.tie.aft #1 = + { tie.or.space.prefix } + { "" } + if$ + "chapter" bibinfo.check + * * + cap.status.std + } + if$ + } + if$ +} + + +% The intended use of format.paper is for paper numbers of inproceedings. +% The paper type can be overridden via the type field. +% We allow the type to be displayed even if the paper number is absent +% for things like "postdeadline paper" +FUNCTION {format.paper} +{ is.use.paper + { paper empty$ + { type empty$ + { "" } + { this.to.prev.status + this.status.std + type "type" bibinfo.check + cap.status.std + } + if$ + } + { this.to.prev.status + this.status.std + type empty$ + { bbl.paper } + { type "type" bibinfo.check } + if$ + " " * paper + "paper" bibinfo.check + * + cap.status.std + } + if$ + } + { "" } + if$ +} + + +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { this.to.prev.status + this.status.std + duplicate$ is.multiple.pages + { use.ieej.setting #1 = + { bbl.ieej.pages swap$ } + { bbl.pages swap$ } + if$ + n.dashify + } + { use.ieej.setting #1 = + { bbl.ieej.page swap$ } + { bbl.page swap$ } + if$ + } + if$ + use.ieej.setting #1 = { "" } { tie.or.space.prefix } if$ + "pages" bibinfo.check + * * + cap.status.std + } + if$ +} + + + +%% technical report number + +FUNCTION {format.tech.report.number} +{ number "number" bibinfo.check + this.to.prev.status + this.status.std + cap.status.std + type duplicate$ empty$ + { pop$ + bbl.techrep + } + { skip$ } + if$ + "type" bibinfo.check + swap$ duplicate$ empty$ + { pop$ } + { tie.or.space.prefix * * } + if$ +} + + + +%% note + +FUNCTION {format.note} +{ note empty$ + { "" } + { this.to.prev.status + this.status.std + punct.period 'this.status.punct := + note #1 #1 substring$ + duplicate$ "{" = + { skip$ } + { status.cap + { "u" } + { "l" } + if$ + change.case$ + } + if$ + note #2 global.max$ substring$ * "note" bibinfo.check + cap.yes 'status.cap := + } + if$ +} + + + +%% patent + +FUNCTION {format.patent.date} +{ this.to.prev.status + this.status.std + year empty$ + { monthfiled duplicate$ empty$ + { "monthfiled" bibinfo.check pop$ "" } + { "monthfiled" bibinfo.check } + if$ + dayfiled duplicate$ empty$ + { "dayfiled" bibinfo.check pop$ "" * } + { "dayfiled" bibinfo.check + monthfiled empty$ + { "dayfiled without a monthfiled in " cite$ * warning$ + * + } + { " " swap$ * * } + if$ + } + if$ + yearfiled empty$ + { "no year or yearfiled in " cite$ * warning$ } + { yearfiled "yearfiled" bibinfo.check + swap$ + duplicate$ empty$ + { pop$ } + { ", " * swap$ * } + if$ + } + if$ + } + { month duplicate$ empty$ + { "month" bibinfo.check pop$ "" } + { "month" bibinfo.check } + if$ + day duplicate$ empty$ + { "day" bibinfo.check pop$ "" * } + { "day" bibinfo.check + month empty$ + { "day without a month in " cite$ * warning$ + * + } + { " " swap$ * * } + if$ + } + if$ + year "year" bibinfo.check + swap$ + duplicate$ empty$ + { pop$ } + { ", " * swap$ * } + if$ + } + if$ + cap.status.std +} + +FUNCTION {format.patent.nationality.type.number} +{ this.to.prev.status + this.status.std + nationality duplicate$ empty$ + { "nationality" bibinfo.warn pop$ "" } + { "nationality" bibinfo.check + duplicate$ "l" change.case$ "united states" = + { pop$ bbl.patentUS } + { skip$ } + if$ + " " * + } + if$ + type empty$ + { bbl.patent "type" bibinfo.check } + { type "type" bibinfo.check } + if$ + * + number duplicate$ empty$ + { "number" bibinfo.warn pop$ } + { "number" bibinfo.check + large.number.separate + swap$ " " * swap$ * + } + if$ + cap.status.std +} + + + +%% standard + +FUNCTION {format.organization.institution.standard.type.number} +{ this.to.prev.status + this.status.std + organization duplicate$ empty$ + { pop$ + institution duplicate$ empty$ + { "institution" bibinfo.warn } + { "institution" bibinfo.warn " " * } + if$ + } + { "organization" bibinfo.warn " " * } + if$ + type empty$ + { bbl.standard "type" bibinfo.check } + { type "type" bibinfo.check } + if$ + * + number duplicate$ empty$ + { "number" bibinfo.check pop$ } + { "number" bibinfo.check + large.number.separate + swap$ " " * swap$ * + } + if$ + cap.status.std +} + +FUNCTION {format.revision} +{ revision empty$ + { "" } + { this.to.prev.status + this.status.std + bbl.revision + revision tie.or.space.prefix + "revision" bibinfo.check + * * + cap.status.std + } + if$ +} + + +%% thesis + +FUNCTION {format.master.thesis.type} +{ this.to.prev.status + this.status.std + type empty$ + { + bbl.mthesis + } + { + type "type" bibinfo.check + } + if$ +cap.status.std +} + +FUNCTION {format.phd.thesis.type} +{ this.to.prev.status + this.status.std + type empty$ + { + bbl.phdthesis + } + { + type "type" bibinfo.check + } + if$ +cap.status.std +} + + + +%% URL + +FUNCTION {format.url} +{ is.use.url + { url empty$ + { "" } + { this.to.prev.status + this.status.std + cap.yes 'status.cap := + name.url.prefix " " * + "\url{" * url * "}" * + punct.no 'this.status.punct := + punct.period 'prev.status.punct := + space.normal 'this.status.space := + space.normal 'prev.status.space := + quote.no 'this.status.quote := + } + if$ + } + { "" } + if$ +} + + + + +%%%%%%%%%%%%%%%%%%%% +%% ENTRY HANDLERS %% +%%%%%%%%%%%%%%%%%%%% + + +% Note: In many journals, the IEEE (or the authors) tend not to show the number +% for articles, so the display of the number is controlled here by the +% switch "is.use.number.for.article" +FUNCTION {article} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + use.ieej.abbrev #1 = + { skip$ } + { format.article.title "title" output.warn } + if$ + bbl.format.language #1 = { format.language output } 'skip$ if$ + format.journal "journal" bibinfo.check "journal" output.warn + format.volume output + format.number.if.use.for.article output + format.pages output + format.date "year" output.warn + format.note output + format.url output + bbl.format.language #2 = { format.language output } 'skip$ if$ + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {book} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + author empty$ + { format.editors "author and editor" output.warn } + { format.authors output.nonnull } + if$ + name.or.dash + format.book.title.edition output + format.series output + author empty$ + { skip$ } + { format.editors output } + if$ + use.ieej.setting #1 = + { format.publisher output } + { format.address.publisher.date output } + if$ + format.volume output + format.number output + format.note output + use.ieej.setting #0 = 'skip$ { format.date output } if$ + format.url output + bbl.format.language #2 = { format.language output } 'skip$ if$ + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {booklet} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {electronic} +{ std.status.using.period + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.date.electronic output + format.article.title.electronic output + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.note output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {inbook} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + author empty$ + { format.editors "author and editor" output.warn } + { format.authors output.nonnull } + if$ + name.or.dash + format.book.title.edition output + format.series output + use.ieej.setting #1 = + { format.publisher output } + { format.address.publisher.date output } + if$ + format.volume output + format.number output + format.chapter output + format.pages output + format.note output + use.ieej.setting #0 = 'skip$ { format.date output } if$ + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {incollection} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.in.booktitle.edition "booktitle" output.warn + format.series output + format.editors output + use.ieej.setting #1 = + { format.publisher output } + { format.address.publisher.date output } + if$ + format.volume output + format.number output + format.chapter output + format.pages output + format.note output + use.ieej.setting #0 = 'skip$ { format.date output } if$ + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {inproceedings} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + use.ieej.abbrev #1 = + { skip$ } + { format.article.title "title" output.warn } + if$ + format.in.booktitle "booktitle" output.warn + format.series output + format.editors output + format.volume output + format.number output + use.ieej.setting #1 = + { format.paper output + format.pages output + use.ieej.abbrev #1 = + { skip$ } + { format.address output } + if$ + } + { publisher empty$ + { format.address.organization.date output } + { format.organization "organization" bibinfo.check output + format.address.publisher.date output + } + if$ + format.paper output + format.pages output + } + if$ + format.note output + use.ieej.setting #0 = 'skip$ { format.date output } if$ + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {manual} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title.edition "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.date output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {mastersthesis} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.master.thesis.type output.nonnull + format.school "school" bibinfo.warn output + format.address "address" bibinfo.check output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {misc} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title output + format.howpublished "howpublished" bibinfo.check output + format.organization "organization" bibinfo.check output + format.address "address" bibinfo.check output + format.pages output + format.date output + format.note output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {patent} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.article.title output + format.patent.nationality.type.number output + format.patent.date output + format.note output + format.url output + fin.entry + empty.entry.warn + if.url.std.interword.spacing +} + +FUNCTION {periodical} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.editors output + name.or.dash + format.book.title "title" output.warn + format.series output + format.volume output + format.number output + format.organization "organization" bibinfo.check output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {phdthesis} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.phd.thesis.type output.nonnull + format.school "school" bibinfo.warn output + format.address "address" bibinfo.check output + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {proceedings} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.editors output + name.or.dash + format.book.title "title" output.warn + format.series output + format.volume output + format.number output + publisher empty$ + { format.address.organization.date output } + { format.organization "organization" bibinfo.check output + format.address.publisher.date output + } + if$ + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {standard} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors output + name.or.dash + format.book.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.organization.institution.standard.type.number output + format.revision output + format.date output + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {techreport} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.howpublished "howpublished" bibinfo.check output + format.institution "institution" bibinfo.warn output + format.address "address" bibinfo.check output + format.tech.report.number output.nonnull + format.date "year" output.warn + format.note output + format.url output + fin.entry + if.url.std.interword.spacing +} + +FUNCTION {unpublished} +{ std.status.using.comma + start.entry + if.url.alt.interword.spacing + format.authors "author" output.warn + name.or.dash + format.article.title "title" output.warn + format.date output + format.note "note" output.warn + format.url output + fin.entry + if.url.std.interword.spacing +} + + +% The special entry type which provides the user interface to the +% BST controls +FUNCTION {IEEEtranBSTCTL} +{ is.print.banners.to.terminal + { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." * + top$ + } + { skip$ } + if$ + CTLuse_article_number + empty$ + { skip$ } + { CTLuse_article_number + yes.no.to.int + 'is.use.number.for.article := + } + if$ + CTLuse_paper + empty$ + { skip$ } + { CTLuse_paper + yes.no.to.int + 'is.use.paper := + } + if$ + CTLuse_url + empty$ + { skip$ } + { CTLuse_url + yes.no.to.int + 'is.use.url := + } + if$ + CTLuse_forced_etal + empty$ + { skip$ } + { CTLuse_forced_etal + yes.no.to.int + 'is.forced.et.al := + } + if$ + CTLmax_names_forced_etal + empty$ + { skip$ } + { CTLmax_names_forced_etal + string.to.integer + 'max.num.names.before.forced.et.al := + } + if$ + CTLnames_show_etal + empty$ + { skip$ } + { CTLnames_show_etal + string.to.integer + 'num.names.shown.with.forced.et.al := + } + if$ + CTLuse_alt_spacing + empty$ + { skip$ } + { CTLuse_alt_spacing + yes.no.to.int + 'is.use.alt.interword.spacing := + } + if$ + CTLalt_stretch_factor + empty$ + { skip$ } + { CTLalt_stretch_factor + 'ALTinterwordstretchfactor := + "\renewcommand{\BIBentryALTinterwordstretchfactor}{" + ALTinterwordstretchfactor * "}" * + write$ newline$ + } + if$ + CTLdash_repeated_names + empty$ + { skip$ } + { CTLdash_repeated_names + yes.no.to.int + 'is.dash.repeated.names := + } + if$ + CTLname_format_string + empty$ + { skip$ } + { CTLname_format_string + 'name.format.string := + } + if$ + CTLname_latex_cmd + empty$ + { skip$ } + { CTLname_latex_cmd + 'name.latex.cmd := + } + if$ + CTLname_url_prefix + missing$ + { skip$ } + { CTLname_url_prefix + 'name.url.prefix := + } + if$ + CTLuse_ieej_abbrev + empty$ + { skip$ } + { CTLuse_ieej_abbrev + yes.no.to.int + 'use.ieej.abbrev := + use.ieej.setting #1 = + { use.ieej.abbrev 'is.forced.et.al := } + { skip$ } + if$ + } + if$ + + num.names.shown.with.forced.et.al max.num.names.before.forced.et.al > + { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$ + max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al := + } + { skip$ } + if$ +} + + +%%%%%%%%%%%%%%%%%%% +%% ENTRY ALIASES %% +%%%%%%%%%%%%%%%%%%% +FUNCTION {conference}{inproceedings} +FUNCTION {online}{electronic} +FUNCTION {internet}{electronic} +FUNCTION {webpage}{electronic} +FUNCTION {www}{electronic} +FUNCTION {default.type}{misc} + + + +%%%%%%%%%%%%%%%%%% +%% MAIN PROGRAM %% +%%%%%%%%%%%%%%%%%% + +READ + +EXECUTE {initialize.controls} +EXECUTE {initialize.status.constants} +EXECUTE {banner.message} + +EXECUTE {initialize.longest.label} +ITERATE {longest.label.pass} + +EXECUTE {begin.bib} +ITERATE {call.type$} +EXECUTE {end.bib} + +EXECUTE{completed.message} + + +%% That's all folks, mds. |