EvoScientist 0.0.1.dev1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. EvoScientist/EvoScientist.py +157 -0
  2. EvoScientist/__init__.py +24 -0
  3. EvoScientist/__main__.py +4 -0
  4. EvoScientist/backends.py +392 -0
  5. EvoScientist/cli.py +1553 -0
  6. EvoScientist/middleware.py +35 -0
  7. EvoScientist/prompts.py +277 -0
  8. EvoScientist/skills/accelerate/SKILL.md +332 -0
  9. EvoScientist/skills/accelerate/references/custom-plugins.md +453 -0
  10. EvoScientist/skills/accelerate/references/megatron-integration.md +489 -0
  11. EvoScientist/skills/accelerate/references/performance.md +525 -0
  12. EvoScientist/skills/bitsandbytes/SKILL.md +411 -0
  13. EvoScientist/skills/bitsandbytes/references/memory-optimization.md +521 -0
  14. EvoScientist/skills/bitsandbytes/references/qlora-training.md +521 -0
  15. EvoScientist/skills/bitsandbytes/references/quantization-formats.md +447 -0
  16. EvoScientist/skills/find-skills/SKILL.md +133 -0
  17. EvoScientist/skills/find-skills/scripts/install_skill.py +211 -0
  18. EvoScientist/skills/flash-attention/SKILL.md +367 -0
  19. EvoScientist/skills/flash-attention/references/benchmarks.md +215 -0
  20. EvoScientist/skills/flash-attention/references/transformers-integration.md +293 -0
  21. EvoScientist/skills/llama-cpp/SKILL.md +258 -0
  22. EvoScientist/skills/llama-cpp/references/optimization.md +89 -0
  23. EvoScientist/skills/llama-cpp/references/quantization.md +213 -0
  24. EvoScientist/skills/llama-cpp/references/server.md +125 -0
  25. EvoScientist/skills/lm-evaluation-harness/SKILL.md +490 -0
  26. EvoScientist/skills/lm-evaluation-harness/references/api-evaluation.md +490 -0
  27. EvoScientist/skills/lm-evaluation-harness/references/benchmark-guide.md +488 -0
  28. EvoScientist/skills/lm-evaluation-harness/references/custom-tasks.md +602 -0
  29. EvoScientist/skills/lm-evaluation-harness/references/distributed-eval.md +519 -0
  30. EvoScientist/skills/ml-paper-writing/SKILL.md +937 -0
  31. EvoScientist/skills/ml-paper-writing/references/checklists.md +361 -0
  32. EvoScientist/skills/ml-paper-writing/references/citation-workflow.md +562 -0
  33. EvoScientist/skills/ml-paper-writing/references/reviewer-guidelines.md +367 -0
  34. EvoScientist/skills/ml-paper-writing/references/sources.md +159 -0
  35. EvoScientist/skills/ml-paper-writing/references/writing-guide.md +476 -0
  36. EvoScientist/skills/ml-paper-writing/templates/README.md +251 -0
  37. EvoScientist/skills/ml-paper-writing/templates/aaai2026/README.md +534 -0
  38. EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026-unified-supp.tex +144 -0
  39. EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026-unified-template.tex +952 -0
  40. EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026.bib +111 -0
  41. EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026.bst +1493 -0
  42. EvoScientist/skills/ml-paper-writing/templates/aaai2026/aaai2026.sty +315 -0
  43. EvoScientist/skills/ml-paper-writing/templates/acl/README.md +50 -0
  44. EvoScientist/skills/ml-paper-writing/templates/acl/acl.sty +312 -0
  45. EvoScientist/skills/ml-paper-writing/templates/acl/acl_latex.tex +377 -0
  46. EvoScientist/skills/ml-paper-writing/templates/acl/acl_lualatex.tex +101 -0
  47. EvoScientist/skills/ml-paper-writing/templates/acl/acl_natbib.bst +1940 -0
  48. EvoScientist/skills/ml-paper-writing/templates/acl/anthology.bib.txt +26 -0
  49. EvoScientist/skills/ml-paper-writing/templates/acl/custom.bib +70 -0
  50. EvoScientist/skills/ml-paper-writing/templates/acl/formatting.md +326 -0
  51. EvoScientist/skills/ml-paper-writing/templates/colm2025/README.md +3 -0
  52. EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.bib +11 -0
  53. EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.bst +1440 -0
  54. EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.pdf +0 -0
  55. EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.sty +218 -0
  56. EvoScientist/skills/ml-paper-writing/templates/colm2025/colm2025_conference.tex +305 -0
  57. EvoScientist/skills/ml-paper-writing/templates/colm2025/fancyhdr.sty +485 -0
  58. EvoScientist/skills/ml-paper-writing/templates/colm2025/math_commands.tex +508 -0
  59. EvoScientist/skills/ml-paper-writing/templates/colm2025/natbib.sty +1246 -0
  60. EvoScientist/skills/ml-paper-writing/templates/iclr2026/fancyhdr.sty +485 -0
  61. EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.bib +24 -0
  62. EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.bst +1440 -0
  63. EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.pdf +0 -0
  64. EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.sty +246 -0
  65. EvoScientist/skills/ml-paper-writing/templates/iclr2026/iclr2026_conference.tex +414 -0
  66. EvoScientist/skills/ml-paper-writing/templates/iclr2026/math_commands.tex +508 -0
  67. EvoScientist/skills/ml-paper-writing/templates/iclr2026/natbib.sty +1246 -0
  68. EvoScientist/skills/ml-paper-writing/templates/icml2026/algorithm.sty +79 -0
  69. EvoScientist/skills/ml-paper-writing/templates/icml2026/algorithmic.sty +201 -0
  70. EvoScientist/skills/ml-paper-writing/templates/icml2026/example_paper.bib +75 -0
  71. EvoScientist/skills/ml-paper-writing/templates/icml2026/example_paper.pdf +0 -0
  72. EvoScientist/skills/ml-paper-writing/templates/icml2026/example_paper.tex +662 -0
  73. EvoScientist/skills/ml-paper-writing/templates/icml2026/fancyhdr.sty +864 -0
  74. EvoScientist/skills/ml-paper-writing/templates/icml2026/icml2026.bst +1443 -0
  75. EvoScientist/skills/ml-paper-writing/templates/icml2026/icml2026.sty +767 -0
  76. EvoScientist/skills/ml-paper-writing/templates/icml2026/icml_numpapers.pdf +0 -0
  77. EvoScientist/skills/ml-paper-writing/templates/neurips2025/Makefile +36 -0
  78. EvoScientist/skills/ml-paper-writing/templates/neurips2025/extra_pkgs.tex +53 -0
  79. EvoScientist/skills/ml-paper-writing/templates/neurips2025/main.tex +38 -0
  80. EvoScientist/skills/ml-paper-writing/templates/neurips2025/neurips.sty +382 -0
  81. EvoScientist/skills/peft/SKILL.md +431 -0
  82. EvoScientist/skills/peft/references/advanced-usage.md +514 -0
  83. EvoScientist/skills/peft/references/troubleshooting.md +480 -0
  84. EvoScientist/skills/ray-data/SKILL.md +326 -0
  85. EvoScientist/skills/ray-data/references/integration.md +82 -0
  86. EvoScientist/skills/ray-data/references/transformations.md +83 -0
  87. EvoScientist/skills/skill-creator/LICENSE.txt +202 -0
  88. EvoScientist/skills/skill-creator/SKILL.md +356 -0
  89. EvoScientist/skills/skill-creator/references/output-patterns.md +82 -0
  90. EvoScientist/skills/skill-creator/references/workflows.md +28 -0
  91. EvoScientist/skills/skill-creator/scripts/init_skill.py +303 -0
  92. EvoScientist/skills/skill-creator/scripts/package_skill.py +110 -0
  93. EvoScientist/skills/skill-creator/scripts/quick_validate.py +95 -0
  94. EvoScientist/stream/__init__.py +53 -0
  95. EvoScientist/stream/emitter.py +94 -0
  96. EvoScientist/stream/formatter.py +168 -0
  97. EvoScientist/stream/tracker.py +115 -0
  98. EvoScientist/stream/utils.py +255 -0
  99. EvoScientist/subagent.yaml +147 -0
  100. EvoScientist/tools.py +135 -0
  101. EvoScientist/utils.py +207 -0
  102. evoscientist-0.0.1.dev1.dist-info/METADATA +222 -0
  103. evoscientist-0.0.1.dev1.dist-info/RECORD +107 -0
  104. evoscientist-0.0.1.dev1.dist-info/WHEEL +5 -0
  105. evoscientist-0.0.1.dev1.dist-info/entry_points.txt +2 -0
  106. evoscientist-0.0.1.dev1.dist-info/licenses/LICENSE +21 -0
  107. evoscientist-0.0.1.dev1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1940 @@
