3 %% BibTeX Bibliography Style file for IEEE Journals and Conferences (unsorted)
\r
4 %% Version 1.12 (2007/01/11)
\r
6 %% Copyright (c) 2003-2007 Michael Shell
\r
8 %% Original starting code base and algorithms obtained from the output of
\r
9 %% Patrick W. Daly's makebst package as well as from prior versions of
\r
10 %% IEEE BibTeX styles:
\r
12 %% 1. Howard Trickey and Oren Patashnik's ieeetr.bst (1985/1988)
\r
13 %% 2. Silvano Balemi and Richard H. Roy's IEEEbib.bst (1993)
\r
16 %% http://www.michaelshell.org/tex/ieeetran/
\r
17 %% http://www.ctan.org/tex-archive/macros/latex/contrib/IEEEtran/
\r
19 %% http://www.ieee.org/
\r
21 %% For use with BibTeX version 0.99a or later
\r
23 %% This is a numerical citation style.
\r
25 %%*************************************************************************
\r
27 %% This code is offered as-is without any warranty either expressed or
\r
28 %% implied; without even the implied warranty of MERCHANTABILITY or
\r
29 %% FITNESS FOR A PARTICULAR PURPOSE!
\r
30 %% User assumes all risk.
\r
31 %% In no event shall IEEE or any contributor to this code be liable for
\r
32 %% any damages or losses, including, but not limited to, incidental,
\r
33 %% consequential, or any other damages, resulting from the use or misuse
\r
34 %% of any information contained here.
\r
36 %% All comments are the opinions of their respective authors and are not
\r
37 %% necessarily endorsed by the IEEE.
\r
39 %% This work is distributed under the LaTeX Project Public License (LPPL)
\r
40 %% ( http://www.latex-project.org/ ) version 1.3, and may be freely used,
\r
41 %% distributed and modified. A copy of the LPPL, version 1.3, is included
\r
42 %% in the base LaTeX documentation of all distributions of LaTeX released
\r
43 %% 2003/12/01 or later.
\r
44 %% Retain all contribution notices and credits.
\r
45 %% ** Modified files should be clearly indicated as such, including **
\r
46 %% ** renaming them and changing author support contact information. **
\r
48 %% File list of work: IEEEabrv.bib, IEEEfull.bib, IEEEexample.bib,
\r
49 %% IEEEtran.bst, IEEEtranS.bst, IEEEtranSA.bst,
\r
50 %% IEEEtranN.bst, IEEEtranSN.bst, IEEEtran_bst_HOWTO.pdf
\r
51 %%*************************************************************************
\r
56 % 1.00 (2002/08/13) Initial release
\r
59 % 1. Corrected minor bug for improperly formed warning message when a
\r
60 % book was not given a title. Thanks to Ming Kin Lai for reporting this.
\r
61 % 2. Added support for CTLname_format_string and CTLname_latex_cmd fields
\r
62 % in the BST control entry type.
\r
65 % 1. Fixed bug with URLs containing underscores when using url.sty. Thanks
\r
66 % to Ming Kin Lai for reporting this.
\r
69 % 1. Fixed bug with unwanted comma before "et al." when an entry contained
\r
70 % more than two author names. Thanks to Pallav Gupta for reporting this.
\r
71 % 2. Fixed bug with anomalous closing quote in tech reports that have a
\r
72 % type, but without a number or address. Thanks to Mehrdad Mirreza for
\r
74 % 3. Use braces in \providecommand in begin.bib to better support
\r
75 % latex2html. TeX style length assignments OK with recent versions
\r
76 % of latex2html - 1.71 (2002/2/1) or later is strongly recommended.
\r
77 % Use of the language field still causes trouble with latex2html.
\r
78 % Thanks to Federico Beffa for reporting this.
\r
79 % 4. Added IEEEtran.bst ID and version comment string to .bbl output.
\r
80 % 5. Provide a \BIBdecl hook that allows the user to execute commands
\r
81 % just prior to the first entry.
\r
82 % 6. Use default urlstyle (is using url.sty) of "same" rather than rm to
\r
83 % better work with a wider variety of bibliography styles.
\r
84 % 7. Changed month abbreviations from Sept., July and June to Sep., Jul.,
\r
85 % and Jun., respectively, as IEEE now does. Thanks to Moritz Borgmann
\r
86 % for reporting this.
\r
87 % 8. Control entry types should not be considered when calculating longest
\r
89 % 9. Added alias www for electronic/online.
\r
90 % 10. Added CTLname_url_prefix control entry type.
\r
93 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
94 %% DEFAULTS FOR THE CONTROLS OF THE BST STYLE %%
\r
95 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
97 % These are the defaults for the user adjustable controls. The values used
\r
98 % here can be overridden by the user via IEEEtranBSTCTL entry type.
\r
100 % NOTE: The recommended LaTeX command to invoke a control entry type is:
\r
103 %\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
\r
104 %\def\@bstctlcite[#1]#2{\@bsphack
\r
105 % \@for\@citeb:=#2\do{%
\r
106 % \edef\@citeb{\expandafter\@firstofone\@citeb}%
\r
107 % \if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
\r
111 % It is called at the start of the document, before the first \cite, like:
\r
112 % \bstctlcite{IEEEexample:BSTcontrol}
\r
114 % IEEEtran.cls V1.6 and later does provide this command.
\r
118 % #0 turns off the display of the number for articles.
\r
120 FUNCTION {default.is.use.number.for.article} { #1 }
\r
123 % #0 turns off the display of the paper and type fields in @inproceedings.
\r
125 FUNCTION {default.is.use.paper} { #1 }
\r
128 % #0 turns off the forced use of "et al."
\r
130 FUNCTION {default.is.forced.et.al} { #0 }
\r
132 % The maximum number of names that can be present beyond which an "et al."
\r
133 % usage is forced. Be sure that num.names.shown.with.forced.et.al (below)
\r
134 % is not greater than this value!
\r
135 % Note: There are many instances of references in IEEE journals which have
\r
136 % a very large number of authors as well as instances in which "et al." is
\r
138 FUNCTION {default.max.num.names.before.forced.et.al} { #10 }
\r
140 % The number of names that will be shown with a forced "et al.".
\r
141 % Must be less than or equal to max.num.names.before.forced.et.al
\r
142 FUNCTION {default.num.names.shown.with.forced.et.al} { #1 }
\r
145 % #0 turns off the alternate interword spacing for entries with URLs.
\r
147 FUNCTION {default.is.use.alt.interword.spacing} { #1 }
\r
149 % If alternate interword spacing for entries with URLs is enabled, this is
\r
150 % the interword spacing stretch factor that will be used. For example, the
\r
151 % default "4" here means that the interword spacing in entries with URLs can
\r
152 % stretch to four times normal. Does not have to be an integer. Note that
\r
153 % the value specified here can be overridden by the user in their LaTeX
\r
154 % code via a command such as:
\r
155 % "\providecommand\BIBentryALTinterwordstretchfactor{1.5}" in addition to
\r
156 % that via the IEEEtranBSTCTL entry type.
\r
157 FUNCTION {default.ALTinterwordstretchfactor} { "4" }
\r
160 % #0 turns off the "dashification" of repeated (i.e., identical to those
\r
161 % of the previous entry) names. IEEE normally does this.
\r
163 FUNCTION {default.is.dash.repeated.names} { #1 }
\r
166 % The default name format control string.
\r
167 FUNCTION {default.name.format.string}{ "{f.~}{vv~}{ll}{, jj}" }
\r
170 % The default LaTeX font command for the names.
\r
171 FUNCTION {default.name.latex.cmd}{ "" }
\r
174 % The default URL prefix.
\r
175 FUNCTION {default.name.url.prefix}{ "[Online]. Available:" }
\r
178 % Other controls that cannot be accessed via IEEEtranBSTCTL entry type.
\r
180 % #0 turns off the terminal startup banner/completed message so as to
\r
181 % operate more quietly.
\r
183 FUNCTION {is.print.banners.to.terminal} { #1 }
\r
188 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
189 %% FILE VERSION AND BANNER %%
\r
190 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
192 FUNCTION{bst.file.version} { "1.12" }
\r
193 FUNCTION{bst.file.date} { "2007/01/11" }
\r
194 FUNCTION{bst.file.website} { "http://www.michaelshell.org/tex/ieeetran/bibtex/" }
\r
196 FUNCTION {banner.message}
\r
197 { is.print.banners.to.terminal
\r
198 { "-- IEEEtran.bst version" " " * bst.file.version *
\r
199 " (" * bst.file.date * ") " * "by Michael Shell." *
\r
201 "-- " bst.file.website *
\r
203 "-- See the " quote$ * "IEEEtran_bst_HOWTO.pdf" * quote$ * " manual for usage information." *
\r
210 FUNCTION {completed.message}
\r
211 { is.print.banners.to.terminal
\r
224 %%%%%%%%%%%%%%%%%%%%%%
\r
225 %% STRING CONSTANTS %%
\r
226 %%%%%%%%%%%%%%%%%%%%%%
\r
228 FUNCTION {bbl.and}{ "and" }
\r
229 FUNCTION {bbl.etal}{ "et~al." }
\r
230 FUNCTION {bbl.editors}{ "eds." }
\r
231 FUNCTION {bbl.editor}{ "ed." }
\r
232 FUNCTION {bbl.edition}{ "ed." }
\r
233 FUNCTION {bbl.volume}{ "vol." }
\r
234 FUNCTION {bbl.of}{ "of" }
\r
235 FUNCTION {bbl.number}{ "no." }
\r
236 FUNCTION {bbl.in}{ "in" }
\r
237 FUNCTION {bbl.pages}{ "pp." }
\r
238 FUNCTION {bbl.page}{ "p." }
\r
239 FUNCTION {bbl.chapter}{ "ch." }
\r
240 FUNCTION {bbl.paper}{ "paper" }
\r
241 FUNCTION {bbl.part}{ "pt." }
\r
242 FUNCTION {bbl.patent}{ "Patent" }
\r
243 FUNCTION {bbl.patentUS}{ "U.S." }
\r
244 FUNCTION {bbl.revision}{ "Rev." }
\r
245 FUNCTION {bbl.series}{ "ser." }
\r
246 FUNCTION {bbl.standard}{ "Std." }
\r
247 FUNCTION {bbl.techrep}{ "Tech. Rep." }
\r
248 FUNCTION {bbl.mthesis}{ "Master's thesis" }
\r
249 FUNCTION {bbl.phdthesis}{ "Ph.D. dissertation" }
\r
250 FUNCTION {bbl.st}{ "st" }
\r
251 FUNCTION {bbl.nd}{ "nd" }
\r
252 FUNCTION {bbl.rd}{ "rd" }
\r
253 FUNCTION {bbl.th}{ "th" }
\r
256 % This is the LaTeX spacer that is used when a larger than normal space
\r
257 % is called for (such as just before the address:publisher).
\r
258 FUNCTION {large.space} { "\hskip 1em plus 0.5em minus 0.4em\relax " }
\r
260 % The LaTeX code for dashes that are used to represent repeated names.
\r
261 % Note: Some older IEEE journals used something like
\r
262 % "\rule{0.275in}{0.5pt}\," which is fairly thick and runs right along
\r
263 % the baseline. However, IEEE now uses a thinner, above baseline,
\r
264 % six dash long sequence.
\r
265 FUNCTION {repeated.name.dashes} { "------" }
\r
269 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
270 %% PREDEFINED STRING MACROS %%
\r
271 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
273 MACRO {jan} {"Jan."}
\r
274 MACRO {feb} {"Feb."}
\r
275 MACRO {mar} {"Mar."}
\r
276 MACRO {apr} {"Apr."}
\r
277 MACRO {may} {"May"}
\r
278 MACRO {jun} {"Jun."}
\r
279 MACRO {jul} {"Jul."}
\r
280 MACRO {aug} {"Aug."}
\r
281 MACRO {sep} {"Sep."}
\r
282 MACRO {oct} {"Oct."}
\r
283 MACRO {nov} {"Nov."}
\r
284 MACRO {dec} {"Dec."}
\r
326 CTLuse_article_number
\r
329 CTLmax_names_forced_etal
\r
332 CTLalt_stretch_factor
\r
333 CTLdash_repeated_names
\r
334 CTLname_format_string
\r
344 %%%%%%%%%%%%%%%%%%%%%%%
\r
345 %% INTEGER VARIABLES %%
\r
346 %%%%%%%%%%%%%%%%%%%%%%%
\r
348 INTEGERS { prev.status.punct this.status.punct punct.std
\r
349 punct.no punct.comma punct.period
\r
350 prev.status.space this.status.space space.std
\r
351 space.no space.normal space.large
\r
352 prev.status.quote this.status.quote quote.std
\r
353 quote.no quote.close
\r
354 prev.status.nline this.status.nline nline.std
\r
355 nline.no nline.newblock
\r
359 INTEGERS { longest.label.width multiresult nameptr namesleft number.label numnames }
\r
361 INTEGERS { is.use.number.for.article
\r
364 max.num.names.before.forced.et.al
\r
365 num.names.shown.with.forced.et.al
\r
366 is.use.alt.interword.spacing
\r
367 is.dash.repeated.names}
\r
370 %%%%%%%%%%%%%%%%%%%%%%
\r
371 %% STRING VARIABLES %%
\r
372 %%%%%%%%%%%%%%%%%%%%%%
\r
379 ALTinterwordstretchfactor
\r
387 %%%%%%%%%%%%%%%%%%%%%%%%%
\r
388 %% LOW LEVEL FUNCTIONS %%
\r
389 %%%%%%%%%%%%%%%%%%%%%%%%%
\r
391 FUNCTION {initialize.controls}
\r
392 { default.is.use.number.for.article 'is.use.number.for.article :=
\r
393 default.is.use.paper 'is.use.paper :=
\r
394 default.is.forced.et.al 'is.forced.et.al :=
\r
395 default.max.num.names.before.forced.et.al 'max.num.names.before.forced.et.al :=
\r
396 default.num.names.shown.with.forced.et.al 'num.names.shown.with.forced.et.al :=
\r
397 default.is.use.alt.interword.spacing 'is.use.alt.interword.spacing :=
\r
398 default.is.dash.repeated.names 'is.dash.repeated.names :=
\r
399 default.ALTinterwordstretchfactor 'ALTinterwordstretchfactor :=
\r
400 default.name.format.string 'name.format.string :=
\r
401 default.name.latex.cmd 'name.latex.cmd :=
\r
402 default.name.url.prefix 'name.url.prefix :=
\r
406 % This IEEEtran.bst features a very powerful and flexible mechanism for
\r
407 % controlling the capitalization, punctuation, spacing, quotation, and
\r
408 % newlines of the formatted entry fields. (Note: IEEEtran.bst does not need
\r
409 % or use the newline/newblock feature, but it has been implemented for
\r
410 % possible future use.) The output states of IEEEtran.bst consist of
\r
411 % multiple independent attributes and, as such, can be thought of as being
\r
412 % vectors, rather than the simple scalar values ("before.all",
\r
413 % "mid.sentence", etc.) used in most other .bst files.
\r
415 % The more flexible and complex design used here was motivated in part by
\r
416 % IEEE's rather unusual bibliography style. For example, IEEE ends the
\r
417 % previous field item with a period and large space prior to the publisher
\r
418 % address; the @electronic entry types use periods as inter-item punctuation
\r
419 % rather than the commas used by the other entry types; and URLs are never
\r
420 % followed by periods even though they are the last item in the entry.
\r
421 % Although it is possible to accommodate these features with the conventional
\r
422 % output state system, the seemingly endless exceptions make for convoluted,
\r
423 % unreliable and difficult to maintain code.
\r
425 % IEEEtran.bst's output state system can be easily understood via a simple
\r
426 % illustration of two most recently formatted entry fields (on the stack):
\r
431 % which, in this example, is to eventually appear in the bibliography as:
\r
433 % "PREVIOUS_ITEM," CURRENT_ITEM
\r
435 % It is the job of the output routine to take the previous item off of the
\r
436 % stack (while leaving the current item at the top of the stack), apply its
\r
437 % trailing punctuation (including closing quote marks) and spacing, and then
\r
438 % to write the result to BibTeX's output buffer:
\r
440 % "PREVIOUS_ITEM,"
\r
442 % Punctuation (and spacing) between items is often determined by both of the
\r
443 % items rather than just the first one. The presence of quotation marks
\r
444 % further complicates the situation because, in standard English, trailing
\r
445 % punctuation marks are supposed to be contained within the quotes.
\r
447 % IEEEtran.bst maintains two output state (aka "status") vectors which
\r
448 % correspond to the previous and current (aka "this") items. Each vector
\r
449 % consists of several independent attributes which track punctuation,
\r
450 % spacing, quotation, and newlines. Capitalization status is handled by a
\r
451 % separate scalar because the format routines, not the output routine,
\r
452 % handle capitalization and, therefore, there is no need to maintain the
\r
453 % capitalization attribute for both the "previous" and "this" items.
\r
455 % When a format routine adds a new item, it copies the current output status
\r
456 % vector to the previous output status vector and (usually) resets the
\r
457 % current (this) output status vector to a "standard status" vector. Using a
\r
458 % "standard status" vector in this way allows us to redefine what we mean by
\r
459 % "standard status" at the start of each entry handler and reuse the same
\r
460 % format routines under the various inter-item separation schemes. For
\r
461 % example, the standard status vector for the @book entry type may use
\r
462 % commas for item separators, while the @electronic type may use periods,
\r
463 % yet both entry handlers exploit many of the exact same format routines.
\r
465 % Because format routines have write access to the output status vector of
\r
466 % the previous item, they can override the punctuation choices of the
\r
467 % previous format routine! Therefore, it becomes trivial to implement rules
\r
468 % such as "Always use a period and a large space before the publisher." By
\r
469 % pushing the generation of the closing quote mark to the output routine, we
\r
470 % avoid all the problems caused by having to close a quote before having all
\r
471 % the information required to determine what the punctuation should be.
\r
473 % The IEEEtran.bst output state system can easily be expanded if needed.
\r
474 % For instance, it is easy to add a "space.tie" attribute value if the
\r
475 % bibliography rules mandate that two items have to be joined with an
\r
476 % unbreakable space.
\r
478 FUNCTION {initialize.status.constants}
\r
481 #2 'punct.period :=
\r
483 #1 'space.normal :=
\r
490 #1 'nline.newblock :=
\r
493 FUNCTION {std.status.using.comma}
\r
494 { punct.comma 'punct.std :=
\r
495 space.normal 'space.std :=
\r
496 quote.no 'quote.std :=
\r
497 nline.no 'nline.std :=
\r
501 FUNCTION {std.status.using.period}
\r
502 { punct.period 'punct.std :=
\r
503 space.normal 'space.std :=
\r
504 quote.no 'quote.std :=
\r
505 nline.no 'nline.std :=
\r
506 cap.yes 'cap.std :=
\r
509 FUNCTION {initialize.prev.this.status}
\r
510 { punct.no 'prev.status.punct :=
\r
511 space.no 'prev.status.space :=
\r
512 quote.no 'prev.status.quote :=
\r
513 nline.no 'prev.status.nline :=
\r
514 punct.no 'this.status.punct :=
\r
515 space.no 'this.status.space :=
\r
516 quote.no 'this.status.quote :=
\r
517 nline.no 'this.status.nline :=
\r
518 cap.yes 'status.cap :=
\r
521 FUNCTION {this.status.std}
\r
522 { punct.std 'this.status.punct :=
\r
523 space.std 'this.status.space :=
\r
524 quote.std 'this.status.quote :=
\r
525 nline.std 'this.status.nline :=
\r
528 FUNCTION {cap.status.std}{ cap.std 'status.cap := }
\r
530 FUNCTION {this.to.prev.status}
\r
531 { this.status.punct 'prev.status.punct :=
\r
532 this.status.space 'prev.status.space :=
\r
533 this.status.quote 'prev.status.quote :=
\r
534 this.status.nline 'prev.status.nline :=
\r
557 % convert the strings "yes" or "no" to #1 or #0 respectively
\r
558 FUNCTION {yes.no.to.int}
\r
559 { "l" change.case$ duplicate$
\r
562 { duplicate$ "no" =
\r
564 { "unknown boolean " quote$ * swap$ * quote$ *
\r
565 " in " * cite$ * warning$
\r
574 % pushes true if the single char string on the stack is in the
\r
575 % range of "0" to "9"
\r
578 duplicate$ "0" chr.to.int$ < not
\r
579 swap$ "9" chr.to.int$ > not and
\r
582 % multiplies the integer on the stack by a factor of 10
\r
583 FUNCTION {bump.int.mag}
\r
584 { #0 'multiresult :=
\r
585 { duplicate$ #0 > }
\r
595 % converts a single character string on the stack to an integer
\r
596 FUNCTION {char.to.integer}
\r
599 { chr.to.int$ "0" chr.to.int$ - }
\r
600 {"noninteger character " quote$ * swap$ * quote$ *
\r
601 " in integer field of " * cite$ * warning$
\r
607 % converts a string on the stack to an integer
\r
608 FUNCTION {string.to.integer}
\r
609 { duplicate$ text.length$ 'namesleft :=
\r
612 { nameptr namesleft > not }
\r
613 { duplicate$ nameptr #1 substring$
\r
614 char.to.integer numnames bump.int.mag +
\r
627 % The output routines write out the *next* to the top (previous) item on the
\r
628 % stack, adding punctuation and such as needed. Since IEEEtran.bst maintains
\r
629 % the output status for the top two items on the stack, these output
\r
630 % routines have to consider the previous output status (which corresponds to
\r
631 % the item that is being output). Full independent control of punctuation,
\r
632 % closing quote marks, spacing, and newblock is provided.
\r
634 % "output.nonnull" does not check for the presence of a previous empty
\r
637 % "output" does check for the presence of a previous empty item and will
\r
638 % remove an empty item rather than outputing it.
\r
640 % "output.warn" is like "output", but will issue a warning if it detects
\r
643 FUNCTION {output.nonnull}
\r
645 prev.status.punct punct.comma =
\r
649 prev.status.punct punct.period =
\r
653 prev.status.quote quote.close =
\r
657 prev.status.space space.normal =
\r
661 prev.status.space space.large =
\r
666 prev.status.nline nline.newblock =
\r
667 { newline$ "\newblock " write$ }
\r
673 { duplicate$ empty$
\r
679 FUNCTION {output.warn}
\r
682 { pop$ "empty " t * " in " * cite$ * warning$ }
\r
687 % "fin.entry" is the output routine that handles the last item of the entry
\r
688 % (which will be on the top of the stack when "fin.entry" is called).
\r
690 FUNCTION {fin.entry}
\r
691 { this.status.punct punct.no =
\r
695 this.status.quote quote.close =
\r
704 FUNCTION {is.last.char.not.punct}
\r
707 #-1 #1 substring$ "." =
\r
710 FUNCTION {is.multiple.pages}
\r
717 { t #1 #1 substring$
\r
719 swap$ duplicate$ "," =
\r
722 { #1 'multiresult := }
\r
723 { t #2 global.max$ substring$ 't := }
\r
730 FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ }
\r
732 FUNCTION {emphasize}
\r
733 { duplicate$ empty$
\r
735 { "\emph{" swap$ * "}" * }
\r
739 FUNCTION {do.name.latex.cmd}
\r
743 { name.latex.cmd "{" * swap$ * "}" * }
\r
747 % IEEEtran.bst uses its own \BIBforeignlanguage command which directly
\r
748 % invokes the TeX hyphenation patterns without the need of the Babel
\r
749 % package. Babel does a lot more than switch hyphenation patterns and
\r
750 % its loading can cause unintended effects in many class files (such as
\r
752 FUNCTION {select.language}
\r
753 { duplicate$ empty$ 'pop$
\r
754 { language empty$ 'skip$
\r
755 { "\BIBforeignlanguage{" language * "}{" * swap$ * "}" * }
\r
761 FUNCTION {tie.or.space.prefix}
\r
762 { duplicate$ text.length$ #3 <
\r
769 FUNCTION {get.bbl.editor}
\r
770 { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
\r
772 FUNCTION {space.word}{ " " swap$ * " " * }
\r
775 % Field Conditioners, Converters, Checkers and External Interfaces
\r
777 FUNCTION {empty.field.to.null.string}
\r
778 { duplicate$ empty$
\r
784 FUNCTION {either.or.check}
\r
787 { "can't use both " swap$ * " fields in " * cite$ * warning$ }
\r
791 FUNCTION {empty.entry.warn}
\r
792 { author empty$ title empty$ howpublished empty$
\r
793 month empty$ year empty$ note empty$ url empty$
\r
794 and and and and and and
\r
795 { "all relevant fields are empty in " cite$ * warning$ }
\r
801 % The bibinfo system provides a way for the electronic parsing/acquisition
\r
802 % of a bibliography's contents as is done by ReVTeX. For example, a field
\r
803 % could be entered into the bibliography as:
\r
804 % \bibinfo{volume}{2}
\r
805 % Only the "2" would show up in the document, but the LaTeX \bibinfo command
\r
806 % could do additional things with the information. IEEEtran.bst does provide
\r
807 % a \bibinfo command via "\providecommand{\bibinfo}[2]{#2}". However, it is
\r
808 % currently not used as the bogus bibinfo functions defined here output the
\r
809 % entry values directly without the \bibinfo wrapper. The bibinfo functions
\r
810 % themselves (and the calls to them) are retained for possible future use.
\r
812 % bibinfo.check avoids acting on missing fields while bibinfo.warn will
\r
813 % issue a warning message if a missing field is detected. Prior to calling
\r
814 % the bibinfo functions, the user should push the field value and then its
\r
815 % name string, in that order.
\r
817 FUNCTION {bibinfo.check}
\r
818 { swap$ duplicate$ missing$
\r
820 { duplicate$ empty$
\r
828 FUNCTION {bibinfo.warn}
\r
829 { swap$ duplicate$ missing$
\r
830 { swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ "" }
\r
831 { duplicate$ empty$
\r
832 { swap$ "empty " swap$ * " in " * cite$ * warning$ }
\r
840 % IEEE separates large numbers with more than 4 digits into groups of
\r
841 % three. IEEE uses a small space to separate these number groups.
\r
842 % Typical applications include patent and page numbers.
\r
844 % number of consecutive digits required to trigger the group separation.
\r
845 FUNCTION {large.number.trigger}{ #5 }
\r
847 % For numbers longer than the trigger, this is the blocksize of the groups.
\r
848 % The blocksize must be less than the trigger threshold, and 2 * blocksize
\r
849 % must be greater than the trigger threshold (can't do more than one
\r
850 % separation on the initial trigger).
\r
851 FUNCTION {large.number.blocksize}{ #3 }
\r
853 % What is actually inserted between the number groups.
\r
854 FUNCTION {large.number.separator}{ "\," }
\r
856 % So as to save on integer variables by reusing existing ones, numnames
\r
857 % holds the current number of consecutive digits read and nameptr holds
\r
858 % the number that will trigger an inserted space.
\r
859 FUNCTION {large.number.separate}
\r
863 large.number.trigger 'nameptr :=
\r
865 { t #-1 #1 substring$ is.num
\r
866 { numnames #1 + 'numnames := }
\r
868 large.number.trigger 'nameptr :=
\r
871 t #-1 #1 substring$ swap$ *
\r
872 t #-2 global.max$ substring$ 't :=
\r
874 { duplicate$ #1 nameptr large.number.blocksize - substring$ swap$
\r
875 nameptr large.number.blocksize - #1 + global.max$ substring$
\r
876 large.number.separator swap$ * *
\r
877 nameptr large.number.blocksize - 'numnames :=
\r
878 large.number.blocksize #1 + 'nameptr :=
\r
886 % Converts all single dashes "-" to double dashes "--".
\r
887 FUNCTION {n.dashify}
\r
888 { large.number.separate
\r
892 { t #1 #1 substring$ "-" =
\r
893 { t #1 #2 substring$ "--" = not
\r
895 t #2 global.max$ substring$ 't :=
\r
897 { { t #1 #1 substring$ "-" = }
\r
899 t #2 global.max$ substring$ 't :=
\r
905 { t #1 #1 substring$ *
\r
906 t #2 global.max$ substring$ 't :=
\r
914 % This function detects entries with names that are identical to that of
\r
915 % the previous entry and replaces the repeated names with dashes (if the
\r
916 % "is.dash.repeated.names" user control is nonzero).
\r
917 FUNCTION {name.or.dash}
\r
920 { s 'oldname := s }
\r
922 { is.dash.repeated.names
\r
923 { repeated.name.dashes }
\r
924 { s 'oldname := s }
\r
927 { s 'oldname := s }
\r
933 % Converts the number string on the top of the stack to
\r
934 % "numerical ordinal form" (e.g., "7" to "7th"). There is
\r
935 % no artificial limit to the upper bound of the numbers as the
\r
936 % least significant digit always determines the ordinal form.
\r
937 FUNCTION {num.to.ordinal}
\r
938 { duplicate$ #-1 #1 substring$ "1" =
\r
940 { duplicate$ #-1 #1 substring$ "2" =
\r
942 { duplicate$ #-1 #1 substring$ "3" =
\r
952 % If the string on the top of the stack begins with a number,
\r
953 % (e.g., 11th) then replace the string with the leading number
\r
954 % it contains. Otherwise retain the string as-is. s holds the
\r
955 % extracted number, t holds the part of the string that remains
\r
957 FUNCTION {extract.num}
\r
961 { t #1 #1 substring$
\r
962 t #2 global.max$ substring$ 't :=
\r
964 { s swap$ * 's := }
\r
975 % Converts the word number string on the top of the stack to
\r
976 % Arabic string form. Will be successful up to "tenth".
\r
977 FUNCTION {word.to.num}
\r
978 { duplicate$ "l" change.case$ 's :=
\r
1022 % Converts the string on the top of the stack to numerical
\r
1023 % ordinal (e.g., "11th") form.
\r
1024 FUNCTION {convert.edition}
\r
1025 { duplicate$ empty$ 'skip$
\r
1026 { duplicate$ #1 #1 substring$ is.num
\r
1031 duplicate$ #1 #1 substring$ is.num
\r
1032 { num.to.ordinal }
\r
1033 { "edition ordinal word " quote$ * edition * quote$ *
\r
1034 " may be too high (or improper) for conversion" * " in " * cite$ * warning$
\r
1046 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
1047 %% LATEX BIBLIOGRAPHY CODE %%
\r
1048 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\r
1050 FUNCTION {start.entry}
\r
1052 "\bibitem{" write$
\r
1057 initialize.prev.this.status
\r
1060 % Here we write out all the LaTeX code that we will need. The most involved
\r
1061 % code sequences are those that control the alternate interword spacing and
\r
1062 % foreign language hyphenation patterns. The heavy use of \providecommand
\r
1063 % gives users a way to override the defaults. Special thanks to Javier Bezos,
\r
1064 % Johannes Braams, Robin Fairbairns, Heiko Oberdiek, Donald Arseneau and all
\r
1065 % the other gurus on comp.text.tex for their help and advice on the topic of
\r
1066 % \selectlanguage, Babel and BibTeX.
\r
1067 FUNCTION {begin.bib}
\r
1068 { "% Generated by IEEEtran.bst, version: " bst.file.version * " (" * bst.file.date * ")" *
\r
1070 preamble$ empty$ 'skip$
\r
1071 { preamble$ write$ newline$ }
\r
1073 "\begin{thebibliography}{" longest.label * "}" *
\r
1075 "\providecommand{\url}[1]{#1}"
\r
1077 "\csname url@samestyle\endcsname"
\r
1079 "\providecommand{\newblock}{\relax}"
\r
1081 "\providecommand{\bibinfo}[2]{#2}"
\r
1083 "\providecommand{\BIBentrySTDinterwordspacing}{\spaceskip=0pt\relax}"
\r
1085 "\providecommand{\BIBentryALTinterwordstretchfactor}{"
\r
1086 ALTinterwordstretchfactor * "}" *
\r
1088 "\providecommand{\BIBentryALTinterwordspacing}{\spaceskip=\fontdimen2\font plus "
\r
1090 "\BIBentryALTinterwordstretchfactor\fontdimen3\font minus \fontdimen4\font\relax}"
\r
1092 "\providecommand{\BIBforeignlanguage}[2]{{%"
\r
1094 "\expandafter\ifx\csname l@#1\endcsname\relax"
\r
1096 "\typeout{** WARNING: IEEEtran.bst: No hyphenation pattern has been}%"
\r
1098 "\typeout{** loaded for the language `#1'. Using the pattern for}%"
\r
1100 "\typeout{** the default language instead.}%"
\r
1104 "\language=\csname l@#1\endcsname"
\r
1110 "\providecommand{\BIBdecl}{\relax}"
\r
1116 FUNCTION {end.bib}
\r
1117 { newline$ "\end{thebibliography}" write$ newline$ }
\r
1119 FUNCTION {if.url.alt.interword.spacing}
\r
1120 { is.use.alt.interword.spacing
\r
1121 {url empty$ 'skip$ {"\BIBentryALTinterwordspacing" write$ newline$} if$}
\r
1126 FUNCTION {if.url.std.interword.spacing}
\r
1127 { is.use.alt.interword.spacing
\r
1128 {url empty$ 'skip$ {"\BIBentrySTDinterwordspacing" write$ newline$} if$}
\r
1136 %%%%%%%%%%%%%%%%%%%%%%%%
\r
1137 %% LONGEST LABEL PASS %%
\r
1138 %%%%%%%%%%%%%%%%%%%%%%%%
\r
1140 FUNCTION {initialize.longest.label}
\r
1141 { "" 'longest.label :=
\r
1142 #1 'number.label :=
\r
1143 #0 'longest.label.width :=
\r
1146 FUNCTION {longest.label.pass}
\r
1147 { type$ "ieeetranbstctl" =
\r
1149 { number.label int.to.str$ 'label :=
\r
1150 number.label #1 + 'number.label :=
\r
1151 label width$ longest.label.width >
\r
1152 { label 'longest.label :=
\r
1153 label width$ 'longest.label.width :=
\r
1164 %%%%%%%%%%%%%%%%%%%%%
\r
1165 %% FORMAT HANDLERS %%
\r
1166 %%%%%%%%%%%%%%%%%%%%%
\r
1168 %% Lower Level Formats (used by higher level formats)
\r
1170 FUNCTION {format.address.org.or.pub.date}
\r
1174 { "empty year in " cite$ * warning$ }
\r
1177 address empty$ t empty$ and
\r
1178 year empty$ and month empty$ and
\r
1180 { this.to.prev.status
\r
1183 address "address" bibinfo.check *
\r
1186 { punct.period 'prev.status.punct :=
\r
1187 space.large 'prev.status.space :=
\r
1195 year empty$ month empty$ and
\r
1197 { t empty$ address empty$ and
\r
1204 { year "year" bibinfo.check * }
\r
1207 { month "month" bibinfo.check *
\r
1210 { " " * year "year" bibinfo.check * }
\r
1221 FUNCTION {format.names}
\r
1223 duplicate$ empty$ 'skip$ {
\r
1224 this.to.prev.status
\r
1229 s num.names$ 'numnames :=
\r
1230 numnames 'namesleft :=
\r
1231 { namesleft #0 > }
\r
1233 name.format.string
\r
1235 bibinfo bibinfo.check
\r
1238 { nameptr num.names.shown.with.forced.et.al #1 + =
\r
1239 numnames max.num.names.before.forced.et.al >
\r
1240 is.forced.et.al and and
\r
1247 { ", " * t do.name.latex.cmd * }
\r
1248 { s nameptr "{ll}" format.name$ duplicate$ "others" =
\r
1253 { " " * bbl.etal emphasize * }
\r
1259 space.word * t do.name.latex.cmd *
\r
1265 { t do.name.latex.cmd }
\r
1267 nameptr #1 + 'nameptr :=
\r
1268 namesleft #1 - 'namesleft :=
\r
1278 %% Higher Level Formats
\r
1280 %% addresses/locations
\r
1282 FUNCTION {format.address}
\r
1283 { address duplicate$ empty$ 'skip$
\r
1284 { this.to.prev.status
\r
1293 %% author/editor names
\r
1295 FUNCTION {format.authors}{ author "author" format.names }
\r
1297 FUNCTION {format.editors}
\r
1298 { editor "editor" format.names duplicate$ empty$ 'skip$
\r
1311 FUNCTION {format.date}
\r
1313 month "month" bibinfo.check duplicate$ empty$
\r
1314 year "year" bibinfo.check duplicate$ empty$
\r
1316 { this.to.prev.status
\r
1319 "there's a month but no year in " cite$ * warning$ }
\r
1323 { this.to.prev.status
\r
1337 FUNCTION {format.date.electronic}
\r
1338 { month "month" bibinfo.check duplicate$ empty$
\r
1339 year "year" bibinfo.check duplicate$ empty$
\r
1342 { "there's a month but no year in " cite$ * warning$
\r
1343 pop$ ")" * "(" swap$ *
\r
1344 this.to.prev.status
\r
1345 punct.no 'this.status.punct :=
\r
1346 space.normal 'this.status.space :=
\r
1347 quote.no 'this.status.quote :=
\r
1348 cap.yes 'status.cap :=
\r
1353 { swap$ pop$ ")" * "(" swap$ * }
\r
1354 { "(" swap$ * ", " * swap$ * ")" * }
\r
1356 this.to.prev.status
\r
1357 punct.no 'this.status.punct :=
\r
1358 space.normal 'this.status.space :=
\r
1359 quote.no 'this.status.quote :=
\r
1360 cap.yes 'status.cap :=
\r
1369 % Note: IEEE considers the edition to be closely associated with
\r
1370 % the title of a book. So, in IEEEtran.bst the edition is normally handled
\r
1371 % within the formatting of the title. The format.edition function is
\r
1372 % retained here for possible future use.
\r
1373 FUNCTION {format.edition}
\r
1374 { edition duplicate$ empty$ 'skip$
\r
1375 { this.to.prev.status
\r
1382 "edition" bibinfo.check
\r
1383 "~" * bbl.edition *
\r
1389 % This is used to format the booktitle of a conference proceedings.
\r
1390 % Here we use the "intype" field to provide the user a way to
\r
1391 % override the word "in" (e.g., with things like "presented at")
\r
1392 % Use of intype stops the emphasis of the booktitle to indicate that
\r
1393 % we no longer mean the written conference proceedings, but the
\r
1394 % conference itself.
\r
1395 FUNCTION {format.in.booktitle}
\r
1396 { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
\r
1397 { this.to.prev.status
\r
1412 % This is used to format the booktitle of collection.
\r
1413 % Here the "intype" field is not supported, but "edition" is.
\r
1414 FUNCTION {format.in.booktitle.edition}
\r
1415 { booktitle "booktitle" bibinfo.check duplicate$ empty$ 'skip$
\r
1416 { this.to.prev.status
\r
1420 edition empty$ 'skip$
\r
1425 * "~" * bbl.edition *
\r
1428 bbl.in " " * swap$ *
\r
1434 FUNCTION {format.article.title}
\r
1435 { title duplicate$ empty$ 'skip$
\r
1436 { this.to.prev.status
\r
1441 "title" bibinfo.check
\r
1442 duplicate$ empty$ 'skip$
\r
1443 { quote.close 'this.status.quote :=
\r
1444 is.last.char.not.punct
\r
1445 { punct.std 'this.status.punct := }
\r
1446 { punct.no 'this.status.punct := }
\r
1455 FUNCTION {format.article.title.electronic}
\r
1456 { title duplicate$ empty$ 'skip$
\r
1457 { this.to.prev.status
\r
1463 "title" bibinfo.check
\r
1464 duplicate$ empty$
\r
1466 { select.language }
\r
1470 FUNCTION {format.book.title.edition}
\r
1471 { title "title" bibinfo.check
\r
1473 { "empty title in " cite$ * warning$ }
\r
1474 { this.to.prev.status
\r
1478 edition empty$ 'skip$
\r
1487 * "~" * bbl.edition *
\r
1495 FUNCTION {format.book.title}
\r
1496 { title "title" bibinfo.check
\r
1497 duplicate$ empty$ 'skip$
\r
1498 { this.to.prev.status
\r
1511 FUNCTION {format.journal}
\r
1512 { journal duplicate$ empty$ 'skip$
\r
1513 { this.to.prev.status
\r
1526 FUNCTION {format.howpublished}
\r
1527 { howpublished duplicate$ empty$ 'skip$
\r
1528 { this.to.prev.status
\r
1537 %% institutions/organization/publishers/school
\r
1539 FUNCTION {format.institution}
\r
1540 { institution duplicate$ empty$ 'skip$
\r
1541 { this.to.prev.status
\r
1548 FUNCTION {format.organization}
\r
1549 { organization duplicate$ empty$ 'skip$
\r
1550 { this.to.prev.status
\r
1557 FUNCTION {format.address.publisher.date}
\r
1558 { publisher "publisher" bibinfo.warn format.address.org.or.pub.date }
\r
1560 FUNCTION {format.address.publisher.date.nowarn}
\r
1561 { publisher "publisher" bibinfo.check format.address.org.or.pub.date }
\r
1563 FUNCTION {format.address.organization.date}
\r
1564 { organization "organization" bibinfo.check format.address.org.or.pub.date }
\r
1566 FUNCTION {format.school}
\r
1567 { school duplicate$ empty$ 'skip$
\r
1568 { this.to.prev.status
\r
1577 %% volume/number/series/chapter/pages
\r
1579 FUNCTION {format.volume}
\r
1580 { volume empty.field.to.null.string
\r
1581 duplicate$ empty$ 'skip$
\r
1582 { this.to.prev.status
\r
1589 swap$ tie.or.space.prefix
\r
1590 "volume" bibinfo.check
\r
1597 FUNCTION {format.number}
\r
1598 { number empty.field.to.null.string
\r
1599 duplicate$ empty$ 'skip$
\r
1600 { this.to.prev.status
\r
1603 { bbl.number capitalize }
\r
1606 swap$ tie.or.space.prefix
\r
1607 "number" bibinfo.check
\r
1614 FUNCTION {format.number.if.use.for.article}
\r
1615 { is.use.number.for.article
\r
1621 % IEEE does not seem to tie the series so closely with the volume
\r
1622 % and number as is done in other bibliography styles. Instead the
\r
1623 % series is treated somewhat like an extension of the title.
\r
1624 FUNCTION {format.series}
\r
1627 { this.to.prev.status
\r
1630 series "series" bibinfo.check *
\r
1637 FUNCTION {format.chapter}
\r
1640 { this.to.prev.status
\r
1644 { type "l" change.case$
\r
1645 "type" bibinfo.check
\r
1648 chapter tie.or.space.prefix
\r
1649 "chapter" bibinfo.check
\r
1657 % The intended use of format.paper is for paper numbers of inproceedings.
\r
1658 % The paper type can be overridden via the type field.
\r
1659 % We allow the type to be displayed even if the paper number is absent
\r
1660 % for things like "postdeadline paper"
\r
1661 FUNCTION {format.paper}
\r
1666 { this.to.prev.status
\r
1668 type "type" bibinfo.check
\r
1673 { this.to.prev.status
\r
1677 { type "type" bibinfo.check }
\r
1680 "paper" bibinfo.check
\r
1691 FUNCTION {format.pages}
\r
1692 { pages duplicate$ empty$ 'skip$
\r
1693 { this.to.prev.status
\r
1695 duplicate$ is.multiple.pages
\r
1704 tie.or.space.prefix
\r
1705 "pages" bibinfo.check
\r
1714 %% technical report number
\r
1716 FUNCTION {format.tech.report.number}
\r
1717 { number "number" bibinfo.check
\r
1718 this.to.prev.status
\r
1721 type duplicate$ empty$
\r
1727 "type" bibinfo.check
\r
1728 swap$ duplicate$ empty$
\r
1730 { tie.or.space.prefix * * }
\r
1738 FUNCTION {format.note}
\r
1741 { this.to.prev.status
\r
1743 punct.period 'this.status.punct :=
\r
1744 note #1 #1 substring$
\r
1754 note #2 global.max$ substring$ * "note" bibinfo.check
\r
1755 cap.yes 'status.cap :=
\r
1764 FUNCTION {format.patent.date}
\r
1765 { this.to.prev.status
\r
1768 { monthfiled duplicate$ empty$
\r
1769 { "monthfiled" bibinfo.check pop$ "" }
\r
1770 { "monthfiled" bibinfo.check }
\r
1772 dayfiled duplicate$ empty$
\r
1773 { "dayfiled" bibinfo.check pop$ "" * }
\r
1774 { "dayfiled" bibinfo.check
\r
1775 monthfiled empty$
\r
1776 { "dayfiled without a monthfiled in " cite$ * warning$
\r
1784 { "no year or yearfiled in " cite$ * warning$ }
\r
1785 { yearfiled "yearfiled" bibinfo.check
\r
1789 { ", " * swap$ * }
\r
1794 { month duplicate$ empty$
\r
1795 { "month" bibinfo.check pop$ "" }
\r
1796 { "month" bibinfo.check }
\r
1798 day duplicate$ empty$
\r
1799 { "day" bibinfo.check pop$ "" * }
\r
1800 { "day" bibinfo.check
\r
1802 { "day without a month in " cite$ * warning$
\r
1809 year "year" bibinfo.check
\r
1813 { ", " * swap$ * }
\r
1820 FUNCTION {format.patent.nationality.type.number}
\r
1821 { this.to.prev.status
\r
1823 nationality duplicate$ empty$
\r
1824 { "nationality" bibinfo.warn pop$ "" }
\r
1825 { "nationality" bibinfo.check
\r
1826 duplicate$ "l" change.case$ "united states" =
\r
1827 { pop$ bbl.patentUS }
\r
1834 { bbl.patent "type" bibinfo.check }
\r
1835 { type "type" bibinfo.check }
\r
1838 number duplicate$ empty$
\r
1839 { "number" bibinfo.warn pop$ }
\r
1840 { "number" bibinfo.check
\r
1841 large.number.separate
\r
1842 swap$ " " * swap$ *
\r
1852 FUNCTION {format.organization.institution.standard.type.number}
\r
1853 { this.to.prev.status
\r
1855 organization duplicate$ empty$
\r
1857 institution duplicate$ empty$
\r
1858 { "institution" bibinfo.warn }
\r
1859 { "institution" bibinfo.warn " " * }
\r
1862 { "organization" bibinfo.warn " " * }
\r
1865 { bbl.standard "type" bibinfo.check }
\r
1866 { type "type" bibinfo.check }
\r
1869 number duplicate$ empty$
\r
1870 { "number" bibinfo.check pop$ }
\r
1871 { "number" bibinfo.check
\r
1872 large.number.separate
\r
1873 swap$ " " * swap$ *
\r
1879 FUNCTION {format.revision}
\r
1882 { this.to.prev.status
\r
1885 revision tie.or.space.prefix
\r
1886 "revision" bibinfo.check
\r
1896 FUNCTION {format.master.thesis.type}
\r
1897 { this.to.prev.status
\r
1904 type "type" bibinfo.check
\r
1910 FUNCTION {format.phd.thesis.type}
\r
1911 { this.to.prev.status
\r
1918 type "type" bibinfo.check
\r
1928 FUNCTION {format.url}
\r
1931 { this.to.prev.status
\r
1933 cap.yes 'status.cap :=
\r
1934 name.url.prefix " " *
\r
1935 "\url{" * url * "}" *
\r
1936 punct.no 'this.status.punct :=
\r
1937 punct.period 'prev.status.punct :=
\r
1938 space.normal 'this.status.space :=
\r
1939 space.normal 'prev.status.space :=
\r
1940 quote.no 'this.status.quote :=
\r
1948 %%%%%%%%%%%%%%%%%%%%
\r
1949 %% ENTRY HANDLERS %%
\r
1950 %%%%%%%%%%%%%%%%%%%%
\r
1953 % Note: In many journals, IEEE (or the authors) tend not to show the number
\r
1954 % for articles, so the display of the number is controlled here by the
\r
1955 % switch "is.use.number.for.article"
\r
1956 FUNCTION {article}
\r
1957 { std.status.using.comma
\r
1959 if.url.alt.interword.spacing
\r
1960 format.authors "author" output.warn
\r
1962 format.article.title "title" output.warn
\r
1963 format.journal "journal" bibinfo.check "journal" output.warn
\r
1964 format.volume output
\r
1965 format.number.if.use.for.article output
\r
1966 format.pages output
\r
1967 format.date "year" output.warn
\r
1968 format.note output
\r
1971 if.url.std.interword.spacing
\r
1975 { std.status.using.comma
\r
1977 if.url.alt.interword.spacing
\r
1979 { format.editors "author and editor" output.warn }
\r
1980 { format.authors output.nonnull }
\r
1983 format.book.title.edition output
\r
1984 format.series output
\r
1987 { format.editors output }
\r
1989 format.address.publisher.date output
\r
1990 format.volume output
\r
1991 format.number output
\r
1992 format.note output
\r
1995 if.url.std.interword.spacing
\r
1998 FUNCTION {booklet}
\r
1999 { std.status.using.comma
\r
2001 if.url.alt.interword.spacing
\r
2002 format.authors output
\r
2004 format.article.title "title" output.warn
\r
2005 format.howpublished "howpublished" bibinfo.check output
\r
2006 format.organization "organization" bibinfo.check output
\r
2007 format.address "address" bibinfo.check output
\r
2008 format.date output
\r
2009 format.note output
\r
2012 if.url.std.interword.spacing
\r
2015 FUNCTION {electronic}
\r
2016 { std.status.using.period
\r
2018 if.url.alt.interword.spacing
\r
2019 format.authors output
\r
2021 format.date.electronic output
\r
2022 format.article.title.electronic output
\r
2023 format.howpublished "howpublished" bibinfo.check output
\r
2024 format.organization "organization" bibinfo.check output
\r
2025 format.address "address" bibinfo.check output
\r
2026 format.note output
\r
2030 if.url.std.interword.spacing
\r
2034 { std.status.using.comma
\r
2036 if.url.alt.interword.spacing
\r
2038 { format.editors "author and editor" output.warn }
\r
2039 { format.authors output.nonnull }
\r
2042 format.book.title.edition output
\r
2043 format.series output
\r
2044 format.address.publisher.date output
\r
2045 format.volume output
\r
2046 format.number output
\r
2047 format.chapter output
\r
2048 format.pages output
\r
2049 format.note output
\r
2052 if.url.std.interword.spacing
\r
2055 FUNCTION {incollection}
\r
2056 { std.status.using.comma
\r
2058 if.url.alt.interword.spacing
\r
2059 format.authors "author" output.warn
\r
2061 format.article.title "title" output.warn
\r
2062 format.in.booktitle.edition "booktitle" output.warn
\r
2063 format.series output
\r
2064 format.editors output
\r
2065 format.address.publisher.date.nowarn output
\r
2066 format.volume output
\r
2067 format.number output
\r
2068 format.chapter output
\r
2069 format.pages output
\r
2070 format.note output
\r
2073 if.url.std.interword.spacing
\r
2076 FUNCTION {inproceedings}
\r
2077 { std.status.using.comma
\r
2079 if.url.alt.interword.spacing
\r
2080 format.authors "author" output.warn
\r
2082 format.article.title "title" output.warn
\r
2083 format.in.booktitle "booktitle" output.warn
\r
2084 format.series output
\r
2085 format.editors output
\r
2086 format.volume output
\r
2087 format.number output
\r
2089 { format.address.organization.date output }
\r
2090 { format.organization "organization" bibinfo.check output
\r
2091 format.address.publisher.date output
\r
2094 format.paper output
\r
2095 format.pages output
\r
2096 format.note output
\r
2099 if.url.std.interword.spacing
\r
2103 { std.status.using.comma
\r
2105 if.url.alt.interword.spacing
\r
2106 format.authors output
\r
2108 format.book.title.edition "title" output.warn
\r
2109 format.howpublished "howpublished" bibinfo.check output
\r
2110 format.organization "organization" bibinfo.check output
\r
2111 format.address "address" bibinfo.check output
\r
2112 format.date output
\r
2113 format.note output
\r
2116 if.url.std.interword.spacing
\r
2119 FUNCTION {mastersthesis}
\r
2120 { std.status.using.comma
\r
2122 if.url.alt.interword.spacing
\r
2123 format.authors "author" output.warn
\r
2125 format.article.title "title" output.warn
\r
2126 format.master.thesis.type output.nonnull
\r
2127 format.school "school" bibinfo.warn output
\r
2128 format.address "address" bibinfo.check output
\r
2129 format.date "year" output.warn
\r
2130 format.note output
\r
2133 if.url.std.interword.spacing
\r
2137 { std.status.using.comma
\r
2139 if.url.alt.interword.spacing
\r
2140 format.authors output
\r
2142 format.article.title output
\r
2143 format.howpublished "howpublished" bibinfo.check output
\r
2144 format.organization "organization" bibinfo.check output
\r
2145 format.address "address" bibinfo.check output
\r
2146 format.pages output
\r
2147 format.date output
\r
2148 format.note output
\r
2152 if.url.std.interword.spacing
\r
2156 { std.status.using.comma
\r
2158 if.url.alt.interword.spacing
\r
2159 format.authors output
\r
2161 format.article.title output
\r
2162 format.patent.nationality.type.number output
\r
2163 format.patent.date output
\r
2164 format.note output
\r
2168 if.url.std.interword.spacing
\r
2171 FUNCTION {periodical}
\r
2172 { std.status.using.comma
\r
2174 if.url.alt.interword.spacing
\r
2175 format.editors output
\r
2177 format.book.title "title" output.warn
\r
2178 format.series output
\r
2179 format.volume output
\r
2180 format.number output
\r
2181 format.organization "organization" bibinfo.check output
\r
2182 format.date "year" output.warn
\r
2183 format.note output
\r
2186 if.url.std.interword.spacing
\r
2189 FUNCTION {phdthesis}
\r
2190 { std.status.using.comma
\r
2192 if.url.alt.interword.spacing
\r
2193 format.authors "author" output.warn
\r
2195 format.article.title "title" output.warn
\r
2196 format.phd.thesis.type output.nonnull
\r
2197 format.school "school" bibinfo.warn output
\r
2198 format.address "address" bibinfo.check output
\r
2199 format.date "year" output.warn
\r
2200 format.note output
\r
2203 if.url.std.interword.spacing
\r
2206 FUNCTION {proceedings}
\r
2207 { std.status.using.comma
\r
2209 if.url.alt.interword.spacing
\r
2210 format.editors output
\r
2212 format.book.title "title" output.warn
\r
2213 format.series output
\r
2214 format.volume output
\r
2215 format.number output
\r
2217 { format.address.organization.date output }
\r
2218 { format.organization "organization" bibinfo.check output
\r
2219 format.address.publisher.date output
\r
2222 format.note output
\r
2225 if.url.std.interword.spacing
\r
2228 FUNCTION {standard}
\r
2229 { std.status.using.comma
\r
2231 if.url.alt.interword.spacing
\r
2232 format.authors output
\r
2234 format.book.title "title" output.warn
\r
2235 format.howpublished "howpublished" bibinfo.check output
\r
2236 format.organization.institution.standard.type.number output
\r
2237 format.revision output
\r
2238 format.date output
\r
2239 format.note output
\r
2242 if.url.std.interword.spacing
\r
2245 FUNCTION {techreport}
\r
2246 { std.status.using.comma
\r
2248 if.url.alt.interword.spacing
\r
2249 format.authors "author" output.warn
\r
2251 format.article.title "title" output.warn
\r
2252 format.howpublished "howpublished" bibinfo.check output
\r
2253 format.institution "institution" bibinfo.warn output
\r
2254 format.address "address" bibinfo.check output
\r
2255 format.tech.report.number output.nonnull
\r
2256 format.date "year" output.warn
\r
2257 format.note output
\r
2260 if.url.std.interword.spacing
\r
2263 FUNCTION {unpublished}
\r
2264 { std.status.using.comma
\r
2266 if.url.alt.interword.spacing
\r
2267 format.authors "author" output.warn
\r
2269 format.article.title "title" output.warn
\r
2270 format.date output
\r
2271 format.note "note" output.warn
\r
2274 if.url.std.interword.spacing
\r
2278 % The special entry type which provides the user interface to the
\r
2280 FUNCTION {IEEEtranBSTCTL}
\r
2281 { is.print.banners.to.terminal
\r
2282 { "** IEEEtran BST control entry " quote$ * cite$ * quote$ * " detected." *
\r
2287 CTLuse_article_number
\r
2290 { CTLuse_article_number
\r
2292 'is.use.number.for.article :=
\r
2303 CTLuse_forced_etal
\r
2306 { CTLuse_forced_etal
\r
2308 'is.forced.et.al :=
\r
2311 CTLmax_names_forced_etal
\r
2314 { CTLmax_names_forced_etal
\r
2316 'max.num.names.before.forced.et.al :=
\r
2319 CTLnames_show_etal
\r
2322 { CTLnames_show_etal
\r
2324 'num.names.shown.with.forced.et.al :=
\r
2327 CTLuse_alt_spacing
\r
2330 { CTLuse_alt_spacing
\r
2332 'is.use.alt.interword.spacing :=
\r
2335 CTLalt_stretch_factor
\r
2338 { CTLalt_stretch_factor
\r
2339 'ALTinterwordstretchfactor :=
\r
2340 "\renewcommand{\BIBentryALTinterwordstretchfactor}{"
\r
2341 ALTinterwordstretchfactor * "}" *
\r
2345 CTLdash_repeated_names
\r
2348 { CTLdash_repeated_names
\r
2350 'is.dash.repeated.names :=
\r
2353 CTLname_format_string
\r
2356 { CTLname_format_string
\r
2357 'name.format.string :=
\r
2363 { CTLname_latex_cmd
\r
2364 'name.latex.cmd :=
\r
2367 CTLname_url_prefix
\r
2370 { CTLname_url_prefix
\r
2371 'name.url.prefix :=
\r
2376 num.names.shown.with.forced.et.al max.num.names.before.forced.et.al >
\r
2377 { "CTLnames_show_etal cannot be greater than CTLmax_names_forced_etal in " cite$ * warning$
\r
2378 max.num.names.before.forced.et.al 'num.names.shown.with.forced.et.al :=
\r
2385 %%%%%%%%%%%%%%%%%%%
\r
2386 %% ENTRY ALIASES %%
\r
2387 %%%%%%%%%%%%%%%%%%%
\r
2388 FUNCTION {conference}{inproceedings}
\r
2389 FUNCTION {online}{electronic}
\r
2390 FUNCTION {internet}{electronic}
\r
2391 FUNCTION {webpage}{electronic}
\r
2392 FUNCTION {www}{electronic}
\r
2393 FUNCTION {default.type}{misc}
\r
2397 %%%%%%%%%%%%%%%%%%
\r
2398 %% MAIN PROGRAM %%
\r
2399 %%%%%%%%%%%%%%%%%%
\r
2403 EXECUTE {initialize.controls}
\r
2404 EXECUTE {initialize.status.constants}
\r
2405 EXECUTE {banner.message}
\r
2407 EXECUTE {initialize.longest.label}
\r
2408 ITERATE {longest.label.pass}
\r
2410 EXECUTE {begin.bib}
\r
2411 ITERATE {call.type$}
\r
2414 EXECUTE{completed.message}
\r
2417 %% That's all folks, mds.
\r