annotate docs/SMC15/IEEEtran.bst @ 1390:1e85294554fe

Index page now links to example APE project, example MUSHRA project, test creator, analysis page, citing info, GNU license, and instructions. Instructions and example project contain info on checkboxes.
author Brecht De Man <b.deman@qmul.ac.uk>
date Fri, 18 Dec 2015 18:26:46 +0000
parents
children
rev   line source
b@1390 1 %%
b@1390 2 %% IEEEtran.bst
b@1390 3 %% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted)
b@1390 4 %% Version 1.12 (2007/01/11)
b@1390 5 %%
b@1390 6 %% Copyright (c) 2003-2007 Michael Shell
b@1390 7 %%
b@1390 8 %% Original starting code base and algorithms obtained from the output of
b@1390 9 %% Patrick W. Daly's makebst package as well as from prior versions of
b@1390 10 %% IEEE BibTeX styles:
b@1390 11 %%
b@1390 12 %% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988)
b@1390 13 %% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993)
b@1390 14 %%
b@1390 15 %% Support sites:
b@1390 16 %% http://www.michaelshell.org/tex/ieeetran/
b@1390 17 %% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
b@1390 18 %% and/or
b@1390 19 %% http://www.ieee.org/
b@1390 20 %%
b@1390 21 %% For use with BibTeX version 0.99a or later
b@1390 22 %%
b@1390 23 %% This is a numerical citation style.
b@1390 24 %%
b@1390 25 %%*************************************************************************
b@1390 26 %% Legal Notice:
b@1390 27 %% This code is offered as-is without any warranty either expressed or
b@1390 28 %% implied; without even the implied warranty of MERCHANTABILITY or
b@1390 29 %% FITNESS FOR A PARTICULAR PURPOSE!
b@1390 30 %% User assumes all risk.
b@1390 31 %% In no event shall IEEE or any contributor to this code be liable for
b@1390 32 %% any damages or losses, including, but not limited to, incidental,
b@1390 33 %% consequential, or any other damages, resulting from the use or misuse
b@1390 34 %% of any information contained here.
b@1390 35 %%
b@1390 36 %% All comments are the opinions of their respective authors and are not
b@1390 37 %% necessarily endorsed by the IEEE.
b@1390 38 %%
b@1390 39 %% This work is distributed under the LaTeX Project Public License (LPPL)
b@1390 40 %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
b@1390 41 %% distributed and modified. A copy of the LPPL, version 1.3, is included
b@1390 42 %% in the base LaTeX documentation of all distributions of LaTeX released
b@1390 43 %% 2003/12/01 or later.
b@1390 44 %% Retain all contribution notices and credits.
b@1390 45 %% ** Modified files should be clearly indicated as such, including **
b@1390 46 %% ** renaming them and changing author support contact information. **
b@1390 47 %%
b@1390 48 %% File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib,
b@1390 49 %% IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst,
b@1390 50 %% IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf
b@1390 51 %%*************************************************************************
b@1390 52 %
b@1390 53 %
b@1390 54 % Changelog:
b@1390 55 %
b@1390 56 % 1.00 (2002/08/13) Initial release
b@1390 57 %
b@1390 58 % 1.10 (2002/09/27)
b@1390 59 % 1. Corrected minor bug for improperly formed warning message when a
b@1390 60 % book was not given a title. Thanks to Ming Kin Lai for reporting this.
b@1390 61 % 2. Added support for CTLname_format_string and CTLname_latex_cmd fields
b@1390 62 % in the BST control entry type.
b@1390 63 %
b@1390 64 % 1.11 (2003/04/02)
b@1390 65 % 1. Fixed bug with URLs containing underscores when using url.sty. Thanks
b@1390 66 % to Ming Kin Lai for reporting this.
b@1390 67 %
b@1390 68 % 1.12 (2007/01/11)
b@1390 69 % 1. Fixed bug with unwanted comma before "et al." when an entry contained
b@1390 70 % more than two author names. Thanks to Pallav Gupta for reporting this.
b@1390 71 % 2. Fixed bug with anomalous closing quote in tech reports that have a
b@1390 72 % type, but without a number or address. Thanks to Mehrdad Mirreza for
b@1390 73 % reporting this.
b@1390 74 % 3. Use braces in \providecommand in begin.bib to better support
b@1390 75 % latex2html. TeX style length assignments OK with recent versions
b@1390 76 % of latex2html - 1.71 (2002/2/1) or later is strongly recommended.
b@1390 77 % Use of the language field still causes trouble with latex2html.
b@1390 78 % Thanks to Federico Beffa for reporting this.
b@1390 79 % 4. Added IEEEtran.bst ID and version comment string to .bbl output.
b@1390 80 % 5. Provide a \BIBdecl hook that allows the user to execute commands
b@1390 81 % just prior to the first entry.
b@1390 82 % 6. Use default urlstyle (is using url.sty) of "same" rather than rm to
b@1390 83 % better work with a wider variety of bibliography styles.
b@1390 84 % 7. Changed month abbreviations from Sept., July and June to Sep., Jul.,
b@1390 85 % and Jun., respectively, as IEEE now does. Thanks to Moritz Borgmann
b@1390 86 % for reporting this.
b@1390 87 % 8. Control entry types should not be considered when calculating longest
b@1390 88 % label width.
b@1390 89 % 9. Added alias www for electronic/online.
b@1390 90 % 10. Added CTLname_url_prefix control entry type.
b@1390 91
b@1390 92
b@1390 93 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 94 %% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %%
b@1390 95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 96
b@1390 97 % These are the defaults for the user adjustable controls. The values used
b@1390 98 % here can be overridden by the user via IEEEtranBSTCTL entry type.
b@1390 99
b@1390 100 % NOTE: The recommended LaTeX command to invoke a control entry type is:
b@1390 101 %
b@1390 102 %\makeatletter
b@1390 103 %\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
b@1390 104 %\def\@bstctlcite[#1]#2{\@bsphack
b@1390 105 % \@for\@citeb:=#2\do{%
b@1390 106 % \edef\@citeb{\expandafter\@firstofone\@citeb}%
b@1390 107 % \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
b@1390 108 % \@esphack}
b@1390 109 %\makeatother
b@1390 110 %
b@1390 111 % It is called at the start of the document, before the first \cite, like:
b@1390 112 % \bstctlcite{IEEEexample:BSTcontrol}
b@1390 113 %
b@1390 114 % IEEEtran.cls V1.6 and later does provide this command.
b@1390 115
b@1390 116
b@1390 117
b@1390 118 % #0 turns off the display of the number for articles.
b@1390 119 % #1 enables
b@1390 120 FUNCTION {default.is.use.number.for.article} { #1 }
b@1390 121
b@1390 122
b@1390 123 % #0 turns off the display of the paper and type fields in @inproceedings.
b@1390 124 % #1 enables
b@1390 125 FUNCTION {default.is.use.paper} { #1 }
b@1390 126
b@1390 127
b@1390 128 % #0 turns off the forced use of "et al."
b@1390 129 % #1 enables
b@1390 130 FUNCTION {default.is.forced.et.al} { #0 }
b@1390 131
b@1390 132 % The maximum number of names that can be present beyond which an "et al."
b@1390 133 % usage is forced. Be sure that num.names.shown.with.forced.et.al (below)
b@1390 134 % is not greater than this value!
b@1390 135 % Note: There are many instances of references in IEEE journals which have
b@1390 136 % a very large number of authors as well as instances in which "et al." is
b@1390 137 % used profusely.
b@1390 138 FUNCTION {default.max.num.names.before.forced.et.al} { #10 }
b@1390 139
b@1390 140 % The number of names that will be shown with a forced "et al.".
b@1390 141 % Must be less than or equal to max.num.names.before.forced.et.al
b@1390 142 FUNCTION {default.num.names.shown.with.forced.et.al} { #1 }
b@1390 143
b@1390 144
b@1390 145 % #0 turns off the alternate interword spacing for entries with URLs.
b@1390 146 % #1 enables
b@1390 147 FUNCTION {default.is.use.alt.interword.spacing} { #1 }
b@1390 148
b@1390 149 % If alternate interword spacing for entries with URLs is enabled, this is
b@1390 150 % the interword spacing stretch factor that will be used. For example, the
b@1390 151 % default "4" here means that the interword spacing in entries with URLs can
b@1390 152 % stretch to four times normal. Does not have to be an integer. Note that
b@1390 153 % the value specified here can be overridden by the user in their LaTeX
b@1390 154 % code via a command such as:
b@1390 155 % "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to
b@1390 156 % that via the IEEEtranBSTCTL entry type.
b@1390 157 FUNCTION {default.ALTinterwordstretchfactor} { "4" }
b@1390 158
b@1390 159
b@1390 160 % #0 turns off the "dashification" of repeated (i.e., identical to those
b@1390 161 % of the previous entry) names. IEEE normally does this.
b@1390 162 % #1 enables
b@1390 163 FUNCTION {default.is.dash.repeated.names} { #1 }
b@1390 164
b@1390 165
b@1390 166 % The default name format control string.
b@1390 167 FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" }
b@1390 168
b@1390 169
b@1390 170 % The default LaTeX font command for the names.
b@1390 171 FUNCTION {default.name.latex.cmd}{ "" }
b@1390 172
b@1390 173
b@1390 174 % The default URL prefix.
b@1390 175 FUNCTION {default.name.url.prefix}{ "[Online]. Available:" }
b@1390 176
b@1390 177
b@1390 178 % Other controls that cannot be accessed via IEEEtranBSTCTL entry type.
b@1390 179
b@1390 180 % #0 turns off the terminal startup banner/completed message so as to
b@1390 181 % operate more quietly.
b@1390 182 % #1 enables
b@1390 183 FUNCTION {is.print.banners.to.terminal} { #1 }
b@1390 184
b@1390 185
b@1390 186
b@1390 187
b@1390 188 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 189 %% FILE VERSION AND BANNER %%
b@1390 190 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 191
b@1390 192 FUNCTION{bst.file.version} { "1.12" }
b@1390 193 FUNCTION{bst.file.date} { "2007/01/11" }
b@1390 194 FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" }
b@1390 195
b@1390 196 FUNCTION {banner.message}
b@1390 197 { is.print.banners.to.terminal
b@1390 198 { "-- IEEEtran.bst version" " " * bst.file.version *
b@1390 199 " (" * bst.file.date * ") " * "by Michael Shell." *
b@1390 200 top$
b@1390 201 "-- " bst.file.website *
b@1390 202 top$
b@1390 203 "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." *
b@1390 204 top$
b@1390 205 }
b@1390 206 { skip$ }
b@1390 207 if$
b@1390 208 }
b@1390 209
b@1390 210 FUNCTION {completed.message}
b@1390 211 { is.print.banners.to.terminal
b@1390 212 { ""
b@1390 213 top$
b@1390 214 "Done."
b@1390 215 top$
b@1390 216 }
b@1390 217 { skip$ }
b@1390 218 if$
b@1390 219 }
b@1390 220
b@1390 221
b@1390 222
b@1390 223
b@1390 224 %%%%%%%%%%%%%%%%%%%%%%
b@1390 225 %% STRING CONSTANTS %%
b@1390 226 %%%%%%%%%%%%%%%%%%%%%%
b@1390 227
b@1390 228 FUNCTION {bbl.and}{ "and" }
b@1390 229 FUNCTION {bbl.etal}{ "et~al." }
b@1390 230 FUNCTION {bbl.editors}{ "eds." }
b@1390 231 FUNCTION {bbl.editor}{ "ed." }
b@1390 232 FUNCTION {bbl.edition}{ "ed." }
b@1390 233 FUNCTION {bbl.volume}{ "vol." }
b@1390 234 FUNCTION {bbl.of}{ "of" }
b@1390 235 FUNCTION {bbl.number}{ "no." }
b@1390 236 FUNCTION {bbl.in}{ "in" }
b@1390 237 FUNCTION {bbl.pages}{ "pp." }
b@1390 238 FUNCTION {bbl.page}{ "p." }
b@1390 239 FUNCTION {bbl.chapter}{ "ch." }
b@1390 240 FUNCTION {bbl.paper}{ "paper" }
b@1390 241 FUNCTION {bbl.part}{ "pt." }
b@1390 242 FUNCTION {bbl.patent}{ "Patent" }
b@1390 243 FUNCTION {bbl.patentUS}{ "U.S." }
b@1390 244 FUNCTION {bbl.revision}{ "Rev." }
b@1390 245 FUNCTION {bbl.series}{ "ser." }
b@1390 246 FUNCTION {bbl.standard}{ "Std." }
b@1390 247 FUNCTION {bbl.techrep}{ "Tech. Rep." }
b@1390 248 FUNCTION {bbl.mthesis}{ "Master's thesis" }
b@1390 249 FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" }
b@1390 250 FUNCTION {bbl.st}{ "st" }
b@1390 251 FUNCTION {bbl.nd}{ "nd" }
b@1390 252 FUNCTION {bbl.rd}{ "rd" }
b@1390 253 FUNCTION {bbl.th}{ "th" }
b@1390 254
b@1390 255
b@1390 256 % This is the LaTeX spacer that is used when a larger than normal space
b@1390 257 % is called for (such as just before the address:publisher).
b@1390 258 FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " }
b@1390 259
b@1390 260 % The LaTeX code for dashes that are used to represent repeated names.
b@1390 261 % Note: Some older IEEE journals used something like
b@1390 262 % "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along
b@1390 263 % the baseline. However, IEEE now uses a thinner, above baseline,
b@1390 264 % six dash long sequence.
b@1390 265 FUNCTION {repeated.name.dashes} { "------" }
b@1390 266
b@1390 267
b@1390 268
b@1390 269 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 270 %% PREDEFINED STRING MACROS %%
b@1390 271 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 272
b@1390 273 MACRO {jan} {"Jan."}
b@1390 274 MACRO {feb} {"Feb."}
b@1390 275 MACRO {mar} {"Mar."}
b@1390 276 MACRO {apr} {"Apr."}
b@1390 277 MACRO {may} {"May"}
b@1390 278 MACRO {jun} {"Jun."}
b@1390 279 MACRO {jul} {"Jul."}
b@1390 280 MACRO {aug} {"Aug."}
b@1390 281 MACRO {sep} {"Sep."}
b@1390 282 MACRO {oct} {"Oct."}
b@1390 283 MACRO {nov} {"Nov."}
b@1390 284 MACRO {dec} {"Dec."}
b@1390 285
b@1390 286
b@1390 287
b@1390 288 %%%%%%%%%%%%%%%%%%
b@1390 289 %% ENTRY FIELDS %%
b@1390 290 %%%%%%%%%%%%%%%%%%
b@1390 291
b@1390 292 ENTRY
b@1390 293 { address
b@1390 294 assignee
b@1390 295 author
b@1390 296 booktitle
b@1390 297 chapter
b@1390 298 day
b@1390 299 dayfiled
b@1390 300 edition
b@1390 301 editor
b@1390 302 howpublished
b@1390 303 institution
b@1390 304 intype
b@1390 305 journal
b@1390 306 key
b@1390 307 language
b@1390 308 month
b@1390 309 monthfiled
b@1390 310 nationality
b@1390 311 note
b@1390 312 number
b@1390 313 organization
b@1390 314 pages
b@1390 315 paper
b@1390 316 publisher
b@1390 317 school
b@1390 318 series
b@1390 319 revision
b@1390 320 title
b@1390 321 type
b@1390 322 url
b@1390 323 volume
b@1390 324 year
b@1390 325 yearfiled
b@1390 326 CTLuse_article_number
b@1390 327 CTLuse_paper
b@1390 328 CTLuse_forced_etal
b@1390 329 CTLmax_names_forced_etal
b@1390 330 CTLnames_show_etal
b@1390 331 CTLuse_alt_spacing
b@1390 332 CTLalt_stretch_factor
b@1390 333 CTLdash_repeated_names
b@1390 334 CTLname_format_string
b@1390 335 CTLname_latex_cmd
b@1390 336 CTLname_url_prefix
b@1390 337 }
b@1390 338 {}
b@1390 339 { label }
b@1390 340
b@1390 341
b@1390 342
b@1390 343
b@1390 344 %%%%%%%%%%%%%%%%%%%%%%%
b@1390 345 %% INTEGER VARIABLES %%
b@1390 346 %%%%%%%%%%%%%%%%%%%%%%%
b@1390 347
b@1390 348 INTEGERS { prev.status.punct this.status.punct punct.std
b@1390 349 punct.no punct.comma punct.period
b@1390 350 prev.status.space this.status.space space.std
b@1390 351 space.no space.normal space.large
b@1390 352 prev.status.quote this.status.quote quote.std
b@1390 353 quote.no quote.close
b@1390 354 prev.status.nline this.status.nline nline.std
b@1390 355 nline.no nline.newblock
b@1390 356 status.cap cap.std
b@1390 357 cap.no cap.yes}
b@1390 358
b@1390 359 INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames }
b@1390 360
b@1390 361 INTEGERS { is.use.number.for.article
b@1390 362 is.use.paper
b@1390 363 is.forced.et.al
b@1390 364 max.num.names.before.forced.et.al
b@1390 365 num.names.shown.with.forced.et.al
b@1390 366 is.use.alt.interword.spacing
b@1390 367 is.dash.repeated.names}
b@1390 368
b@1390 369
b@1390 370 %%%%%%%%%%%%%%%%%%%%%%
b@1390 371 %% STRING VARIABLES %%
b@1390 372 %%%%%%%%%%%%%%%%%%%%%%
b@1390 373
b@1390 374 STRINGS { bibinfo
b@1390 375 longest.label
b@1390 376 oldname
b@1390 377 s
b@1390 378 t
b@1390 379 ALTinterwordstretchfactor
b@1390 380 name.format.string
b@1390 381 name.latex.cmd
b@1390 382 name.url.prefix}
b@1390 383
b@1390 384
b@1390 385
b@1390 386
b@1390 387 %%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 388 %% LOW LEVEL FUNCTIONS %%
b@1390 389 %%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 390
b@1390 391 FUNCTION {initialize.controls}
b@1390 392 { default.is.use.number.for.article 'is.use.number.for.article :=
b@1390 393 default.is.use.paper 'is.use.paper :=
b@1390 394 default.is.forced.et.al 'is.forced.et.al :=
b@1390 395 default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al :=
b@1390 396 default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al :=
b@1390 397 default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing :=
b@1390 398 default.is.dash.repeated.names 'is.dash.repeated.names :=
b@1390 399 default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
b@1390 400 default.name.format.string 'name.format.string :=
b@1390 401 default.name.latex.cmd 'name.latex.cmd :=
b@1390 402 default.name.url.prefix 'name.url.prefix :=
b@1390 403 }
b@1390 404
b@1390 405
b@1390 406 % This IEEEtran.bst features a very powerful and flexible mechanism for
b@1390 407 % controlling the capitalization, punctuation, spacing, quotation, and
b@1390 408 % newlines of the formatted entry fields. (Note: IEEEtran.bst does not need
b@1390 409 % or use the newline/newblock feature, but it has been implemented for
b@1390 410 % possible future use.) The output states of IEEEtran.bst consist of
b@1390 411 % multiple independent attributes and, as such, can be thought of as being
b@1390 412 % vectors, rather than the simple scalar values ("before.all",
b@1390 413 % "mid.sentence", etc.) used in most other .bst files.
b@1390 414 %
b@1390 415 % The more flexible and complex design used here was motivated in part by
b@1390 416 % IEEE's rather unusual bibliography style. For example, IEEE ends the
b@1390 417 % previous field item with a period and large space prior to the publisher
b@1390 418 % address; the @electronic entry types use periods as inter-item punctuation
b@1390 419 % rather than the commas used by the other entry types; and URLs are never
b@1390 420 % followed by periods even though they are the last item in the entry.
b@1390 421 % Although it is possible to accommodate these features with the conventional
b@1390 422 % output state system, the seemingly endless exceptions make for convoluted,
b@1390 423 % unreliable and difficult to maintain code.
b@1390 424 %
b@1390 425 % IEEEtran.bst's output state system can be easily understood via a simple
b@1390 426 % illustration of two most recently formatted entry fields (on the stack):
b@1390 427 %
b@1390 428 % CURRENT_ITEM
b@1390 429 % "PREVIOUS_ITEM
b@1390 430 %
b@1390 431 % which, in this example, is to eventually appear in the bibliography as:
b@1390 432 %
b@1390 433 % "PREVIOUS_ITEM," CURRENT_ITEM
b@1390 434 %
b@1390 435 % It is the job of the output routine to take the previous item off of the
b@1390 436 % stack (while leaving the current item at the top of the stack), apply its
b@1390 437 % trailing punctuation (including closing quote marks) and spacing, and then
b@1390 438 % to write the result to BibTeX's output buffer:
b@1390 439 %
b@1390 440 % "PREVIOUS_ITEM,"
b@1390 441 %
b@1390 442 % Punctuation (and spacing) between items is often determined by both of the
b@1390 443 % items rather than just the first one. The presence of quotation marks
b@1390 444 % further complicates the situation because, in standard English, trailing
b@1390 445 % punctuation marks are supposed to be contained within the quotes.
b@1390 446 %
b@1390 447 % IEEEtran.bst maintains two output state (aka "status") vectors which
b@1390 448 % correspond to the previous and current (aka "this") items. Each vector
b@1390 449 % consists of several independent attributes which track punctuation,
b@1390 450 % spacing, quotation, and newlines. Capitalization status is handled by a
b@1390 451 % separate scalar because the format routines, not the output routine,
b@1390 452 % handle capitalization and, therefore, there is no need to maintain the
b@1390 453 % capitalization attribute for both the "previous" and "this" items.
b@1390 454 %
b@1390 455 % When a format routine adds a new item, it copies the current output status
b@1390 456 % vector to the previous output status vector and (usually) resets the
b@1390 457 % current (this) output status vector to a "standard status" vector. Using a
b@1390 458 % "standard status" vector in this way allows us to redefine what we mean by
b@1390 459 % "standard status" at the start of each entry handler and reuse the same
b@1390 460 % format routines under the various inter-item separation schemes. For
b@1390 461 % example, the standard status vector for the @book entry type may use
b@1390 462 % commas for item separators, while the @electronic type may use periods,
b@1390 463 % yet both entry handlers exploit many of the exact same format routines.
b@1390 464 %
b@1390 465 % Because format routines have write access to the output status vector of
b@1390 466 % the previous item, they can override the punctuation choices of the
b@1390 467 % previous format routine! Therefore, it becomes trivial to implement rules
b@1390 468 % such as "Always use a period and a large space before the publisher." By
b@1390 469 % pushing the generation of the closing quote mark to the output routine, we
b@1390 470 % avoid all the problems caused by having to close a quote before having all
b@1390 471 % the information required to determine what the punctuation should be.
b@1390 472 %
b@1390 473 % The IEEEtran.bst output state system can easily be expanded if needed.
b@1390 474 % For instance, it is easy to add a "space.tie" attribute value if the
b@1390 475 % bibliography rules mandate that two items have to be joined with an
b@1390 476 % unbreakable space.
b@1390 477
b@1390 478 FUNCTION {initialize.status.constants}
b@1390 479 { #0 'punct.no :=
b@1390 480 #1 'punct.comma :=
b@1390 481 #2 'punct.period :=
b@1390 482 #0 'space.no :=
b@1390 483 #1 'space.normal :=
b@1390 484 #2 'space.large :=
b@1390 485 #0 'quote.no :=
b@1390 486 #1 'quote.close :=
b@1390 487 #0 'cap.no :=
b@1390 488 #1 'cap.yes :=
b@1390 489 #0 'nline.no :=
b@1390 490 #1 'nline.newblock :=
b@1390 491 }
b@1390 492
b@1390 493 FUNCTION {std.status.using.comma}
b@1390 494 { punct.comma 'punct.std :=
b@1390 495 space.normal 'space.std :=
b@1390 496 quote.no 'quote.std :=
b@1390 497 nline.no 'nline.std :=
b@1390 498 cap.no 'cap.std :=
b@1390 499 }
b@1390 500
b@1390 501 FUNCTION {std.status.using.period}
b@1390 502 { punct.period 'punct.std :=
b@1390 503 space.normal 'space.std :=
b@1390 504 quote.no 'quote.std :=
b@1390 505 nline.no 'nline.std :=
b@1390 506 cap.yes 'cap.std :=
b@1390 507 }
b@1390 508
b@1390 509 FUNCTION {initialize.prev.this.status}
b@1390 510 { punct.no 'prev.status.punct :=
b@1390 511 space.no 'prev.status.space :=
b@1390 512 quote.no 'prev.status.quote :=
b@1390 513 nline.no 'prev.status.nline :=
b@1390 514 punct.no 'this.status.punct :=
b@1390 515 space.no 'this.status.space :=
b@1390 516 quote.no 'this.status.quote :=
b@1390 517 nline.no 'this.status.nline :=
b@1390 518 cap.yes 'status.cap :=
b@1390 519 }
b@1390 520
b@1390 521 FUNCTION {this.status.std}
b@1390 522 { punct.std 'this.status.punct :=
b@1390 523 space.std 'this.status.space :=
b@1390 524 quote.std 'this.status.quote :=
b@1390 525 nline.std 'this.status.nline :=
b@1390 526 }
b@1390 527
b@1390 528 FUNCTION {cap.status.std}{ cap.std 'status.cap := }
b@1390 529
b@1390 530 FUNCTION {this.to.prev.status}
b@1390 531 { this.status.punct 'prev.status.punct :=
b@1390 532 this.status.space 'prev.status.space :=
b@1390 533 this.status.quote 'prev.status.quote :=
b@1390 534 this.status.nline 'prev.status.nline :=
b@1390 535 }
b@1390 536
b@1390 537
b@1390 538 FUNCTION {not}
b@1390 539 { { #0 }
b@1390 540 { #1 }
b@1390 541 if$
b@1390 542 }
b@1390 543
b@1390 544 FUNCTION {and}
b@1390 545 { { skip$ }
b@1390 546 { pop$ #0 }
b@1390 547 if$
b@1390 548 }
b@1390 549
b@1390 550 FUNCTION {or}
b@1390 551 { { pop$ #1 }
b@1390 552 { skip$ }
b@1390 553 if$
b@1390 554 }
b@1390 555
b@1390 556
b@1390 557 % convert the strings "yes" or "no" to #1 or #0 respectively
b@1390 558 FUNCTION {yes.no.to.int}
b@1390 559 { "l" change.case$ duplicate$
b@1390 560 "yes" =
b@1390 561 { pop$ #1 }
b@1390 562 { duplicate$ "no" =
b@1390 563 { pop$ #0 }
b@1390 564 { "unknown boolean " quote$ * swap$ * quote$ *
b@1390 565 " in " * cite$ * warning$
b@1390 566 #0
b@1390 567 }
b@1390 568 if$
b@1390 569 }
b@1390 570 if$
b@1390 571 }
b@1390 572
b@1390 573
b@1390 574 % pushes true if the single char string on the stack is in the
b@1390 575 % range of "0" to "9"
b@1390 576 FUNCTION {is.num}
b@1390 577 { chr.to.int$
b@1390 578 duplicate$ "0" chr.to.int$ < not
b@1390 579 swap$ "9" chr.to.int$ > not and
b@1390 580 }
b@1390 581
b@1390 582 % multiplies the integer on the stack by a factor of 10
b@1390 583 FUNCTION {bump.int.mag}
b@1390 584 { #0 'multiresult :=
b@1390 585 { duplicate$ #0 > }
b@1390 586 { #1 -
b@1390 587 multiresult #10 +
b@1390 588 'multiresult :=
b@1390 589 }
b@1390 590 while$
b@1390 591 pop$
b@1390 592 multiresult
b@1390 593 }
b@1390 594
b@1390 595 % converts a single character string on the stack to an integer
b@1390 596 FUNCTION {char.to.integer}
b@1390 597 { duplicate$
b@1390 598 is.num
b@1390 599 { chr.to.int$ "0" chr.to.int$ - }
b@1390 600 {"noninteger character " quote$ * swap$ * quote$ *
b@1390 601 " in integer field of " * cite$ * warning$
b@1390 602 #0
b@1390 603 }
b@1390 604 if$
b@1390 605 }
b@1390 606
b@1390 607 % converts a string on the stack to an integer
b@1390 608 FUNCTION {string.to.integer}
b@1390 609 { duplicate$ text.length$ 'namesleft :=
b@1390 610 #1 'nameptr :=
b@1390 611 #0 'numnames :=
b@1390 612 { nameptr namesleft > not }
b@1390 613 { duplicate$ nameptr #1 substring$
b@1390 614 char.to.integer numnames bump.int.mag +
b@1390 615 'numnames :=
b@1390 616 nameptr #1 +
b@1390 617 'nameptr :=
b@1390 618 }
b@1390 619 while$
b@1390 620 pop$
b@1390 621 numnames
b@1390 622 }
b@1390 623
b@1390 624
b@1390 625
b@1390 626
b@1390 627 % The output routines write out the *next* to the top (previous) item on the
b@1390 628 % stack, adding punctuation and such as needed. Since IEEEtran.bst maintains
b@1390 629 % the output status for the top two items on the stack, these output
b@1390 630 % routines have to consider the previous output status (which corresponds to
b@1390 631 % the item that is being output). Full independent control of punctuation,
b@1390 632 % closing quote marks, spacing, and newblock is provided.
b@1390 633 %
b@1390 634 % "output.nonnull" does not check for the presence of a previous empty
b@1390 635 % item.
b@1390 636 %
b@1390 637 % "output" does check for the presence of a previous empty item and will
b@1390 638 % remove an empty item rather than outputing it.
b@1390 639 %
b@1390 640 % "output.warn" is like "output", but will issue a warning if it detects
b@1390 641 % an empty item.
b@1390 642
b@1390 643 FUNCTION {output.nonnull}
b@1390 644 { swap$
b@1390 645 prev.status.punct punct.comma =
b@1390 646 { "," * }
b@1390 647 { skip$ }
b@1390 648 if$
b@1390 649 prev.status.punct punct.period =
b@1390 650 { add.period$ }
b@1390 651 { skip$ }
b@1390 652 if$
b@1390 653 prev.status.quote quote.close =
b@1390 654 { "''" * }
b@1390 655 { skip$ }
b@1390 656 if$
b@1390 657 prev.status.space space.normal =
b@1390 658 { " " * }
b@1390 659 { skip$ }
b@1390 660 if$
b@1390 661 prev.status.space space.large =
b@1390 662 { large.space * }
b@1390 663 { skip$ }
b@1390 664 if$
b@1390 665 write$
b@1390 666 prev.status.nline nline.newblock =
b@1390 667 { newline$ "\newblock " write$ }
b@1390 668 { skip$ }
b@1390 669 if$
b@1390 670 }
b@1390 671
b@1390 672 FUNCTION {output}
b@1390 673 { duplicate$ empty$
b@1390 674 'pop$
b@1390 675 'output.nonnull
b@1390 676 if$
b@1390 677 }
b@1390 678
b@1390 679 FUNCTION {output.warn}
b@1390 680 { 't :=
b@1390 681 duplicate$ empty$
b@1390 682 { pop$ "empty " t * " in " * cite$ * warning$ }
b@1390 683 'output.nonnull
b@1390 684 if$
b@1390 685 }
b@1390 686
b@1390 687 % "fin.entry" is the output routine that handles the last item of the entry
b@1390 688 % (which will be on the top of the stack when "fin.entry" is called).
b@1390 689
b@1390 690 FUNCTION {fin.entry}
b@1390 691 { this.status.punct punct.no =
b@1390 692 { skip$ }
b@1390 693 { add.period$ }
b@1390 694 if$
b@1390 695 this.status.quote quote.close =
b@1390 696 { "''" * }
b@1390 697 { skip$ }
b@1390 698 if$
b@1390 699 write$
b@1390 700 newline$
b@1390 701 }
b@1390 702
b@1390 703
b@1390 704 FUNCTION {is.last.char.not.punct}
b@1390 705 { duplicate$
b@1390 706 "}" * add.period$
b@1390 707 #-1 #1 substring$ "." =
b@1390 708 }
b@1390 709
b@1390 710 FUNCTION {is.multiple.pages}
b@1390 711 { 't :=
b@1390 712 #0 'multiresult :=
b@1390 713 { multiresult not
b@1390 714 t empty$ not
b@1390 715 and
b@1390 716 }
b@1390 717 { t #1 #1 substring$
b@1390 718 duplicate$ "-" =
b@1390 719 swap$ duplicate$ "," =
b@1390 720 swap$ "+" =
b@1390 721 or or
b@1390 722 { #1 'multiresult := }
b@1390 723 { t #2 global.max$ substring$ 't := }
b@1390 724 if$
b@1390 725 }
b@1390 726 while$
b@1390 727 multiresult
b@1390 728 }
b@1390 729
b@1390 730 FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ }
b@1390 731
b@1390 732 FUNCTION {emphasize}
b@1390 733 { duplicate$ empty$
b@1390 734 { pop$ "" }
b@1390 735 { "\emph{" swap$ * "}" * }
b@1390 736 if$
b@1390 737 }
b@1390 738
b@1390 739 FUNCTION {do.name.latex.cmd}
b@1390 740 { name.latex.cmd
b@1390 741 empty$
b@1390 742 { skip$ }
b@1390 743 { name.latex.cmd "{" * swap$ * "}" * }
b@1390 744 if$
b@1390 745 }
b@1390 746
b@1390 747 % IEEEtran.bst uses its own \BIBforeignlanguage command which directly
b@1390 748 % invokes the TeX hyphenation patterns without the need of the Babel
b@1390 749 % package. Babel does a lot more than switch hyphenation patterns and
b@1390 750 % its loading can cause unintended effects in many class files (such as
b@1390 751 % IEEEtran.cls).
b@1390 752 FUNCTION {select.language}
b@1390 753 { duplicate$ empty$ 'pop$
b@1390 754 { language empty$ 'skip$
b@1390 755 { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * }
b@1390 756 if$
b@1390 757 }
b@1390 758 if$
b@1390 759 }
b@1390 760
b@1390 761 FUNCTION {tie.or.space.prefix}
b@1390 762 { duplicate$ text.length$ #3 <
b@1390 763 { "~" }
b@1390 764 { " " }
b@1390 765 if$
b@1390 766 swap$
b@1390 767 }
b@1390 768
b@1390 769 FUNCTION {get.bbl.editor}
b@1390 770 { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
b@1390 771
b@1390 772 FUNCTION {space.word}{ " " swap$ * " " * }
b@1390 773
b@1390 774
b@1390 775 % Field Conditioners, Converters, Checkers and External Interfaces
b@1390 776
b@1390 777 FUNCTION {empty.field.to.null.string}
b@1390 778 { duplicate$ empty$
b@1390 779 { pop$ "" }
b@1390 780 { skip$ }
b@1390 781 if$
b@1390 782 }
b@1390 783
b@1390 784 FUNCTION {either.or.check}
b@1390 785 { empty$
b@1390 786 { pop$ }
b@1390 787 { "can't use both " swap$ * " fields in " * cite$ * warning$ }
b@1390 788 if$
b@1390 789 }
b@1390 790
b@1390 791 FUNCTION {empty.entry.warn}
b@1390 792 { author empty$ title empty$ howpublished empty$
b@1390 793 month empty$ year empty$ note empty$ url empty$
b@1390 794 and and and and and and
b@1390 795 { "all relevant fields are empty in " cite$ * warning$ }
b@1390 796 'skip$
b@1390 797 if$
b@1390 798 }
b@1390 799
b@1390 800
b@1390 801 % The bibinfo system provides a way for the electronic parsing/acquisition
b@1390 802 % of a bibliography's contents as is done by ReVTeX. For example, a field
b@1390 803 % could be entered into the bibliography as:
b@1390 804 % \bibinfo{volume}{2}
b@1390 805 % Only the "2" would show up in the document, but the LaTeX \bibinfo command
b@1390 806 % could do additional things with the information. IEEEtran.bst does provide
b@1390 807 % a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is
b@1390 808 % currently not used as the bogus bibinfo functions defined here output the
b@1390 809 % entry values directly without the \bibinfo wrapper. The bibinfo functions
b@1390 810 % themselves (and the calls to them) are retained for possible future use.
b@1390 811 %
b@1390 812 % bibinfo.check avoids acting on missing fields while bibinfo.warn will
b@1390 813 % issue a warning message if a missing field is detected. Prior to calling
b@1390 814 % the bibinfo functions, the user should push the field value and then its
b@1390 815 % name string, in that order.
b@1390 816
b@1390 817 FUNCTION {bibinfo.check}
b@1390 818 { swap$ duplicate$ missing$
b@1390 819 { pop$ pop$ "" }
b@1390 820 { duplicate$ empty$
b@1390 821 { swap$ pop$ }
b@1390 822 { swap$ pop$ }
b@1390 823 if$
b@1390 824 }
b@1390 825 if$
b@1390 826 }
b@1390 827
b@1390 828 FUNCTION {bibinfo.warn}
b@1390 829 { swap$ duplicate$ missing$
b@1390 830 { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" }
b@1390 831 { duplicate$ empty$
b@1390 832 { swap$ "empty " swap$ * " in " * cite$ * warning$ }
b@1390 833 { swap$ pop$ }
b@1390 834 if$
b@1390 835 }
b@1390 836 if$
b@1390 837 }
b@1390 838
b@1390 839
b@1390 840 % IEEE separates large numbers with more than 4 digits into groups of
b@1390 841 % three. IEEE uses a small space to separate these number groups.
b@1390 842 % Typical applications include patent and page numbers.
b@1390 843
b@1390 844 % number of consecutive digits required to trigger the group separation.
b@1390 845 FUNCTION {large.number.trigger}{ #5 }
b@1390 846
b@1390 847 % For numbers longer than the trigger, this is the blocksize of the groups.
b@1390 848 % The blocksize must be less than the trigger threshold, and 2 * blocksize
b@1390 849 % must be greater than the trigger threshold (can't do more than one
b@1390 850 % separation on the initial trigger).
b@1390 851 FUNCTION {large.number.blocksize}{ #3 }
b@1390 852
b@1390 853 % What is actually inserted between the number groups.
b@1390 854 FUNCTION {large.number.separator}{ "\," }
b@1390 855
b@1390 856 % So as to save on integer variables by reusing existing ones, numnames
b@1390 857 % holds the current number of consecutive digits read and nameptr holds
b@1390 858 % the number that will trigger an inserted space.
b@1390 859 FUNCTION {large.number.separate}
b@1390 860 { 't :=
b@1390 861 ""
b@1390 862 #0 'numnames :=
b@1390 863 large.number.trigger 'nameptr :=
b@1390 864 { t empty$ not }
b@1390 865 { t #-1 #1 substring$ is.num
b@1390 866 { numnames #1 + 'numnames := }
b@1390 867 { #0 'numnames :=
b@1390 868 large.number.trigger 'nameptr :=
b@1390 869 }
b@1390 870 if$
b@1390 871 t #-1 #1 substring$ swap$ *
b@1390 872 t #-2 global.max$ substring$ 't :=
b@1390 873 numnames nameptr =
b@1390 874 { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$
b@1390 875 nameptr large.number.blocksize - #1 + global.max$ substring$
b@1390 876 large.number.separator swap$ * *
b@1390 877 nameptr large.number.blocksize - 'numnames :=
b@1390 878 large.number.blocksize #1 + 'nameptr :=
b@1390 879 }
b@1390 880 { skip$ }
b@1390 881 if$
b@1390 882 }
b@1390 883 while$
b@1390 884 }
b@1390 885
b@1390 886 % Converts all single dashes "-" to double dashes "--".
b@1390 887 FUNCTION {n.dashify}
b@1390 888 { large.number.separate
b@1390 889 't :=
b@1390 890 ""
b@1390 891 { t empty$ not }
b@1390 892 { t #1 #1 substring$ "-" =
b@1390 893 { t #1 #2 substring$ "--" = not
b@1390 894 { "--" *
b@1390 895 t #2 global.max$ substring$ 't :=
b@1390 896 }
b@1390 897 { { t #1 #1 substring$ "-" = }
b@1390 898 { "-" *
b@1390 899 t #2 global.max$ substring$ 't :=
b@1390 900 }
b@1390 901 while$
b@1390 902 }
b@1390 903 if$
b@1390 904 }
b@1390 905 { t #1 #1 substring$ *
b@1390 906 t #2 global.max$ substring$ 't :=
b@1390 907 }
b@1390 908 if$
b@1390 909 }
b@1390 910 while$
b@1390 911 }
b@1390 912
b@1390 913
b@1390 914 % This function detects entries with names that are identical to that of
b@1390 915 % the previous entry and replaces the repeated names with dashes (if the
b@1390 916 % "is.dash.repeated.names" user control is nonzero).
b@1390 917 FUNCTION {name.or.dash}
b@1390 918 { 's :=
b@1390 919 oldname empty$
b@1390 920 { s 'oldname := s }
b@1390 921 { s oldname =
b@1390 922 { is.dash.repeated.names
b@1390 923 { repeated.name.dashes }
b@1390 924 { s 'oldname := s }
b@1390 925 if$
b@1390 926 }
b@1390 927 { s 'oldname := s }
b@1390 928 if$
b@1390 929 }
b@1390 930 if$
b@1390 931 }
b@1390 932
b@1390 933 % Converts the number string on the top of the stack to
b@1390 934 % "numerical ordinal form" (e.g., "7" to "7th"). There is
b@1390 935 % no artificial limit to the upper bound of the numbers as the
b@1390 936 % least significant digit always determines the ordinal form.
b@1390 937 FUNCTION {num.to.ordinal}
b@1390 938 { duplicate$ #-1 #1 substring$ "1" =
b@1390 939 { bbl.st * }
b@1390 940 { duplicate$ #-1 #1 substring$ "2" =
b@1390 941 { bbl.nd * }
b@1390 942 { duplicate$ #-1 #1 substring$ "3" =
b@1390 943 { bbl.rd * }
b@1390 944 { bbl.th * }
b@1390 945 if$
b@1390 946 }
b@1390 947 if$
b@1390 948 }
b@1390 949 if$
b@1390 950 }
b@1390 951
b@1390 952 % If the string on the top of the stack begins with a number,
b@1390 953 % (e.g., 11th) then replace the string with the leading number
b@1390 954 % it contains. Otherwise retain the string as-is. s holds the
b@1390 955 % extracted number, t holds the part of the string that remains
b@1390 956 % to be scanned.
b@1390 957 FUNCTION {extract.num}
b@1390 958 { duplicate$ 't :=
b@1390 959 "" 's :=
b@1390 960 { t empty$ not }
b@1390 961 { t #1 #1 substring$
b@1390 962 t #2 global.max$ substring$ 't :=
b@1390 963 duplicate$ is.num
b@1390 964 { s swap$ * 's := }
b@1390 965 { pop$ "" 't := }
b@1390 966 if$
b@1390 967 }
b@1390 968 while$
b@1390 969 s empty$
b@1390 970 'skip$
b@1390 971 { pop$ s }
b@1390 972 if$
b@1390 973 }
b@1390 974
b@1390 975 % Converts the word number string on the top of the stack to
b@1390 976 % Arabic string form. Will be successful up to "tenth".
b@1390 977 FUNCTION {word.to.num}
b@1390 978 { duplicate$ "l" change.case$ 's :=
b@1390 979 s "first" =
b@1390 980 { pop$ "1" }
b@1390 981 { skip$ }
b@1390 982 if$
b@1390 983 s "second" =
b@1390 984 { pop$ "2" }
b@1390 985 { skip$ }
b@1390 986 if$
b@1390 987 s "third" =
b@1390 988 { pop$ "3" }
b@1390 989 { skip$ }
b@1390 990 if$
b@1390 991 s "fourth" =
b@1390 992 { pop$ "4" }
b@1390 993 { skip$ }
b@1390 994 if$
b@1390 995 s "fifth" =
b@1390 996 { pop$ "5" }
b@1390 997 { skip$ }
b@1390 998 if$
b@1390 999 s "sixth" =
b@1390 1000 { pop$ "6" }
b@1390 1001 { skip$ }
b@1390 1002 if$
b@1390 1003 s "seventh" =
b@1390 1004 { pop$ "7" }
b@1390 1005 { skip$ }
b@1390 1006 if$
b@1390 1007 s "eighth" =
b@1390 1008 { pop$ "8" }
b@1390 1009 { skip$ }
b@1390 1010 if$
b@1390 1011 s "ninth" =
b@1390 1012 { pop$ "9" }
b@1390 1013 { skip$ }
b@1390 1014 if$
b@1390 1015 s "tenth" =
b@1390 1016 { pop$ "10" }
b@1390 1017 { skip$ }
b@1390 1018 if$
b@1390 1019 }
b@1390 1020
b@1390 1021
b@1390 1022 % Converts the string on the top of the stack to numerical
b@1390 1023 % ordinal (e.g., "11th") form.
b@1390 1024 FUNCTION {convert.edition}
b@1390 1025 { duplicate$ empty$ 'skip$
b@1390 1026 { duplicate$ #1 #1 substring$ is.num
b@1390 1027 { extract.num
b@1390 1028 num.to.ordinal
b@1390 1029 }
b@1390 1030 { word.to.num
b@1390 1031 duplicate$ #1 #1 substring$ is.num
b@1390 1032 { num.to.ordinal }
b@1390 1033 { "edition ordinal word " quote$ * edition * quote$ *
b@1390 1034 " may be too high (or improper) for conversion" * " in " * cite$ * warning$
b@1390 1035 }
b@1390 1036 if$
b@1390 1037 }
b@1390 1038 if$
b@1390 1039 }
b@1390 1040 if$
b@1390 1041 }
b@1390 1042
b@1390 1043
b@1390 1044
b@1390 1045
b@1390 1046 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 1047 %% LATEX BIBLIOGRAPHY CODE %%
b@1390 1048 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
b@1390 1049
b@1390 1050 FUNCTION {start.entry}
b@1390 1051 { newline$
b@1390 1052 "\bibitem{" write$
b@1390 1053 cite$ write$
b@1390 1054 "}" write$
b@1390 1055 newline$
b@1390 1056 ""
b@1390 1057 initialize.prev.this.status
b@1390 1058 }
b@1390 1059
b@1390 1060 % Here we write out all the LaTeX code that we will need. The most involved
b@1390 1061 % code sequences are those that control the alternate interword spacing and
b@1390 1062 % foreign language hyphenation patterns. The heavy use of \providecommand
b@1390 1063 % gives users a way to override the defaults. Special thanks to Javier Bezos,
b@1390 1064 % Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all
b@1390 1065 % the other gurus on comp.text.tex for their help and advice on the topic of
b@1390 1066 % \selectlanguage, Babel and BibTeX.
b@1390 1067 FUNCTION {begin.bib}
b@1390 1068 { "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
b@1390 1069 write$ newline$
b@1390 1070 preamble$ empty$ 'skip$
b@1390 1071 { preamble$ write$ newline$ }
b@1390 1072 if$
b@1390 1073 "\begin{thebibliography}{" longest.label * "}" *
b@1390 1074 write$ newline$
b@1390 1075 "\providecommand{\url}[1]{#1}"
b@1390 1076 write$ newline$
b@1390 1077 "\csname url@samestyle\endcsname"
b@1390 1078 write$ newline$
b@1390 1079 "\providecommand{\newblock}{\relax}"
b@1390 1080 write$ newline$
b@1390 1081 "\providecommand{\bibinfo}[2]{#2}"
b@1390 1082 write$ newline$
b@1390 1083 "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}"
b@1390 1084 write$ newline$
b@1390 1085 "\providecommand{\BIBentryALTinterwordstretchfactor}{"
b@1390 1086 ALTinterwordstretchfactor * "}" *
b@1390 1087 write$ newline$
b@1390 1088 "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus "
b@1390 1089 write$ newline$
b@1390 1090 "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}"
b@1390 1091 write$ newline$
b@1390 1092 "\providecommand{\BIBforeignlanguage}[2]{{%"
b@1390 1093 write$ newline$
b@1390 1094 "\expandafter\ifx\csname l@#1\endcsname\relax"
b@1390 1095 write$ newline$
b@1390 1096 "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%"
b@1390 1097 write$ newline$
b@1390 1098 "\typeout{** loaded for the language `#1'. Using the pattern for}%"
b@1390 1099 write$ newline$
b@1390 1100 "\typeout{** the default language instead.}%"
b@1390 1101 write$ newline$
b@1390 1102 "\else"
b@1390 1103 write$ newline$
b@1390 1104 "\language=\csname l@#1\endcsname"
b@1390 1105 write$ newline$
b@1390 1106 "\fi"
b@1390 1107 write$ newline$
b@1390 1108 "#2}}"
b@1390 1109 write$ newline$
b@1390 1110 "\providecommand{\BIBdecl}{\relax}"
b@1390 1111 write$ newline$
b@1390 1112 "\BIBdecl"
b@1390 1113 write$ newline$
b@1390 1114 }
b@1390 1115
b@1390 1116 FUNCTION {end.bib}
b@1390 1117 { newline$ "\end{thebibliography}" write$ newline$ }
b@1390 1118
b@1390 1119 FUNCTION {if.url.alt.interword.spacing}
b@1390 1120 { is.use.alt.interword.spacing
b@1390 1121 {url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$}
b@1390 1122 { skip$ }
b@1390 1123 if$
b@1390 1124 }
b@1390 1125
b@1390 1126 FUNCTION {if.url.std.interword.spacing}
b@1390 1127 { is.use.alt.interword.spacing
b@1390 1128 {url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$}
b@1390 1129 { skip$ }
b@1390 1130 if$
b@1390 1131 }
b@1390 1132
b@1390 1133
b@1390 1134
b@1390 1135
b@1390 1136 %%%%%%%%%%%%%%%%%%%%%%%%
b@1390 1137 %% LONGEST LABEL PASS %%
b@1390 1138 %%%%%%%%%%%%%%%%%%%%%%%%
b@1390 1139
b@1390 1140 FUNCTION {initialize.longest.label}
b@1390 1141 { "" 'longest.label :=
b@1390 1142 #1 'number.label :=
b@1390 1143 #0 'longest.label.width :=
b@1390 1144 }
b@1390 1145
b@1390 1146 FUNCTION {longest.label.pass}
b@1390 1147 { type$ "ieeetranbstctl" =
b@1390 1148 { skip$ }
b@1390 1149 { number.label int.to.str$ 'label :=
b@1390 1150 number.label #1 + 'number.label :=
b@1390 1151 label width$ longest.label.width >
b@1390 1152 { label 'longest.label :=
b@1390 1153 label width$ 'longest.label.width :=
b@1390 1154 }
b@1390 1155 { skip$ }
b@1390 1156 if$
b@1390 1157 }
b@1390 1158 if$
b@1390 1159 }
b@1390 1160
b@1390 1161
b@1390 1162
b@1390 1163
b@1390 1164 %%%%%%%%%%%%%%%%%%%%%
b@1390 1165 %% FORMAT HANDLERS %%
b@1390 1166 %%%%%%%%%%%%%%%%%%%%%
b@1390 1167
b@1390 1168 %% Lower Level Formats (used by higher level formats)
b@1390 1169
b@1390 1170 FUNCTION {format.address.org.or.pub.date}
b@1390 1171 { 't :=
b@1390 1172 ""
b@1390 1173 year empty$
b@1390 1174 { "empty year in " cite$ * warning$ }
b@1390 1175 { skip$ }
b@1390 1176 if$
b@1390 1177 address empty$ t empty$ and
b@1390 1178 year empty$ and month empty$ and
b@1390 1179 { skip$ }
b@1390 1180 { this.to.prev.status
b@1390 1181 this.status.std
b@1390 1182 cap.status.std
b@1390 1183 address "address" bibinfo.check *
b@1390 1184 t empty$
b@1390 1185 { skip$ }
b@1390 1186 { punct.period 'prev.status.punct :=
b@1390 1187 space.large 'prev.status.space :=
b@1390 1188 address empty$
b@1390 1189 { skip$ }
b@1390 1190 { ": " * }
b@1390 1191 if$
b@1390 1192 t *
b@1390 1193 }
b@1390 1194 if$
b@1390 1195 year empty$ month empty$ and
b@1390 1196 { skip$ }
b@1390 1197 { t empty$ address empty$ and
b@1390 1198 { skip$ }
b@1390 1199 { ", " * }
b@1390 1200 if$
b@1390 1201 month empty$
b@1390 1202 { year empty$
b@1390 1203 { skip$ }
b@1390 1204 { year "year" bibinfo.check * }
b@1390 1205 if$
b@1390 1206 }
b@1390 1207 { month "month" bibinfo.check *
b@1390 1208 year empty$
b@1390 1209 { skip$ }
b@1390 1210 { " " * year "year" bibinfo.check * }
b@1390 1211 if$
b@1390 1212 }
b@1390 1213 if$
b@1390 1214 }
b@1390 1215 if$
b@1390 1216 }
b@1390 1217 if$
b@1390 1218 }
b@1390 1219
b@1390 1220
b@1390 1221 FUNCTION {format.names}
b@1390 1222 { 'bibinfo :=
b@1390 1223 duplicate$ empty$ 'skip$ {
b@1390 1224 this.to.prev.status
b@1390 1225 this.status.std
b@1390 1226 's :=
b@1390 1227 "" 't :=
b@1390 1228 #1 'nameptr :=
b@1390 1229 s num.names$ 'numnames :=
b@1390 1230 numnames 'namesleft :=
b@1390 1231 { namesleft #0 > }
b@1390 1232 { s nameptr
b@1390 1233 name.format.string
b@1390 1234 format.name$
b@1390 1235 bibinfo bibinfo.check
b@1390 1236 't :=
b@1390 1237 nameptr #1 >
b@1390 1238 { nameptr num.names.shown.with.forced.et.al #1 + =
b@1390 1239 numnames max.num.names.before.forced.et.al >
b@1390 1240 is.forced.et.al and and
b@1390 1241 { "others" 't :=
b@1390 1242 #1 'namesleft :=
b@1390 1243 }
b@1390 1244 { skip$ }
b@1390 1245 if$
b@1390 1246 namesleft #1 >
b@1390 1247 { ", " * t do.name.latex.cmd * }
b@1390 1248 { s nameptr "{ll}" format.name$ duplicate$ "others" =
b@1390 1249 { 't := }
b@1390 1250 { pop$ }
b@1390 1251 if$
b@1390 1252 t "others" =
b@1390 1253 { " " * bbl.etal emphasize * }
b@1390 1254 { numnames #2 >
b@1390 1255 { "," * }
b@1390 1256 { skip$ }
b@1390 1257 if$
b@1390 1258 bbl.and
b@1390 1259 space.word * t do.name.latex.cmd *
b@1390 1260 }
b@1390 1261 if$
b@1390 1262 }
b@1390 1263 if$
b@1390 1264 }
b@1390 1265 { t do.name.latex.cmd }
b@1390 1266 if$
b@1390 1267 nameptr #1 + 'nameptr :=
b@1390 1268 namesleft #1 - 'namesleft :=
b@1390 1269 }
b@1390 1270 while$
b@1390 1271 cap.status.std
b@1390 1272 } if$
b@1390 1273 }
b@1390 1274
b@1390 1275
b@1390 1276
b@1390 1277
b@1390 1278 %% Higher Level Formats
b@1390 1279
b@1390 1280 %% addresses/locations
b@1390 1281
b@1390 1282 FUNCTION {format.address}
b@1390 1283 { address duplicate$ empty$ 'skip$
b@1390 1284 { this.to.prev.status
b@1390 1285 this.status.std
b@1390 1286 cap.status.std
b@1390 1287 }
b@1390 1288 if$
b@1390 1289 }
b@1390 1290
b@1390 1291
b@1390 1292
b@1390 1293 %% author/editor names
b@1390 1294
b@1390 1295 FUNCTION {format.authors}{ author "author" format.names }
b@1390 1296
b@1390 1297 FUNCTION {format.editors}
b@1390 1298 { editor "editor" format.names duplicate$ empty$ 'skip$
b@1390 1299 { ", " *
b@1390 1300 get.bbl.editor
b@1390 1301 capitalize
b@1390 1302 *
b@1390 1303 }
b@1390 1304 if$
b@1390 1305 }
b@1390 1306
b@1390 1307
b@1390 1308
b@1390 1309 %% date
b@1390 1310
b@1390 1311 FUNCTION {format.date}
b@1390 1312 {
b@1390 1313 month "month" bibinfo.check duplicate$ empty$
b@1390 1314 year "year" bibinfo.check duplicate$ empty$
b@1390 1315 { swap$ 'skip$
b@1390 1316 { this.to.prev.status
b@1390 1317 this.status.std
b@1390 1318 cap.status.std
b@1390 1319 "there's a month but no year in " cite$ * warning$ }
b@1390 1320 if$
b@1390 1321 *
b@1390 1322 }
b@1390 1323 { this.to.prev.status
b@1390 1324 this.status.std
b@1390 1325 cap.status.std
b@1390 1326 swap$ 'skip$
b@1390 1327 {
b@1390 1328 swap$
b@1390 1329 " " * swap$
b@1390 1330 }
b@1390 1331 if$
b@1390 1332 *
b@1390 1333 }
b@1390 1334 if$
b@1390 1335 }
b@1390 1336
b@1390 1337 FUNCTION {format.date.electronic}
b@1390 1338 { month "month" bibinfo.check duplicate$ empty$
b@1390 1339 year "year" bibinfo.check duplicate$ empty$
b@1390 1340 { swap$
b@1390 1341 { pop$ }
b@1390 1342 { "there's a month but no year in " cite$ * warning$
b@1390 1343 pop$ ")" * "(" swap$ *
b@1390 1344 this.to.prev.status
b@1390 1345 punct.no 'this.status.punct :=
b@1390 1346 space.normal 'this.status.space :=
b@1390 1347 quote.no 'this.status.quote :=
b@1390 1348 cap.yes 'status.cap :=
b@1390 1349 }
b@1390 1350 if$
b@1390 1351 }
b@1390 1352 { swap$
b@1390 1353 { swap$ pop$ ")" * "(" swap$ * }
b@1390 1354 { "(" swap$ * ", " * swap$ * ")" * }
b@1390 1355 if$
b@1390 1356 this.to.prev.status
b@1390 1357 punct.no 'this.status.punct :=
b@1390 1358 space.normal 'this.status.space :=
b@1390 1359 quote.no 'this.status.quote :=
b@1390 1360 cap.yes 'status.cap :=
b@1390 1361 }
b@1390 1362 if$
b@1390 1363 }
b@1390 1364
b@1390 1365
b@1390 1366
b@1390 1367 %% edition/title
b@1390 1368
b@1390 1369 % Note: IEEE considers the edition to be closely associated with
b@1390 1370 % the title of a book. So, in IEEEtran.bst the edition is normally handled
b@1390 1371 % within the formatting of the title. The format.edition function is
b@1390 1372 % retained here for possible future use.
b@1390 1373 FUNCTION {format.edition}
b@1390 1374 { edition duplicate$ empty$ 'skip$
b@1390 1375 { this.to.prev.status
b@1390 1376 this.status.std
b@1390 1377 convert.edition
b@1390 1378 status.cap
b@1390 1379 { "t" }
b@1390 1380 { "l" }
b@1390 1381 if$ change.case$
b@1390 1382 "edition" bibinfo.check
b@1390 1383 "~" * bbl.edition *
b@1390 1384 cap.status.std
b@1390 1385 }
b@1390 1386 if$
b@1390 1387 }
b@1390 1388
b@1390 1389 % This is used to format the booktitle of a conference proceedings.
b@1390 1390 % Here we use the "intype" field to provide the user a way to
b@1390 1391 % override the word "in" (e.g., with things like "presented at")
b@1390 1392 % Use of intype stops the emphasis of the booktitle to indicate that
b@1390 1393 % we no longer mean the written conference proceedings, but the
b@1390 1394 % conference itself.
b@1390 1395 FUNCTION {format.in.booktitle}
b@1390 1396 { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
b@1390 1397 { this.to.prev.status
b@1390 1398 this.status.std
b@1390 1399 select.language
b@1390 1400 intype missing$
b@1390 1401 { emphasize
b@1390 1402 bbl.in " " *
b@1390 1403 }
b@1390 1404 { intype " " * }
b@1390 1405 if$
b@1390 1406 swap$ *
b@1390 1407 cap.status.std
b@1390 1408 }
b@1390 1409 if$
b@1390 1410 }
b@1390 1411
b@1390 1412 % This is used to format the booktitle of collection.
b@1390 1413 % Here the "intype" field is not supported, but "edition" is.
b@1390 1414 FUNCTION {format.in.booktitle.edition}
b@1390 1415 { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
b@1390 1416 { this.to.prev.status
b@1390 1417 this.status.std
b@1390 1418 select.language
b@1390 1419 emphasize
b@1390 1420 edition empty$ 'skip$
b@1390 1421 { ", " *
b@1390 1422 edition
b@1390 1423 convert.edition
b@1390 1424 "l" change.case$
b@1390 1425 * "~" * bbl.edition *
b@1390 1426 }
b@1390 1427 if$
b@1390 1428 bbl.in " " * swap$ *
b@1390 1429 cap.status.std
b@1390 1430 }
b@1390 1431 if$
b@1390 1432 }
b@1390 1433
b@1390 1434 FUNCTION {format.article.title}
b@1390 1435 { title duplicate$ empty$ 'skip$
b@1390 1436 { this.to.prev.status
b@1390 1437 this.status.std
b@1390 1438 "t" change.case$
b@1390 1439 }
b@1390 1440 if$
b@1390 1441 "title" bibinfo.check
b@1390 1442 duplicate$ empty$ 'skip$
b@1390 1443 { quote.close 'this.status.quote :=
b@1390 1444 is.last.char.not.punct
b@1390 1445 { punct.std 'this.status.punct := }
b@1390 1446 { punct.no 'this.status.punct := }
b@1390 1447 if$
b@1390 1448 select.language
b@1390 1449 "``" swap$ *
b@1390 1450 cap.status.std
b@1390 1451 }
b@1390 1452 if$
b@1390 1453 }
b@1390 1454
b@1390 1455 FUNCTION {format.article.title.electronic}
b@1390 1456 { title duplicate$ empty$ 'skip$
b@1390 1457 { this.to.prev.status
b@1390 1458 this.status.std
b@1390 1459 cap.status.std
b@1390 1460 "t" change.case$
b@1390 1461 }
b@1390 1462 if$
b@1390 1463 "title" bibinfo.check
b@1390 1464 duplicate$ empty$
b@1390 1465 { skip$ }
b@1390 1466 { select.language }
b@1390 1467 if$
b@1390 1468 }
b@1390 1469
b@1390 1470 FUNCTION {format.book.title.edition}
b@1390 1471 { title "title" bibinfo.check
b@1390 1472 duplicate$ empty$
b@1390 1473 { "empty title in " cite$ * warning$ }
b@1390 1474 { this.to.prev.status
b@1390 1475 this.status.std
b@1390 1476 select.language
b@1390 1477 emphasize
b@1390 1478 edition empty$ 'skip$
b@1390 1479 { ", " *
b@1390 1480 edition
b@1390 1481 convert.edition
b@1390 1482 status.cap
b@1390 1483 { "t" }
b@1390 1484 { "l" }
b@1390 1485 if$
b@1390 1486 change.case$
b@1390 1487 * "~" * bbl.edition *
b@1390 1488 }
b@1390 1489 if$
b@1390 1490 cap.status.std
b@1390 1491 }
b@1390 1492 if$
b@1390 1493 }
b@1390 1494
b@1390 1495 FUNCTION {format.book.title}
b@1390 1496 { title "title" bibinfo.check
b@1390 1497 duplicate$ empty$ 'skip$
b@1390 1498 { this.to.prev.status
b@1390 1499 this.status.std
b@1390 1500 cap.status.std
b@1390 1501 select.language
b@1390 1502 emphasize
b@1390 1503 }
b@1390 1504 if$
b@1390 1505 }
b@1390 1506
b@1390 1507
b@1390 1508
b@1390 1509 %% journal
b@1390 1510
b@1390 1511 FUNCTION {format.journal}
b@1390 1512 { journal duplicate$ empty$ 'skip$
b@1390 1513 { this.to.prev.status
b@1390 1514 this.status.std
b@1390 1515 cap.status.std
b@1390 1516 select.language
b@1390 1517 emphasize
b@1390 1518 }
b@1390 1519 if$
b@1390 1520 }
b@1390 1521
b@1390 1522
b@1390 1523
b@1390 1524 %% how published
b@1390 1525
b@1390 1526 FUNCTION {format.howpublished}
b@1390 1527 { howpublished duplicate$ empty$ 'skip$
b@1390 1528 { this.to.prev.status
b@1390 1529 this.status.std
b@1390 1530 cap.status.std
b@1390 1531 }
b@1390 1532 if$
b@1390 1533 }
b@1390 1534
b@1390 1535
b@1390 1536
b@1390 1537 %% institutions/organization/publishers/school
b@1390 1538
b@1390 1539 FUNCTION {format.institution}
b@1390 1540 { institution duplicate$ empty$ 'skip$
b@1390 1541 { this.to.prev.status
b@1390 1542 this.status.std
b@1390 1543 cap.status.std
b@1390 1544 }
b@1390 1545 if$
b@1390 1546 }
b@1390 1547
b@1390 1548 FUNCTION {format.organization}
b@1390 1549 { organization duplicate$ empty$ 'skip$
b@1390 1550 { this.to.prev.status
b@1390 1551 this.status.std
b@1390 1552 cap.status.std
b@1390 1553 }
b@1390 1554 if$
b@1390 1555 }
b@1390 1556
b@1390 1557 FUNCTION {format.address.publisher.date}
b@1390 1558 { publisher "publisher" bibinfo.warn format.address.org.or.pub.date }
b@1390 1559
b@1390 1560 FUNCTION {format.address.publisher.date.nowarn}
b@1390 1561 { publisher "publisher" bibinfo.check format.address.org.or.pub.date }
b@1390 1562
b@1390 1563 FUNCTION {format.address.organization.date}
b@1390 1564 { organization "organization" bibinfo.check format.address.org.or.pub.date }
b@1390 1565
b@1390 1566 FUNCTION {format.school}
b@1390 1567 { school duplicate$ empty$ 'skip$
b@1390 1568 { this.to.prev.status
b@1390 1569 this.status.std
b@1390 1570 cap.status.std
b@1390 1571 }
b@1390 1572 if$
b@1390 1573 }
b@1390 1574
b@1390 1575
b@1390 1576
b@1390 1577 %% volume/number/series/chapter/pages
b@1390 1578
b@1390 1579 FUNCTION {format.volume}
b@1390 1580 { volume empty.field.to.null.string
b@1390 1581 duplicate$ empty$ 'skip$
b@1390 1582 { this.to.prev.status
b@1390 1583 this.status.std
b@1390 1584 bbl.volume
b@1390 1585 status.cap
b@1390 1586 { capitalize }
b@1390 1587 { skip$ }
b@1390 1588 if$
b@1390 1589 swap$ tie.or.space.prefix
b@1390 1590 "volume" bibinfo.check
b@1390 1591 * *
b@1390 1592 cap.status.std
b@1390 1593 }
b@1390 1594 if$
b@1390 1595 }
b@1390 1596
b@1390 1597 FUNCTION {format.number}
b@1390 1598 { number empty.field.to.null.string
b@1390 1599 duplicate$ empty$ 'skip$
b@1390 1600 { this.to.prev.status
b@1390 1601 this.status.std
b@1390 1602 status.cap
b@1390 1603 { bbl.number capitalize }
b@1390 1604 { bbl.number }
b@1390 1605 if$
b@1390 1606 swap$ tie.or.space.prefix
b@1390 1607 "number" bibinfo.check
b@1390 1608 * *
b@1390 1609 cap.status.std
b@1390 1610 }
b@1390 1611 if$
b@1390 1612 }
b@1390 1613
b@1390 1614 FUNCTION {format.number.if.use.for.article}
b@1390 1615 { is.use.number.for.article
b@1390 1616 { format.number }
b@1390 1617 { "" }
b@1390 1618 if$
b@1390 1619 }
b@1390 1620
b@1390 1621 % IEEE does not seem to tie the series so closely with the volume
b@1390 1622 % and number as is done in other bibliography styles. Instead the
b@1390 1623 % series is treated somewhat like an extension of the title.
b@1390 1624 FUNCTION {format.series}
b@1390 1625 { series empty$
b@1390 1626 { "" }
b@1390 1627 { this.to.prev.status
b@1390 1628 this.status.std
b@1390 1629 bbl.series " " *
b@1390 1630 series "series" bibinfo.check *
b@1390 1631 cap.status.std
b@1390 1632 }
b@1390 1633 if$
b@1390 1634 }
b@1390 1635
b@1390 1636
b@1390 1637 FUNCTION {format.chapter}
b@1390 1638 { chapter empty$
b@1390 1639 { "" }
b@1390 1640 { this.to.prev.status
b@1390 1641 this.status.std
b@1390 1642 type empty$
b@1390 1643 { bbl.chapter }
b@1390 1644 { type "l" change.case$
b@1390 1645 "type" bibinfo.check
b@1390 1646 }
b@1390 1647 if$
b@1390 1648 chapter tie.or.space.prefix
b@1390 1649 "chapter" bibinfo.check
b@1390 1650 * *
b@1390 1651 cap.status.std
b@1390 1652 }
b@1390 1653 if$
b@1390 1654 }
b@1390 1655
b@1390 1656
b@1390 1657 % The intended use of format.paper is for paper numbers of inproceedings.
b@1390 1658 % The paper type can be overridden via the type field.
b@1390 1659 % We allow the type to be displayed even if the paper number is absent
b@1390 1660 % for things like "postdeadline paper"
b@1390 1661 FUNCTION {format.paper}
b@1390 1662 { is.use.paper
b@1390 1663 { paper empty$
b@1390 1664 { type empty$
b@1390 1665 { "" }
b@1390 1666 { this.to.prev.status
b@1390 1667 this.status.std
b@1390 1668 type "type" bibinfo.check
b@1390 1669 cap.status.std
b@1390 1670 }
b@1390 1671 if$
b@1390 1672 }
b@1390 1673 { this.to.prev.status
b@1390 1674 this.status.std
b@1390 1675 type empty$
b@1390 1676 { bbl.paper }
b@1390 1677 { type "type" bibinfo.check }
b@1390 1678 if$
b@1390 1679 " " * paper
b@1390 1680 "paper" bibinfo.check
b@1390 1681 *
b@1390 1682 cap.status.std
b@1390 1683 }
b@1390 1684 if$
b@1390 1685 }
b@1390 1686 { "" }
b@1390 1687 if$
b@1390 1688 }
b@1390 1689
b@1390 1690
b@1390 1691 FUNCTION {format.pages}
b@1390 1692 { pages duplicate$ empty$ 'skip$
b@1390 1693 { this.to.prev.status
b@1390 1694 this.status.std
b@1390 1695 duplicate$ is.multiple.pages
b@1390 1696 {
b@1390 1697 bbl.pages swap$
b@1390 1698 n.dashify
b@1390 1699 }
b@1390 1700 {
b@1390 1701 bbl.page swap$
b@1390 1702 }
b@1390 1703 if$
b@1390 1704 tie.or.space.prefix
b@1390 1705 "pages" bibinfo.check
b@1390 1706 * *
b@1390 1707 cap.status.std
b@1390 1708 }
b@1390 1709 if$
b@1390 1710 }
b@1390 1711
b@1390 1712
b@1390 1713
b@1390 1714 %% technical report number
b@1390 1715
b@1390 1716 FUNCTION {format.tech.report.number}
b@1390 1717 { number "number" bibinfo.check
b@1390 1718 this.to.prev.status
b@1390 1719 this.status.std
b@1390 1720 cap.status.std
b@1390 1721 type duplicate$ empty$
b@1390 1722 { pop$
b@1390 1723 bbl.techrep
b@1390 1724 }
b@1390 1725 { skip$ }
b@1390 1726 if$
b@1390 1727 "type" bibinfo.check
b@1390 1728 swap$ duplicate$ empty$
b@1390 1729 { pop$ }
b@1390 1730 { tie.or.space.prefix * * }
b@1390 1731 if$
b@1390 1732 }
b@1390 1733
b@1390 1734
b@1390 1735
b@1390 1736 %% note
b@1390 1737
b@1390 1738 FUNCTION {format.note}
b@1390 1739 { note empty$
b@1390 1740 { "" }
b@1390 1741 { this.to.prev.status
b@1390 1742 this.status.std
b@1390 1743 punct.period 'this.status.punct :=
b@1390 1744 note #1 #1 substring$
b@1390 1745 duplicate$ "{" =
b@1390 1746 { skip$ }
b@1390 1747 { status.cap
b@1390 1748 { "u" }
b@1390 1749 { "l" }
b@1390 1750 if$
b@1390 1751 change.case$
b@1390 1752 }
b@1390 1753 if$
b@1390 1754 note #2 global.max$ substring$ * "note" bibinfo.check
b@1390 1755 cap.yes 'status.cap :=
b@1390 1756 }
b@1390 1757 if$
b@1390 1758 }
b@1390 1759
b@1390 1760
b@1390 1761
b@1390 1762 %% patent
b@1390 1763
b@1390 1764 FUNCTION {format.patent.date}
b@1390 1765 { this.to.prev.status
b@1390 1766 this.status.std
b@1390 1767 year empty$
b@1390 1768 { monthfiled duplicate$ empty$
b@1390 1769 { "monthfiled" bibinfo.check pop$ "" }
b@1390 1770 { "monthfiled" bibinfo.check }
b@1390 1771 if$
b@1390 1772 dayfiled duplicate$ empty$
b@1390 1773 { "dayfiled" bibinfo.check pop$ "" * }
b@1390 1774 { "dayfiled" bibinfo.check
b@1390 1775 monthfiled empty$
b@1390 1776 { "dayfiled without a monthfiled in " cite$ * warning$
b@1390 1777 *
b@1390 1778 }
b@1390 1779 { " " swap$ * * }
b@1390 1780 if$
b@1390 1781 }
b@1390 1782 if$
b@1390 1783 yearfiled empty$
b@1390 1784 { "no year or yearfiled in " cite$ * warning$ }
b@1390 1785 { yearfiled "yearfiled" bibinfo.check
b@1390 1786 swap$
b@1390 1787 duplicate$ empty$
b@1390 1788 { pop$ }
b@1390 1789 { ", " * swap$ * }
b@1390 1790 if$
b@1390 1791 }
b@1390 1792 if$
b@1390 1793 }
b@1390 1794 { month duplicate$ empty$
b@1390 1795 { "month" bibinfo.check pop$ "" }
b@1390 1796 { "month" bibinfo.check }
b@1390 1797 if$
b@1390 1798 day duplicate$ empty$
b@1390 1799 { "day" bibinfo.check pop$ "" * }
b@1390 1800 { "day" bibinfo.check
b@1390 1801 month empty$
b@1390 1802 { "day without a month in " cite$ * warning$
b@1390 1803 *
b@1390 1804 }
b@1390 1805 { " " swap$ * * }
b@1390 1806 if$
b@1390 1807 }
b@1390 1808 if$
b@1390 1809 year "year" bibinfo.check
b@1390 1810 swap$
b@1390 1811 duplicate$ empty$
b@1390 1812 { pop$ }
b@1390 1813 { ", " * swap$ * }
b@1390 1814 if$
b@1390 1815 }
b@1390 1816 if$
b@1390 1817 cap.status.std
b@1390 1818 }
b@1390 1819
b@1390 1820 FUNCTION {format.patent.nationality.type.number}
b@1390 1821 { this.to.prev.status
b@1390 1822 this.status.std
b@1390 1823 nationality duplicate$ empty$
b@1390 1824 { "nationality" bibinfo.warn pop$ "" }
b@1390 1825 { "nationality" bibinfo.check
b@1390 1826 duplicate$ "l" change.case$ "united states" =
b@1390 1827 { pop$ bbl.patentUS }
b@1390 1828 { skip$ }
b@1390 1829 if$
b@1390 1830 " " *
b@1390 1831 }
b@1390 1832 if$
b@1390 1833 type empty$
b@1390 1834 { bbl.patent "type" bibinfo.check }
b@1390 1835 { type "type" bibinfo.check }
b@1390 1836 if$
b@1390 1837 *
b@1390 1838 number duplicate$ empty$
b@1390 1839 { "number" bibinfo.warn pop$ }
b@1390 1840 { "number" bibinfo.check
b@1390 1841 large.number.separate
b@1390 1842 swap$ " " * swap$ *
b@1390 1843 }
b@1390 1844 if$
b@1390 1845 cap.status.std
b@1390 1846 }
b@1390 1847
b@1390 1848
b@1390 1849
b@1390 1850 %% standard
b@1390 1851
b@1390 1852 FUNCTION {format.organization.institution.standard.type.number}
b@1390 1853 { this.to.prev.status
b@1390 1854 this.status.std
b@1390 1855 organization duplicate$ empty$
b@1390 1856 { pop$
b@1390 1857 institution duplicate$ empty$
b@1390 1858 { "institution" bibinfo.warn }
b@1390 1859 { "institution" bibinfo.warn " " * }
b@1390 1860 if$
b@1390 1861 }
b@1390 1862 { "organization" bibinfo.warn " " * }
b@1390 1863 if$
b@1390 1864 type empty$
b@1390 1865 { bbl.standard "type" bibinfo.check }
b@1390 1866 { type "type" bibinfo.check }
b@1390 1867 if$
b@1390 1868 *
b@1390 1869 number duplicate$ empty$
b@1390 1870 { "number" bibinfo.check pop$ }
b@1390 1871 { "number" bibinfo.check
b@1390 1872 large.number.separate
b@1390 1873 swap$ " " * swap$ *
b@1390 1874 }
b@1390 1875 if$
b@1390 1876 cap.status.std
b@1390 1877 }
b@1390 1878
b@1390 1879 FUNCTION {format.revision}
b@1390 1880 { revision empty$
b@1390 1881 { "" }
b@1390 1882 { this.to.prev.status
b@1390 1883 this.status.std
b@1390 1884 bbl.revision
b@1390 1885 revision tie.or.space.prefix
b@1390 1886 "revision" bibinfo.check
b@1390 1887 * *
b@1390 1888 cap.status.std
b@1390 1889 }
b@1390 1890 if$
b@1390 1891 }
b@1390 1892
b@1390 1893
b@1390 1894 %% thesis
b@1390 1895
b@1390 1896 FUNCTION {format.master.thesis.type}
b@1390 1897 { this.to.prev.status
b@1390 1898 this.status.std
b@1390 1899 type empty$
b@1390 1900 {
b@1390 1901 bbl.mthesis
b@1390 1902 }
b@1390 1903 {
b@1390 1904 type "type" bibinfo.check
b@1390 1905 }
b@1390 1906 if$
b@1390 1907 cap.status.std
b@1390 1908 }
b@1390 1909
b@1390 1910 FUNCTION {format.phd.thesis.type}
b@1390 1911 { this.to.prev.status
b@1390 1912 this.status.std
b@1390 1913 type empty$
b@1390 1914 {
b@1390 1915 bbl.phdthesis
b@1390 1916 }
b@1390 1917 {
b@1390 1918 type "type" bibinfo.check
b@1390 1919 }
b@1390 1920 if$
b@1390 1921 cap.status.std
b@1390 1922 }
b@1390 1923
b@1390 1924
b@1390 1925
b@1390 1926 %% URL
b@1390 1927
b@1390 1928 FUNCTION {format.url}
b@1390 1929 { url empty$
b@1390 1930 { "" }
b@1390 1931 { this.to.prev.status
b@1390 1932 this.status.std
b@1390 1933 cap.yes 'status.cap :=
b@1390 1934 name.url.prefix " " *
b@1390 1935 "\url{" * url * "}" *
b@1390 1936 punct.no 'this.status.punct :=
b@1390 1937 punct.period 'prev.status.punct :=
b@1390 1938 space.normal 'this.status.space :=
b@1390 1939 space.normal 'prev.status.space :=
b@1390 1940 quote.no 'this.status.quote :=
b@1390 1941 }
b@1390 1942 if$
b@1390 1943 }
b@1390 1944
b@1390 1945
b@1390 1946
b@1390 1947
b@1390 1948 %%%%%%%%%%%%%%%%%%%%
b@1390 1949 %% ENTRY HANDLERS %%
b@1390 1950 %%%%%%%%%%%%%%%%%%%%
b@1390 1951
b@1390 1952
b@1390 1953 % Note: In many journals, IEEE (or the authors) tend not to show the number
b@1390 1954 % for articles, so the display of the number is controlled here by the
b@1390 1955 % switch "is.use.number.for.article"
b@1390 1956 FUNCTION {article}
b@1390 1957 { std.status.using.comma
b@1390 1958 start.entry
b@1390 1959 if.url.alt.interword.spacing
b@1390 1960 format.authors "author" output.warn
b@1390 1961 name.or.dash
b@1390 1962 format.article.title "title" output.warn
b@1390 1963 format.journal "journal" bibinfo.check "journal" output.warn
b@1390 1964 format.volume output
b@1390 1965 format.number.if.use.for.article output
b@1390 1966 format.pages output
b@1390 1967 format.date "year" output.warn
b@1390 1968 format.note output
b@1390 1969 format.url output
b@1390 1970 fin.entry
b@1390 1971 if.url.std.interword.spacing
b@1390 1972 }
b@1390 1973
b@1390 1974 FUNCTION {book}
b@1390 1975 { std.status.using.comma
b@1390 1976 start.entry
b@1390 1977 if.url.alt.interword.spacing
b@1390 1978 author empty$
b@1390 1979 { format.editors "author and editor" output.warn }
b@1390 1980 { format.authors output.nonnull }
b@1390 1981 if$
b@1390 1982 name.or.dash
b@1390 1983 format.book.title.edition output
b@1390 1984 format.series output
b@1390 1985 author empty$
b@1390 1986 { skip$ }
b@1390 1987 { format.editors output }
b@1390 1988 if$
b@1390 1989 format.address.publisher.date output
b@1390 1990 format.volume output
b@1390 1991 format.number output
b@1390 1992 format.note output
b@1390 1993 format.url output
b@1390 1994 fin.entry
b@1390 1995 if.url.std.interword.spacing
b@1390 1996 }
b@1390 1997
b@1390 1998 FUNCTION {booklet}
b@1390 1999 { std.status.using.comma
b@1390 2000 start.entry
b@1390 2001 if.url.alt.interword.spacing
b@1390 2002 format.authors output
b@1390 2003 name.or.dash
b@1390 2004 format.article.title "title" output.warn
b@1390 2005 format.howpublished "howpublished" bibinfo.check output
b@1390 2006 format.organization "organization" bibinfo.check output
b@1390 2007 format.address "address" bibinfo.check output
b@1390 2008 format.date output
b@1390 2009 format.note output
b@1390 2010 format.url output
b@1390 2011 fin.entry
b@1390 2012 if.url.std.interword.spacing
b@1390 2013 }
b@1390 2014
b@1390 2015 FUNCTION {electronic}
b@1390 2016 { std.status.using.period
b@1390 2017 start.entry
b@1390 2018 if.url.alt.interword.spacing
b@1390 2019 format.authors output
b@1390 2020 name.or.dash
b@1390 2021 format.date.electronic output
b@1390 2022 format.article.title.electronic output
b@1390 2023 format.howpublished "howpublished" bibinfo.check output
b@1390 2024 format.organization "organization" bibinfo.check output
b@1390 2025 format.address "address" bibinfo.check output
b@1390 2026 format.note output
b@1390 2027 format.url output
b@1390 2028 fin.entry
b@1390 2029 empty.entry.warn
b@1390 2030 if.url.std.interword.spacing
b@1390 2031 }
b@1390 2032
b@1390 2033 FUNCTION {inbook}
b@1390 2034 { std.status.using.comma
b@1390 2035 start.entry
b@1390 2036 if.url.alt.interword.spacing
b@1390 2037 author empty$
b@1390 2038 { format.editors "author and editor" output.warn }
b@1390 2039 { format.authors output.nonnull }
b@1390 2040 if$
b@1390 2041 name.or.dash
b@1390 2042 format.book.title.edition output
b@1390 2043 format.series output
b@1390 2044 format.address.publisher.date output
b@1390 2045 format.volume output
b@1390 2046 format.number output
b@1390 2047 format.chapter output
b@1390 2048 format.pages output
b@1390 2049 format.note output
b@1390 2050 format.url output
b@1390 2051 fin.entry
b@1390 2052 if.url.std.interword.spacing
b@1390 2053 }
b@1390 2054
b@1390 2055 FUNCTION {incollection}
b@1390 2056 { std.status.using.comma
b@1390 2057 start.entry
b@1390 2058 if.url.alt.interword.spacing
b@1390 2059 format.authors "author" output.warn
b@1390 2060 name.or.dash
b@1390 2061 format.article.title "title" output.warn
b@1390 2062 format.in.booktitle.edition "booktitle" output.warn
b@1390 2063 format.series output
b@1390 2064 format.editors output
b@1390 2065 format.address.publisher.date.nowarn output
b@1390 2066 format.volume output
b@1390 2067 format.number output
b@1390 2068 format.chapter output
b@1390 2069 format.pages output
b@1390 2070 format.note output
b@1390 2071 format.url output
b@1390 2072 fin.entry
b@1390 2073 if.url.std.interword.spacing
b@1390 2074 }
b@1390 2075
b@1390 2076 FUNCTION {inproceedings}
b@1390 2077 { std.status.using.comma
b@1390 2078 start.entry
b@1390 2079 if.url.alt.interword.spacing
b@1390 2080 format.authors "author" output.warn
b@1390 2081 name.or.dash
b@1390 2082 format.article.title "title" output.warn
b@1390 2083 format.in.booktitle "booktitle" output.warn
b@1390 2084 format.series output
b@1390 2085 format.editors output
b@1390 2086 format.volume output
b@1390 2087 format.number output
b@1390 2088 publisher empty$
b@1390 2089 { format.address.organization.date output }
b@1390 2090 { format.organization "organization" bibinfo.check output
b@1390 2091 format.address.publisher.date output
b@1390 2092 }
b@1390 2093 if$
b@1390 2094 format.paper output
b@1390 2095 format.pages output
b@1390 2096 format.note output
b@1390 2097 format.url output
b@1390 2098 fin.entry
b@1390 2099 if.url.std.interword.spacing
b@1390 2100 }
b@1390 2101
b@1390 2102 FUNCTION {manual}
b@1390 2103 { std.status.using.comma
b@1390 2104 start.entry
b@1390 2105 if.url.alt.interword.spacing
b@1390 2106 format.authors output
b@1390 2107 name.or.dash
b@1390 2108 format.book.title.edition "title" output.warn
b@1390 2109 format.howpublished "howpublished" bibinfo.check output
b@1390 2110 format.organization "organization" bibinfo.check output
b@1390 2111 format.address "address" bibinfo.check output
b@1390 2112 format.date output
b@1390 2113 format.note output
b@1390 2114 format.url output
b@1390 2115 fin.entry
b@1390 2116 if.url.std.interword.spacing
b@1390 2117 }
b@1390 2118
b@1390 2119 FUNCTION {mastersthesis}
b@1390 2120 { std.status.using.comma
b@1390 2121 start.entry
b@1390 2122 if.url.alt.interword.spacing
b@1390 2123 format.authors "author" output.warn
b@1390 2124 name.or.dash
b@1390 2125 format.article.title "title" output.warn
b@1390 2126 format.master.thesis.type output.nonnull
b@1390 2127 format.school "school" bibinfo.warn output
b@1390 2128 format.address "address" bibinfo.check output
b@1390 2129 format.date "year" output.warn
b@1390 2130 format.note output
b@1390 2131 format.url output
b@1390 2132 fin.entry
b@1390 2133 if.url.std.interword.spacing
b@1390 2134 }
b@1390 2135
b@1390 2136 FUNCTION {misc}
b@1390 2137 { std.status.using.comma
b@1390 2138 start.entry
b@1390 2139 if.url.alt.interword.spacing
b@1390 2140 format.authors output
b@1390 2141 name.or.dash
b@1390 2142 format.article.title output
b@1390 2143 format.howpublished "howpublished" bibinfo.check output
b@1390 2144 format.organization "organization" bibinfo.check output
b@1390 2145 format.address "address" bibinfo.check output
b@1390 2146 format.pages output
b@1390 2147 format.date output
b@1390 2148 format.note output
b@1390 2149 format.url output
b@1390 2150 fin.entry
b@1390 2151 empty.entry.warn
b@1390 2152 if.url.std.interword.spacing
b@1390 2153 }
b@1390 2154
b@1390 2155 FUNCTION {patent}
b@1390 2156 { std.status.using.comma
b@1390 2157 start.entry
b@1390 2158 if.url.alt.interword.spacing
b@1390 2159 format.authors output
b@1390 2160 name.or.dash
b@1390 2161 format.article.title output
b@1390 2162 format.patent.nationality.type.number output
b@1390 2163 format.patent.date output
b@1390 2164 format.note output
b@1390 2165 format.url output
b@1390 2166 fin.entry
b@1390 2167 empty.entry.warn
b@1390 2168 if.url.std.interword.spacing
b@1390 2169 }
b@1390 2170
b@1390 2171 FUNCTION {periodical}
b@1390 2172 { std.status.using.comma
b@1390 2173 start.entry
b@1390 2174 if.url.alt.interword.spacing
b@1390 2175 format.editors output
b@1390 2176 name.or.dash
b@1390 2177 format.book.title "title" output.warn
b@1390 2178 format.series output
b@1390 2179 format.volume output
b@1390 2180 format.number output
b@1390 2181 format.organization "organization" bibinfo.check output
b@1390 2182 format.date "year" output.warn
b@1390 2183 format.note output
b@1390 2184 format.url output
b@1390 2185 fin.entry
b@1390 2186 if.url.std.interword.spacing
b@1390 2187 }
b@1390 2188
b@1390 2189 FUNCTION {phdthesis}
b@1390 2190 { std.status.using.comma
b@1390 2191 start.entry
b@1390 2192 if.url.alt.interword.spacing
b@1390 2193 format.authors "author" output.warn
b@1390 2194 name.or.dash
b@1390 2195 format.article.title "title" output.warn
b@1390 2196 format.phd.thesis.type output.nonnull
b@1390 2197 format.school "school" bibinfo.warn output
b@1390 2198 format.address "address" bibinfo.check output
b@1390 2199 format.date "year" output.warn
b@1390 2200 format.note output
b@1390 2201 format.url output
b@1390 2202 fin.entry
b@1390 2203 if.url.std.interword.spacing
b@1390 2204 }
b@1390 2205
b@1390 2206 FUNCTION {proceedings}
b@1390 2207 { std.status.using.comma
b@1390 2208 start.entry
b@1390 2209 if.url.alt.interword.spacing
b@1390 2210 format.editors output
b@1390 2211 name.or.dash
b@1390 2212 format.book.title "title" output.warn
b@1390 2213 format.series output
b@1390 2214 format.volume output
b@1390 2215 format.number output
b@1390 2216 publisher empty$
b@1390 2217 { format.address.organization.date output }
b@1390 2218 { format.organization "organization" bibinfo.check output
b@1390 2219 format.address.publisher.date output
b@1390 2220 }
b@1390 2221 if$
b@1390 2222 format.note output
b@1390 2223 format.url output
b@1390 2224 fin.entry
b@1390 2225 if.url.std.interword.spacing
b@1390 2226 }
b@1390 2227
b@1390 2228 FUNCTION {standard}
b@1390 2229 { std.status.using.comma
b@1390 2230 start.entry
b@1390 2231 if.url.alt.interword.spacing
b@1390 2232 format.authors output
b@1390 2233 name.or.dash
b@1390 2234 format.book.title "title" output.warn
b@1390 2235 format.howpublished "howpublished" bibinfo.check output
b@1390 2236 format.organization.institution.standard.type.number output
b@1390 2237 format.revision output
b@1390 2238 format.date output
b@1390 2239 format.note output
b@1390 2240 format.url output
b@1390 2241 fin.entry
b@1390 2242 if.url.std.interword.spacing
b@1390 2243 }
b@1390 2244
b@1390 2245 FUNCTION {techreport}
b@1390 2246 { std.status.using.comma
b@1390 2247 start.entry
b@1390 2248 if.url.alt.interword.spacing
b@1390 2249 format.authors "author" output.warn
b@1390 2250 name.or.dash
b@1390 2251 format.article.title "title" output.warn
b@1390 2252 format.howpublished "howpublished" bibinfo.check output
b@1390 2253 format.institution "institution" bibinfo.warn output
b@1390 2254 format.address "address" bibinfo.check output
b@1390 2255 format.tech.report.number output.nonnull
b@1390 2256 format.date "year" output.warn
b@1390 2257 format.note output
b@1390 2258 format.url output
b@1390 2259 fin.entry
b@1390 2260 if.url.std.interword.spacing
b@1390 2261 }
b@1390 2262
b@1390 2263 FUNCTION {unpublished}
b@1390 2264 { std.status.using.comma
b@1390 2265 start.entry
b@1390 2266 if.url.alt.interword.spacing
b@1390 2267 format.authors "author" output.warn
b@1390 2268 name.or.dash
b@1390 2269 format.article.title "title" output.warn
b@1390 2270 format.date output
b@1390 2271 format.note "note" output.warn
b@1390 2272 format.url output
b@1390 2273 fin.entry
b@1390 2274 if.url.std.interword.spacing
b@1390 2275 }
b@1390 2276
b@1390 2277
b@1390 2278 % The special entry type which provides the user interface to the
b@1390 2279 % BST controls
b@1390 2280 FUNCTION {IEEEtranBSTCTL}
b@1390 2281 { is.print.banners.to.terminal
b@1390 2282 { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." *
b@1390 2283 top$
b@1390 2284 }
b@1390 2285 { skip$ }
b@1390 2286 if$
b@1390 2287 CTLuse_article_number
b@1390 2288 empty$
b@1390 2289 { skip$ }
b@1390 2290 { CTLuse_article_number
b@1390 2291 yes.no.to.int
b@1390 2292 'is.use.number.for.article :=
b@1390 2293 }
b@1390 2294 if$
b@1390 2295 CTLuse_paper
b@1390 2296 empty$
b@1390 2297 { skip$ }
b@1390 2298 { CTLuse_paper
b@1390 2299 yes.no.to.int
b@1390 2300 'is.use.paper :=
b@1390 2301 }
b@1390 2302 if$
b@1390 2303 CTLuse_forced_etal
b@1390 2304 empty$
b@1390 2305 { skip$ }
b@1390 2306 { CTLuse_forced_etal
b@1390 2307 yes.no.to.int
b@1390 2308 'is.forced.et.al :=
b@1390 2309 }
b@1390 2310 if$
b@1390 2311 CTLmax_names_forced_etal
b@1390 2312 empty$
b@1390 2313 { skip$ }
b@1390 2314 { CTLmax_names_forced_etal
b@1390 2315 string.to.integer
b@1390 2316 'max.num.names.before.forced.et.al :=
b@1390 2317 }
b@1390 2318 if$
b@1390 2319 CTLnames_show_etal
b@1390 2320 empty$
b@1390 2321 { skip$ }
b@1390 2322 { CTLnames_show_etal
b@1390 2323 string.to.integer
b@1390 2324 'num.names.shown.with.forced.et.al :=
b@1390 2325 }
b@1390 2326 if$
b@1390 2327 CTLuse_alt_spacing
b@1390 2328 empty$
b@1390 2329 { skip$ }
b@1390 2330 { CTLuse_alt_spacing
b@1390 2331 yes.no.to.int
b@1390 2332 'is.use.alt.interword.spacing :=
b@1390 2333 }
b@1390 2334 if$
b@1390 2335 CTLalt_stretch_factor
b@1390 2336 empty$
b@1390 2337 { skip$ }
b@1390 2338 { CTLalt_stretch_factor
b@1390 2339 'ALTinterwordstretchfactor :=
b@1390 2340 "\renewcommand{\BIBentryALTinterwordstretchfactor}{"
b@1390 2341 ALTinterwordstretchfactor * "}" *
b@1390 2342 write$ newline$
b@1390 2343 }
b@1390 2344 if$
b@1390 2345 CTLdash_repeated_names
b@1390 2346 empty$
b@1390 2347 { skip$ }
b@1390 2348 { CTLdash_repeated_names
b@1390 2349 yes.no.to.int
b@1390 2350 'is.dash.repeated.names :=
b@1390 2351 }
b@1390 2352 if$
b@1390 2353 CTLname_format_string
b@1390 2354 empty$
b@1390 2355 { skip$ }
b@1390 2356 { CTLname_format_string
b@1390 2357 'name.format.string :=
b@1390 2358 }
b@1390 2359 if$
b@1390 2360 CTLname_latex_cmd
b@1390 2361 empty$
b@1390 2362 { skip$ }
b@1390 2363 { CTLname_latex_cmd
b@1390 2364 'name.latex.cmd :=
b@1390 2365 }
b@1390 2366 if$
b@1390 2367 CTLname_url_prefix
b@1390 2368 missing$
b@1390 2369 { skip$ }
b@1390 2370 { CTLname_url_prefix
b@1390 2371 'name.url.prefix :=
b@1390 2372 }
b@1390 2373 if$
b@1390 2374
b@1390 2375
b@1390 2376 num.names.shown.with.forced.et.al max.num.names.before.forced.et.al >
b@1390 2377 { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$
b@1390 2378 max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al :=
b@1390 2379 }
b@1390 2380 { skip$ }
b@1390 2381 if$
b@1390 2382 }
b@1390 2383
b@1390 2384
b@1390 2385 %%%%%%%%%%%%%%%%%%%
b@1390 2386 %% ENTRY ALIASES %%
b@1390 2387 %%%%%%%%%%%%%%%%%%%
b@1390 2388 FUNCTION {conference}{inproceedings}
b@1390 2389 FUNCTION {online}{electronic}
b@1390 2390 FUNCTION {internet}{electronic}
b@1390 2391 FUNCTION {webpage}{electronic}
b@1390 2392 FUNCTION {www}{electronic}
b@1390 2393 FUNCTION {default.type}{misc}
b@1390 2394
b@1390 2395
b@1390 2396
b@1390 2397 %%%%%%%%%%%%%%%%%%
b@1390 2398 %% MAIN PROGRAM %%
b@1390 2399 %%%%%%%%%%%%%%%%%%
b@1390 2400
b@1390 2401 READ
b@1390 2402
b@1390 2403 EXECUTE {initialize.controls}
b@1390 2404 EXECUTE {initialize.status.constants}
b@1390 2405 EXECUTE {banner.message}
b@1390 2406
b@1390 2407 EXECUTE {initialize.longest.label}
b@1390 2408 ITERATE {longest.label.pass}
b@1390 2409
b@1390 2410 EXECUTE {begin.bib}
b@1390 2411 ITERATE {call.type$}
b@1390 2412 EXECUTE {end.bib}
b@1390 2413
b@1390 2414 EXECUTE{completed.message}
b@1390 2415
b@1390 2416
b@1390 2417 %% That's all folks, mds.