Révision c3cc6a4e

/dev/null
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$
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.

Formats disponibles : Unified diff