1
+ %%% Modification of BibTeX style file acl_natbib_nourl.bst
2
+ %%% ... by urlbst, version 0.9.1 (marked with "% urlbst")
3
+ %%% See <https://purl.org/nxg/dist/urlbst> and repository <https://heptapod.host/nxg/urlbst>
4
+ %%% Modifications Copyright 2002–23, Norman Gray,
5
+ %%% and distributed under the terms of the LPPL; see README for discussion.
6
+ %%%
7
+ %%% Added webpage entry type, and url and lastchecked fields.
8
+ %%% Added eprint support.
9
+ %%% Added DOI support.
10
+ %%% Added PUBMED support.
11
+ %%% Added hyperref support.
12
+ %%% Original headers follow...
13
+
14
+ %%
15
+ %% This is file `acl_natbib_basic.bst',
16
+ %% generated with the docstrip utility.
17
+ %%
18
+ %% The original source files were:
19
+ %%
20
+ %% merlin.mbs (with options: `ay,nat,pres,ed-au,keyxyr,blkyear,dt-beg,yr-per,note-yr,num-xser,pre-edn,xedn,nfss')
21
+ %% ----------------------------------------
22
+ %% *** Intended for ACL conferences ***
23
+ %%
24
+ %% Copyright 1994-2011 Patrick W Daly
25
+ % ===============================================================
26
+ % IMPORTANT NOTICE:
27
+ % This bibliographic style (bst) file has been generated from one or
28
+ % more master bibliographic style (mbs) files, listed above.
29
+ %
30
+ % This generated file can be redistributed and/or modified under the terms
31
+ % of the LaTeX Project Public License Distributed from CTAN
32
+ % archives in directory macros/latex/base/lppl.txt; either
33
+ % version 1 of the License, or any later version.
34
+ % ===============================================================
35
+ % Name and version information of the main mbs file:
36
+ % \ProvidesFile{merlin.mbs}[2011/11/18 4.33 (PWD, AO, DPC)]
37
+ % For use with BibTeX version 0.99a or later
38
+ %-------------------------------------------------------------------
39
+ % This bibliography style file is intended for texts in ENGLISH
40
+ % This is an author-year citation style bibliography. As such, it is
41
+ % non-standard LaTeX, and requires a special package file to function properly.
42
+ % Such a package is natbib.sty by Patrick W. Daly
43
+ % The form of the \bibitem entries is
44
+ % \bibitem[Jones et al.(1990)]{key}...
45
+ % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
46
+ % The essential feature is that the label (the part in brackets) consists
47
+ % of the author names, as they should appear in the citation, with the year
48
+ % in parentheses following. There must be no space before the opening
49
+ % parenthesis!
50
+ % With natbib v5.3, a full list of authors may also follow the year.
51
+ % In natbib.sty, it is possible to define the type of enclosures that is
52
+ % really wanted (brackets or parentheses), but in either case, there must
53
+ % be parentheses in the label.
54
+ % The \cite command functions as follows:
55
+ % \citet{key} ==>> Jones et al. (1990)
56
+ % \citet*{key} ==>> Jones, Baker, and Smith (1990)
57
+ % \citep{key} ==>> (Jones et al., 1990)
58
+ % \citep*{key} ==>> (Jones, Baker, and Smith, 1990)
59
+ % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2)
60
+ % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990)
61
+ % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., 1990, p. 32)
62
+ % \citeauthor{key} ==>> Jones et al.
63
+ % \citeauthor*{key} ==>> Jones, Baker, and Smith
64
+ % \citeyear{key} ==>> 1990
65
+ %---------------------------------------------------------------------
66
+
67
+ %% 2025 modified to truncate author lists of more than 20 authors
68
+
69
+ ENTRY
70
+ { address
71
+ archivePrefix
72
+ author
73
+ booktitle
74
+ chapter
75
+ edition
76
+ editor
77
+ eid
78
+ eprint
79
+ eprinttype % = archivePrefix
80
+ howpublished
81
+ institution
82
+ journal
83
+ key
84
+ month
85
+ note
86
+ number
87
+ organization
88
+ pages
89
+ publisher
90
+ school
91
+ series
92
+ title
93
+ type
94
+ volume
95
+ year
96
+ doi % urlbst
97
+ pubmed % urlbst
98
+ url % urlbst
99
+ lastchecked % urlbst
100
+ }
101
+ {}
102
+ { label extra.label sort.label short.list }
103
+ INTEGERS { output.state before.all mid.sentence after.sentence after.block }
104
+ % urlbst...
105
+ % urlbst constants and state variables
106
+ STRINGS { urlintro
107
+ eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl
108
+ citedstring onlinestring linktextstring
109
+ openinlinelink closeinlinelink }
110
+ INTEGERS { hrefform doiform inlinelinks makeinlinelink
111
+ addeprints adddoi addpubmed }
112
+ FUNCTION {init.urlbst.variables}
113
+ {
114
+ % The following constants may be adjusted by hand, if desired
115
+
116
+ % The first set allow you to enable or disable certain functionality.
117
+ #1 'addeprints := % 0=no eprints; 1=include eprints
118
+ #2 'hrefform := % 0=no crossrefs; 1=hypertex hrefs; 2=hyperref hrefs
119
+ #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles
120
+ #1 'adddoi := % 0=no DOI resolver; 1=include it
121
+ #1 'addpubmed := % 0=no PUBMED resolver; 1=include it
122
+ #0 'doiform := % 0=with href; 1=with \doi{}
123
+
124
+ % String constants, which you _might_ want to tweak.
125
+ "online" 'onlinestring := % label that a resource is online
126
+ "[link]" 'linktextstring := % anonymous link text
127
+ "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl := % prefix to make URL from PUBMED
128
+ "https://doi.org/" 'doiurl := % prefix to make URL from DOI
129
+ "doi:" 'doiprefix := % printed text to introduce DOI
130
+ "https://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref
131
+ "cited " 'citedstring := % label in "lastchecked" remark
132
+ "arXiv:" 'eprintprefix := % text prefix printed before eprint ref
133
+ "PMID:" 'pubmedprefix := % text prefix printed before PUBMED ref
134
+ "URL: " 'urlintro := % text prefix before URL
135
+
136
+ % The following are internal state variables, not configuration constants,
137
+ % so they shouldn't be fiddled with.
138
+ #0 'makeinlinelink := % state variable managed by possibly.setup.inlinelink
139
+ "" 'openinlinelink := % ditto
140
+ "" 'closeinlinelink := % ditto
141
+ }
142
+ INTEGERS {
143
+ bracket.state
144
+ outside.brackets
145
+ open.brackets
146
+ within.brackets
147
+ close.brackets
148
+ }
149
+ % ...urlbst to here
150
+ FUNCTION {init.state.consts}
151
+ { #0 'outside.brackets := % urlbst...
152
+ #1 'open.brackets :=
153
+ #2 'within.brackets :=
154
+ #3 'close.brackets := % ...urlbst to here
155
+
156
+ #0 'before.all :=
157
+ #1 'mid.sentence :=
158
+ #2 'after.sentence :=
159
+ #3 'after.block :=
160
+ }
161
+ STRINGS { s t}
162
+ % urlbst
163
+ FUNCTION {output.nonnull.original}
164
+ { 's :=
165
+ output.state mid.sentence =
166
+ { ", " * write$ }
167
+ { output.state after.block =
168
+ { add.period$ write$
169
+ newline$
170
+ "\newblock " write$
171
+ }
172
+ { output.state before.all =
173
+ 'write$
174
+ { add.period$ " " * write$ }
175
+ if$
176
+ }
177
+ if$
178
+ mid.sentence 'output.state :=
179
+ }
180
+ if$
181
+ s
182
+ }
183
+
184
+ % urlbst...
185
+ % Minimal DOI parsing.
186
+ % Given a DOI on the stack, check whether it starts with 'doiurl' or not.
187
+ % In either case, leave on the stack first a DOI with, and then a DOI without, the URL prefix.
188
+ FUNCTION {parse.doi}
189
+ {
190
+ #1 doiurl text.length$ substring$
191
+ doiurl =
192
+ { doi
193
+ doi doiurl text.length$ #1 + #999 substring$ }
194
+ { doiurl doi *
195
+ doi }
196
+ if$
197
+ }
198
+ % The following three functions are for handling inlinelink. They wrap
199
+ % a block of text which is potentially output with write$ by multiple
200
+ % other functions, so we don't know the content a priori.
201
+ % They communicate between each other using the variables makeinlinelink
202
+ % (which is true if a link should be made), and closeinlinelink (which holds
203
+ % the string which should close any current link. They can be called
204
+ % at any time, but start.inlinelink will be a no-op unless something has
205
+ % previously set makeinlinelink true, and the two ...end.inlinelink functions
206
+ % will only do their stuff if start.inlinelink has previously set
207
+ % closeinlinelink to be non-empty.
208
+ % (thanks to 'ijvm' for suggested code here)
209
+ FUNCTION {uand}
210
+ { 'skip$ { pop$ #0 } if$ } % 'and' (which isn't defined at this point in the file)
211
+ FUNCTION {possibly.setup.inlinelink}
212
+ { makeinlinelink hrefform #0 > uand
213
+ { doi empty$ adddoi uand
214
+ { pubmed empty$ addpubmed uand
215
+ { eprint empty$ addeprints uand
216
+ { url empty$
217
+ { "" }
218
+ { url }
219
+ if$ }
220
+ { eprinturl eprint * }
221
+ if$ }
222
+ { pubmedurl pubmed * }
223
+ if$ }
224
+ % { doiurl doi * }
225
+ { doi empty$
226
+ { "XXX" }
227
+ { doi parse.doi pop$ }
228
+ if$
229
+ }
230
+ if$
231
+ % an appropriately-formatted URL is now on the stack
232
+ hrefform #1 = % hypertex
233
+ { "\special {html:<a href=" quote$ * swap$ * quote$ * "> }{" * 'openinlinelink :=
234
+ "\special {html:</a>}" 'closeinlinelink := }
235
+ { "\href {" swap$ * "} {" * 'openinlinelink := % hrefform=#2 -- hyperref
236
+ % the space between "} {" matters: a URL of just the right length can cause "\% newline em"
237
+ "}" 'closeinlinelink := }
238
+ if$
239
+ #0 'makeinlinelink :=
240
+ }
241
+ 'skip$
242
+ if$ % makeinlinelink
243
+ }
244
+ FUNCTION {add.inlinelink}
245
+ { openinlinelink empty$
246
+ 'skip$
247
+ { openinlinelink swap$ * closeinlinelink *
248
+ "" 'openinlinelink :=
249
+ }
250
+ if$
251
+ }
252
+ FUNCTION {output.nonnull}
253
+ { % Save the thing we've been asked to output
254
+ 's :=
255
+ % If the bracket-state is close.brackets, then add a close-bracket to
256
+ % what is currently at the top of the stack, and set bracket.state
257
+ % to outside.brackets
258
+ bracket.state close.brackets =
259
+ { "]" *
260
+ outside.brackets 'bracket.state :=
261
+ }
262
+ 'skip$
263
+ if$
264
+ bracket.state outside.brackets =
265
+ { % We're outside all brackets -- this is the normal situation.
266
+ % Write out what's currently at the top of the stack, using the
267
+ % original output.nonnull function.
268
+ s
269
+ add.inlinelink
270
+ output.nonnull.original % invoke the original output.nonnull
271
+ }
272
+ { % Still in brackets. Add open-bracket or (continuation) comma, add the
273
+ % new text (in s) to the top of the stack, and move to the close-brackets
274
+ % state, ready for next time (unless inbrackets resets it). If we come
275
+ % into this branch, then output.state is carefully undisturbed.
276
+ bracket.state open.brackets =
277
+ { " [" * }
278
+ { ", " * } % bracket.state will be within.brackets
279
+ if$
280
+ s *
281
+ close.brackets 'bracket.state :=
282
+ }
283
+ if$
284
+ }
285
+
286
+ % Call this function just before adding something which should be presented in
287
+ % brackets. bracket.state is handled specially within output.nonnull.
288
+ FUNCTION {inbrackets}
289
+ { bracket.state close.brackets =
290
+ { within.brackets 'bracket.state := } % reset the state: not open nor closed
291
+ { open.brackets 'bracket.state := }
292
+ if$
293
+ }
294
+
295
+ FUNCTION {format.lastchecked}
296
+ { lastchecked empty$
297
+ { "" }
298
+ { inbrackets citedstring lastchecked * }
299
+ if$
300
+ }
301
+ % ...urlbst to here
302
+ FUNCTION {output}
303
+ { duplicate$ empty$
304
+ 'pop$
305
+ 'output.nonnull
306
+ if$
307
+ }
308
+ FUNCTION {output.check}
309
+ { 't :=
310
+ duplicate$ empty$
311
+ { pop$ "empty " t * " in " * cite$ * warning$ }
312
+ 'output.nonnull
313
+ if$
314
+ }
315
+ FUNCTION {fin.entry.original} % urlbst (renamed from fin.entry, so it can be wrapped below)
316
+ { add.period$
317
+ write$
318
+ newline$
319
+ }
320
+
321
+ FUNCTION {new.block}
322
+ { output.state before.all =
323
+ 'skip$
324
+ { after.block 'output.state := }
325
+ if$
326
+ }
327
+ FUNCTION {new.sentence}
328
+ { output.state after.block =
329
+ 'skip$
330
+ { output.state before.all =
331
+ 'skip$
332
+ { after.sentence 'output.state := }
333
+ if$
334
+ }
335
+ if$
336
+ }
337
+ FUNCTION {add.blank}
338
+ { " " * before.all 'output.state :=
339
+ }
340
+
341
+ FUNCTION {date.block}
342
+ {
343
+ new.block
344
+ }
345
+
346
+ FUNCTION {not}
347
+ { { #0 }
348
+ { #1 }
349
+ if$
350
+ }
351
+ FUNCTION {and}
352
+ { 'skip$
353
+ { pop$ #0 }
354
+ if$
355
+ }
356
+ FUNCTION {or}
357
+ { { pop$ #1 }
358
+ 'skip$
359
+ if$
360
+ }
361
+ FUNCTION {new.block.checkb}
362
+ { empty$
363
+ swap$ empty$
364
+ and
365
+ 'skip$
366
+ 'new.block
367
+ if$
368
+ }
369
+ FUNCTION {field.or.null}
370
+ { duplicate$ empty$
371
+ { pop$ "" }
372
+ 'skip$
373
+ if$
374
+ }
375
+ FUNCTION {emphasize}
376
+ { duplicate$ empty$
377
+ { pop$ "" }
378
+ { "\emph{" swap$ * "}" * }
379
+ if$
380
+ }
381
+ FUNCTION {tie.or.space.prefix} % puts ~ before the preceding part if it is of length <3
382
+ { duplicate$ text.length$ #3 <
383
+ { "~" }
384
+ { " " }
385
+ if$
386
+ swap$
387
+ }
388
+
389
+ FUNCTION {capitalize}
390
+ { "u" change.case$ "t" change.case$ }
391
+
392
+ FUNCTION {space.word}
393
+ { " " swap$ * " " * }
394
+ % Here are the language-specific definitions for explicit words.
395
+ % Each function has a name bbl.xxx where xxx is the English word.
396
+ % The language selected here is ENGLISH
397
+ FUNCTION {bbl.and}
398
+ { "and"}
399
+
400
+ FUNCTION {bbl.etal}
401
+ { "et~al." }
402
+
403
+ FUNCTION {bbl.editors}
404
+ { "editors" }
405
+
406
+ FUNCTION {bbl.editor}
407
+ { "editor" }
408
+
409
+ FUNCTION {bbl.edby}
410
+ { "edited by" }
411
+
412
+ FUNCTION {bbl.edition}
413
+ { "edition" }
414
+
415
+ FUNCTION {bbl.volume}
416
+ { "volume" }
417
+
418
+ FUNCTION {bbl.of}
419
+ { "of" }
420
+
421
+ FUNCTION {bbl.number}
422
+ { "number" }
423
+
424
+ FUNCTION {bbl.nr}
425
+ { "no." }
426
+
427
+ FUNCTION {bbl.in}
428
+ { "in" }
429
+
430
+ FUNCTION {bbl.pages}
431
+ { "pages" }
432
+
433
+ FUNCTION {bbl.page}
434
+ { "page" }
435
+
436
+ FUNCTION {bbl.chapter}
437
+ { "chapter" }
438
+
439
+ FUNCTION {bbl.techrep}
440
+ { "Technical Report" }
441
+
442
+ FUNCTION {bbl.mthesis}
443
+ { "Master's thesis" }
444
+
445
+ FUNCTION {bbl.phdthesis}
446
+ { "Ph.D. thesis" }
447
+
448
+ MACRO {jan} {"January"}
449
+
450
+ MACRO {feb} {"February"}
451
+
452
+ MACRO {mar} {"March"}
453
+
454
+ MACRO {apr} {"April"}
455
+
456
+ MACRO {may} {"May"}
457
+
458
+ MACRO {jun} {"June"}
459
+
460
+ MACRO {jul} {"July"}
461
+
462
+ MACRO {aug} {"August"}
463
+
464
+ MACRO {sep} {"September"}
465
+
466
+ MACRO {oct} {"October"}
467
+
468
+ MACRO {nov} {"November"}
469
+
470
+ MACRO {dec} {"December"}
471
+
472
+ MACRO {acmcs} {"ACM Computing Surveys"}
473
+
474
+ MACRO {acta} {"Acta Informatica"}
475
+
476
+ MACRO {cacm} {"Communications of the ACM"}
477
+
478
+ MACRO {ibmjrd} {"IBM Journal of Research and Development"}
479
+
480
+ MACRO {ibmsj} {"IBM Systems Journal"}
481
+
482
+ MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
483
+
484
+ MACRO {ieeetc} {"IEEE Transactions on Computers"}
485
+
486
+ MACRO {ieeetcad}
487
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
488
+
489
+ MACRO {ipl} {"Information Processing Letters"}
490
+
491
+ MACRO {jacm} {"Journal of the ACM"}
492
+
493
+ MACRO {jcss} {"Journal of Computer and System Sciences"}
494
+
495
+ MACRO {scp} {"Science of Computer Programming"}
496
+
497
+ MACRO {sicomp} {"SIAM Journal on Computing"}
498
+
499
+ MACRO {tocs} {"ACM Transactions on Computer Systems"}
500
+
501
+ MACRO {tods} {"ACM Transactions on Database Systems"}
502
+
503
+ MACRO {tog} {"ACM Transactions on Graphics"}
504
+
505
+ MACRO {toms} {"ACM Transactions on Mathematical Software"}
506
+
507
+ MACRO {toois} {"ACM Transactions on Office Information Systems"}
508
+
509
+ MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
510
+
511
+ MACRO {tcs} {"Theoretical Computer Science"}
512
+
513
+ % bibinfo.check avoids acting on missing fields while bibinfo.warn will
514
+ % issue a warning message if a missing field is detected. Prior to calling
515
+ % the bibinfo functions, the user should push the field value and then its
516
+ % name string, in that order.
517
+ FUNCTION {bibinfo.check}
518
+ { swap$
519
+ duplicate$ missing$
520
+ {
521
+ pop$ pop$
522
+ ""
523
+ }
524
+ { duplicate$ empty$
525
+ {
526
+ swap$ pop$
527
+ }
528
+ { swap$
529
+ pop$
530
+ }
531
+ if$
532
+ }
533
+ if$
534
+ }
535
+ FUNCTION {bibinfo.warn}
536
+ { swap$
537
+ duplicate$ missing$
538
+ {
539
+ swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
540
+ ""
541
+ }
542
+ { duplicate$ empty$
543
+ {
544
+ swap$ "empty " swap$ * " in " * cite$ * warning$
545
+ }
546
+ { swap$
547
+ pop$
548
+ }
549
+ if$
550
+ }
551
+ if$
552
+ }
553
+ INTEGERS { nameptr namesleft numnames }
554
+
555
+
556
+ STRINGS { bibinfo}
557
+
558
+ FUNCTION {format.names}
559
+ { 'bibinfo :=
560
+ duplicate$ empty$ 'skip$ {
561
+ 's :=
562
+ "" 't :=
563
+ #1 'nameptr :=
564
+ s num.names$ 'numnames :=
565
+ numnames 'namesleft :=
566
+ { namesleft #0 > }
567
+ { s nameptr
568
+ "{ff~}{vv~}{ll}{, jj}" % first name first for all authors
569
+ format.name$
570
+ bibinfo bibinfo.check
571
+ 't :=
572
+ nameptr #1 >
573
+ {
574
+ nameptr #19 % truncate after 19 names
575
+ #1 + =
576
+ numnames #20 % if there are more than 20 names
577
+ > and
578
+ { "others" 't :=
579
+ #1 'namesleft := }
580
+ 'skip$
581
+ if$ % end truncation of long list of names
582
+ namesleft #1 >
583
+ { ", " * t * }
584
+ {
585
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
586
+ { 't := }
587
+ { pop$ }
588
+ if$
589
+ numnames #2 >
590
+ { "," * }
591
+ 'skip$
592
+ if$
593
+ t "others" =
594
+ {
595
+ %% " " * bbl.etal *
596
+ % compute the number of remaining authors
597
+ " and " * numnames nameptr - #1 + int.to.str$ * " others" *
598
+ }
599
+ {
600
+ bbl.and
601
+ space.word * t *
602
+ }
603
+ if$
604
+ }
605
+ if$
606
+ }
607
+ 't
608
+ if$
609
+ nameptr #1 + 'nameptr :=
610
+ namesleft #1 - 'namesleft :=
611
+ }
612
+ while$
613
+ } if$
614
+ }
615
+ FUNCTION {format.names.ed}
616
+ {
617
+ format.names
618
+ }
619
+ FUNCTION {format.key}
620
+ { empty$
621
+ { key field.or.null }
622
+ { "" }
623
+ if$
624
+ }
625
+
626
+ FUNCTION {format.authors}
627
+ { author "author" format.names
628
+ }
629
+ FUNCTION {get.bbl.editor}
630
+ { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
631
+
632
+ FUNCTION {format.editors}
633
+ { editor "editor" format.names duplicate$ empty$ 'skip$
634
+ {
635
+ "," *
636
+ " " *
637
+ get.bbl.editor
638
+ *
639
+ }
640
+ if$
641
+ }
642
+ FUNCTION {format.note}
643
+ {
644
+ note empty$
645
+ { "" }
646
+ { note #1 #1 substring$
647
+ duplicate$ "{" =
648
+ 'skip$
649
+ { output.state mid.sentence =
650
+ { "l" }
651
+ { "u" }
652
+ if$
653
+ change.case$
654
+ }
655
+ if$
656
+ note #2 global.max$ substring$ * "note" bibinfo.check
657
+ }
658
+ if$
659
+ }
660
+
661
+ FUNCTION {format.title}
662
+ { title
663
+ duplicate$ empty$ 'skip$
664
+ { "t" change.case$ }
665
+ if$
666
+ "title" bibinfo.check
667
+ }
668
+ FUNCTION {format.full.names}
669
+ {'s :=
670
+ "" 't :=
671
+ #1 'nameptr :=
672
+ s num.names$ 'numnames :=
673
+ numnames 'namesleft :=
674
+ { namesleft #0 > }
675
+ { s nameptr
676
+ "{vv~}{ll}" format.name$
677
+ 't :=
678
+ nameptr #1 >
679
+ {
680
+ namesleft #1 >
681
+ { ", " * t * }
682
+ {
683
+ s nameptr "{ll}" format.name$ duplicate$ "others" =
684
+ { 't := }
685
+ { pop$ }
686
+ if$
687
+ t "others" =
688
+ {
689
+ " " * bbl.etal *
690
+ }
691
+ {
692
+ numnames #2 >
693
+ { "," * }
694
+ 'skip$
695
+ if$
696
+ bbl.and
697
+ space.word * t *
698
+ }
699
+ if$
700
+ }
701
+ if$
702
+ }
703
+ 't
704
+ if$
705
+ nameptr #1 + 'nameptr :=
706
+ namesleft #1 - 'namesleft :=
707
+ }
708
+ while$
709
+ }
710
+
711
+ FUNCTION {author.editor.key.full}
712
+ { author empty$
713
+ { editor empty$
714
+ { key empty$
715
+ { cite$ #1 #3 substring$ }
716
+ 'key
717
+ if$
718
+ }
719
+ { editor format.full.names }
720
+ if$
721
+ }
722
+ { author format.full.names }
723
+ if$
724
+ }
725
+
726
+ FUNCTION {author.key.full}
727
+ { author empty$
728
+ { key empty$
729
+ { cite$ #1 #3 substring$ }
730
+ 'key
731
+ if$
732
+ }
733
+ { author format.full.names }
734
+ if$
735
+ }
736
+
737
+ FUNCTION {editor.key.full}
738
+ { editor empty$
739
+ { key empty$
740
+ { cite$ #1 #3 substring$ }
741
+ 'key
742
+ if$
743
+ }
744
+ { editor format.full.names }
745
+ if$
746
+ }
747
+
748
+ FUNCTION {make.full.names}
749
+ { type$ "book" =
750
+ type$ "inbook" =
751
+ or
752
+ 'author.editor.key.full
753
+ { type$ "proceedings" =
754
+ 'editor.key.full
755
+ 'author.key.full
756
+ if$
757
+ }
758
+ if$
759
+ }
760
+
761
+ FUNCTION {output.bibitem.original} % urlbst (renamed from output.bibitem, so it can be wrapped below)
762
+ { newline$
763
+ "\bibitem[{" write$
764
+ label write$
765
+ ")" make.full.names duplicate$ short.list =
766
+ { pop$ }
767
+ { * }
768
+ if$
769
+ "}]{" * write$
770
+ cite$ write$
771
+ "}" write$
772
+ newline$
773
+ ""
774
+ before.all 'output.state :=
775
+ }
776
+
777
+ FUNCTION {n.dashify}
778
+ {
779
+ 't :=
780
+ ""
781
+ { t empty$ not }
782
+ { t #1 #1 substring$ "-" =
783
+ { t #1 #2 substring$ "--" = not
784
+ { "--" *
785
+ t #2 global.max$ substring$ 't :=
786
+ }
787
+ { { t #1 #1 substring$ "-" = }
788
+ { "-" *
789
+ t #2 global.max$ substring$ 't :=
790
+ }
791
+ while$
792
+ }
793
+ if$
794
+ }
795
+ { t #1 #1 substring$ *
796
+ t #2 global.max$ substring$ 't :=
797
+ }
798
+ if$
799
+ }
800
+ while$
801
+ }
802
+
803
+ FUNCTION {word.in}
804
+ { bbl.in capitalize
805
+ " " * }
806
+
807
+ FUNCTION {format.date}
808
+ { year "year" bibinfo.check duplicate$ empty$
809
+ {
810
+ }
811
+ 'skip$
812
+ if$
813
+ extra.label *
814
+ before.all 'output.state :=
815
+ after.sentence 'output.state :=
816
+ }
817
+ FUNCTION {format.btitle}
818
+ { title "title" bibinfo.check
819
+ duplicate$ empty$ 'skip$
820
+ {
821
+ emphasize
822
+ }
823
+ if$
824
+ }
825
+ FUNCTION {either.or.check}
826
+ { empty$
827
+ 'pop$
828
+ { "can't use both " swap$ * " fields in " * cite$ * warning$ }
829
+ if$
830
+ }
831
+ FUNCTION {format.bvolume}
832
+ { volume empty$
833
+ { "" }
834
+ { bbl.volume volume tie.or.space.prefix
835
+ "volume" bibinfo.check * *
836
+ series "series" bibinfo.check
837
+ duplicate$ empty$ 'pop$
838
+ { swap$ bbl.of space.word * swap$
839
+ emphasize * }
840
+ if$
841
+ "volume and number" number either.or.check
842
+ }
843
+ if$
844
+ }
845
+ FUNCTION {format.number.series}
846
+ { volume empty$
847
+ { number empty$
848
+ { series field.or.null }
849
+ { series empty$
850
+ { number "number" bibinfo.check }
851
+ { output.state mid.sentence =
852
+ { bbl.number }
853
+ { bbl.number capitalize }
854
+ if$
855
+ number tie.or.space.prefix "number" bibinfo.check * *
856
+ bbl.in space.word *
857
+ series "series" bibinfo.check *
858
+ }
859
+ if$
860
+ }
861
+ if$
862
+ }
863
+ { "" }
864
+ if$
865
+ }
866
+
867
+ FUNCTION {format.edition}
868
+ { edition duplicate$ empty$ 'skip$
869
+ {
870
+ output.state mid.sentence =
871
+ { "l" }
872
+ { "t" }
873
+ if$ change.case$
874
+ "edition" bibinfo.check
875
+ " " * bbl.edition *
876
+ }
877
+ if$
878
+ }
879
+ INTEGERS { multiresult }
880
+ FUNCTION {multi.page.check}
881
+ { 't :=
882
+ #0 'multiresult :=
883
+ { multiresult not
884
+ t empty$ not
885
+ and
886
+ }
887
+ { t #1 #1 substring$
888
+ duplicate$ "-" =
889
+ swap$ duplicate$ "," =
890
+ swap$ "+" =
891
+ or or
892
+ { #1 'multiresult := }
893
+ { t #2 global.max$ substring$ 't := }
894
+ if$
895
+ }
896
+ while$
897
+ multiresult
898
+ }
899
+ FUNCTION {format.pages}
900
+ { pages duplicate$ empty$ 'skip$
901
+ { duplicate$ multi.page.check
902
+ {
903
+ bbl.pages swap$
904
+ n.dashify
905
+ }
906
+ {
907
+ bbl.page swap$
908
+ }
909
+ if$
910
+ tie.or.space.prefix
911
+ "pages" bibinfo.check
912
+ * *
913
+ }
914
+ if$
915
+ }
916
+ FUNCTION {format.journal.pages}
917
+ { pages duplicate$ empty$ 'pop$
918
+ { swap$ duplicate$ empty$
919
+ { pop$ pop$ format.pages }
920
+ {
921
+ ":" *
922
+ swap$
923
+ n.dashify
924
+ "pages" bibinfo.check
925
+ *
926
+ }
927
+ if$
928
+ }
929
+ if$
930
+ }
931
+ FUNCTION {format.journal.eid}
932
+ { eid "eid" bibinfo.check
933
+ duplicate$ empty$ 'pop$
934
+ { swap$ duplicate$ empty$ 'skip$
935
+ {
936
+ ":" *
937
+ }
938
+ if$
939
+ swap$ *
940
+ }
941
+ if$
942
+ }
943
+ FUNCTION {format.vol.num.pages}
944
+ { volume field.or.null
945
+ duplicate$ empty$ 'skip$
946
+ {
947
+ "volume" bibinfo.check
948
+ }
949
+ if$
950
+ number "number" bibinfo.check duplicate$ empty$ 'skip$
951
+ {
952
+ swap$ duplicate$ empty$
953
+ { "there's a number but no volume in " cite$ * warning$ }
954
+ 'skip$
955
+ if$
956
+ swap$
957
+ "(" swap$ * ")" *
958
+ }
959
+ if$ *
960
+ eid empty$
961
+ { format.journal.pages }
962
+ { format.journal.eid }
963
+ if$
964
+ }
965
+
966
+ FUNCTION {format.chapter}
967
+ { chapter empty$
968
+ 'format.pages
969
+ { type empty$
970
+ { bbl.chapter }
971
+ { type "l" change.case$
972
+ "type" bibinfo.check
973
+ }
974
+ if$
975
+ chapter tie.or.space.prefix
976
+ "chapter" bibinfo.check
977
+ * *
978
+ }
979
+ if$
980
+ }
981
+
982
+ FUNCTION {format.chapter.pages}
983
+ { chapter empty$
984
+ 'format.pages
985
+ { type empty$
986
+ { bbl.chapter }
987
+ { type "l" change.case$
988
+ "type" bibinfo.check
989
+ }
990
+ if$
991
+ chapter tie.or.space.prefix
992
+ "chapter" bibinfo.check
993
+ * *
994
+ pages empty$
995
+ 'skip$
996
+ { ", " * format.pages * }
997
+ if$
998
+ }
999
+ if$
1000
+ }
1001
+
1002
+ FUNCTION {format.booktitle}
1003
+ {
1004
+ booktitle "booktitle" bibinfo.check
1005
+ emphasize
1006
+ }
1007
+ FUNCTION {format.in.booktitle}
1008
+ { format.booktitle duplicate$ empty$ 'skip$
1009
+ {
1010
+ word.in swap$ *
1011
+ }
1012
+ if$
1013
+ }
1014
+ FUNCTION {format.in.ed.booktitle}
1015
+ { format.booktitle duplicate$ empty$ 'skip$
1016
+ {
1017
+ editor "editor" format.names.ed duplicate$ empty$ 'pop$
1018
+ {
1019
+ "," *
1020
+ " " *
1021
+ get.bbl.editor
1022
+ ", " *
1023
+ * swap$
1024
+ * }
1025
+ if$
1026
+ word.in swap$ *
1027
+ }
1028
+ if$
1029
+ }
1030
+ FUNCTION {format.thesis.type}
1031
+ { type duplicate$ empty$
1032
+ 'pop$
1033
+ { swap$ pop$
1034
+ "t" change.case$ "type" bibinfo.check
1035
+ }
1036
+ if$
1037
+ }
1038
+ FUNCTION {format.tr.number}
1039
+ { number "number" bibinfo.check
1040
+ type duplicate$ empty$
1041
+ { pop$ bbl.techrep }
1042
+ 'skip$
1043
+ if$
1044
+ "type" bibinfo.check
1045
+ swap$ duplicate$ empty$
1046
+ { pop$ "t" change.case$ }
1047
+ { tie.or.space.prefix * * }
1048
+ if$
1049
+ }
1050
+ FUNCTION {format.article.crossref}
1051
+ {
1052
+ word.in
1053
+ " \cite{" * crossref * "}" *
1054
+ }
1055
+ FUNCTION {format.book.crossref}
1056
+ { volume duplicate$ empty$
1057
+ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
1058
+ pop$ word.in
1059
+ }
1060
+ { bbl.volume
1061
+ capitalize
1062
+ swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
1063
+ }
1064
+ if$
1065
+ " \cite{" * crossref * "}" *
1066
+ }
1067
+ FUNCTION {format.incoll.inproc.crossref}
1068
+ {
1069
+ word.in
1070
+ " \cite{" * crossref * "}" *
1071
+ }
1072
+ FUNCTION {format.org.or.pub}
1073
+ { 't :=
1074
+ ""
1075
+ address empty$ t empty$ and
1076
+ 'skip$
1077
+ {
1078
+ t empty$
1079
+ { address "address" bibinfo.check *
1080
+ }
1081
+ { t *
1082
+ address empty$
1083
+ 'skip$
1084
+ { ", " * address "address" bibinfo.check * }
1085
+ if$
1086
+ }
1087
+ if$
1088
+ }
1089
+ if$
1090
+ }
1091
+ FUNCTION {format.publisher.address}
1092
+ { publisher "publisher" bibinfo.warn format.org.or.pub
1093
+ }
1094
+
1095
+ FUNCTION {format.organization.address}
1096
+ { organization "organization" bibinfo.check format.org.or.pub
1097
+ }
1098
+
1099
+ FUNCTION {archiveprefix.or.eprinttype} % holder for eprinttype with archiveprefix precedence
1100
+ {
1101
+ archiveprefix empty$
1102
+ {
1103
+ eprinttype empty$
1104
+ { "" } % not using 'skip$ to reduce errors like "nothing to pop from stack"
1105
+ { eprinttype }
1106
+ if$
1107
+ }
1108
+ { archiveprefix }
1109
+ if$
1110
+ }
1111
+
1112
+ FUNCTION {output.eprint} % this is only used with the @misc record type (common for arXiv and other preprint server bibtex records)
1113
+ {
1114
+ eprint empty$
1115
+ {% if eprint field is empty
1116
+ publisher field.or.null "arXiv" = % field.or.null here helps when no publisher field in the record
1117
+ { publisher " preprint" * } % add " preprint" to publisher with the idea that publisher is the name of the preprint server
1118
+ { "" } % if publisher != "arXiv" then empty output
1119
+ if$
1120
+ emphasize % no output function after emphasize because nothing goes after this
1121
+ }
1122
+ {% if eprint field is not empty
1123
+ archiveprefix.or.eprinttype empty$
1124
+ { "" } % not using 'skip$ to reduce errors like "nothing to pop from stack"
1125
+ {% if archiveprefix or eprinttype fields are not empty
1126
+ journal empty$
1127
+ { "Preprint" } % if journal field is empty: output just "Preprint" emphasized like a journal name
1128
+ { journal } % if journal field is not empty, output it (takes precedence)
1129
+ if$
1130
+ emphasize output % emphasize what we formed before, setting output as a border to the subblock that follows with the comma delimiter
1131
+ archiveprefix.or.eprinttype ":" * eprint * % subblock with eprinttype and eprint number
1132
+ }
1133
+ if$
1134
+ }
1135
+ if$
1136
+ }
1137
+
1138
+ % urlbst...
1139
+ % Functions for making hypertext links.
1140
+ % In all cases, the stack has (link-text href-url)
1141
+ %
1142
+ % make 'null' specials
1143
+ FUNCTION {make.href.null}
1144
+ {
1145
+ pop$
1146
+ }
1147
+ % make hypertex specials
1148
+ FUNCTION {make.href.hypertex}
1149
+ {
1150
+ "\special {html:<a href=" quote$ *
1151
+ swap$ * quote$ * "> }" * swap$ *
1152
+ "\special {html:</a>}" *
1153
+ }
1154
+ % make hyperref specials
1155
+ FUNCTION {make.href.hyperref}
1156
+ {
1157
+ "\href {" swap$ * "} {\path{" * swap$ * "}}" *
1158
+ }
1159
+ FUNCTION {make.href}
1160
+ { hrefform #2 =
1161
+ 'make.href.hyperref % hrefform = 2
1162
+ { hrefform #1 =
1163
+ 'make.href.hypertex % hrefform = 1
1164
+ 'make.href.null % hrefform = 0 (or anything else)
1165
+ if$
1166
+ }
1167
+ if$
1168
+ }
1169
+
1170
+ % If inlinelinks is true, then format.url should be a no-op, since it's
1171
+ % (a) redundant, and (b) could end up as a link-within-a-link.
1172
+ FUNCTION {format.url}
1173
+ { inlinelinks #1 = url empty$ or
1174
+ { "" }
1175
+ { hrefform #1 =
1176
+ { % special case -- add HyperTeX specials
1177
+ urlintro "\url{" url * "}" * url make.href.hypertex * }
1178
+ { urlintro "\url{" * url * "}" * }
1179
+ if$
1180
+ }
1181
+ if$
1182
+ }
1183
+ FUNCTION {format.eprint}
1184
+ { eprint empty$
1185
+ { "" }
1186
+ { eprintprefix eprint * eprinturl eprint * make.href }
1187
+ if$
1188
+ }
1189
+
1190
+ FUNCTION {format.doi}
1191
+ { doi empty$
1192
+ { "" }
1193
+ { doi parse.doi % leaves "https://doi.org/DOI" DOI on the stack
1194
+ 's := 't :=
1195
+ doiform #1 =
1196
+ { "\doi{" s * "}" * }
1197
+ { doiprefix s * t make.href }
1198
+ if$
1199
+ }
1200
+ if$
1201
+ }
1202
+
1203
+ FUNCTION {format.pubmed}
1204
+ { pubmed empty$
1205
+ { "" }
1206
+ { pubmedprefix pubmed * pubmedurl pubmed * make.href }
1207
+ if$
1208
+ }
1209
+
1210
+ % Output a URL. We can't use the more normal idiom (something like
1211
+ % `format.url output'), because the `inbrackets' within
1212
+ % format.lastchecked applies to everything between calls to `output',
1213
+ % so that `format.url format.lastchecked * output' ends up with both
1214
+ % the URL and the lastchecked in brackets.
1215
+ FUNCTION {output.url}
1216
+ { url empty$
1217
+ 'skip$
1218
+ { new.block
1219
+ format.url output
1220
+ format.lastchecked output
1221
+ }
1222
+ if$
1223
+ }
1224
+
1225
+ FUNCTION {output.web.refs}
1226
+ {
1227
+ new.block
1228
+ inlinelinks
1229
+ 'skip$ % links were inline -- don't repeat them
1230
+ { % If the generated DOI will be the same as the URL,
1231
+ % then don't print the URL (thanks to Joseph Wright
1232
+ % for (the original version of) this code,
1233
+ % at http://tex.stackexchange.com/questions/5660)
1234
+ adddoi
1235
+ doi empty$ { "X" } { doi parse.doi pop$ } if$ % DOI URL to be generated
1236
+ url empty$ { "Y" } { url } if$ % the URL, or "Y" if empty
1237
+ = % are the strings equal?
1238
+ and
1239
+ 'skip$
1240
+ { output.url }
1241
+ if$
1242
+ addeprints eprint empty$ not and
1243
+ { format.eprint output.nonnull }
1244
+ 'skip$
1245
+ if$
1246
+ adddoi doi empty$ not and
1247
+ { format.doi output.nonnull }
1248
+ 'skip$
1249
+ if$
1250
+ addpubmed pubmed empty$ not and
1251
+ { format.pubmed output.nonnull }
1252
+ 'skip$
1253
+ if$
1254
+ }
1255
+ if$
1256
+ }
1257
+
1258
+ % Wrapper for output.bibitem.original.
1259
+ % If the URL field is not empty, set makeinlinelink to be true,
1260
+ % so that an inline link will be started at the next opportunity
1261
+ FUNCTION {output.bibitem}
1262
+ { outside.brackets 'bracket.state :=
1263
+ output.bibitem.original
1264
+ inlinelinks url empty$ not doi empty$ not or pubmed empty$ not or eprint empty$ not or and
1265
+ { #1 'makeinlinelink := }
1266
+ { #0 'makeinlinelink := }
1267
+ if$
1268
+ }
1269
+
1270
+ % Wrapper for fin.entry.original
1271
+ FUNCTION {fin.entry}
1272
+ { output.web.refs % urlbst
1273
+ makeinlinelink % ooops, it appears we didn't have a title for inlinelink
1274
+ { possibly.setup.inlinelink % add some artificial link text here, as a fallback
1275
+ linktextstring output.nonnull }
1276
+ 'skip$
1277
+ if$
1278
+ bracket.state close.brackets = % urlbst
1279
+ { "]" * }
1280
+ 'skip$
1281
+ if$
1282
+ fin.entry.original
1283
+ }
1284
+
1285
+ % Webpage entry type.
1286
+ % Title and url fields required;
1287
+ % author, note, year, month, and lastchecked fields optional
1288
+ % See references
1289
+ % ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm
1290
+ % http://www.classroom.net/classroom/CitingNetResources.html
1291
+ % http://neal.ctstateu.edu/history/cite.html
1292
+ % http://www.cas.usf.edu/english/walker/mla.html
1293
+ % for citation formats for web pages.
1294
+ FUNCTION {webpage}
1295
+ { output.bibitem
1296
+ author empty$
1297
+ { editor empty$
1298
+ 'skip$ % author and editor both optional
1299
+ { format.editors output.nonnull }
1300
+ if$
1301
+ }
1302
+ { editor empty$
1303
+ { format.authors output.nonnull }
1304
+ { "can't use both author and editor fields in " cite$ * warning$ }
1305
+ if$
1306
+ }
1307
+ if$
1308
+ new.block
1309
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$
1310
+ format.title "title" output.check
1311
+ inbrackets onlinestring output
1312
+ new.block
1313
+ year empty$
1314
+ 'skip$
1315
+ { format.date "year" output.check }
1316
+ if$
1317
+ % We don't need to output the URL details ('lastchecked' and 'url'),
1318
+ % because fin.entry does that for us, using output.web.refs. The only
1319
+ % reason we would want to put them here is if we were to decide that
1320
+ % they should go in front of the rather miscellaneous information in 'note'.
1321
+ new.block
1322
+ note output
1323
+ fin.entry
1324
+ }
1325
+ % ...urlbst to here
1326
+
1327
+
1328
+ FUNCTION {article}
1329
+ { output.bibitem
1330
+ format.authors "author" output.check
1331
+ author format.key output
1332
+ format.date "year" output.check
1333
+ date.block
1334
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1335
+ format.title "title" output.check
1336
+ new.block
1337
+ crossref missing$
1338
+ {
1339
+ journal
1340
+ "journal" bibinfo.check
1341
+ emphasize
1342
+ "journal" output.check
1343
+ possibly.setup.inlinelink format.vol.num.pages output% urlbst
1344
+ }
1345
+ { format.article.crossref output.nonnull
1346
+ format.pages output
1347
+ }
1348
+ if$
1349
+ new.block
1350
+ format.note output
1351
+ fin.entry
1352
+ }
1353
+ FUNCTION {book}
1354
+ { output.bibitem
1355
+ author empty$
1356
+ { format.editors "author and editor" output.check
1357
+ editor format.key output
1358
+ }
1359
+ { format.authors output.nonnull
1360
+ crossref missing$
1361
+ { "author and editor" editor either.or.check }
1362
+ 'skip$
1363
+ if$
1364
+ }
1365
+ if$
1366
+ format.date "year" output.check
1367
+ date.block
1368
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1369
+ format.btitle "title" output.check
1370
+ format.edition output
1371
+ crossref missing$
1372
+ { format.bvolume output
1373
+ new.block
1374
+ format.number.series output
1375
+ new.sentence
1376
+ format.publisher.address output
1377
+ }
1378
+ {
1379
+ new.block
1380
+ format.book.crossref output.nonnull
1381
+ }
1382
+ if$
1383
+ new.block
1384
+ format.note output
1385
+ fin.entry
1386
+ }
1387
+ FUNCTION {booklet}
1388
+ { output.bibitem
1389
+ format.authors output
1390
+ author format.key output
1391
+ format.date "year" output.check
1392
+ date.block
1393
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1394
+ format.title "title" output.check
1395
+ new.block
1396
+ howpublished "howpublished" bibinfo.check output
1397
+ address "address" bibinfo.check output
1398
+ new.block
1399
+ format.note output
1400
+ fin.entry
1401
+ }
1402
+
1403
+ FUNCTION {inbook}
1404
+ { output.bibitem
1405
+ author empty$
1406
+ { format.editors "author and editor" output.check
1407
+ editor format.key output
1408
+ }
1409
+ { format.authors output.nonnull
1410
+ crossref missing$
1411
+ { "author and editor" editor either.or.check }
1412
+ 'skip$
1413
+ if$
1414
+ }
1415
+ if$
1416
+ format.date "year" output.check
1417
+ date.block
1418
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1419
+ format.btitle "title" output.check
1420
+ crossref missing$
1421
+ {
1422
+ format.edition output
1423
+ format.bvolume output
1424
+ format.chapter "chapter" output.check
1425
+ new.block
1426
+ format.number.series output
1427
+ new.sentence
1428
+ format.publisher.address output
1429
+ }
1430
+ {
1431
+ format.chapter "chapter" output.check
1432
+ new.block
1433
+ format.book.crossref output.nonnull
1434
+ }
1435
+ if$
1436
+ new.block
1437
+ format.note output
1438
+ fin.entry
1439
+ }
1440
+
1441
+ FUNCTION {incollection}
1442
+ { output.bibitem
1443
+ format.authors "author" output.check
1444
+ author format.key output
1445
+ format.date "year" output.check
1446
+ date.block
1447
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1448
+ format.title "title" output.check
1449
+ new.block
1450
+ crossref missing$
1451
+ { format.in.ed.booktitle "booktitle" output.check
1452
+ format.edition output
1453
+ format.bvolume output
1454
+ format.number.series output
1455
+ format.chapter.pages output
1456
+ new.sentence
1457
+ format.publisher.address output
1458
+ }
1459
+ { format.incoll.inproc.crossref output.nonnull
1460
+ format.chapter.pages output
1461
+ }
1462
+ if$
1463
+ new.block
1464
+ format.note output
1465
+ fin.entry
1466
+ }
1467
+ FUNCTION {inproceedings}
1468
+ { output.bibitem
1469
+ format.authors "author" output.check
1470
+ author format.key output
1471
+ format.date "year" output.check
1472
+ date.block
1473
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1474
+ format.title "title" output.check
1475
+ new.block
1476
+ crossref missing$
1477
+ { format.in.booktitle "booktitle" output.check
1478
+ format.bvolume output
1479
+ format.number.series output
1480
+ format.pages output
1481
+ address "address" bibinfo.check output
1482
+ new.sentence
1483
+ organization "organization" bibinfo.check output
1484
+ publisher "publisher" bibinfo.check output
1485
+ }
1486
+ { format.incoll.inproc.crossref output.nonnull
1487
+ format.pages output
1488
+ }
1489
+ if$
1490
+ new.block
1491
+ format.note output
1492
+ fin.entry
1493
+ }
1494
+ FUNCTION {conference} { inproceedings }
1495
+ FUNCTION {manual}
1496
+ { output.bibitem
1497
+ format.authors output
1498
+ author format.key output
1499
+ format.date "year" output.check
1500
+ date.block
1501
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1502
+ format.btitle "title" output.check
1503
+ format.edition output
1504
+ organization address new.block.checkb
1505
+ organization "organization" bibinfo.check output
1506
+ address "address" bibinfo.check output
1507
+ new.block
1508
+ format.note output
1509
+ fin.entry
1510
+ }
1511
+
1512
+ FUNCTION {mastersthesis}
1513
+ { output.bibitem
1514
+ format.authors "author" output.check
1515
+ author format.key output
1516
+ format.date "year" output.check
1517
+ date.block
1518
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1519
+ format.title
1520
+ "title" output.check
1521
+ new.block
1522
+ bbl.mthesis format.thesis.type output.nonnull
1523
+ school "school" bibinfo.warn output
1524
+ address "address" bibinfo.check output
1525
+ month "month" bibinfo.check output
1526
+ new.block
1527
+ format.note output
1528
+ fin.entry
1529
+ }
1530
+
1531
+ FUNCTION {misc}
1532
+ { output.bibitem
1533
+ format.authors output
1534
+ author format.key output
1535
+ format.date "year" output.check
1536
+ date.block
1537
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1538
+ format.title output
1539
+ new.block
1540
+ howpublished "howpublished" bibinfo.check output
1541
+ new.block
1542
+ output.eprint output
1543
+ new.block
1544
+ format.note output
1545
+ fin.entry
1546
+ }
1547
+ FUNCTION {phdthesis}
1548
+ { output.bibitem
1549
+ format.authors "author" output.check
1550
+ author format.key output
1551
+ format.date "year" output.check
1552
+ date.block
1553
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1554
+ format.btitle
1555
+ "title" output.check
1556
+ new.block
1557
+ bbl.phdthesis format.thesis.type output.nonnull
1558
+ school "school" bibinfo.warn output
1559
+ address "address" bibinfo.check output
1560
+ new.block
1561
+ format.note output
1562
+ fin.entry
1563
+ }
1564
+
1565
+ FUNCTION {presentation}
1566
+ { output.bibitem
1567
+ format.authors output
1568
+ author format.key output
1569
+ new.block
1570
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1571
+ format.title output
1572
+ new.block
1573
+ format.organization.address "organization and address" output.check
1574
+ month "month" output.check
1575
+ year "year" output.check
1576
+ new.block
1577
+ format.note output
1578
+ new.sentence
1579
+ type missing$ 'skip$
1580
+ {"(" type capitalize * ")" * output}
1581
+ if$
1582
+ fin.entry
1583
+ }
1584
+
1585
+ FUNCTION {proceedings}
1586
+ { output.bibitem
1587
+ format.editors output
1588
+ editor format.key output
1589
+ format.date "year" output.check
1590
+ date.block
1591
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1592
+ format.btitle "title" output.check
1593
+ format.bvolume output
1594
+ format.number.series output
1595
+ new.sentence
1596
+ publisher empty$
1597
+ { format.organization.address output }
1598
+ { organization "organization" bibinfo.check output
1599
+ new.sentence
1600
+ format.publisher.address output
1601
+ }
1602
+ if$
1603
+ new.block
1604
+ format.note output
1605
+ fin.entry
1606
+ }
1607
+
1608
+ FUNCTION {techreport}
1609
+ { output.bibitem
1610
+ format.authors "author" output.check
1611
+ author format.key output
1612
+ format.date "year" output.check
1613
+ date.block
1614
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1615
+ format.title
1616
+ "title" output.check
1617
+ new.block
1618
+ format.tr.number output.nonnull
1619
+ institution "institution" bibinfo.warn output
1620
+ address "address" bibinfo.check output
1621
+ new.block
1622
+ format.note output
1623
+ fin.entry
1624
+ }
1625
+
1626
+ FUNCTION {unpublished}
1627
+ { output.bibitem
1628
+ format.authors "author" output.check
1629
+ author format.key output
1630
+ format.date "year" output.check
1631
+ date.block
1632
+ title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst
1633
+ format.title "title" output.check
1634
+ new.block
1635
+ format.note "note" output.check
1636
+ fin.entry
1637
+ }
1638
+
1639
+ FUNCTION {default.type} { misc }
1640
+ READ
1641
+ FUNCTION {sortify}
1642
+ { purify$
1643
+ "l" change.case$
1644
+ }
1645
+ INTEGERS { len }
1646
+ FUNCTION {chop.word}
1647
+ { 's :=
1648
+ 'len :=
1649
+ s #1 len substring$ =
1650
+ { s len #1 + global.max$ substring$ }
1651
+ 's
1652
+ if$
1653
+ }
1654
+ FUNCTION {format.lab.names}
1655
+ { 's :=
1656
+ "" 't :=
1657
+ s #1 "{vv~}{ll}" format.name$
1658
+ s num.names$ duplicate$
1659
+ #2 >
1660
+ { pop$
1661
+ " " * bbl.etal *
1662
+ }
1663
+ { #2 <
1664
+ 'skip$
1665
+ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
1666
+ {
1667
+ " " * bbl.etal *
1668
+ }
1669
+ { bbl.and space.word * s #2 "{vv~}{ll}" format.name$
1670
+ * }
1671
+ if$
1672
+ }
1673
+ if$
1674
+ }
1675
+ if$
1676
+ }
1677
+
1678
+ FUNCTION {author.key.label}
1679
+ { author empty$
1680
+ { key empty$
1681
+ { cite$ #1 #3 substring$ }
1682
+ 'key
1683
+ if$
1684
+ }
1685
+ { author format.lab.names }
1686
+ if$
1687
+ }
1688
+
1689
+ FUNCTION {author.editor.key.label}
1690
+ { author empty$
1691
+ { editor empty$
1692
+ { key empty$
1693
+ { cite$ #1 #3 substring$ }
1694
+ 'key
1695
+ if$
1696
+ }
1697
+ { editor format.lab.names }
1698
+ if$
1699
+ }
1700
+ { author format.lab.names }
1701
+ if$
1702
+ }
1703
+
1704
+ FUNCTION {editor.key.label}
1705
+ { editor empty$
1706
+ { key empty$
1707
+ { cite$ #1 #3 substring$ }
1708
+ 'key
1709
+ if$
1710
+ }
1711
+ { editor format.lab.names }
1712
+ if$
1713
+ }
1714
+
1715
+ FUNCTION {calc.short.authors}
1716
+ { type$ "book" =
1717
+ type$ "inbook" =
1718
+ or
1719
+ 'author.editor.key.label
1720
+ { type$ "proceedings" =
1721
+ 'editor.key.label
1722
+ 'author.key.label
1723
+ if$
1724
+ }
1725
+ if$
1726
+ 'short.list :=
1727
+ }
1728
+
1729
+ FUNCTION {calc.label}
1730
+ { calc.short.authors
1731
+ short.list
1732
+ "("
1733
+ *
1734
+ year duplicate$ empty$
1735
+ short.list key field.or.null = or
1736
+ { pop$ "" }
1737
+ 'skip$
1738
+ if$
1739
+ *
1740
+ 'label :=
1741
+ }
1742
+
1743
+ FUNCTION {sort.format.names}
1744
+ { 's :=
1745
+ #1 'nameptr :=
1746
+ ""
1747
+ s num.names$ 'numnames :=
1748
+ numnames 'namesleft :=
1749
+ { namesleft #0 > }
1750
+ { s nameptr
1751
+ "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}"
1752
+ format.name$ 't :=
1753
+ nameptr #1 >
1754
+ {
1755
+ " " *
1756
+ namesleft #1 = t "others" = and
1757
+ { "zzzzz" 't := }
1758
+ 'skip$
1759
+ if$
1760
+ t sortify *
1761
+ }
1762
+ { t sortify * }
1763
+ if$
1764
+ nameptr #1 + 'nameptr :=
1765
+ namesleft #1 - 'namesleft :=
1766
+ }
1767
+ while$
1768
+ }
1769
+
1770
+ FUNCTION {sort.format.title}
1771
+ { 't :=
1772
+ "A " #2
1773
+ "An " #3
1774
+ "The " #4 t chop.word
1775
+ chop.word
1776
+ chop.word
1777
+ sortify
1778
+ #1 global.max$ substring$
1779
+ }
1780
+ FUNCTION {author.sort}
1781
+ { author empty$
1782
+ { key empty$
1783
+ { "to sort, need author or key in " cite$ * warning$
1784
+ ""
1785
+ }
1786
+ { key sortify }
1787
+ if$
1788
+ }
1789
+ { author sort.format.names }
1790
+ if$
1791
+ }
1792
+ FUNCTION {author.editor.sort}
1793
+ { author empty$
1794
+ { editor empty$
1795
+ { key empty$
1796
+ { "to sort, need author, editor, or key in " cite$ * warning$
1797
+ ""
1798
+ }
1799
+ { key sortify }
1800
+ if$
1801
+ }
1802
+ { editor sort.format.names }
1803
+ if$
1804
+ }
1805
+ { author sort.format.names }
1806
+ if$
1807
+ }
1808
+ FUNCTION {editor.sort}
1809
+ { editor empty$
1810
+ { key empty$
1811
+ { "to sort, need editor or key in " cite$ * warning$
1812
+ ""
1813
+ }
1814
+ { key sortify }
1815
+ if$
1816
+ }
1817
+ { editor sort.format.names }
1818
+ if$
1819
+ }
1820
+ FUNCTION {presort}
1821
+ { calc.label
1822
+ label sortify
1823
+ " "
1824
+ *
1825
+ type$ "book" =
1826
+ type$ "inbook" =
1827
+ or
1828
+ 'author.editor.sort
1829
+ { type$ "proceedings" =
1830
+ 'editor.sort
1831
+ 'author.sort
1832
+ if$
1833
+ }
1834
+ if$
1835
+ #1 entry.max$ substring$
1836
+ 'sort.label :=
1837
+ sort.label
1838
+ *
1839
+ " "
1840
+ *
1841
+ title field.or.null
1842
+ sort.format.title
1843
+ *
1844
+ #1 entry.max$ substring$
1845
+ 'sort.key$ :=
1846
+ }
1847
+
1848
+ ITERATE {presort}
1849
+ SORT
1850
+ STRINGS { last.label next.extra }
1851
+ INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label }
1852
+ FUNCTION {initialize.extra.label.stuff}
1853
+ { #0 int.to.chr$ 'last.label :=
1854
+ "" 'next.extra :=
1855
+ #0 'last.extra.num :=
1856
+ "a" chr.to.int$ #1 - 'last.extra.num.blank :=
1857
+ last.extra.num.blank 'last.extra.num.extended :=
1858
+ #0 'number.label :=
1859
+ }
1860
+ FUNCTION {forward.pass}
1861
+ { last.label label =
1862
+ { last.extra.num #1 + 'last.extra.num :=
1863
+ last.extra.num "z" chr.to.int$ >
1864
+ { "a" chr.to.int$ 'last.extra.num :=
1865
+ last.extra.num.extended #1 + 'last.extra.num.extended :=
1866
+ }
1867
+ 'skip$
1868
+ if$
1869
+ last.extra.num.extended last.extra.num.blank >
1870
+ { last.extra.num.extended int.to.chr$
1871
+ last.extra.num int.to.chr$
1872
+ * 'extra.label := }
1873
+ { last.extra.num int.to.chr$ 'extra.label := }
1874
+ if$
1875
+ }
1876
+ { "a" chr.to.int$ 'last.extra.num :=
1877
+ "" 'extra.label :=
1878
+ label 'last.label :=
1879
+ }
1880
+ if$
1881
+ number.label #1 + 'number.label :=
1882
+ }
1883
+ FUNCTION {reverse.pass}
1884
+ { next.extra "b" =
1885
+ { "a" 'extra.label := }
1886
+ 'skip$
1887
+ if$
1888
+ extra.label 'next.extra :=
1889
+ extra.label
1890
+ duplicate$ empty$
1891
+ 'skip$
1892
+ { year field.or.null #-1 #1 substring$ chr.to.int$ #65 <
1893
+ { "{\natexlab{" swap$ * "}}" * }
1894
+ { "{(\natexlab{" swap$ * "})}" * }
1895
+ if$ }
1896
+ if$
1897
+ 'extra.label :=
1898
+ label extra.label * 'label :=
1899
+ }
1900
+ EXECUTE {initialize.extra.label.stuff}
1901
+ ITERATE {forward.pass}
1902
+ REVERSE {reverse.pass}
1903
+ FUNCTION {bib.sort.order}
1904
+ { sort.label
1905
+ " "
1906
+ *
1907
+ year field.or.null sortify
1908
+ *
1909
+ " "
1910
+ *
1911
+ title field.or.null
1912
+ sort.format.title
1913
+ *
1914
+ #1 entry.max$ substring$
1915
+ 'sort.key$ :=
1916
+ }
1917
+ ITERATE {bib.sort.order}
1918
+ SORT
1919
+ FUNCTION {begin.bib}
1920
+ { preamble$ empty$
1921
+ 'skip$
1922
+ { preamble$ write$ newline$ }
1923
+ if$
1924
+ "\begin{thebibliography}{" number.label int.to.str$ * "}" *
1925
+ write$ newline$
1926
+ "\providecommand{\natexlab}[1]{#1}"
1927
+ write$ newline$
1928
+ }
1929
+ EXECUTE {begin.bib}
1930
+ EXECUTE {init.urlbst.variables} % urlbst
1931
+ EXECUTE {init.state.consts}
1932
+ ITERATE {call.type$}
1933
+ FUNCTION {end.bib}
1934
+ { newline$
1935
+ "\end{thebibliography}" write$ newline$
1936
+ }
1937
+ EXECUTE {end.bib}
1938
+ %% End of customized bst file
1939
+ %%
1940
+ %% End of file `acl_natbib_basic.bst'.