1
% Hypertex version of the AMSalpha bibliographic style, but sorts
2
% alphabetically by key, rather than by author. Based on:
4
%%% ====================================================================
5
%%% @BibTeX-style-file{
6
%%% filename = "amsalpha.bst",
8
%%% date = "2000/03/27",
9
%%% time = "13:49:36 EST",
10
%%% checksum = "00166 1404 4124 29978",
11
%%% author = "American Mathematical Society",
12
%%% address = "American Mathematical Society,
13
%%% Technical Support,
14
%%% Electronic Products and Services,
16
%%% Providence, RI 02940,
18
%%% telephone = "401-455-4080 or (in the USA and Canada)
19
%%% 800-321-4AMS (321-4267)",
20
%%% FAX = "401-331-3842",
21
%%% email = "tech-support@ams.org (Internet)",
22
%%% copyright = "Copyright 1995 American Mathematical Society,
23
%%% all rights reserved. Copying of this file is
24
%%% authorized only if either:
25
%%% (1) you make absolutely no changes to your copy,
26
%%% including name; OR
27
%%% (2) if you do make changes, you first rename it
28
%%% to some other name.",
29
%%% codetable = "ISO/ASCII",
30
%%% keywords = "bibtex, bibliography, amslatex, ams-latex",
31
%%% supported = "yes",
32
%%% abstract = "BibTeX bibliography style `amsalpha' for BibTeX
33
%%% versions 0.99a or later and LaTeX version 2e.
34
%%% Produces alphabetic-label bibliography items in
35
%%% a form typical for American Mathematical Society
37
%%% docstring = "The checksum field above contains a CRC-16
38
%%% checksum as the first value, followed by the
39
%%% equivalent of the standard UNIX wc (word
40
%%% count) utility output of lines, words, and
41
%%% characters. This is produced by Robert
42
%%% Solovay's checksum utility.",
44
%%% ====================================================================
46
% Modified by Jacques Distler, 7/2010
48
% Added support for Eprint archives.
50
% url, collaboration, report and SLACcitation fields
54
% The following are equivalent:
56
% eprint = "hep-th/9605023"
58
% eprint = "hep-th/9605023"
61
% \href{http://arxiv.org/abs/hep-th/9605023}{{\tt hep-th/9605023}}
63
% in the bibliographic output at the appropriate point. More generally,
64
% if the archive field is present, we produce a URL of the form
65
% "archive/eprint" as the first argument of the \href. If absent, the base
66
% URL defaults to "http://arxiv.org/abs"
67
% If you are using a hypertex macropackage, like hyperref.sty, this command
68
% will create a link to the eprint at Los Alamos (or wherever).
70
% "New-style" arXiv identifiers are also supported.
72
% archivePrefix = "arXiv",
73
% eprint = "0707.3168",
74
% primaryClass = "hep-th",
78
% \href{http://arxiv.org/abs/0707.3168}{{\tt arXiv:0707.3168 [hep-th]}}
80
% Another (non-arXiv) example:
82
% archive = "http://cogprints.org",
84
% archivePrefix = "Cogprints",
88
% \href{http://cogprints.org/5542}{{\tt Cogprints:5542}}
94
% field is present, then the journal reference becomes a
95
% clickable hyperlink to the online journal version of the paper.
97
% The bibtex output produced by SPIRES, while far from perfect, is pretty
98
% suitable for use with this style. Indeed, this style was designed with
102
% See the file btxbst.doc for extra documentation other than
103
% what is included here. And see btxhak.tex for a description
104
% of the BibTeX language and how to use it.
106
% This defines the types of fields that can occur in a database entry
107
% for this particular bibliography style. Except for `language',
108
% this is the standard list from alpha.bst.
110
%% Types of entries currently allowed in a BibTeX file:
112
%% ARTICLE -- An article from a journal or magazine.
114
%% BOOK -- A book with an explicit publisher.
116
%% BOOKLET -- A work that is printed and bound,
117
%% but without a named publisher or sponsoring institution.
119
%% CONFERENCE -- The same as INPROCEEDINGS,
120
%% included for Scribe compatibility.
122
%% INBOOK -- A part of a book,
123
%% which may be a chapter (or section or whatever) and/or a range of pages.
125
%% INCOLLECTION -- A part of a book having its own title.
127
%% INPROCEEDINGS -- An article in a conference proceedings.
129
%% MANUAL -- Technical documentation.
131
%% MASTERSTHESIS -- A Master's thesis.
133
%% MISC -- Use this type when nothing else fits.
135
%% PHDTHESIS -- A PhD thesis.
137
%% PROCEEDINGS -- The proceedings of a conference.
139
%% TECHREPORT -- A report published by a school or other institution,
140
%% usually numbered within a series.
142
%% UNPUBLISHED -- A document having an author and title, but not formally
181
{ label extra.label sort.label bysame }
183
% Removed after.sentence, after.block---not needed.
185
INTEGERS { output.state before.all mid.sentence after.quote after.sentence
186
after.quoted.block after.block }
188
FUNCTION {init.state.consts}
192
#3 'after.sentence :=
193
#4 'after.quoted.block :=
204
{ duplicate$ ":::: `" swap$ * "'" * top$
208
{"STACK====================================================================="
211
"ENDSTACK=================================================================="
233
FUNCTION {field.or.null}
243
{ "\emph{" swap$ * "}" * }
250
{ "{\tt " swap$ * "}" * }
254
% n.dashify is used to make sure page ranges get the TeX code
255
% (two hyphens) for en-dashes.
261
{ t #1 #1 substring$ "-" =
262
{ t #1 #2 substring$ "--" = not
264
t #2 global.max$ substring$ 't :=
266
{ { t #1 #1 substring$ "-" = }
268
t #2 global.max$ substring$ 't :=
274
{ t #1 #1 substring$ *
275
t #2 global.max$ substring$ 't :=
282
% tie.or.space.connect connects two items with a ~ if the
283
% second item is less than 3 letters long, otherwise it just puts an
286
FUNCTION {tie.or.space.connect}
287
{ duplicate$ text.length$ #3 <
294
FUNCTION {add.space.if.necessary}
301
% either.or.check gives a warning if two mutually exclusive fields
302
% were used in the database.
304
FUNCTION {either.or.check}
307
{ "can't use both " swap$ * " fields in " * cite$ * warning$ }
311
% output.nonnull is called by output.
313
FUNCTION {output.nonnull}
314
% remove the top item from the stack because it's in the way.
316
output.state mid.sentence =
317
% If we're in mid-sentence, add a comma to the new top item and write it
319
% Otherwise, if we're at the beginning of a bibitem,
320
{ output.state before.all =
321
% just write out the top item from the stack;
323
% and the last alternative is that we're at the end of the current
324
% bibitem, so we add a period to the top stack item and write it out.
325
{ add.period$ " " * write$ }
327
mid.sentence 'output.state :=
330
% Put the top item back on the stack that we removed earlier.
334
% Output checks to see if the stack top is empty; if not, it
335
% calls output.nonnull to write it out.
344
% Standard warning message for a missing or empty field. For the user
345
% we call any such field `missing' without respect to the distinction
346
% made by BibTeX between missing and empty.
348
FUNCTION {missing.warning}
349
{ "missing " swap$ * " in " * cite$ * warning$ }
351
% Output.check is like output except that it gives a warning on-screen
352
% if the given field in the database entry is empty. t is the field
355
FUNCTION {output.check}
358
{ pop$ t missing.warning }
363
FUNCTION {output.bibitem}
371
% This empty string is the first thing that will be written
372
% the next time write$ is called. Done this way because each
373
% item is saved on the stack until we find out what punctuation
374
% should be added after it. Therefore we need an empty first item.
376
before.all 'output.state :=
379
FUNCTION {output.nonempty.mrnumber}
380
{ duplicate$ missing$
386
{ " \MR{" swap$ * "}" * write$ }
391
{ after.quote 'output.state :=
397
% mrnumber output.nonempty.mrnumber
401
% Removed new.block, new.block.checka, new.block.checkb, new.sentence,
402
% new.sentence.checka, and new.sentence.checkb functions here, since they
403
% don't seem to be needed in the AMS style. Also moved some real
404
% basic functions like `and' and 'or' earlier in the file.
407
{ output.state before.all =
409
{ output.state after.quote =
410
{ after.quoted.block 'output.state := }
411
{ after.block 'output.state := }
417
FUNCTION {new.sentence}
418
{ output.state after.block =
420
{ output.state before.all =
422
{ after.sentence 'output.state := }
428
INTEGERS { nameptr namesleft numnames }
430
% The extra section to write out a language field was added
431
% for AMSPLAIN.BST. Not present in plain.bst.
433
FUNCTION {format.language}
436
{ " (" language * ")" * }
440
% This version of format.names puts names in the format
442
% First von Last, Jr.
444
% (i.e., first name first, no abbreviating to initials).
446
FUNCTION {format.names}
449
s num.names$ 'numnames :=
450
numnames 'namesleft :=
452
{ s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't :=
469
nameptr #1 + 'nameptr :=
470
namesleft #1 - 'namesleft :=
475
FUNCTION {format.authors}
480
{ author format.names }
486
FUNCTION {format.editors}
489
{ editor format.names
490
editor num.names$ #1 >
498
FUNCTION {format.nonauthor.editors}
501
{ editor format.names
502
editor num.names$ #1 >
510
FUNCTION {format.archive}
514
{ archivePrefix ":" *}
518
FUNCTION {format.title}
521
% { title "t" change.case$ emphasize }
526
FUNCTION {format.primaryClass}
530
{ " [" primaryClass * "]" *}
534
FUNCTION {format.eprint}
538
{"\href{http://arxiv.org/abs/" eprint * "}" *
539
"{{\tt " * format.archive * eprint *
540
format.primaryClass * "}}" *}
541
{"\href{" archive * "/" * eprint * "}" *
542
"{{\tt " * format.archive * eprint *
543
format.primaryClass * "}}" *}
549
FUNCTION {format.url}
552
{"\url{" url * "}" *}
561
{"\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" *}
567
FUNCTION {format.report}
574
FUNCTION {format.journal.vol.year}
576
{ "" "journal name" missing.warning }
580
{ " \textbf{" * volume * "}" * }
583
{ "year" missing.warning }
584
{ " (" * year * ")" * }
590
% For formatting the issue number for a journal article.
592
FUNCTION {format.number}
599
% For formatting miscellaneous dates
601
FUNCTION {format.date}
605
{ "there's a month but no year in " cite$ * warning$
612
{ month " " * year * }
618
FUNCTION {format.collaboration}
619
{ collaboration empty$
621
{ "{\bf " collaboration * "} " * "Collaboration" * }
625
FUNCTION {format.SLACcitation}
626
{ SLACcitation empty$
628
{ newline$ SLACcitation output "" newline$ }
632
%% The volume, series and number information is sort of tricky.
633
%% This code handles it as follows:
634
%% If the series is present, and the volume, but not the number,
635
%% then we do "\emph{Book title}, Series Name, vol. 000"
636
%% If the series is present, and the number, but not the volume,
637
%% then we do "\emph{Book title}, Series Name, no. 000"
638
%% If the series is present, and both number and volume,
639
%% then we do "\emph{Book title}, vol. XX, Series Name, no. 000"
640
%% Finally, if the series is absent,
641
%% then we do "\emph{Book title}, vol. XX"
642
%% or "\emph{Book title}, no. 000"
643
%% and if both volume and number are present, give a warning message.
645
FUNCTION {format.bookvolume.series.number}
647
{ "" % Push the empty string as a placeholder in case everything else
651
{ pop$ series } % if series is not empty put in stack
655
{ duplicate$ empty$ % if no preceding material,
656
'skip$ % do nothing, otherwise
657
{ ", " * } % add a comma and space to separate.
659
"no." number tie.or.space.connect * % add the number information
663
%% If the volume is NOT EMPTY:
664
{ "vol." volume tie.or.space.connect % vol. XX
668
{ series ", " * swap$ *} % Series Name, vol. XX
672
{ "can't use both volume and number if series info is missing"
674
"in BibTeX entry type `" type$ * "'" * top$
676
{ ", " * series * ", no." * number tie.or.space.connect }
683
} % end of format.bookvolume.series.number
685
%% format.inproc.title.where.editors is used by inproceedings entry types
687
%% No case changing or emphasizing for the title. We want initial
689
%% We add parentheses around the address (place where conference
691
%% Likewise we add parentheses around the editors' names.
693
FUNCTION {format.inproc.title.address.editors}
699
{ add.space.if.necessary "(" * address * ")" * }
703
{ add.space.if.necessary "(" * format.nonauthor.editors * ")" * }
709
%% format.incoll.title.editors is similar to format.inproc... but
710
%% omits the address. For collections that are not proceedings volumes.
712
FUNCTION {format.incoll.title.editors}
718
add.space.if.necessary "(" * format.nonauthor.editors * ")" *
725
FUNCTION {format.edition}
728
{ output.state mid.sentence =
729
{ edition "l" change.case$ " ed." * }
730
{ edition "t" change.case$ " ed." * }
736
INTEGERS { multiresult }
738
FUNCTION {multi.page.check}
747
swap$ duplicate$ "," =
750
{ #1 'multiresult := }
751
{ t #2 global.max$ substring$ 't := }
758
FUNCTION {format.pages}
765
FUNCTION {format.book.pages}
768
{ pages multi.page.check
769
{ "pp.~" pages n.dashify * }
776
FUNCTION {format.chapter.pages}
781
{ type "l" change.case$ " " * }
786
{ ", " * format.book.pages * }
792
FUNCTION {empty.misc.check}
793
{ author empty$ title empty$ howpublished empty$
794
month empty$ year empty$ note empty$
797
{ "all relevant fields are empty in " cite$ * warning$ }
802
FUNCTION {format.thesis.type}
806
type "t" change.case$
811
FUNCTION {format.tr.number}
818
{ number tie.or.space.connect }
822
% The format.crossref functions haven't been paid much attention
823
% at the present time (June 1990) and could probably use some
826
FUNCTION {format.article.crossref}
829
{ "need key or journal for " cite$ * " to crossref " * crossref *
838
" \cite{" * crossref * "}" *
841
FUNCTION {format.crossref.editor}
842
{ editor #1 "{vv~}{ll}" format.name$
843
editor num.names$ duplicate$
848
{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
850
{ " and " * editor #2 "{vv~}{ll}" format.name$ * }
858
FUNCTION {format.book.crossref}
860
{ "empty volume in " cite$ * "'s crossref of " * crossref * warning$
863
{ "vol." volume tie.or.space.connect
868
editor field.or.null author field.or.null =
872
{ "need editor, key, or series for " cite$ * " to crossref " *
882
{ format.crossref.editor * }
884
" \cite{" * crossref * "}" *
887
FUNCTION {format.incoll.inproc.crossref}
889
editor field.or.null author field.or.null =
893
{ "need editor, key, or booktitle for " cite$ * " to crossref " *
897
{ "in \emph{" booktitle * "}" * }
903
{ "in " format.crossref.editor * }
905
" \cite{" * crossref * "}" *
908
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
910
% The main functions for each entry type.
912
% journal, vol and year are formatted together because they are
913
% not separated by commas.
917
format.collaboration output
918
format.authors "author" output.check
919
format.title "title" output.check
923
{ format.journal.vol.year add.doi "journal, volume, and year" output.check
925
format.pages "pages" output.check
929
{format.eprint output}
930
{blank.sep format.report output format.eprint output}
933
{ format.article.crossref output.nonnull
934
format.pages "pages" output.check
945
format.SLACcitation output
951
format.collaboration output
953
{ format.editors "author and editor" output.check }
954
{ format.authors output.nonnull
956
{ "author and editor" editor either.or.check }
961
format.title add.doi "title" output.check
962
format.edition output
964
{ format.bookvolume.series.number output
965
publisher "publisher" output.check
968
{ format.book.crossref output.nonnull
971
format.date "year" output.check
980
format.SLACcitation output
986
format.authors output
987
format.title "title" output.check
998
format.SLACcitation output
1004
format.collaboration output
1006
{ format.editors "author and editor" output.check }
1007
{ format.authors output.nonnull
1009
{ "author and editor" editor either.or.check }
1014
format.title "title" output.check
1015
format.edition output
1017
{ format.bookvolume.series.number output
1018
format.chapter.pages "chapter and pages" output.check
1019
publisher "publisher" output.check
1022
{ format.chapter.pages "chapter and pages" output.check
1023
format.book.crossref output.nonnull
1026
format.date "year" output.check
1029
format.eprint output
1035
format.SLACcitation output
1039
FUNCTION {incollection}
1041
format.collaboration output
1042
format.authors "author" output.check
1043
format.title add.doi "title" output.check
1045
{ format.incoll.title.editors "booktitle" output.check
1046
format.bookvolume.series.number output
1047
publisher "publisher" output.check
1049
format.edition output
1050
format.date "year" output.check
1052
{ format.incoll.inproc.crossref output.nonnull
1055
format.book.pages output
1058
format.eprint output
1064
format.SLACcitation output
1068
FUNCTION {inproceedings}
1070
format.collaboration output
1071
format.authors "author" output.check
1072
format.title add.doi "title" output.check
1074
{ format.inproc.title.address.editors "booktitle" output.check
1075
format.bookvolume.series.number output
1078
format.date "year" output.check
1080
{ format.incoll.inproc.crossref output.nonnull
1083
format.book.pages output
1085
format.eprint output
1092
format.SLACcitation output
1096
FUNCTION {conference} { inproceedings }
1100
format.collaboration output
1102
{ organization empty$
1104
{ organization output.nonnull
1109
{ format.authors output.nonnull }
1111
format.title "title" output.check
1113
{ organization empty$
1118
{ organization output
1122
format.edition output
1125
format.eprint output
1133
FUNCTION {mastersthesis}
1135
format.authors "author" output.check
1136
format.title add.doi "title" output.check
1137
"Master's thesis" format.thesis.type output.nonnull
1138
school "school" output.check
1140
format.date "year" output.check
1141
format.book.pages output
1143
format.eprint output
1153
format.collaboration output
1154
format.authors output
1155
format.title add.doi output
1158
format.book.pages output
1160
format.eprint output
1170
FUNCTION {phdthesis}
1172
format.authors "author" output.check
1173
format.title add.doi "title" output.check
1174
"Ph.D. thesis" format.thesis.type output.nonnull
1175
school "school" output.check
1177
format.date "year" output.check
1178
format.book.pages output
1180
format.eprint output
1186
format.SLACcitation output
1190
FUNCTION {proceedings}
1193
{ organization output }
1194
{ format.editors output.nonnull }
1196
format.title add.doi "title" output.check
1197
format.bookvolume.series.number output
1201
{ organization output }
1204
format.date "year" output.check
1206
{ address output.nonnull
1209
{ organization output }
1212
format.date "year" output.check
1215
format.eprint output
1220
format.SLACcitation output
1225
FUNCTION {techreport}
1227
format.authors "author" output.check
1228
format.title "title" output.check
1229
format.tr.number output.nonnull
1230
institution "institution" output.check
1232
format.date "year" output.check
1233
format.eprint output
1239
FUNCTION {unpublished}
1241
format.authors "author" output.check
1242
format.title "title" output.check
1243
note "note" output.check
1245
format.eprint output
1248
format.SLACcitation output
1252
FUNCTION {default.type} { misc }
1254
MACRO {jan} {"January"}
1256
MACRO {feb} {"February"}
1258
MACRO {mar} {"March"}
1260
MACRO {apr} {"April"}
1264
MACRO {jun} {"June"}
1266
MACRO {jul} {"July"}
1268
MACRO {aug} {"August"}
1270
MACRO {sep} {"September"}
1272
MACRO {oct} {"October"}
1274
MACRO {nov} {"November"}
1276
MACRO {dec} {"December"}
1287
FUNCTION {chop.word}
1290
s #1 len substring$ =
1291
{ s len #1 + global.max$ substring$ }
1296
INTEGERS { et.al.char.used }
1298
FUNCTION {initialize.et.al.char.used}
1299
{ #0 'et.al.char.used :=
1302
EXECUTE {initialize.et.al.char.used}
1304
FUNCTION {format.lab.names}
1306
s num.names$ 'numnames :=
1309
{ #3 'namesleft := }
1310
{ numnames 'namesleft := }
1315
{ nameptr numnames =
1316
{ s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1317
{ "{\etalchar{+}}" *
1318
#1 'et.al.char.used :=
1320
{ s nameptr "{v{}}{l{}}" format.name$ * }
1323
{ s nameptr "{v{}}{l{}}" format.name$ * }
1325
nameptr #1 + 'nameptr :=
1326
namesleft #1 - 'namesleft :=
1330
{ "{\etalchar{+}}" *
1331
#1 'et.al.char.used :=
1336
{ s #1 "{v{}}{l{}}" format.name$
1337
duplicate$ text.length$ #2 <
1338
{ pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
1345
FUNCTION {author.key.label}
1348
{ cite$ #1 #3 substring$ }
1349
{ key #3 text.prefix$ }
1352
{ author format.lab.names }
1356
FUNCTION {author.editor.key.label}
1360
{ cite$ #1 #3 substring$ }
1361
{ key #3 text.prefix$ }
1364
{ editor format.lab.names }
1367
{ author format.lab.names }
1371
FUNCTION {author.key.organization.label}
1374
{ organization empty$
1375
{ cite$ #1 #3 substring$ }
1376
{ "The " #4 organization chop.word #3 text.prefix$ }
1379
{ key #3 text.prefix$ }
1382
{ author format.lab.names }
1386
FUNCTION {editor.key.organization.label}
1389
{ organization empty$
1390
{ cite$ #1 #3 substring$ }
1391
{ "The " #4 organization chop.word #3 text.prefix$ }
1394
{ key #3 text.prefix$ }
1397
{ editor format.lab.names }
1401
FUNCTION {calc.label}
1405
'author.editor.key.label
1406
{ type$ "proceedings" =
1407
'editor.key.organization.label
1409
'author.key.organization.label
1417
year field.or.null purify$ #-1 #2 substring$
1420
year field.or.null purify$ #-1 #4 substring$
1422
sortify 'sort.label :=
1425
FUNCTION {sort.format.names}
1429
s num.names$ 'numnames :=
1430
numnames 'namesleft :=
1436
s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
1437
nameptr numnames = t "others" = and
1441
nameptr #1 + 'nameptr :=
1442
namesleft #1 - 'namesleft :=
1447
FUNCTION {sort.format.title}
1451
"The " #4 t chop.word
1455
#1 global.max$ substring$
1458
FUNCTION {author.sort}
1461
{ "to sort, need author or key in " cite$ * warning$
1467
{ author sort.format.names }
1471
FUNCTION {author.editor.sort}
1475
{ "to sort, need author, editor, or key in " cite$ * warning$
1481
{ editor sort.format.names }
1484
{ author sort.format.names }
1488
FUNCTION {author.organization.sort}
1490
{ organization empty$
1492
{ "to sort, need author, organization, or key in " cite$ * warning$
1498
{ "The " #4 organization chop.word sortify }
1501
{ author sort.format.names }
1505
FUNCTION {editor.organization.sort}
1507
{ organization empty$
1509
{ "to sort, need editor, organization, or key in " cite$ * warning$
1515
{ "The " #4 organization chop.word sortify }
1518
{ editor sort.format.names }
1539
{ type$ "proceedings" =
1540
'editor.organization.sort
1542
'author.organization.sort
1552
year field.or.null sortify
1559
#1 entry.max$ substring$
1568
longest.label last.sort.label next.extra prev.author this.author
1571
INTEGERS { longest.label.width last.extra.num }
1573
FUNCTION {initialize.longest.label}
1574
{ "" 'longest.label :=
1575
#0 int.to.chr$ 'last.sort.label :=
1577
#0 'longest.label.width :=
1578
#0 'last.extra.num :=
1579
"abcxyz" 'prev.author :=
1583
FUNCTION {forward.pass}
1584
{ last.sort.label sort.label =
1585
{ last.extra.num #1 + 'last.extra.num :=
1586
last.extra.num int.to.chr$ 'extra.label :=
1588
{ "a" chr.to.int$ 'last.extra.num :=
1590
sort.label 'last.sort.label :=
1593
author empty$ { editor empty$ { "" } 'editor if$ } 'author if$
1595
this.author prev.author =
1596
{ "\bysame" 'bysame := }
1607
FUNCTION {reverse.pass}
1609
{ "a" 'extra.label := }
1612
label extra.label * 'label :=
1613
label width$ longest.label.width >
1614
{ label 'longest.label :=
1615
label width$ 'longest.label.width :=
1619
extra.label 'next.extra :=
1622
EXECUTE {initialize.longest.label}
1624
ITERATE {forward.pass}
1626
REVERSE {reverse.pass}
1628
FUNCTION {begin.bib}
1630
{ "\newcommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
1635
{ preamble$ write$ newline$ }
1637
"\providecommand{\bysame}{\leavevmode\hbox to3em{\hrulefill}\thinspace}"
1639
"\providecommand{\MR}{\relax\ifhmode\unskip\space\fi MR }"
1641
"% \MRhref is called by the amsart/book/proc definition of \MR."
1643
"\providecommand{\MRhref}[2]{%"
1645
" \href{http://www.ams.org/mathscinet-getitem?mr=#1}{#2}"
1649
"\providecommand{\href}[2]{#2}"
1651
"\begin{thebibliography}{" longest.label * "}" *
1657
EXECUTE {init.state.consts}
1659
ITERATE {call.type$}
1663
"\end{thebibliography}" write$ newline$
1668
%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
1669
%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
1670
%% Digits \0\1\2\3\4\5\6\7\8\9
1671
%% Exclamation \! Double quote \" Hash (number) \#
1672
%% Dollar \$ Percent \% Ampersand \&
1673
%% Acute accent \' Left paren \( Right paren \)
1674
%% Asterisk \* Plus \+ Comma \,
1675
%% Minus \- Point \. Solidus \/
1676
%% Colon \: Semicolon \; Less than \<
1677
%% Equals \= Greater than \> Question mark \?
1678
%% Commercial at \@ Left bracket \[ Backslash \\
1679
%% Right bracket \] Circumflex \^ Underscore \_
1680
%% Grave accent \` Left brace \{ Vertical bar \|
1681
%% Right brace \} Tilde \~}
'\\ No newline at end of file'