/utphys

To download this project, use:
bzr branch http://golem.ph.utexas.edu/~distler/code/utphys/
9 by Jacques Distler
utphys.bst 2.7: Fix "et~al." in format.crossref.editor, too.
1
% UT Physics bibliographic style, ver. 2.7. Based on:
1 by Jacques Distler
Initial Commits
2
%
3
%X     IEEE Transactions bibliography style (29-Jan-88 version)
4
%X       numeric labels, order-of-reference, IEEE abbreviations,
5
%X       quotes around article titles, commas separate all fields
6
%X       except after book titles and before "notes".  Otherwise,
7
%X       much like the "plain" family, from which this is adapted.
8
%X
9
%X       History
10
%X       9/30/85	(HWT)	Original version, by Howard Trickey.
11
%X       1/29/88	(OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik;
12
%X       THIS `ieeetr' VERSION DOES NOT WORK WITH BIBTEX 0.98i.
13
%
14
%  Modifications: 1) added hypertex support and "archive", "eprint"
15
%                    and "url" fields.
16
%                 2) parentheses around dates, and no "pp." for article entries
17
%                 3) "publisher, address" instead of "address: publisher"
18
%                 4) added "report" field for article entries.
19
%                 5) particle physics-oriented abbreviations, rather than ieee.
20
%                 6) added "collaboration" field, as per 
21
%                    Jonathan Flynn' suggestion. SPIRES now supports this field.
22
%                 7) Improved output of Proceedings entries
23
%
8 by Jacques Distler
Fix captialization of titles
24
%    Modified by Jacques Distler, 2/11
1 by Jacques Distler
Initial Commits
25
%           History: ver 1.0  9/96
26
%                    ver 1.1 10/96 - added "collaboration" field
27
%                    ver 1.2  7/97 - added a "\providecommand{\href}[2]{#2}"
28
%                                    to handle case where \href is not defined
29
%                    ver 1.3 12/97 - fixed lousy-looking proceedings output.
30
%                    ver 1.4  1/98 - fixed format.number, address in 
31
%                                    proceedings entries
32
%                    ver 1.5  3/99 - added (nonprinting) CITATION field for
33
%                                    SLAC internal use
34
%                    ver 1.6  4/99 - Fix to ensure %%CITATION output not broken
35
%                                    across lines. Added new.sentence to ensure
36
%                                    previous output properly terminated.
37
%                                    (Moral: test before you release.)
38
%                    ver 1.7 10/99 - "et.~al." should be "et al." Morons!
39
%                    ver 1.8 11/99 - Changed the Web URL to the more portable
40
%                                    arxiv.org. The "archive" field functions as
41
%                                    a true base-URL. This is NOT A
42
%                                    BACKWARDS-COMPATIBLE change!
43
%                   ver 1.8a 12/99 - MACROs for arXiv and cogprints
44
%                                    BaseURL's defined.
45
%                   ver 1.9   6/05 - eprint support for other entry types
46
%                   ver 2.0   4/08 - support "new-style" eprint identifiers
47
%                   ver 2.1   4/08 - support for "url" field
2 by Jacques Distler
Preliminary DOI support
48
%                   ver 2.2   4/08 - support for "doi" field
4 by Jacques Distler
Fix Month Formatting
49
%                   ver 2.3   8/09 - fix month formatting
5 by Jacques Distler
Journal Number
50
%                   ver 2.4   7/10 - remove some deprecated font-constructws.
51
%                                    fix journal number formatting.
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
52
%                   ver 2.5   9/10 - Internationalization and some more journal
53
%                                    MACROs (thanks to Mateus Araujo)
8 by Jacques Distler
Fix captialization of titles
54
%                   ver 2.6   2/11 - Yipes! Fix capitalization of titles, spooged
55
%                                    in previous version. (Reported by Ling Weak)
9 by Jacques Distler
utphys.bst 2.7: Fix "et~al." in format.crossref.editor, too.
56
%                   ver 2.7   8/11 - Fix "et~al." in format.crossref.editor, too.
57
%                                    (Reported by Blake Stacey)
1 by Jacques Distler
Initial Commits
58
%
59
% HyperTeX Wizardry:
60
%
61
% The following are equivalent:
62
%   archive  =  arXiv
63
%   eprint   = "hep-th/9605023"
64
% and
65
%   eprint   = "hep-th/9605023"
66
% both produce 
67
%
5 by Jacques Distler
Journal Number
68
%    \href{http://arxiv.org/abs/hep-th/9605023}{{\ttfamily hep-th/9605023}}
1 by Jacques Distler
Initial Commits
69
%
70
% in the bibliographic output at the appropriate point. More generally,
71
% if the archive field is present, we produce a URL of the form
72
% "archive/eprint" as the first argument of the \href. If absent, the base
73
% URL defaults to "http://arxiv.org/abs"
74
% If you are using a hypertex macropackage, like hyperref.sty, this command
75
% will create a link to the eprint at Los Alamos (or wherever).
76
%
77
% "New-style" arXiv identifiers are also supported.
78
%
5 by Jacques Distler
Journal Number
79
%     archivePrefix = "arXiv",
80
%     eprint    = "0707.3168",
1 by Jacques Distler
Initial Commits
81
%     primaryClass = "hep-th",
82
%
83
% produces
84
%
5 by Jacques Distler
Journal Number
85
%     \href{http://arxiv.org/abs/0707.3168}{{\ttfamily arXiv:0707.3168 [hep-th]}}
1 by Jacques Distler
Initial Commits
86
%
87
% Another (non-arXiv) example:
88
%
89
%     archive = "http://cogprints.org",
90
%     eprint = "5542",
91
%     archivePrefix = "Cogprints",
92
%
93
%  produces
94
%
5 by Jacques Distler
Journal Number
95
%     \href{http://cogprints.org/5542}{{\ttfamily Cogprints:5542}}
2 by Jacques Distler
Preliminary DOI support
96
%
3 by Jacques Distler
Add DOI support for various entry types
97
%  If a
98
%
99
%       doi = "10.xxxx"
100
%
101
%  field is present, then the journal reference becomes a
5 by Jacques Distler
Journal Number
102
%  clickable hyperlink to the online journal version of the paper.
1 by Jacques Distler
Initial Commits
103
%
104
% The bibtex output produced by SPIRES, while far from perfect, is pretty
105
% suitable for use with this style. Indeed, this style was designed with
106
% SPIRES in mind.
107
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
108
FUNCTION {string.and} {" and "}
109
FUNCTION {string.editors} {", eds."}
110
FUNCTION {string.editor} {", ed."}
111
FUNCTION {string.edition} {"~ed."}
112
FUNCTION {string.volume} {"vol.~"}
113
FUNCTION {string.capsvolume} {"Vol.~"}
114
FUNCTION {string.of} {" of "}
115
FUNCTION {string.number} {"no.~"}
116
FUNCTION {string.capsnumber} {"No.~"}
117
FUNCTION {string.in} {"in "}
118
FUNCTION {string.spacein} {" in "}
119
FUNCTION {string.capsin} {"In "}
120
FUNCTION {string.multipages} {"pp.~"}
121
FUNCTION {string.pages} {"p.~"}
122
FUNCTION {string.chapter} {"ch.~"}
123
FUNCTION {string.techrep} {"Tech. Rep."}
124
FUNCTION {string.mastersthesis} {"Master's thesis"}
125
FUNCTION {string.phdthesis} {"PhD thesis"}
126
127
MACRO {jan} {"Jan."}
128
MACRO {feb} {"Feb."}
129
MACRO {mar} {"Mar."}
130
MACRO {apr} {"Apr."}
131
MACRO {may} {"May"}
132
MACRO {jun} {"June"}
133
MACRO {jul} {"July"}
134
MACRO {aug} {"Aug."}
135
MACRO {sep} {"Sept."}
136
MACRO {oct} {"Oct."}
137
MACRO {nov} {"Nov."}
138
MACRO {dec} {"Dec."}
139
MACRO {am} {"Acta Math."}
140
MACRO {amj} {"Am. J. Phys."}
141
MACRO {ap} {"Ann. Phys."}
142
MACRO {cmp} {"Comm. Math. Phys."}
143
MACRO {ijmp} {"Int. Jour. Mod. Phys."}
144
MACRO {mpl} {"Mod. Phys. Lett."}
145
MACRO {njp} {"New J. Phys"}
146
MACRO {nup} {"Nucl. Phys."}
147
MACRO {pl} {"Phys. Lett."}
148
MACRO {pla} {"Phys. Lett. A"}
149
MACRO {pr} {"Phys. Rev."}
150
MACRO {pra} {"Phys. Rev. A"}
151
MACRO {prl} {"Phys. Rev. Lett."}
152
MACRO {repmp} {"Rep. Math. Phys"}
153
MACRO {rmp} {"Rev. Mod. Phys."}
154
155
MACRO {arXiv}     {"http://arxiv.org/abs"}
156
MACRO {cogprints} {"http://cogprints.org"}
157
MACRO {pubmed}    {"http://www.ncbi.nlm.nih.gov/pubmed"}
158
1 by Jacques Distler
Initial Commits
159
ENTRY
160
  { address
161
    author
162
    booktitle
163
    chapter
164
    edition
165
    editor
166
    howpublished
167
    institution
168
    journal
169
    key
170
    month
171
    note
172
    number
173
    organization
174
    pages
175
    publisher
176
    school
177
    series
178
    title
179
    type
180
    volume
181
    year
182
    archive
183
    eprint
184
    report
185
    collaboration
186
    SLACcitation
187
    archivePrefix
188
    primaryClass
189
    url
2 by Jacques Distler
Preliminary DOI support
190
    doi
1 by Jacques Distler
Initial Commits
191
  }
192
  {}
193
  { label }
194
195
INTEGERS { output.state before.all mid.sentence after.quote after.sentence
196
		after.quoted.block after.block }
197
198
FUNCTION {init.state.consts}
199
{ #0 'before.all :=
200
  #1 'mid.sentence :=
201
  #2 'after.quote :=
202
  #3 'after.sentence :=
203
  #4 'after.quoted.block :=
204
  #5 'after.block :=
205
}
206
207
STRINGS { s t }
208
209
FUNCTION {output.nonnull}
210
{ 's :=
211
  output.state mid.sentence =
212
    { ", " * write$ }
213
    { output.state after.quote =
214
	{ " " * write$ }
215
	{ output.state after.block =
216
	    { add.period$ write$
217
	      newline$
218
	      "\newblock " write$
219
	    }
220
	    { output.state before.all =
221
		'write$
222
		{ output.state after.quoted.block =
223
		    { write$
224
		      newline$
225
		      "\newblock " write$
226
		    }
227
		    { add.period$ " " * write$ }
228
		  if$
229
		}
230
	      if$
231
	    }
232
	  if$
233
	}
234
      if$
235
      mid.sentence 'output.state :=
236
    }
237
  if$
238
  s
239
}
240
241
FUNCTION {output}
242
{ duplicate$ empty$
243
    'pop$
244
    'output.nonnull
245
  if$
246
}
247
248
FUNCTION {output.check}
249
{ 't :=
250
  duplicate$ empty$
251
    { pop$ "empty " t * " in " * cite$ * warning$ }
252
    'output.nonnull
253
  if$
254
}
255
256
FUNCTION {output.bibitem}
257
{ newline$
258
  "\bibitem{" write$
259
  cite$ write$
260
  "}" write$
261
  newline$
262
  ""
263
  before.all 'output.state :=
264
}
265
266
FUNCTION {blank.sep}
267
{ after.quote 'output.state :=
268
}
269
270
FUNCTION {fin.entry}
271
{ output.state after.quoted.block =
272
    'skip$
273
    'add.period$
274
  if$
275
  write$
276
  newline$
277
}
278
279
FUNCTION {new.block}
280
{ output.state before.all =
281
    'skip$
282
    { output.state after.quote =
283
	{ after.quoted.block 'output.state := }
284
	{ after.block 'output.state := }
285
      if$
286
    }
287
  if$
288
}
289
290
FUNCTION {new.sentence}
291
{ output.state after.block =
292
    'skip$
293
    { output.state before.all =
294
	'skip$
295
	{ after.sentence 'output.state := }
296
      if$
297
    }
298
  if$
299
}
300
301
FUNCTION {not}
302
{   { #0 }
303
    { #1 }
304
  if$
305
}
306
307
FUNCTION {and}
308
{   'skip$
309
    { pop$ #0 }
310
  if$
311
}
312
313
FUNCTION {or}
314
{   { pop$ #1 }
315
    'skip$
316
  if$
317
}
318
319
FUNCTION {new.block.checka}
320
{ empty$
321
    'skip$
322
    'new.block
323
  if$
324
}
325
326
FUNCTION {new.block.checkb}
327
{ empty$
328
  swap$ empty$
329
  and
330
    'skip$
331
    'new.block
332
  if$
333
}
334
335
FUNCTION {new.sentence.checka}
336
{ empty$
337
    'skip$
338
    'new.sentence
339
  if$
340
}
341
342
FUNCTION {field.or.null}
343
{ duplicate$ empty$
344
    { pop$ "" }
345
    'skip$
346
  if$
347
}
348
349
FUNCTION {emphasize}
350
{ duplicate$ empty$
351
    { pop$ "" }
352
    { "{\em " swap$ * "}" * }
353
  if$
354
}
355
356
FUNCTION {capitalize}
357
{ "u" change.case$ "t" change.case$ }
358
359
INTEGERS { nameptr namesleft numnames }
360
361
FUNCTION {format.names}
362
{ 's :=
363
  #1 'nameptr :=
364
  s num.names$ 'numnames :=
365
  numnames 'namesleft :=
366
    { namesleft #0 > }
367
    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
368
      nameptr #1 >
369
	{ namesleft #1 >
370
	    { ", " * t * }
371
	    { numnames #2 >
372
		{ "," * }
373
		'skip$
374
	      if$
375
	      t "others" =
9 by Jacques Distler
utphys.bst 2.7: Fix "et~al." in format.crossref.editor, too.
376
		{ " {\em et~al.}" * }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
377
		{ string.and * t * }
1 by Jacques Distler
Initial Commits
378
	      if$
379
	    }
380
	  if$
381
	}
382
	't
383
      if$
384
      nameptr #1 + 'nameptr :=
385
      namesleft #1 - 'namesleft :=
386
    }
387
  while$
388
}
389
390
FUNCTION {format.authors}
391
{ author empty$
392
    { "" }
393
    { author format.names }
394
  if$
395
}
396
397
FUNCTION {format.archive}
398
{
399
  archivePrefix empty$
400
      { "" }
401
      { archivePrefix ":" *}
402
  if$            
403
}
404
405
FUNCTION {format.primaryClass}
406
{
407
  primaryClass empty$
408
      { "" }
409
      { " [" primaryClass * "]" *}
410
  if$            
411
}
412
413
FUNCTION {format.eprint}
414
{ eprint empty$
415
     { ""}
416
     { archive empty$
417
          {"\href{http://arxiv.org/abs/" eprint * "}" * 
5 by Jacques Distler
Journal Number
418
             "{{\ttfamily " * format.archive * eprint *
1 by Jacques Distler
Initial Commits
419
              format.primaryClass * "}}" *}
420
          {"\href{" archive *  "/" * eprint * "}" * 
5 by Jacques Distler
Journal Number
421
             "{{\ttfamily " * format.archive * eprint *
1 by Jacques Distler
Initial Commits
422
              format.primaryClass * "}}" *}
423
       if$
424
     }
425
     if$
426
}
427
428
FUNCTION {format.url}
429
{ url empty$
430
    { "" }
431
    {"\url{" url * "}" *}
432
  if$
433
}
434
3 by Jacques Distler
Add DOI support for various entry types
435
FUNCTION {add.doi}
436
{ duplicate$ empty$
437
    { skip$ }
438
    { doi empty$
439
        {}
440
        {"\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" *}
441
      if$
442
    }
443
  if$
444
}
445
1 by Jacques Distler
Initial Commits
446
FUNCTION {format.report}
447
{ report empty$
448
     { ""}
449
     { report}
450
     if$
451
}
452
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
453
FUNCTION {format.howpublished}
454
{ howpublished empty$
455
    { "" }
456
    { howpublished capitalize
457
    }
458
  if$
459
}
460
1 by Jacques Distler
Initial Commits
461
FUNCTION {format.editors}
462
{ editor empty$
463
    { "" }
464
    { editor format.names
465
      editor num.names$ #1 >
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
466
	{ string.editors * }
467
	{ string.editor * }
1 by Jacques Distler
Initial Commits
468
      if$
469
    }
470
  if$
471
}
472
473
FUNCTION {format.title}
474
{ title empty$
475
    { "" }
8 by Jacques Distler
Fix captialization of titles
476
    { "``" title "t" change.case$ * ",''" * }
1 by Jacques Distler
Initial Commits
477
  if$
478
}
479
480
FUNCTION {format.title.p}
481
{ title empty$
482
    { "" }
8 by Jacques Distler
Fix captialization of titles
483
    { "``" title "t" change.case$ * ".''" * }
1 by Jacques Distler
Initial Commits
484
  if$
485
}
486
487
FUNCTION {n.dashify}
488
{ 't :=
489
  ""
490
    { t empty$ not }
491
    { t #1 #1 substring$ "-" =
492
	{ t #1 #2 substring$ "--" = not
493
	    { "--" *
494
	      t #2 global.max$ substring$ 't :=
495
	    }
496
	    {   { t #1 #1 substring$ "-" = }
497
		{ "-" *
498
		  t #2 global.max$ substring$ 't :=
499
		}
500
	      while$
501
	    }
502
	  if$
503
	}
504
	{ t #1 #1 substring$ *
505
	  t #2 global.max$ substring$ 't :=
506
	}
507
      if$
508
    }
509
  while$
510
}
511
512
FUNCTION {format.date}
513
{ year empty$
514
    { month empty$
515
	{ "" }
516
	{ "there's a month but no year in " cite$ * warning$
517
	  month
518
	}
519
      if$
520
    }
521
    { month empty$
522
	'year
4 by Jacques Distler
Fix Month Formatting
523
	{ month capitalize ", " * year * }
1 by Jacques Distler
Initial Commits
524
      if$
525
    }
526
  if$
527
}
528
529
FUNCTION {format.date.paren}
530
{ year empty$
531
    { month empty$
532
	{ "" }
533
	{ "there's a month but no year in " cite$ * warning$
534
	  month
535
	}
536
      if$
537
    }
538
    { month empty$
2 by Jacques Distler
Preliminary DOI support
539
	{"(" year * ") " *}
4 by Jacques Distler
Fix Month Formatting
540
	{"(" month capitalize * ", " * year * ") " *}
1 by Jacques Distler
Initial Commits
541
      if$
542
    }
543
  if$
544
}
545
546
FUNCTION {format.collaboration}
547
{ collaboration empty$
548
    { "" }
5 by Jacques Distler
Journal Number
549
    { "{\bfseries " collaboration * "} " * "Collaboration" * }
1 by Jacques Distler
Initial Commits
550
  if$
551
}
552
553
FUNCTION {format.SLACcitation}
554
{ SLACcitation empty$
555
  {""}
556
   { newline$ SLACcitation output "" newline$ }
557
  if$
558
}
559
560
FUNCTION {format.btitle}
561
{ title emphasize
562
}
563
564
FUNCTION {tie.or.space.connect}
565
{ duplicate$ text.length$ #3 <
566
    { "~" }
567
    { " " }
568
  if$
569
  swap$ * *
570
}
571
572
FUNCTION {either.or.check}
573
{ empty$
574
    'pop$
575
    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
576
  if$
577
}
578
579
FUNCTION {format.bvolume}
580
{ volume empty$
581
    { "" }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
582
    { string.volume volume *
1 by Jacques Distler
Initial Commits
583
      series empty$
584
	'skip$
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
585
	{ string.of * series emphasize * }
1 by Jacques Distler
Initial Commits
586
      if$
587
      "volume and number" number either.or.check
588
    }
589
  if$
590
}
591
592
FUNCTION {format.number.series}
593
{ volume empty$
594
    { number empty$
595
	{ series field.or.null }
596
	{ output.state mid.sentence =
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
597
	    { string.number }
598
	    { string.capsnumber }
1 by Jacques Distler
Initial Commits
599
	  if$
600
	  number *
601
	  series empty$
602
	    { "there's a number but no series in " cite$ * warning$ }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
603
	    { string.spacein * series * }
1 by Jacques Distler
Initial Commits
604
	  if$
605
	}
606
      if$
607
    }
608
    { "" }
609
  if$
610
}
611
612
FUNCTION {format.edition}
613
{ edition empty$
614
    { "" }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
615
    { edition "l" change.case$ string.edition * }
1 by Jacques Distler
Initial Commits
616
  if$
617
}
618
619
INTEGERS { multiresult }
620
621
FUNCTION {multi.page.check}
622
{ 't :=
623
  #0 'multiresult :=
624
    { multiresult not
625
      t empty$ not
626
      and
627
    }
628
    { t #1 #1 substring$
629
      duplicate$ "-" =
630
      swap$ duplicate$ "," =
631
      swap$ "+" =
632
      or or
633
	{ #1 'multiresult := }
634
	{ t #2 global.max$ substring$ 't := }
635
      if$
636
    }
637
  while$
638
  multiresult
639
}
640
641
FUNCTION {format.pages}
642
{ pages empty$
643
    { "" }
644
    { pages multi.page.check
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
645
	{ string.multipages pages n.dashify * }
646
	{ string.pages pages * }
1 by Jacques Distler
Initial Commits
647
      if$
648
    }
649
  if$
650
}
651
652
FUNCTION {format.pages.nopp}
653
{ pages empty$
5 by Jacques Distler
Journal Number
654
    { "empty pages in " cite$ * warning$
655
      ""
656
    }
1 by Jacques Distler
Initial Commits
657
    { pages multi.page.check
658
	{ pages n.dashify  }
659
	{ pages }
660
      if$
661
    }
662
  if$
663
}
664
665
666
FUNCTION {format.volume}
667
{ volume empty$
668
    { "" }
5 by Jacques Distler
Journal Number
669
    { "{\bfseries " volume * "} " * }
1 by Jacques Distler
Initial Commits
670
  if$
671
}
672
673
FUNCTION {format.number}
674
{ number empty$
675
    { "" }
5 by Jacques Distler
Journal Number
676
    { "no.~" number * ", " *}
1 by Jacques Distler
Initial Commits
677
  if$
678
}
679
680
FUNCTION {format.chapter.pages}
681
{ chapter empty$
682
    'format.pages
683
    { type empty$
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
684
	{ string.chapter chapter * }
1 by Jacques Distler
Initial Commits
685
	{ type "l" change.case$ chapter tie.or.space.connect }
686
      if$
687
      pages empty$
688
	'skip$
689
	{ ", " * format.pages * }
690
      if$
691
    }
692
  if$
693
}
694
695
FUNCTION {format.in.ed.booktitle}
696
{ booktitle empty$
697
    { "" }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
698
    { string.in booktitle emphasize *
1 by Jacques Distler
Initial Commits
699
      editor empty$
700
	'skip$
701
	{ ", " * format.editors *  }
702
      if$
703
    }
704
  if$
705
}
706
707
FUNCTION {format.thesis.type}
708
{ type empty$
709
    'skip$
710
    { pop$
711
      output.state after.block =
712
	{ type "t" change.case$ }
713
	{ type "l" change.case$ }
714
      if$
715
    }
716
  if$
717
}
718
719
FUNCTION {empty.misc.check}
720
{ author empty$ title empty$ howpublished empty$
721
  month empty$ year empty$ note empty$
722
  and and and and and
723
    { "all relevant fields are empty in " cite$ * warning$ }
724
    'skip$
725
  if$
726
}
727
728
FUNCTION {format.tr.number}
729
{ type empty$
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
730
    { string.techrep }
1 by Jacques Distler
Initial Commits
731
    'type
732
  if$
733
  number empty$
734
    { "l" change.case$ }
735
    { number tie.or.space.connect }
736
  if$
737
}
738
739
FUNCTION {format.paddress}
740
{ address empty$
741
    { "" }
742
    { "(" address * ")" * }
743
  if$
744
}
745
746
FUNCTION {format.article.crossref}
747
{ key empty$
748
    { journal empty$
749
	{ "need key or journal for " cite$ * " to crossref " * crossref *
750
	  warning$
751
	  ""
752
	}
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
753
	{ string.in "{\em " * journal * "\/}" * }
1 by Jacques Distler
Initial Commits
754
      if$
755
    }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
756
    { string.in key * }
1 by Jacques Distler
Initial Commits
757
  if$
758
  " \cite{" * crossref * "}" *
759
}
760
761
FUNCTION {format.crossref.editor}
762
{ editor #1 "{vv~}{ll}" format.name$
763
  editor num.names$ duplicate$
764
  #2 >
9 by Jacques Distler
utphys.bst 2.7: Fix "et~al." in format.crossref.editor, too.
765
    { pop$ " {\em et~al.}" * }
1 by Jacques Distler
Initial Commits
766
    { #2 <
767
	'skip$
768
	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
9 by Jacques Distler
utphys.bst 2.7: Fix "et~al." in format.crossref.editor, too.
769
	    { " {\em et~al.}" * }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
770
	    { string.and * editor #2 "{vv~}{ll}" format.name$ * }
1 by Jacques Distler
Initial Commits
771
	  if$
772
	}
773
      if$
774
    }
775
  if$
776
}
777
778
FUNCTION {format.book.crossref}
779
{ volume empty$
780
    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
781
      string.capsin
1 by Jacques Distler
Initial Commits
782
    }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
783
    { string.capsvolume volume *
784
      string.of *
1 by Jacques Distler
Initial Commits
785
    }
786
  if$
787
  editor empty$
788
  editor field.or.null author field.or.null =
789
  or
790
    { key empty$
791
	{ series empty$
792
	    { "need editor, key, or series for " cite$ * " to crossref " *
793
	      crossref * warning$
794
	      "" *
795
	    }
796
	    { "{\em " * series * "\/}" * }
797
	  if$
798
	}
799
	{ key * }
800
      if$
801
    }
802
    { format.crossref.editor * }
803
  if$
804
  " \cite{" * crossref * "}" *
805
}
806
807
FUNCTION {format.incoll.inproc.crossref}
808
{ editor empty$
809
  editor field.or.null author field.or.null =
810
  or
811
    { key empty$
812
	{ booktitle empty$
813
	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
814
	      crossref * warning$
815
	      ""
816
	    }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
817
	    { string.in "{\em " * booktitle * "\/}" * }
1 by Jacques Distler
Initial Commits
818
	  if$
819
	}
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
820
	{ string.in key * }
1 by Jacques Distler
Initial Commits
821
      if$
822
    }
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
823
    { string.in format.crossref.editor * }
1 by Jacques Distler
Initial Commits
824
  if$
825
  " \cite{" * crossref * "}" *
826
}
827
2 by Jacques Distler
Preliminary DOI support
828
FUNCTION {format.journal}
829
{ journal missing$   
830
    { "" }
831
    {journal emphasize " " *
832
     format.volume *
5 by Jacques Distler
Journal Number
833
     format.number *
2 by Jacques Distler
Preliminary DOI support
834
     format.date.paren *
4 by Jacques Distler
Fix Month Formatting
835
     format.pages.nopp *
2 by Jacques Distler
Preliminary DOI support
836
      }
837
    if$
838
}
839
1 by Jacques Distler
Initial Commits
840
FUNCTION {article}
841
{ output.bibitem
842
  format.collaboration output
843
  format.authors "author" output.check
844
  format.title "title" output.check
845
  blank.sep
846
  crossref missing$
847
  { journal missing$   
3 by Jacques Distler
Add DOI support for various entry types
848
        {}
849
        { format.journal add.doi "journal" output.check}
1 by Jacques Distler
Initial Commits
850
      if$
3 by Jacques Distler
Add DOI support for various entry types
851
    report missing$
2 by Jacques Distler
Preliminary DOI support
852
        {format.eprint output}
853
        {blank.sep format.report output format.eprint output}
3 by Jacques Distler
Add DOI support for various entry types
854
      if$
1 by Jacques Distler
Initial Commits
855
    }
856
    { format.article.crossref output.nonnull
857
      format.pages output
858
      format.eprint output
859
    }
860
  if$
861
  new.sentence
862
  format.url output
863
  new.sentence
864
  note output
865
  new.sentence
866
  format.SLACcitation output
867
  fin.entry
868
}
869
870
FUNCTION {book}
871
{ output.bibitem
872
  format.collaboration output
873
  author empty$
874
    { format.editors "author and editor" output.check }
875
    { format.authors output.nonnull
876
      crossref missing$
877
	{ "author and editor" editor either.or.check }
878
	'skip$
879
      if$
880
    }
881
  if$
3 by Jacques Distler
Add DOI support for various entry types
882
  format.btitle add.doi "title" output.check
1 by Jacques Distler
Initial Commits
883
  crossref missing$
884
    { format.bvolume output
885
      new.block
886
      format.number.series output
887
      new.sentence
888
      publisher "publisher" output.check
889
      address output
890
    }
891
    { new.block
892
      format.book.crossref output.nonnull
893
    }
894
  if$
895
  format.edition output
896
  format.date "year" output.check
897
  new.block
898
  format.eprint output
899
  new.block
900
  format.url output
901
  new.block
902
  note output
903
  new.sentence
904
  format.SLACcitation output
905
  fin.entry
906
}
907
908
FUNCTION {booklet}
909
{ output.bibitem
910
  format.collaboration output
911
  format.authors output
912
  title empty$
913
    { "empty title in " cite$ * warning$
914
      howpublished new.sentence.checka
915
    }
916
    { howpublished empty$ not
917
      address empty$ month empty$ year empty$ and and
918
      or
919
	{ format.title.p output.nonnull }
920
	{ format.title output.nonnull }
921
      if$
922
      blank.sep
923
    }
924
  if$
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
925
  format.howpublished output
1 by Jacques Distler
Initial Commits
926
  address output
927
  format.date output
928
  new.block
929
  format.eprint output
930
  new.block
931
  format.url output
932
  new.block
933
  note output
934
  new.sentence
935
  format.SLACcitation output
936
  fin.entry
937
}
938
939
FUNCTION {inbook}
940
{ output.bibitem
941
  format.collaboration output
942
  author empty$
943
    { format.editors "author and editor" output.check }
944
    { format.authors output.nonnull
945
      crossref missing$
946
	{ "author and editor" editor either.or.check }
947
	'skip$
948
      if$
949
    }
950
  if$
951
  format.btitle "title" output.check
952
  crossref missing$
953
    { format.bvolume output
3 by Jacques Distler
Add DOI support for various entry types
954
      format.chapter.pages add.doi "chapter and pages" output.check
1 by Jacques Distler
Initial Commits
955
      new.block
956
      format.number.series output
957
      new.block
958
      publisher "publisher" output.check
959
      address output
960
    }
3 by Jacques Distler
Add DOI support for various entry types
961
    { format.chapter.pages add.doi "chapter and pages" output.check
1 by Jacques Distler
Initial Commits
962
      new.block
963
      format.book.crossref output.nonnull
964
    }
965
  if$
966
  format.edition output
967
  format.date "year" output.check
968
  new.block
969
  format.eprint output
970
  new.block
971
  format.url output
972
  new.block
973
  note output
974
  new.sentence
975
  format.SLACcitation output
976
  fin.entry
977
}
978
979
FUNCTION {incollection}
980
{ output.bibitem
981
  format.collaboration output
982
  format.authors "author" output.check
3 by Jacques Distler
Add DOI support for various entry types
983
  format.title add.doi "title" output.check
1 by Jacques Distler
Initial Commits
984
  blank.sep
985
  crossref missing$
986
    { format.in.ed.booktitle "booktitle" output.check
987
      format.bvolume output
988
      format.number.series output
989
      format.chapter.pages output
990
      new.block
991
      publisher "publisher" output.check
992
      address output
993
      format.edition output
994
      format.date "year" output.check
995
    }
996
    { format.incoll.inproc.crossref output.nonnull
997
      format.chapter.pages output
998
    }
999
  if$
1000
  new.block
1001
  format.eprint output
1002
  new.block
1003
  format.url output
1004
  new.block
1005
  note output
1006
  new.sentence
1007
  format.SLACcitation output
1008
  fin.entry
1009
}
1010
1011
FUNCTION {inproceedings}
1012
{ output.bibitem
1013
  format.collaboration output
1014
  format.authors "author" output.check
3 by Jacques Distler
Add DOI support for various entry types
1015
  format.title add.doi "title" output.check
1 by Jacques Distler
Initial Commits
1016
  blank.sep
1017
  crossref missing$
1018
    { format.in.ed.booktitle "booktitle" output.check
1019
      format.bvolume output
1020
      format.number.series output
1021
      format.pages output
1022
      organization output
1023
      new.block
1024
      publisher output
1025
      address output
1026
      format.date "year" output.check
1027
    }
1028
    { format.incoll.inproc.crossref output.nonnull
1029
      format.pages output
1030
    }
1031
  if$
1032
  new.block
1033
  format.eprint output
1034
  new.block
1035
  format.url output
1036
  new.block
1037
  note output
1038
  new.sentence
1039
  format.SLACcitation output
1040
  fin.entry
1041
}
1042
1043
FUNCTION {conference} { inproceedings }
1044
1045
FUNCTION {manual}
1046
{ output.bibitem
1047
  format.collaboration output
1048
  author empty$
1049
    { organization empty$
1050
	'skip$
1051
	{ organization output.nonnull
1052
	  address output
1053
	}
1054
      if$
1055
    }
1056
    { format.authors output.nonnull }
1057
  if$
1058
  format.btitle "title" output.check
1059
  author empty$
1060
    { organization empty$
1061
	{ address new.block.checka
1062
	  address output
1063
	}
1064
	'skip$
1065
      if$
1066
    }
1067
    { organization address new.block.checkb
1068
      organization output
1069
      address output
1070
    }
1071
  if$
1072
  format.edition output
1073
  format.date output
1074
  new.block
1075
  format.eprint output
1076
  new.block
1077
  format.url output
1078
  new.block
1079
  note output
1080
  fin.entry
1081
}
1082
1083
FUNCTION {mastersthesis}
1084
{ output.bibitem
1085
  format.authors "author" output.check
3 by Jacques Distler
Add DOI support for various entry types
1086
  format.title add.doi "title" output.check
1 by Jacques Distler
Initial Commits
1087
  blank.sep
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
1088
  string.mastersthesis format.thesis.type output.nonnull
1 by Jacques Distler
Initial Commits
1089
  school "school" output.check
1090
  address output
1091
  format.date "year" output.check
1092
  new.block
1093
  format.url output
1094
  new.block
1095
  note output
1096
  fin.entry
1097
}
1098
1099
FUNCTION {misc}
1100
{ output.bibitem
1101
  format.collaboration output
1102
  format.authors output
1103
  title empty$
1104
    { howpublished new.sentence.checka }
1105
    { howpublished empty$ not
1106
      month empty$ year empty$ and
1107
      or
1108
	{ format.title.p output.nonnull }
1109
	{ format.title output.nonnull }
1110
      if$
1111
      blank.sep
1112
    }
1113
  if$
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
1114
  format.howpublished output
1 by Jacques Distler
Initial Commits
1115
  format.date output
1116
  new.block
1117
  format.url output
1118
  new.sentence
1119
  note output
1120
  new.sentence
1121
  fin.entry
1122
  empty.misc.check
1123
}
1124
1125
FUNCTION {phdthesis}
1126
{ output.bibitem
1127
  format.authors "author" output.check
3 by Jacques Distler
Add DOI support for various entry types
1128
  format.btitle add.doi "title" output.check
1 by Jacques Distler
Initial Commits
1129
  new.block
7 by Jacques Distler
Utphys 2.5: Internationalization and some more journal MACROs
1130
  string.phdthesis format.thesis.type output.nonnull
1 by Jacques Distler
Initial Commits
1131
  school "school" output.check
1132
  address output
1133
  format.date "year" output.check
1134
  new.block
1135
  format.eprint output
1136
  new.block
1137
  format.url output
1138
  new.block
1139
  note output
1140
  new.sentence
1141
  format.SLACcitation output
1142
  fin.entry
1143
}
1144
1145
FUNCTION {proceedings}
1146
{ output.bibitem
1147
  editor empty$
1148
    { organization output }
1149
    { format.editors output.nonnull }
1150
  if$
3 by Jacques Distler
Add DOI support for various entry types
1151
  format.btitle add.doi "title" output.check
1 by Jacques Distler
Initial Commits
1152
  format.bvolume output
1153
  format.number.series output
1154
  editor empty$
1155
    'skip$
1156
    { organization output }
1157
  if$
1158
  new.block
1159
  publisher output
1160
  address output
1161
  format.date "year" output.check
1162
  new.block
1163
  format.eprint output
1164
  new.block
1165
  format.url output
1166
  new.block
1167
  note output
1168
  new.sentence
1169
  format.SLACcitation output
1170
  fin.entry
1171
}
1172
1173
FUNCTION {techreport}
1174
{ output.bibitem
1175
  format.collaboration output
1176
  format.authors "author" output.check
3 by Jacques Distler
Add DOI support for various entry types
1177
  format.title add.doi "title" output.check
1 by Jacques Distler
Initial Commits
1178
  blank.sep
1179
  format.tr.number output.nonnull
1180
  institution "institution" output.check
1181
  address output
1182
  format.date "year" output.check
1183
  new.block
1184
  format.eprint output
1185
  new.block
1186
  format.url output
1187
  new.block
1188
  note output
1189
  fin.entry
1190
}
1191
1192
FUNCTION {unpublished}
1193
{ output.bibitem
1194
  format.collaboration output
1195
  format.authors "author" output.check
1196
  format.title.p "title" output.check
1197
  blank.sep
1198
  note "note" output.check
1199
  format.date output
1200
  new.sentence
1201
  format.SLACcitation output
1202
  fin.entry
1203
}
1204
1205
FUNCTION {default.type} { misc }
1206
1207
READ
1208
1209
STRINGS { longest.label }
1210
1211
INTEGERS { number.label longest.label.width }
1212
1213
FUNCTION {initialize.longest.label}
1214
{ "" 'longest.label :=
1215
  #1 'number.label :=
1216
  #0 'longest.label.width :=
1217
}
1218
1219
FUNCTION {longest.label.pass}
1220
{ number.label int.to.str$ 'label :=
1221
  number.label #1 + 'number.label :=
1222
  label width$ longest.label.width >
1223
    { label 'longest.label :=
1224
      label width$ 'longest.label.width :=
1225
    }
1226
    'skip$
1227
  if$
1228
}
1229
1230
EXECUTE {initialize.longest.label}
1231
1232
ITERATE {longest.label.pass}
1233
1234
FUNCTION {begin.bib}
1235
{ preamble$ empty$
1236
    'skip$
1237
    { preamble$ write$ newline$ }
1238
  if$
1239
  "\providecommand{\href}[2]{#2}"
1240
  "\begingroup\raggedright\begin{thebibliography}{" * longest.label  * 
1241
  "}" * write$ newline$ }
1242
1243
EXECUTE {begin.bib}
1244
1245
EXECUTE {init.state.consts}
1246
1247
ITERATE {call.type$}
1248
1249
FUNCTION {end.bib}
1250
{ newline$
1251
  "\end{thebibliography}\endgroup" write$ newline$
1252
}
1253
1254
EXECUTE {end.bib}