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