Gost
Gost
Gost
Igor A. Kotelnikov*
2017/01/12, v.1.2i
Abstract
GOST is a bundle of BibTeX styles designed to meet State Standards (GOST) on informa-
tion, librarianship and publishing issued by The Russian Federation and Interstate Committee
of former USSR States.
It comprises 16 BibTeX styles to format bibliography in English, Russian and Ukrainian
according to GOST 7.0.5-2008 and GOST 7.1-2003. Both 8-bit and Unicode (UTF-8) versions
of each BibTeX style, in each case offering a choice of sorted and unsorted. Further, 2 more
styles, gost780 and gost780s styles (not conforming to effective standards) are retained for
backwards compatibility.
1 Introduction
The package was initially developed by Maksym Polyakov. It was later updated by Igor Kotelnikov
to the present status and some code was borrowed from disser package developed by Stanislav
Kruchinin and unpublished work by Artem Petrenkov.
Nowdays, GOST is a bundle of BibTeX styles designed to meet State Standards (GOST) on
information, librarianship and publishing issued by Russian Federation and interstate committee
of former USSR States.
The System of Standards includes:
GOST 7.0.5-2008 Bibliographic reference. General requirements and rules of making.
GOST 7.1 -2003 Bibliographic record. Bibliographic description. General requirements and
rules.
GOST 7.80 -2000 Bibliographic record. Heading. General requirements and rules.
GOST 7.11 -2004 Bibliographic description and references. Rules for the abbreviation of words
and word combinations in foreign European languages.
GOST 7.83 -2001 Electronic editions. Basic types and imprint.
ect.
Currently, GOST contains 16 BibTeX styles to format bibliography in English, Russian and
Ukrainian according to GOST 7.0.5-2008 and GOST 7.1-2003. Both 8-bit and Unicode (UTF-8)
* [email protected]
1
versions of each BibTeX style, in each case offering a choice of sorted and unsorted. Further, 2
styles, gost780 and gost780s styles (which do not conform to effective standards) are retained for
backwards compatibility.
All styles in the GOST bundle are derived from single master file gost.dtx by applying different
set of options as shown in the table below.
------------------------------------------------------------------------
Style | utf8 | strict | modern | eprint | long | sort | natbib
------------------------------------------------------------------------
gost780 | | | | | | |
gost780s | | | | | | + |
------------------------------------------------------------------------
gost2003 | | + | | + | | |
gost2003s | | + | | + | | + |
gost2008 | | | + | + | | |
gost2008n | | | + | + | | | +
gost2008l | | | + | + | + | |
gost2008s | | | + | + | | + |
gost2008ns | | | + | + | | + | +
gost2008ls | | | + | + | + | + |
------------------------------------------------------------------------
ugost2003 | + | + | | + | | |
ugost2003s | + | + | | + | | + |
ugost2008 | + | | + | + | | |
ugost2008n | + | | + | + | | | +
ugost2008l | + | | + | + | + | |
ugost2008s | + | | + | + | | + |
ugost2008ns | + | | + | + | | + | +
ugost2008ls | + | | + | + | + | + |
------------------------------------------------------------------------
Style | utf8 | strict | modern | eprint | long | sort | natbib
------------------------------------------------------------------------
Gost2008 style is recommended for most applications. It corresponds to the currently effective
Standard 7.0.5-2008. Librarians should use the style gost2003 instead of gost2008 to compile a
library catalog to meet the Standard 7.1-2003. Use of other styles is best explained through the
meaning of options used to compile those styles from the master source.
Two styles, gost780 and gost780s, compiled without modern and strict options, are retained
for backward compatibility. They do not conform the Standards 7.0.5-2008 and 7.1-2003 cited
above.
The strict option provides conformance to the Standard 7.1-2003. The styles compiled with
that option bear the name gost2003 with possible suffixes s, l, n as explained below. These styles
are intended primarily for the librarians who compose a library catalog.
The modern option meets the Standard 7.0.5-2008 which can be thought off as a relaxed version
of the Standards 7.1-2003. The styles compiled with that option bear the name gost2008 with
possible suffixes s, l, n. The strict option has precedence over modern so that a style compiled
with both options will resemble mainly the gost2003 style rather than gost2008.
2
If the number of authors exceeds 4, modern styles cut the list of authors to at most 4 persons
as prescibed by the Standards. Option long overrides this rule to provide backward compatibility
with the package disser by Stanislab Kruchinin. Two styles, gost2008l and gost2008ls, compiled
with the option long mimic behavior of the styles gost705 and gost705s from the disser package.
Major effect of the long option is that the list of authors always precedes book or article title no
matter how long is it. Modern styles compiled without long place long list of authors behind the
title. The names of styles compiled with the option long has the suffix l. Recall that those styles
do not conform effective Standards and their use is discouraged.
The eprint option enables formatting electronic publications. In particular, it enables eprint,
eprinttype, eprintclass, and doi fields for a bibliographic entry. The styles generated without
the eprint option, ignore the these fields. Starting from the version 1.2 of the GOST package, all
modern styles are compiled with this option included, and the suffix e which designated this option
in earlier versions is not appended to the name of style any more.
The natbib option provides compatibility with the natbib package. The names of styles com-
piled with the option natbib bear the suffix n. Currently 4 styles with that option are available for
beta testing.
The sort option enables sorting bibliographic references by author names and references titles.
The names of styles compiled with the option sort bear the suffix s.
Finally, the utf8 option produces bibliographic styles in unicode rather that in 8-bit encoding.
Names of those styles bear the prefix u.
Beyond bibliographic style, GOST bundle contains CS files (codepage and sorting order).
----------------------------------------------------------------
Encoding | CSF Sorting order
----------------------------------------------------------------
cp866 | ruscii.csf Cyrillic first, Latin
cp1251 | cp1251.csf Cyrillic first, Latin
koi8-u | koi8u.csf Cyrillic first, Latin
utf8 | utf8cyrillic.csf Cyrillic first, Latin
----------------------------------------------------------------
\bibliographystyle{gost2008}
\bibliography{database}
3
2. Add the field language="ukrainian" or language="russian" to the bibliographic entries in
Ukrainian or Russian languages in your database; English is the default language. German,
Italian and French are partially supported.
3. To compile list of references from your database use bibtex8.exe rather than bibtex.exe.
Depending on the codepage of your bibliographic database, indicate one of the CS files listed
above as option to bibtex8.exe. Run LaTeX, then run bibTeX8 and LaTeX again:
latex <filename>.tex
bibtex8 -B -c <csf_file>.csf <filename>.aux
latex <filename>.tex
6. Neither bibtex.exe nor bibtex8.exe provides correct sorting order of unicode text. It means
that using ugost2008s or ugost2008ns may produce unexpected result for documents in utf8
encoding.
7. Bibtex8 fails to change case of a string if it contains Cyrillic letter in unicode. Therefore
ugost2008* styles do not change case of titles and other parts of bibliographic record while
8-bit styles do the case change where appropriate.
8. Either bibtex8 or Bibtex8 fail to cut Cyrillic names to initials. Therefore ugost2008* styles
do not modify name of authors.
9. Package natbib is required when choosing styles with suffix n in their names.
1.2 Customization
Every GOST style defines few commands to format some parts of a reference. You can redefine
these commands prior to the \bibliography{<bibtex_style>} command. Initial definitions are
listed below.
\providecommand*{\url}[1]{{\small #1}}
\providecommand*{\BibUrl}[1]{\url{#1}}
\providecommand{\BibAnnote}[1]{}
\providecommand*{\BibEmph}[1]{#1}
By default, gost styles separate logical parts of a bibliography record by a period and cyrdash
(. "---). It is legitimate to drop that dash by overriding the command \BibDash as follows
\providecommand*{\BibDash}{}
4
By default, \BibDash is equivalent to the shorthand "--- defined by the babel package with the
option russian. It prints a so called Cyrillic dash (\cyrdash), which is 20% shorter then ordinary
LaTeX dash (---), and puts unbreakable space before \cyrdash so that dash never appears in the
beginning of a line.
6. school field in @THESIS and similar entries is replaced by institution to comply with
biblatex-gost style.
5
Version 1.2d (2015.02.18)
1. jan, feb, etc. macros fixed.
3. The ligature "--- has been substituted with \BibDash for .bst styles compiled without
modern options (gost2003.bst and gost2003s.bst). For modern styles this was done in
earlier versions.
4. Spacing around \BibDash has been improved.
5. \BibDash now typesets short em-dash (\cyrdash) only for russian and ukrainian languages.
In earlier versions, it produces short em-dash for all languages.
(This feature was removed since it did not work with all engines.)
4. All modern styles are now compiled with the eprint option.
6
1.4.1 Older versions
2012.02.22 Support for natbib package.
2 Implementation
We need Russian fonts to produce documentation of the code below. Therefore we switch current
language to Russian by issuing the command \selectlanguage{russian}.
1 ⟨*bst⟩
2 %%
3 %% This bibstyle attempts to format bibliography according to
4 ⟨!modern⟩%% GOST 7.1-2003 for bibliographic records.
5 ⟨modern⟩%% GOST 7.0.5-2008 for bibliographic reference.
6 ⟨*natbib⟩%%
7 %%-------------------------------------------------------------------
8 %% This is an author-year citation style bibliography.
9 %% It requires a special package file to function properly
10 %% such as natbib.sty by Patrick W. Daly.
11 %% The form of the \bibitem entries is
12 %% \bibitem[Jones et al.(1990)]{key}...
13 %% \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}...
14 %% where the label part (in brackets) consists of the author names,
15 %% as they should appear in the citation, with the year in parentheses following.
16 %% There must be no space before the opening parenthesis!
17 %% A full list of authors may also follow the year.
18 %% In natbib.sty, it is possible to define the type of enclosures that is
19 %% really wanted (brackets or parentheses), but in either case, there must
20 %% be parentheses in the label.
21 %% The \cite command functions as follows:
22 %% \citet{key} => Jones et al. (1990)
23 %% \citet*{key} => Jones, Baker, and Smith (1990)
24 %% \cite{key} => (Jones et al., 1990)
25 %% \cite*{key} => (Jones, Baker, and Smith, 1990)
26 %% \cite[chap. 2]{key} => (Jones et al., 1990, chap. 2)
27 %% \cite[e.g.][]{key} => (e.g. Jones et al., 1990)
28 %% \cite[e.g.][p. 32]{key} => (e.g. Jones et al., p. 32)
29 %% \citeauthor{key} => Jones et al.
30 %% \citeauthor*{key} => Jones, Baker, and Smith
31 %% \citeyear{key} => 1990
32 %%---------------------------------------------------------------------
33 ⟨/natbib⟩
34
7
2.1 Fields
Enlist all entry types allowed in a bibliographic database. Most entries are common for many
standard bst styles.
35 ENTRY
36 { address
37 annote
38 author
39 booktitle
40 bookauthor
41 chapter
42 edition
43 editor
44 compiler
45 howpublished
46 institution
47 journal
48 key
49 %major % new in v.1.2i, alias for speciality, not implemented
50 majorcode % new in v.1.2i, alias for specialitycode
51 month
52 note
53 number
54 organization
55 pages
56 eid % new in v1.2c
57 publisher
58 school % alias for institution
59 series
60 %speciality % new in v.1.2i, eqv. to major in biblatex-gost, not implemented yet...
61 specialitycode % new in v.1.2i, alias of number, eqv. to majorcode in biblatex-gost
62 title
63 %medium % new in v1.2; renamed to media.
64 media % new in v1.2f
65 type
66 volume
67 year
68 language
69 langid % new in v1.2c
70 booklanguage
Entries borrowed from biblatex.
71 %date % not implemented yet...
72 pagetotal
73 url
74 urldate
75 isbn
76 doi
77 eprinttype % = archivePrefix
78 eprintclass % = primaryClass
79 eprint
8
80 % new in v1.2f:
81 % appear in biblatex:
82 %addendum % not implemented yet...
83 holder % see patent
84 location % new in v.1.2i, alias of address
85 %subtitle % not implemented yet...
86 titleaddon % new in v.1.2i, see @thesis
87 %version % not implemented yet...
88 % Appear in biblatex-gost for @patent entry:
89 authorcountry % country of the patent authors
90 credits % statement of responsibility, other than provided in Biblatex
91 ipc % Code of the International Patent Classification
92 %media % General material designation NOTE: medium in the above
93 requestnumber % Registration number of the application to the patent document
94 publicationdate % Date of publication
95 publication % and information on the official gazette, which published patent
96 prioritydate % Information about the convention priority: the date of filing of the application,
97 prioritynumber % number and
98 prioritycountry % country name of convention priority.
99 requestdate % ??
100 }
101 {}
102 ⟨!natbib⟩ { label }
103 ⟨natbib⟩ { label extra.label sort.label short.list }
104
init.state.consts
108 FUNCTION {init.state.consts}
109 { #0 ’before.all :=
110 #1 ’mid.sentence :=
111 #2 ’after.sentence :=
112 #3 ’after.block :=
113 #4 ’after.dblslash :=
114 #5 ’after.slash :=
115 #6 ’after.colon :=
116 #7 ’after.semicolon :=
117 }
118
119 STRINGS { s t }
120
121 STRINGS { curlanguage }
122
9
123 FUNCTION {change.language}
124 { booklanguage empty$
125 { "" }
126 { booklanguage ’curlanguage :=
127 "\selectlanguageifdefined{"
128 curlanguage *
129 "}" *
130 }
131 if$
132 }
133
output.nonnull Declare functions to output various parts of bibliographic record. Function output.nonnull
writes to output buffer the last literal in the stack assuming that it is not empty and adds an
appropriate punctuation symbol.
134 FUNCTION {output.nonnull}
135 {
136 swap$
137 output.state mid.sentence =
138 { ", " * write$ }
139 { output.state after.block =
140 { add.period$ write$
141 " \BibDash " write$
142 newline$
143 "\newblock " write$
144 }
145 { output.state before.all =
146 ’write$
147 { output.state after.dblslash =
148 { "~//" * change.language * " " * write$ }
149 { output.state after.slash =
150 { "~/ " * write$ }
151 { output.state after.colon =
152 ⟨!(strict | modern)⟩ { ": " * write$ }
153 ⟨strict | modern⟩ { "~: " * write$ }
154 { output.state after.semicolon =
155 ⟨!(strict | modern)⟩ { "; " * write$ }
156 ⟨strict | modern⟩ { "~; " * write$ }
157 { add.period$ " " * write$ }
158 if$
159 }
160 if$
161 }
162 if$
163 }
164 if$
165 }
166 if$
167 }
168 if$
169 mid.sentence ’output.state :=
10
170 }
171 if$
172 }
173
output Function output calls output.nonnul is the last literal string in the stack if it is not empty;
otherwise it discards the literal. Function output.check do the same but also warns if the indicated
output.check field is empty.
174 FUNCTION {output}
175 { duplicate$ empty$
176 ’pop$
177 ’output.nonnull
178 if$
179 }
180
181 FUNCTION {output.check}
182 { ’t :=
183 duplicate$ empty$
184 { pop$ "empty " t * " in " * cite$ * warning$ }
185 ’output.nonnull
186 if$
187 }
188
fin.entry fin.entry finalizes current entry. It writes dot, if no dot is found in stack, and starts new line.
189 FUNCTION {fin.entry}
190 { add.period$
191 write$
192 newline$
193 }
194
new.block Declare family of functions to put punctuation marks depending of current status of output
stack. The just check output state and revert it another state if required. Checking output state
prevents occasional doubling of punctuation marks.
195 FUNCTION {new.block}
196 { output.state before.all =
197 ’skip$
198 { after.block ’output.state := }
199 if$
200 }
201
new.dblslash
202 FUNCTION {new.dblslash}
203 { output.state before.all =
204 ’skip$
205 { after.dblslash ’output.state := }
206 if$
207 }
208
11
new.slash
209 FUNCTION {new.slash}
210 { output.state before.all =
211 ’skip$
212 { after.slash ’output.state := }
213 if$
214 }
215
new.colon
216 FUNCTION {new.colon}
217 { output.state before.all =
218 ’skip$
219 { after.colon ’output.state := }
220 if$
221 }
222
new.semicolon
223 FUNCTION {new.semicolon}
224 { output.state before.all =
225 ’skip$
226 { after.semicolon ’output.state := }
227 if$
228 }
229
new.sentence
230 FUNCTION {new.sentence}
231 { output.state after.block =
232 ’skip$
233 { output.state before.all =
234 ’skip$
235 { after.sentence ’output.state := }
236 if$
237 }
238 if$
239 }
240
add.blank
241 FUNCTION {add.blank}
242 { " " * before.all ’output.state :=
243 }
244
12
and
251 FUNCTION {and}
252 { ’skip$
253 { pop$ #0 }
254 if$
255 }
256
or
257 FUNCTION {or}
258 { { pop$ #1 }
259 ’skip$
260 if$
261 }
262
chop.word The function chop.word in substr len str chop.word removes given substring substr of length
len from the beginning of the string str.
263 ⟨*sort | natbib⟩
264 INTEGERS { len }
265
266 FUNCTION {chop.word}
267 { ’s :=
268 ’len :=
269 s #1 len substring$ =
270 { s len #1 + global.max$ substring$ }
271 ’s
272 if$
273 }
274 ⟨/sort | natbib⟩
275
non.stop
276 FUNCTION {non.stop}
277 { duplicate$
278 "}" * add.period$
279 #-1 #1 substring$ "." =
280 }
281
new.block.checka
282 FUNCTION {new.block.checka}
283 { empty$
284 ’skip$
285 ’new.block
286 if$
287 }
288
new.block.checkb
289 FUNCTION {new.block.checkb}
290 { empty$
13
291 swap$ empty$
292 and
293 ’skip$
294 ’new.block
295 if$
296 }
297
ew.sentence.checka
298 FUNCTION {new.sentence.checka}
299 { empty$
300 ’skip$
301 ’new.sentence
302 if$
303 }
304
ew.sentence.checkb
305 FUNCTION {new.sentence.checkb}
306 { empty$
307 swap$ empty$
308 and
309 ’skip$
310 ’new.sentence
311 if$
312 }
313
field.or.null
321 FUNCTION {field.or.null}
322 { duplicate$ empty$
323 { pop$ "" }
324 ’skip$
325 if$
326 }
327
14
333 }
334
bracify New in v.1.2. An idea borrowed from apsrev4-1.bst. Declare function to enclose last word by
braces even if empty.
335 FUNCTION {bracify}
336 { duplicate$ empty$
337 { pop$ "{}" }
338 { "{" swap$ * "}" * }
339 if$
340 }
341
se.square.brackets This and the next functions are used to enclose last word by brackets.
342 FUNCTION {enclose.square.brackets}
343 {
344 duplicate$ empty$
345 { pop$ "" }
346 { "[" swap$ * "]" * }
347 if$
348 }
349
ose.round.brackets
350 FUNCTION {enclose.round.brackets}
351 {
352 duplicate$ empty$
353 { pop$ "" }
354 { "(" swap$ * ")" * }
355 if$
356 }
357
15
371 { "ed." }
372 {"language is not defined: " language "edby" * * warning$ "Ed.\ by"}
373 if$}
374 if$}
375 if$}
376 if$}
377
bbl.cmplr
378 FUNCTION {bbl.cmplr}
379 { curlanguage "english" =
380 { "Compiler"}
381 { curlanguage "german" =
382 { "Hrsg." }
383 { curlanguage "ukrainian" =
384 ⟨!utf8⟩ {"{\cyr\CYRU\cyrk\cyrl.}"}
385 ⟨utf8⟩ {"{Укл.}"}
386 { curlanguage "russian" =
387 ⟨!utf8⟩ {"{\cyr\CYRS\cyro\cyrs\cyrt.}"}
388 ⟨utf8⟩ {"{Сост.}"}
389 {"language is not defined: " language "cmplr" * * warning$ "Compiler"}
390 if$}
391 if$}
392 if$}
393 if$}
394
bbl.edition
395 FUNCTION {bbl.edition} % { "\bbledition{}" }
396 { curlanguage "english" =
397 {"edition"}
398 { curlanguage "ukrainian" =
399 ⟨!utf8⟩ {"{\cyr\cyrv\cyri\cyrd.}"}
400 ⟨utf8⟩ {"{вид.}"}
401 { curlanguage "russian" =
402 ⟨!utf8⟩ {"{\cyr\cyri\cyrz\cyrd.}"}
403 ⟨utf8⟩ {"{изд.}"}
404 { curlanguage "german" =
405 {" {aus.}" } %%%% { "Aufl." } ??
406 { curlanguage "italian" =
407 {"edizione"}
408 { curlanguage "french" =
409 {"\’{e}dition"}
410 {"language is not defined: " language "edition" * * warning$ "edition"}
411 if$}
412 if$}
413 if$}
414 if$}
415 if$}
416 if$}
417
16
bbl.vvolume
418 FUNCTION {bbl.vvolume} % { "\bblVolume{}" }
419 { curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
420 {"Volume"}
421 { curlanguage "ukrainian" = curlanguage "russian" = or
422 ⟨!utf8⟩ { "\CYRT\cyro\cyrm" }
423 ⟨utf8⟩ { "Том" }
424 { curlanguage "german" =
425 {"{Band}"} %%%% { "Volumen" }
426 {"language is not defined: " language "vvolume" * * warning$ "Volume"}
427 if$}
428 if$}
429 if$}
430
bbl.vvol
431 FUNCTION {bbl.vvol} % { "\bblVol{}" }
432 { curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
433 {"Vol."}
434 { curlanguage "ukrainian" = curlanguage "russian" = or
435 ⟨!utf8⟩ {"\CYRT."}
436 ⟨utf8⟩ {"Т."}
437 { curlanguage "german" =
438 {"{Bd.}"} %%%% { "Vol." }
439 {"language is not defined: " language "vvol" * * warning$ "Vol."}
440 if$}
441 if$}
442 if$}
443
bbl.iissue
444 FUNCTION {bbl.iissue} % { "\bblIssue{}" }
445 { curlanguage "english" =
446 {"Issue"}
447 { curlanguage "ukrainian" =
448 ⟨!utf8⟩ {"\CYRV\cyri\cyrp\cyru\cyrs\cyrk"}
449 ⟨utf8⟩ {"Випуск"}
450 { curlanguage "russian" =
451 ⟨!utf8⟩ {"\CYRV\cyrery\cyrp\cyru\cyrs\cyrk"}
452 ⟨utf8⟩ {"Выпуск"}
453 { curlanguage "german" =
454 {"{Heft}"} %%%% { "Ausgabe" }
455 {"language is not defined: " language "iissue" * * warning$ "Issue"}
456 if$}
457 if$}
458 if$}
459 if$}
460
bbl.iiss
461 FUNCTION {bbl.iiss} % { "\bblIss{}" }
17
462 { curlanguage "english" =
463 {"Iss."}
464 { curlanguage "ukrainian" =
465 ⟨!utf8⟩ {"\CYRV\cyri\cyrp."}
466 ⟨utf8⟩ {"Вип."}
467 { curlanguage "russian" =
468 ⟨!utf8⟩ {"\CYRV\cyrery\cyrp."}
469 ⟨utf8⟩ {"Вып."}
470 { curlanguage "german" =
471 {"{H.}"}
472 {"language is not defined: " language "iiss" * * warning$ "Iss."}
473 if$}
474 if$}
475 if$}
476 if$}
477
bbl.of
478 FUNCTION {bbl.of} % { "\bblof{}" }
479 { curlanguage "english" =
480 {"of"}
481 { curlanguage "german" =
482 { "von" }
483 { curlanguage "ukrainian" =
484 ⟨!utf8⟩ { "{\cyr\cyrii\cyrz}" }
485 ⟨utf8⟩ { "{iз}" }
486 { curlanguage "russian" =
487 ⟨!utf8⟩ { "{\cyr\cyri\cyrz}" }
488 ⟨utf8⟩ { "{из}" }
489 {"language is not defined: " language "of" * * warning$ "of"}
490 if$}
491 if$}
492 if$}
493 if$}
494
bbl.etal
495 FUNCTION {bbl.etal} % { "\bblof{}" }
496 { curlanguage "english" =
497 {"et~al."}
498 { curlanguage "german" =
499 { "u.~a." }
500 { curlanguage "ukrainian" =
501 ⟨!utf8⟩ {"{\cyr\cyrt\cyra~\cyrii\cyrn.}"}
502 ⟨utf8⟩ {"{та~iн.}"}
503 { curlanguage "russian" =
504 ⟨!utf8⟩ {"{\cyr\cyri~\cyrd\cyrr.}"}
505 ⟨utf8⟩ {"и~др."}
506 {"language is not defined: " language "et~al" * * warning$ "et~al."}
507 if$}
508 if$}
18
509 if$}
510 if$}
511
bbl.and
512 ⟨*natbib⟩
513 FUNCTION {bbl.and} % { "\bbland{}" }
514 { curlanguage "english" =
515 {"and"}
516 { curlanguage "german" =
517 { "und" }
518 { curlanguage "ukrainian" =
519 ⟨!utf8⟩ {"{\cyrii}"}
520 ⟨utf8⟩ {"i"}
521 { curlanguage "russian" =
522 ⟨!utf8⟩ {"{\cyri}"}
523 ⟨utf8⟩ {"и"}
524 {"language is not defined: " language "and" * * warning$ "and"}
525 if$}
526 if$}
527 if$}
528 if$}
529 ⟨/natbib⟩
530
bbl.nnumber
531 FUNCTION {bbl.nnumber} % { "\bblNumber{}" }
532 { curlanguage "english" =
533 {"Number"}
534 { curlanguage "ukrainian" = curlanguage "russian" = or
535 ⟨!utf8⟩ { "\CYRN\cyro\cyrm\cyre\cyrr" }
536 ⟨utf8⟩ { "{Номер}" }
537 { curlanguage "german" =
538 {"{Heft}"} %%% { "Anzahl" }
539 {"language is not defined: " language "nnumber" * * warning$ "Number"}
540 if$}
541 if$}
542 if$}
543
bbl.number
544 FUNCTION {bbl.number} % { "\bblnumber{}" }
545 { curlanguage "english" =
546 {"number"}
547 { curlanguage "ukrainian" = curlanguage "russian" = or
548 ⟨!utf8⟩ {"{\cyr\cyrn\cyro\cyrm\cyre\cyrr}"}
549 ⟨utf8⟩ {"{номер}"}
550 { curlanguage "german" =
551 {"{Heft}"} %%% { "anzahl" }???
552 {"language is not defined: " language "number" * * warning$ "number"}
553 if$}
554 if$}
19
555 if$}
556
bbl.nr
557 FUNCTION {bbl.nr} % { "\bblno{}" }
558 { curlanguage "english" =
559 {"no."}
560 { curlanguage "italian" =
561 { "no" }
562 { curlanguage "ukrainian" = curlanguage "russian" = or
563 ⟨!utf8⟩ { "{\cyr\textnumero}" }
564 ⟨utf8⟩ { "{№}" }
565 { curlanguage "german" =
566 {"{H.}"} %%% { "an." }
567 {"language is not defined: " language "nr" * * warning$ "no."}
568 if$}
569 if$}
570 if$}
571 if$}
572
bbl.nnr
573 FUNCTION {bbl.nnr} % { "\bblno{}" }
574 { curlanguage "english" =
575 {"No."}
576 { curlanguage "ukrainian" = curlanguage "russian" = or
577 ⟨!utf8⟩ { "{\cyr\textnumero}" }
578 ⟨utf8⟩ { "{№}" }
579 { curlanguage "german" =
580 {"{H.}"} %%% { "an." }
581 {"language is not defined: " language "nnr" * * warning$ "No."}
582 if$}
583 if$}
584 if$}
585
bbl.in
586 FUNCTION {bbl.in} % { "\bblin{}" }
587 { curlanguage "english" = curlanguage "german" = or
588 {"in"}
589 { curlanguage "ukrainian" = curlanguage "russian" = or
590 ⟨!utf8⟩ { "{\cyr\cyrv}" }
591 ⟨utf8⟩ { "{в}" }
592 {"language is not defined: " language "in" * * warning$ "in"}
593 if$}
594 if$}
595
bbl.iin
596 FUNCTION {bbl.iin} % { "\bblIn{}" }
597 { curlanguage "english" = curlanguage "german" = or
598 {"In"}
20
599 { curlanguage "ukrainian" = curlanguage "russian" = or
600 ⟨!utf8⟩ { "\CYRV" }
601 ⟨utf8⟩ { "{В}" }
602 {"language is not defined: " language "iin" * * warning$ "In"}
603 if$}
604 if$}
605
bbl.pages
606 FUNCTION {bbl.pages} % { "\bblpp." }
607 { curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
608 {"p."} %%% {"pp."}
609 { curlanguage "ukrainian" = curlanguage "russian" = or
610 ⟨!utf8⟩ {"{\cyr\cyrs.}"}
611 ⟨utf8⟩ {"{с.}"}
612 { curlanguage "german" =
613 {"S."} %%%% { "s." }
614 {"language is not defined: " language "pages" * * warning$ "p."}
615 if$}
616 if$}
617 if$}
618
bbl.page
619 FUNCTION {bbl.page} % { "\bblp."
620 { curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
621 {"p."}
622 { curlanguage "ukrainian" = curlanguage "russian" = or
623 ⟨!utf8⟩ {"{\cyr\cyrs.}"}
624 ⟨utf8⟩ {"{с.}"}
625 { curlanguage "german" =
626 {"S."} %%%% { "s." }
627 {"language is not defined: " language "page" * * warning$ "p."}
628 if$}
629 if$}
630 if$}
631
bbl.ppages
632 FUNCTION {bbl.ppages}% { "\bblPp." }
633 { curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
634 {"P."} %%%% { "Pp." }
635 { curlanguage "ukrainian" = curlanguage "russian" = or
636 ⟨!utf8⟩ {"{\cyr\CYRS.}"}
637 ⟨utf8⟩ {"{С.}"}
638 { curlanguage "german" =
639 {"S."}
640 {"language is not defined: " language "ppages" * * warning$ "P."}
641 if$}
642 if$}
643 if$}
644
21
bbl.ppage
645 FUNCTION {bbl.ppage} % { "\bblP." }
646 { curlanguage "english" = curlanguage "french" = or curlanguage "italian" = or
647 {"P."}
648 { curlanguage "ukrainian" = curlanguage "russian" = or
649 ⟨!utf8⟩ {"{\cyr\CYRS.}"}
650 ⟨utf8⟩ {"{С.}"}
651 { curlanguage "german" =
652 {"S."}
653 {"language is not defined: " language "ppage" * * warning$ "P."}
654 if$}
655 if$}
656 if$}
657
22
bbl.techreport
691 FUNCTION {bbl.techreport} % rename to bbl.techreport
692 { curlanguage "english" =
693 { "Rep." }
694 { curlanguage "german" =
695 { "Bericht" }
696 { curlanguage "russian" =
697 ⟨!utf8⟩ { "{\cyr\CYRO\cyrt\cyrch\cyre\cyrt}" }
698 ⟨utf8⟩ { "{Отчет}" }
699 { "language is not defined: " language "techrep" * * warning$ "Rep." }
700 if$}
701 if$}
702 if$}
703
bbl.mathesis
704 FUNCTION {bbl.mathesis}
705 { curlanguage "english" =
706 { "Master’s thesis" }
707 { curlanguage "german" =
708 { "Diss.~Mag." }
709 { curlanguage "russian" =
710 ⟨!utf8⟩ { "{\cyr\CYRK\cyrv\cyra\cyrl\cyri\cyrf\cyri\cyrk\cyra\cyrc\cyri"
711 ⟨!utf8⟩ "\cyro\cyrn\cyrn\cyra\cyrya\ \cyrr\cyra\cyrb\cyro\cyrt\cyra\ " *
712 ⟨!utf8⟩ "\cyrm\cyra\cyrg\cyri\cyrs\cyrt\cyrr\cyra}" * }
713 ⟨utf8⟩ { "{Квалификационная работа магистра}" }
714 { "language is not defined: " language "mthesis" * * warning$ "Master’s thesis" }
715 if$}
716 if$}
717 if$}
718
bbl.phdthesis
719 FUNCTION {bbl.phdthesis}
720 { curlanguage "english" =
721 { "Ph.\,D. thesis" }
722 { curlanguage "german" =
723 { "Diss.~Ph.\,D." }
724 { curlanguage "russian" =
725 ⟨!utf8⟩ { "{\cyr\cyrd\cyri\cyrs.\ \ldots\ \cyrk\cyra\cyrn\cyrd. "
726 ⟨!utf8⟩ "\cyrn\cyra\cyru\cyrk}" * }
727 ⟨utf8⟩ { "{дис.\ \ldots\ канд. наук}" }
728 { curlanguage "french" =
729 { "Th\‘{e}se de doctorat" }
730 { "language is not defined: " language "phdthesis" * * warning$ "Ph.\,D. thesis" }
731 if$}
732 if$}
733 if$}
734 if$}
735
bbl.docthesis
23
736 FUNCTION {bbl.docthesis}
737 { curlanguage "english" =
738 { "Dr.\,Sci. dissertation" }
739 { curlanguage "german" =
740 { "Diss.~Dr." }
741 { curlanguage "russian" =
742 ⟨!utf8⟩ { "{\cyr\cyrd\cyri\cyrs.\ \ldots\ \cyrd-\cyrr\cyra\ "
743 ⟨!utf8⟩ "\cyrn\cyra\cyru\cyrk}" * }
744 ⟨utf8⟩ { "{дис.\ \ldots\ д-ра наук}" }
745 { "language is not defined: " language "docthesis" * * warning$ "Dr.\,Sci. dissertation" }
746 if$}
747 if$}
748 if$}
749
bbl.thesis.type‘
750 FUNCTION {bbl.thesis.type}
751 { type "mathesis" =
752 { bbl.mathesis }
753 { type "phdthesis" =
754 { bbl.phdthesis }
755 { type "docthesis" =
756 { bbl.docthesis }
757 %%{ "!!!" type * "t" change.case$ }
758 ⟨!utf8⟩ { type "t" change.case$ }
759 ⟨utf8⟩ { type }
760 if$}
761 if$}
762 if$}
763
bbl.nnoaddress
764 FUNCTION {bbl.nnoaddress}
765 { curlanguage "english" =
766 { "S.\ l." }
767 { curlanguage "russian" =
768 ⟨!utf8⟩ { "{\cyr\CYRB.\ \cyrm.}" }
769 ⟨utf8⟩ { "{Б.\ м.}" }
770 { "language is not defined: " language "nnoaddress" * * warning$ "S.\ l." }
771 if$}
772 if$}
773
bbl.nopublisher
774 FUNCTION {bbl.nopublisher}
775 { curlanguage "english" =
776 { "s.\ n." }
777 { curlanguage "russian" =
778 ⟨!utf8⟩ { "{\cyr\cyrb.\ \cyri.}" }
779 ⟨utf8⟩ { "{б.\ и.}" }
780 { "language is not defined: " language "nnopublisher" * * warning$ "s.\ n." }
781 if$}
24
782 if$}
783
bbl.nnopublisher
784 FUNCTION {bbl.nnopublisher}
785 { curlanguage "english" =
786 { "S.\ n." }
787 { curlanguage "russian" =
788 ⟨!utf8⟩ { "{\cyr\CYRB.\ \cyri.}" }
789 ⟨utf8⟩ { "{Б.\ и.}" }
790 { "language is not defined: " language "nnopublisher" * * warning$ "S.\ n." }
791 if$}
792 if$}
793
bbl.media.text
794 FUNCTION {bbl.media.text}
795 { curlanguage "english" =
796 { "Text" }
797 { curlanguage "russian" = curlanguage "ukrainian" = or
798 ⟨!utf8⟩ { "{\cyr\CYRT\cyre\cyrk\cyrs\cyrt}" }
799 ⟨utf8⟩ { "{Текст}" }
800 { "language is not defined: " language "media" * * warning$ "Text" }
801 if$}
802 if$}
803
bl.media.eresource
804 FUNCTION {bbl.media.eresource}
805 { curlanguage "english" =
806 { "Electronic resource" }
807 { curlanguage "russian" =
808 ⟨!utf8⟩ { "{\cyr\CYREREV\cyrl\cyre\cyrk\cyrt\cyrr\cyro\cyrn\cyrn\cyrery\cyrishrt\ "
809 ⟨!utf8⟩ "\cyrr\cyre\cyrs\cyru\cyrr\cyrs}" * }
810 ⟨utf8⟩ { "{Электронный ресурс}" }
811 { curlanguage "ukrainian" =
812 ⟨!utf8⟩ { "{\cyr\CYRE\cyrl\cyre\cyrk\cyrt\cyrr\cyro\cyrn\cyrn\cyri\cyrishrt\ "
813 ⟨!utf8⟩ "\cyrr\cyre\cyrs\cyru\cyrr\cyrs}" * }
814 ⟨utf8⟩ { "{Електронний ресурс}" }
815 { "language is not defined: " language "media" * * warning$ "Electronic resource" }
816 if$}
817 if$}
818 if$}
819
bbl.media.online
820 FUNCTION {bbl.media.online}
821 { curlanguage "english" =
822 { "Electronic resource online" }
823 { curlanguage "russian" =
824 ⟨!utf8⟩ { "{\cyr\CYREREV\cyrl\cyre\cyrk\cyrt\cyrr\cyro\cyrn\cyrn\cyrery\cyrishrt\ "
825 ⟨!utf8⟩ "\cyrr\cyre\cyrs\cyru\cyrr\cyrs\ \cyro\cyrn\cyrl\cyra\cyrishrt\cyrn}" * }
25
826 ⟨utf8⟩ { "{Электронный ресурс онлайн}" }
827 { curlanguage "ukrainian" =
828 ⟨!utf8⟩ { "{\cyr\CYRE\cyrl\cyre\cyrk\cyrt\cyrr\cyro\cyrn\cyrn\cyri\cyrishrt\ "
829 ⟨!utf8⟩ "\cyrr\cyre\cyrs\cyru\cyrr\cyrs\ \cyro\cyrn\cyrl\cyra\cyrishrt\cyr}" * }
830 ⟨utf8⟩ { "{Електронний ресурс онлайн}" }
831 { "language is not defined: " language "media" * * warning$ "Electronic resource" }
832 if$}
833 if$}
834 if$}
835
bbl.chief
836 FUNCTION {bbl.chief}
837 { curlanguage "english" =
838 { "chief" }
839 { curlanguage "russian" =
840 ⟨!utf8⟩ { "\cyrr\cyru\cyrk." }
841 ⟨utf8⟩ { "{рук.}" }
842 { curlanguage "ukrainian" =
843 ⟨!utf8⟩ { "\cyrr\cyru\cyrk." }
844 ⟨utf8⟩ { "{рук.}" }
845 { "language is not defined: " language "chief" * * warning$ "chief" }
846 if$}
847 if$}
848 if$}
849
bbl.executor
850 FUNCTION {bbl.executor}
851 { curlanguage "english" =
852 { "Executor" }
853 { curlanguage "russian" =
854 ⟨!utf8⟩ { "{\cyr\cyri\cyrs\cyrp\cyro\cyrl\cyrn.}" }
855 ⟨utf8⟩ { "{исполн.}" }
856 { curlanguage "ukrainian" =
857 ⟨!utf8⟩ { "{\cyr\cyrv\cyri\cyrk\cyro\cyrn\cyra\cyrv\cyre\cyrc\cyrsftsn}" }
858 ⟨utf8⟩ { "{виконавець}" }
859 { "language is not defined: " language "executor" * * warning$ "executor" }
860 if$}
861 if$}
862 if$}
863
bbl.media
864 %FUNCTION {bbl.media}
865 %{ type$ "online" =
866 % { bbl.media.eresource }
867 % { bbl.media.text }
868 %if$}
869 FUNCTION {bbl.media}
870 { media "online" =
871 { bbl.media.online }
26
872 { media "eresource" =
873 { bbl.media.eresource }
874 { bbl.media.text }
875 if$}
876 if$}
877
bbl.req
878 FUNCTION {bbl.req}
879 {
880 curlanguage "english" =
881 { "req." }
882 { curlanguage "german" =
883 { "ang." }
884 { curlanguage "russian" =
885 ⟨!utf8⟩ { "{\cyr\cyrz\cyra\cyrya\cyrv\cyrl.}" }
886 ⟨utf8⟩ { "{заявл.}" }
887 { "language is not defined: " language "req" * * warning$ "req" }
888 if$
889 }
890 if$
891 }
892 if$
893 }
894
bbl.publ
895 FUNCTION {bbl.publ}
896 {
897 curlanguage "english" =
898 { "publ." }
899 { curlanguage "german" =
900 { "ausg." }
901 { curlanguage "russian" =
902 ⟨!utf8⟩ { "{\cyr\cyro\cyrp\cyru\cyrb\cyrl.}" }
903 ⟨utf8⟩ { "{опубл.}" }
904 { "language is not defined: " language "publication" * * warning$ "publication" }
905 if$
906 }
907 if$
908 }
909 if$
910 }
911
bbl.priority
912 FUNCTION {bbl.priority}
913 {
914 curlanguage "english" =
915 { "priority" }
916 { curlanguage "german" =
917 { "Prioritat" }
27
918 { curlanguage "russian" =
919 ⟨!utf8⟩ { "{\cyr\cyrp\cyrr\cyri\cyro\cyrr\cyri\cyrt\cyre\cyrt}" }
920 ⟨utf8⟩ { "{приоритет}" }
921 { "language is not defined: " language "priority" * * warning$ "priority" }
922 if$
923 }
924 if$
925 }
926 if$
927 }
928
format.names Function format.names has 2 version. First is for bibliographic records rather then for
bibliographic references. It is used for .bst styles compiled without the modern option. It format
every name as ‘LastName, F. S.’. Historically, this version was used first for earlier styles included
into GOST bundle.
Important note
Neither bibtex nor bibtex8 can handle unicoded text without troubles. In particular, they fail
to reduce a Cyrillic name to initials. Therefore we avoid using f. primitive when option utf8 is in
effect.
932 ⟨*!modern⟩
933 FUNCTION {format.names}
934 {
935 ⟨!utf8⟩ #1 "{vv~}{ll}{~jj}{,~f.}" format.name$
936 ⟨utf8⟩ #1 "{vv~}{ll}{~jj}{,~ff}" format.name$
937 }
938 ⟨/!modern⟩
Second version drops comma from output so that every name is formatted as ‘LastName F. S.’. It
also substitutes 4th and following names by localized term ‘et al’.
939 ⟨*modern⟩
940 FUNCTION {format.names}
941 {
942 ’s :=
943 #1 ’nameptr :=
944 s num.names$ ’numnames :=
945 numnames ’namesleft :=
946 { namesleft #0 > }
947 { s nameptr
948 ⟨!utf8⟩ "{vv~}{ll}{~jj}{~f.}" format.name$ ’t :=
949 ⟨utf8⟩ "{vv~}{ll}{~jj}{~ff}" format.name$ ’t :=
950 nameptr #1 >
951 { nameptr #4 =
28
952 numnames #4 > and
953 { "others" ’t :=
954 #1 ’namesleft := }
955 ’skip$
956 if$
957 namesleft #1 >
958 { ", " * t * }
959 { t "others" =
960 t "~others" =
961 or
962 ⟨!strict⟩ { " " * bbl.etal * }
963 ⟨strict⟩ { " " * bbl.etal enclose.square.brackets *}
964 { ", " * t * }
965 if$
966 }
967 if$
968 }
969 ’t
970 if$
971 nameptr #1 + ’nameptr :=
972 namesleft #1 - ’namesleft :=
973 }
974 while$
975 }
976 ⟨/modern⟩
977
format.lab.names Declare function to go to optional argument of \bibitem in the styles generated with the option
natbib.
978 ⟨*natbib⟩
979 FUNCTION {format.lab.names}
980 { ’s :=
981 language empty$
982 { "english" ’curlanguage := }
983 { language ’curlanguage := }
984 if$
985 s #1 "{vv~}{ll}" format.name$
986 s num.names$ duplicate$
987 #2 >
988 %{ pop$ " et~al." * }
989 { pop$ " " bbl.etal * * }
990 { #2 <
991 ’skip$
992 { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
993 %{ " et~al." * }
994 { " " bbl.etal * * }
995 %{ " and " * s #2 "{vv~}{ll}" format.name$ * }
996 { " " bbl.and " " * * * s #2 "{vv~}{ll}" format.name$ * }
997 if$
998 }
999 if$
29
1000 }
1001 if$
1002 }
1003 ⟨/natbib⟩
1004
format.names.rev Declare function to format names for authors/bookauthors list after title and etc. Note that
format.names.rev cuts list of names to at most 4 persons. We do not cut names to initials in
this list.
1005 FUNCTION {format.names.rev}
1006 {
1007 ’s :=
1008 #1 ’nameptr :=
1009 s num.names$ ’numnames :=
1010 numnames ’namesleft :=
1011 { namesleft #0 > }
1012 { s nameptr
1013 ⟨!utf8⟩ %"{f.}{~vv}{~ll}{, jj}" format.name$ ’t :=
1014 ⟨!utf8⟩ "{ff}{~vv}{~ll}{, jj}" format.name$ ’t :=
1015 ⟨utf8⟩ "{ff}{~vv}{~ll}{, jj}" format.name$ ’t :=
1016 nameptr #1 >
1017 { nameptr #4 =
1018 numnames #4 > and
1019 { "others" ’t :=
1020 #1 ’namesleft := }
1021 ’skip$
1022 if$
1023 namesleft #1 >
1024 { ", " * t * }
1025 { t "others" =
1026 t "~others" =
1027 or
1028 ⟨!strict⟩ { " " * bbl.etal * }
1029 ⟨strict⟩ { " " * bbl.etal enclose.square.brackets * }
1030 { ", " * t * }
1031 if$
1032 }
1033 if$
1034 }
1035 ’t
1036 if$
1037 nameptr #1 + ’nameptr :=
1038 namesleft #1 - ’namesleft :=
1039 }
1040 while$
1041 }
1042
format.key Function to substitute empty field (usually, author name) with the key field.
1043 ⟨*natbib⟩
1044 FUNCTION {format.key}
30
1045 { empty$
1046 { key field.or.null }
1047 { "" }
1048 if$
1049 }
1050 ⟨/natbib⟩
1051
format.authors
1052 FUNCTION {format.authors}
1053 { author empty$
1054 { "" }
1055 { author format.names emphasize}
1056 if$
1057 }
1058
author.key.label
1059 ⟨*natbib⟩
1060 FUNCTION {author.key.label}
1061 { author empty$
1062 { key empty$
1063 { cite$ #1 #3 substring$ }
1064 ’key
1065 if$
1066 }
1067 { author format.lab.names }
1068 if$
1069 }
1070
1071 FUNCTION {author.editor.key.label}
1072 { author empty$
1073 { editor empty$
1074 { key empty$
1075 { cite$ #1 #3 substring$ }
1076 %’key %% causes lost of year
1077 { "{}" key * } %% Bug in bibtex8 ??
1078 if$
1079 }
1080 { editor format.lab.names }
1081 if$
1082 }
1083 { author format.lab.names }
1084 if$
1085 }
1086
1087 FUNCTION {author.key.organization.label}
1088 { author empty$
1089 { key empty$
1090 { organization empty$
1091 { cite$ #1 #3 substring$ }
31
1092 { "The " #4 organization chop.word #3 text.prefix$ }
1093 if$
1094 }
1095 ’key
1096 if$
1097 }
1098 { author format.lab.names }
1099 if$
1100 }
1101
1102 FUNCTION {editor.key.organization.label}
1103 { editor empty$
1104 { key empty$
1105 { organization empty$
1106 { cite$ #1 #3 substring$ }
1107 { "The " #4 organization chop.word #3 text.prefix$ }
1108 if$
1109 }
1110 ’key
1111 if$
1112 }
1113 { editor format.lab.names }
1114 if$
1115 }
1116
1117 FUNCTION {calc.short.authors}
1118 { type$ "book" =
1119 type$ "inbook" =
1120 or
1121 ’author.editor.key.label
1122 { type$ "proceedings" =
1123 ’editor.key.organization.label
1124 { type$ "manual" =
1125 ’author.key.organization.label
1126 ’author.key.label
1127 if$
1128 }
1129 if$
1130 }
1131 if$
1132 ’short.list :=
1133 }
1134
1135 FUNCTION {calc.label}
1136 { calc.short.authors
1137 short.list
1138 "("
1139 *
1140 year duplicate$ empty$
1141 short.list key field.or.null = or
32
1142 { pop$ "" }
1143 ’skip$
1144 if$
1145 *
1146 ’label :=
1147 }
1148
1149 ⟨/natbib⟩
1150
format.bookauthors This function is used only once, in bookauthor.before, and the latter is used only in inbook
entry.
1151 FUNCTION {format.bookauthors}
1152 { bookauthor empty$
1153 { "" }
1154 { bookauthor format.names}
1155 if$
1156 }
1157
rmat.authors.after
1158 FUNCTION {format.authors.after}
1159 { author empty$
1160 { "" }
1161 { author format.names.rev}
1162 if$
1163 }
1164
.bookauthors.after
1165 FUNCTION {format.bookauthors.after}
1166 { bookauthor empty$
1167 { "" }
1168 { bookauthor format.names.rev}% always cuts to 4 persons
1169 if$
1170 }
1171
rmat.editors.after
1172 FUNCTION {format.editors.after}
1173 { editor empty$
1174 { "" }
1175 { bbl.edby "\ " * editor format.names.rev * }
1176 if$
1177 }
1178
format.chief.after
1179 FUNCTION {format.chief.after}
1180 { editor empty$
1181 { "" }
1182 { bbl.chief "\ " * editor format.names.rev * }
33
1183 if$
1184 }
1185
mat.executor.after
1186 FUNCTION {format.executor.after}
1187 { author empty$
1188 { "" }
1189 { bbl.executor ": " * author format.names.rev * }
1190 if$
1191 }
1192
mat.compiler.after
1193 FUNCTION {format.compiler.after}
1194 { compiler empty$
1195 { "" }
1196 { bbl.cmplr "\ " * compiler format.names.rev * }
1197 if$
1198 }
1199
format.title Important note Neither bibtex nor bibtex8 can handle unicoded text without troubles. In
particular, bibtex8 fails to change case of a string if it contains Cyrillic letter. Therefore we avoid
using change.case$ when option utf8 is in effect.
1200 FUNCTION {format.title}
1201 { title empty$
1202 { "" }
1203 ⟨!utf8⟩ { title "t" change.case$ }
1204 ⟨utf8⟩ { title }
1205 if$
1206 }
1207
format.month New in version 1.2d. This macro reads month field and translate English names of months to
Russian if current language is Russian.
1208 FUNCTION {format.month}
1209 { month empty$
1210 { "" }
1211 { curlanguage "russian" =
1212 { month "Jan." =
1213 ⟨!utf8⟩ { "\CYRYA\cyrn\cyrv." }
1214 ⟨utf8⟩ { "Янв." }
1215 { month "Feb." =
1216 ⟨!utf8⟩ { "\CYRF\cyre\cyrv\cyrr." }
1217 ⟨utf8⟩ { "Фев." }
1218 { month "Mar." =
1219 ⟨!utf8⟩ { "\CYRM\cyra\cyrr\cyrt" }
1220 ⟨utf8⟩ { "Март" }
1221 { month "Apr." =
1222 ⟨!utf8⟩ { "\CYRA\cyrp\cyrr." }
1223 ⟨utf8⟩ { "Апр." }
34
1224 { month "May" =
1225 ⟨!utf8⟩ { "\CYRM\cyra\cyrishrt" }
1226 ⟨utf8⟩ { "Май" }
1227 { month "Jun." =
1228 ⟨!utf8⟩ { "\CYRI\cyryu\cyrn\cyrsftsn" }
1229 ⟨utf8⟩ { "Июнь" }
1230 { month "Jul." =
1231 ⟨!utf8⟩ { "\CYRI\cyryu\cyrl\cyrsftsn" }
1232 ⟨utf8⟩ { "Июль" }
1233 { month "Aug." =
1234 ⟨!utf8⟩ { "\CYRA\cyrv\cyrg\." }
1235 ⟨utf8⟩ { "Авг." }
1236 { month "Sep." =
1237 ⟨!utf8⟩ { "\CYRS\cyre\cyrn\cyrt." }
1238 ⟨utf8⟩ { "Сент." }
1239 { month "Oct." =
1240 ⟨!utf8⟩ { "\CYRO\cyrk\cyrt." }
1241 ⟨utf8⟩ { "Окт." }
1242 { month "Nov." =
1243 ⟨!utf8⟩ { "\CYRN\cyro\cyrya\cyrb." }
1244 ⟨utf8⟩ { "Нояб." }
1245 { month "Dec." =
1246 ⟨!utf8⟩ { "\CYRD\cyre\cyrk." }
1247 ⟨utf8⟩ { "Дек." }
1248 { month }
1249 if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}
1250 { month }
1251 if$}
1252 if$
1253 }
format.date
1254 FUNCTION {format.date}
1255 { year empty$
1256 { month empty$
1257 { "" }
1258 { "there’s a month but no year in " cite$ * warning$
1259 format.month
1260 }
1261 if$
1262 }
1263 { month empty$
1264 ’year
1265 { year ". \BibDash " format.month * * }
1266 if$
1267 }
1268 if$
1269 ⟨natbib⟩ extra.label * % new in v.1.2
1270 }
1271
35
ddress.or.location New function in version 1.2i. Returns address value if not empty; otherwise returns location
value even if the latter is empty.
1272 %FUNCTION {address.or.location}
1273 %{
1274 % address empty$
1275 % { location empty$
1276 % ’skip$
1277 % { location }
1278 % if$ }
1279 % { address }
1280 % if$
1281 %}
1282 FUNCTION {address.or.location}
1283 {
1284 address empty$
1285 { location }
1286 { address }
1287 if$
1288 }
1289
litycode.or.number New function in version 1.2i. Returns specialitycode value if not empty; otherwise returns
number value even if the latter is empty.
1290 FUNCTION {specialitycode.or.number}
1291 {
1292 specialitycode empty$
1293 { number }
1294 { specialitycode }
1295 if$
1296 }
1297
titution.or.school New function in version 1.2i. Returns institution value if not empty; otherwise returns school
value even if the latter is empty.
1298 FUNCTION {institution.or.school}
1299 {
1300 institution empty$
1301 { school}
1302 { institution }
1303 if$
1304 }
.address.publisher
dress.publisher.date
1305 ⟨*!strict⟩
1306 %FUNCTION {output.address.publisher}
1307 %{
1308 % address empty$
1309 % ’skip$
1310 % { address output
1311 % publisher empty$
1312 % ’skip$
36
1313 % { new.colon }
1314 % if$
1315 % }
1316 % if$
1317 % publisher output
1318 %}
1319 FUNCTION {output.address.publisher}
1320 {
1321 address empty$ location empty$ and
1322 ’skip$
1323 { address.or.location output
1324 publisher empty$
1325 ’skip$
1326 { new.colon }
1327 if$
1328 }
1329 if$
1330 publisher output
1331 }
1332 ⟨/!strict⟩
1333 ⟨*strict⟩
1334 FUNCTION {output.address.publisher}
1335 {
1336 address empty$
1337 {
1338 bbl.nnoaddress
1339 publisher empty$
1340 { "~: " * bbl.nopublisher * enclose.square.brackets }
1341 { enclose.square.brackets "~: " * publisher * }
1342 if$
1343 }
1344 {
1345 address output
1346 new.colon
1347 publisher empty$
1348 { bbl.nopublisher enclose.square.brackets }
1349 { publisher }
1350 if$
1351 }
1352 if$
1353 output
1354 }
1355
1356 ⟨/strict⟩
1357
37
1362 format.date output
1363 }
1364 ⟨/!(modern | strict)⟩
1365
output.bibitem
1366 ⟨*!natbib⟩
1367 FUNCTION {output.bibitem}
1368 { newline$
1369 "\bibitem" write$
1370 cite$ bracify write$
1371 newline$
1372 langid empty$
1373 { language empty$
1374 { "english" ’curlanguage := }
1375 { language ’curlanguage := }
1376 if$
1377 }
1378 { langid ’curlanguage := }
1379 if$
1380 "\selectlanguageifdefined" curlanguage bracify * write$
1381 newline$
1382 ""
1383 before.all ’output.state :=
1384 }
1385
1386 ⟨/!natbib⟩
format.full.names In case of natbib option, we need make.full.names to compose output.bibitem, and the
author.full latter in its turn requires some more functions.
editor.full 1387 ⟨*natbib⟩
author.editor.full 1388 FUNCTION {format.full.names}
make.full.names 1389 {’s :=
output.bibitem 1390 language empty$
1391 { "english" ’curlanguage := }
1392 { language ’curlanguage := }
1393 if$
1394 #1 ’nameptr :=
1395 s num.names$ ’numnames :=
1396 numnames ’namesleft :=
1397 { namesleft #0 > }
1398 { s nameptr
1399 "{vv~}{ll}" format.name$ ’t :=
1400 nameptr #1 >
1401 {
1402 namesleft #1 >
1403 { ", " * t * }
1404 {
1405 numnames #2 >
1406 curlanguage "english" =
1407 and
38
1408 { "," * }
1409 ’skip$
1410 if$
1411 t "others" =
1412 %t "~others" =
1413 %or
1414 %{ " et~al." * }
1415 { " " bbl.etal * * }
1416 %{ " and " * t * }
1417 { " " bbl.and " " * * * t * }
1418 if$
1419 }
1420 if$
1421 }
1422 ’t
1423 if$
1424 nameptr #1 + ’nameptr :=
1425 namesleft #1 - ’namesleft :=
1426 }
1427 while$
1428 }
1429
1430 FUNCTION {author.full}
1431 { author empty$
1432 { "" }
1433 { author format.full.names }
1434 if$
1435 }
1436
1437 FUNCTION {editor.full}
1438 { editor empty$
1439 { "" }
1440 { editor format.full.names }
1441 if$
1442 }
1443
1444 FUNCTION {author.editor.full}
1445 { author empty$
1446 { editor empty$
1447 { "" }
1448 { editor format.full.names }
1449 if$
1450 }
1451 { author format.full.names }
1452 if$
1453 }
1454
1455 FUNCTION {make.full.names}
1456 { type$ "book" =
1457 type$ "inbook" =
39
1458 or
1459 ’author.editor.full
1460 { type$ "proceedings" =
1461 ’editor.full
1462 ’author.full
1463 if$
1464 }
1465 if$
1466 }
1467
1468 % =======================================
1469 FUNCTION {output.bibitem}
1470 { newline$
1471 "\bibitem[" write$
1472 label write$
1473 ")" make.full.names duplicate$ short.list =
1474 { pop$ }
1475 { * }
1476 if$
1477 "]{" * write$
1478 cite$ write$
1479 "}" write$
1480 %% language empty$
1481 %% { "english" ’curlanguage := }
1482 %% {language ’curlanguage := }
1483 %% if$
1484 langid empty$
1485 { language empty$
1486 { "english" ’curlanguage := }
1487 { language ’curlanguage := }
1488 if$
1489 }
1490 { langid ’curlanguage := }
1491 if$
1492 "\selectlanguageifdefined" curlanguage bracify * write$
1493 newline$
1494 ""
1495 before.all ’output.state :=
1496 }
1497 % =======================================
1498 %FUNCTION {output.bibitem}
1499 %{ newline$
1500 % "\bibitem" write$
1501 %% author.key.label
1502 %% year parenthesify *
1503 %% "; lbl:" label * *
1504 %% "; mfn:" make.full.names * *
1505 % label
1506 % make.full.names *
1507 % bracketise write$
40
1508 % cite$ bracify write$
1509 % newline$
1510 % language empty$
1511 % { "english" ’curlanguage := }
1512 % {language ’curlanguage := }
1513 % if$
1514 % "\selectlanguageifdefined" curlanguage bracify * write$
1515 % newline$
1516 % ""
1517 % before.all ’output.state :=
1518 %}
1519 % =======================================
1520 ⟨/natbib⟩
1521
n.dashify
1522 FUNCTION {n.dashify}
1523 { ’t :=
1524 ""
1525 { t empty$ not }
1526 { t #1 #1 substring$ "-" =
1527 { t #1 #2 substring$ "--" = not
1528 { "--" *
1529 t #2 global.max$ substring$ ’t :=
1530 }
1531 { { t #1 #1 substring$ "-" = }
1532 { "-" *
1533 t #2 global.max$ substring$ ’t :=
1534 }
1535 while$
1536 }
1537 if$
1538 }
1539 { t #1 #1 substring$ *
1540 t #2 global.max$ substring$ ’t :=
1541 }
1542 if$
1543 }
1544 while$
1545 }
1546
word.in
1547 FUNCTION {word.in}
1548 { bbl.iin
1549 " " * }
1550
format.btitle
1551 FUNCTION {format.btitle}
1552 { title
1553 }
41
1554
e.or.space.connect
1555 FUNCTION {tie.or.space.connect}
1556 { duplicate$ text.length$ #3 <
1557 { "~" }
1558 { " " }
1559 if$
1560 swap$ * *
1561 }
1562
tie.connect Declare function to insert unbreakable space before last word in stack.
1563 FUNCTION {tie.connect}
1564 {"~"
1565 swap$ * *
1566 }
1567
1568
either.or.chec
1569 FUNCTION {either.or.check}
1570 { empty$
1571 ’pop$
1572 { "can’t use both " swap$ * " fields in " * cite$ * warning$ }
1573 if$
1574 }
1575
format.bvolume
1576 FUNCTION {format.bvolume}
1577 { volume empty$
1578 { "" }
1579 { bbl.vvol volume tie.connect
1580 series empty$
1581 ’skip$
1582 { bbl.of space.word * series emphasize * }
1583 if$
1584 "volume and number" number either.or.check
1585 }
1586 if$
1587 }
1588
rmat.number.series
1589 FUNCTION {format.number.series}
1590 { volume empty$
1591 { number empty$
1592 { series field.or.null }
1593 { series empty$
1594 { "there’s a number but no series in " cite$ * warning$
1595 bbl.nnr }
42
1596 {
1597 %new.dblslash
1598 new.sentence
1599 series
1600 bbl.nr
1601 tie.or.space.connect}
1602 if$
1603 number tie.or.space.connect
1604 }
1605 if$
1606 }
1607 { "" }
1608 if$
1609 }
1610
is.num
1611 FUNCTION {is.num}
1612 { chr.to.int$
1613 duplicate$ "0" chr.to.int$ < not
1614 swap$ "9" chr.to.int$ > not and
1615 }
1616
extract.num
1617 FUNCTION {extract.num}
1618 { duplicate$ ’t :=
1619 "" ’s :=
1620 { t empty$ not }
1621 { t #1 #1 substring$
1622 t #2 global.max$ substring$ ’t :=
1623 duplicate$ is.num
1624 { s swap$ * ’s := }
1625 { pop$ "" ’t := }
1626 if$
1627 }
1628 while$
1629 s empty$
1630 ’skip$
1631 { pop$ s }
1632 if$
1633 }
1634
1635 ⟨*debug⟩
eng.ord
1636 FUNCTION {eng.ord}
1637 { duplicate$ "1" swap$ *
1638 #-2 #1 substring$ "1" =
1639 { bbl.th * }
1640 { duplicate$ #-1 #1 substring$
1641 duplicate$ "1" =
43
1642 { pop$ bbl.st * }
1643 { duplicate$ "2" =
1644 { pop$ bbl.nd * }
1645 { "3" =
1646 { bbl.rd * }
1647 { bbl.th * }
1648 if$
1649 }
1650 if$
1651 }
1652 if$
1653 }
1654 if$
1655 }
1656 ⟨/debug⟩
1657
convert.edition
1658 FUNCTION {convert.edition}
1659 { edition
1660 % edition extract.num "l" change.case$ ’s :=
1661 % s "first" = s "1" = or
1662 % { bbl.first ’t := }
1663 % { s "second" = s "2" = or
1664 % { bbl.second ’t := }
1665 % { s "third" = s "3" = or
1666 % { bbl.third ’t := }
1667 % { s "fourth" = s "4" = or
1668 % { bbl.fourth ’t := }
1669 % { s "fifth" = s "5" = or
1670 % { bbl.fifth ’t := }
1671 % { s #1 #1 substring$ is.num
1672 % { s eng.ord ’t := }
1673 % { edition ’t := }
1674 % if$
1675 % }
1676 % if$
1677 % }
1678 % if$
1679 % }
1680 % if$
1681 % }
1682 % if$
1683 % }
1684 % if$
1685 % t
1686 }
1687
format.edition
1688 FUNCTION {format.edition}
44
1689 { edition empty$
1690 { "" }
1691 { output.state mid.sentence =
1692 ⟨!utf8⟩ { convert.edition "l" change.case$ " " * bbl.edition * }
1693 ⟨!utf8⟩ { convert.edition "t" change.case$ " " * bbl.edition * }
1694 ⟨utf8⟩ { convert.edition " " * bbl.edition * }
1695 ⟨utf8⟩ { convert.edition " " * bbl.edition * }
1696 if$
1697 }
1698 if$
1699 }
1700
1701 INTEGERS { multiresult }
1702
multi.page.check
1703 FUNCTION {multi.page.check}
1704 { ’t :=
1705 #0 ’multiresult :=
1706 { multiresult not
1707 t empty$ not
1708 and
1709 }
1710 { t #1 #1 substring$
1711 duplicate$ "-" =
1712 swap$ duplicate$ "," =
1713 swap$ "+" =
1714 or or
1715 { #1 ’multiresult := }
1716 { t #2 global.max$ substring$ ’t := }
1717 if$
1718 }
1719 while$
1720 multiresult
1721 }
1722
format.pages
1723 %%FUNCTION {format.pages}
1724 %%{ pages empty$
1725 %% { "" }
1726 %% { pages multi.page.check
1727 %% { bbl.ppages pages n.dashify tie.connect }
1728 %% { bbl.ppage pages tie.connect }
1729 %% if$
1730 %% }
1731 %% if$
1732 %%}
1733 FUNCTION {format.pages}
1734 { eid empty$
1735 {
45
1736 pages empty$
1737 { "" }
1738 { pages multi.page.check
1739 { bbl.ppages pages n.dashify tie.connect }
1740 { bbl.ppage pages tie.connect }
1741 if$
1742 }
1743 if$
1744 }
1745 { eid multi.page.check
1746 { bbl.ppages eid n.dashify tie.connect }
1747 { bbl.ppage eid tie.connect }
1748 if$
1749 }
1750 if$
1751 }
1752
format.pages.page
1753 %%FUNCTION {format.pages.page}
1754 %%{ pages empty$
1755 %% { pagetotal empty$
1756 %% { "" }
1757 %% { pagetotal bbl.pages tie.connect }
1758 %% if$}
1759 %% { format.pages}
1760 %% if$
1761 %%}
1762 FUNCTION {format.pages.page}
1763 { eid empty$
1764 { pages empty$
1765 { pagetotal empty$
1766 { "" }
1767 { pagetotal bbl.pages tie.connect }
1768 if$
1769 }
1770 { format.pages}
1771 if$
1772 }
1773 { format.pages }
1774 if$
1775 }
1776
rmat.vol.num.pages
1777 FUNCTION {format.vol.num.pages}
1778 { volume field.or.null
1779 number empty$
1780 ’skip$
1781 {
1782 ", no." number tie.or.space.connect *
46
1783 volume empty$
1784 { "there’s a number but no volume in " cite$ * warning$ }
1785 ’skip$
1786 if$
1787 }
1788 if$
1789 pages empty$
1790 ’skip$
1791 { duplicate$ empty$
1792 { pop$ format.pages }
1793 { ": " * pages n.dashify * }
1794 if$
1795 }
1796 if$
1797 }
1798
format.volume
1799 FUNCTION {format.volume}
1800 { volume empty$
1801 { "" }
1802 { bbl.vvol volume tie.or.space.connect }
1803 if$
1804 }
1805
format.number
1806 FUNCTION {format.number}
1807 { number empty$
1808 { "" }
1809 { bbl.nr number tie.or.space.connect }
1810 if$
1811 }
1812
1813 ⟨*debug⟩
rmat.chapter.pages
1814 FUNCTION {format.chapter.pages}
1815 { chapter empty$
1816 ’format.pages
1817 { type empty$
1818 { bbl.chapter }
1819 { type "l" change.case$ }
1820 if$
1821 chapter tie.or.space.connect
1822 pages empty$
1823 ’skip$
1824 { ", " * format.pages * }
1825 if$
1826 }
1827 if$
1828 }
47
1829 ⟨/debug⟩
1830
empty.misc.check
1831 FUNCTION {empty.misc.check}
1832 { author empty$ title empty$ howpublished empty$
1833 month empty$ year empty$ note empty$
1834 and and and and and
1835 key empty$ not and
1836 { "all relevant fields are empty in " cite$ * warning$ }
1837 ’skip$
1838 if$
1839 }
1840
format.thesis.type
1841 %FUNCTION {format.thesis.type}
1842 %{ type empty$
1843 % ’skip$
1844 % { pop$
1845 %%<!utf8> bbl.thesis.type "t" change.case$
1846 %%<utf8> bbl.thesis.type
1847 % }
1848 % if$
1849 %}
1850 FUNCTION {format.thesis.type}
1851 { type empty$
1852 ’skip$
1853 { pop$
1854 bbl.thesis.type
1855 }
1856 if$
1857 }
48
1875 }
1876
author.before Declare the function author.before to format list of authors in heading of a bibliographic
record. If the number of authors is 4 or larger, some styles skip the list of authors in the beginning
of the bibliographic record, while other styles always print that list. So, we need two version of
author.before.
First version is used if .bst style is compiled without option long. It skips authors if their
number is greater than or equal to 4 or if the author field is empty. Note that GOST requires for a
long list of authors to be reduced. Hence this first version is preferable. Note also that format.names
cuts list of names to 4 person at most in case if modern option is used. and format.authors just
emphasizes format.names.
1877 ⟨*!long⟩
1878 FUNCTION {author.before}
1879 {
1880 author empty$
1881 ’skip$
1882 {author num.names$ #4 <
1883 {format.authors output
1884 new.sentence}
1885 ’skip$
1886 if$}
1887 if$
1888 }
1889 ⟨/!long⟩
Second version is used if .bst style is compiled with the option long. It skips only if the author
field is empty.
1890 ⟨*long⟩
1891 FUNCTION {author.before}
1892 {
1893 author empty$
1894 ’skip$
1895 { format.authors output
1896 new.sentence
1897 }
1898 if$
1899 }
1900 ⟨/long⟩
1901
bookauthor.before There are also 2 version of the function bookauthor.before. Not used anymore!
1902 %%<*!long>
1903 %%FUNCTION {bookauthor.before}
1904 %%{
1905 %% bookauthor empty$
1906 %% ’skip$
1907 %% {bookauthor num.names$ #4 <
1908 %% {format.bookauthors output
1909 %% new.sentence}
1910 %% ’skip$
49
1911 %% if$}
1912 %% if$
1913 %%}
1914 %%</!long>
1915 %%<*long>
1916 %%FUNCTION {bookauthor.before}
1917 %%{
1918 %% bookauthor empty$
1919 %% ’skip$
1920 %% { format.bookauthors output
1921 %% new.sentence
1922 %% }
1923 %% if$
1924 %%}
1925 %%</long>
1926
author.after Functions author.after and bookauthor.after also have by 2 versions. They are used to write
authors list after the title followed by a slash. In modern styles, compiled with option modern, the
list of authors is always cut to at most 4 persons. The cut is performed first by format.names.rev,
which is called by format.authors.after. For old styles, author.after just outputs formatted
string whereas for new style it skips the string if the number of authors exceeds 3 (and author list
is not printed before the title).
1927 ⟨*!modern⟩
1928 FUNCTION {author.after}
1929 {
1930 author empty$
1931 ’skip$
1932 {format.authors.after output
1933 new.semicolon }
1934 if$
1935 }
1936 ⟨/!modern⟩
1937 ⟨*modern⟩
1938 ⟨*!long⟩
1939 FUNCTION {author.after}
1940 {
1941 author empty$
1942 ’skip$
1943 {author num.names$ #3 >
1944 {format.authors.after output
1945 new.semicolon }
1946 ’skip$
1947 if$}
1948 if$
1949 }
1950 ⟨/!long⟩
1951 ⟨*long⟩
1952 FUNCTION {author.after} { }
1953 ⟨/long⟩
50
1954 ⟨/modern⟩
1955
bookauthor.after This function is used only in inbook entry. It always cuts list to 4 persons since format.bookauthors.after
does that.
1956 FUNCTION {bookauthor.after}
1957 {
1958 bookauthor empty$
1959 ’skip$
1960 {format.bookauthors.after output
1961 new.semicolon }
1962 if$
1963 }
1964
organization.after
1965 FUNCTION {editor.organization.after}
1966 {
1967 compiler empty$
1968 {}
1969 { format.compiler.after output
1970 new.semicolon
1971 }
1972 if$
1973 editor empty$
1974 {}
1975 { format.editors.after output
1976 new.semicolon
1977 }
1978 if$
1979 organization empty$
1980 {}
1981 {organization output
1982 new.semicolon
1983 }
1984 if$
1985 }
1986
format.url
1987 FUNCTION {format.url}
1988 { url empty$
1989 { "" }
1990 {
1991 ⟨!(modern | strict)⟩ "\BibUrl{ " url * "}" *
1992 ⟨modern | strict⟩ bbl.url ": \BibUrl{" * url * "}" *
1993 urldate empty$
1994 { "" }
1995 { " (" bbl.urldate * ": " * urldate * ")" * }
1996 if$ *
1997 }
51
1998 if$
1999 }
2000
output.url
2001 FUNCTION {output.url}
2002 {
2003 url empty$
2004 ’skip$
2005 { format.url output }
2006 if$
2007 }
2008
format.annote
2009 FUNCTION {format.annote}
2010 { annote empty$
2011 { "" }
2012 { after.sentence ’output.state :=
2013 "\BibAnnote{" annote add.period$ * "}" *
2014 }
2015 if$
2016 }
2017
add.doi The Digital Object Identifier (DOI) System is for identifying content objects in the digital
environment. DOI names are assigned to any entity for use on digital networks. They are used
to provide current information, including where they (or information about them) can be found on
the Internet. Information about a digital object may change over time, including where to find it,
but its DOI name will not change.
Function add.doi embraces last string in stack into hyperlink that links it to specified doi
identificator at http://dx.doi.org/ web-site.
2028 ⟨*eprint⟩
2029 FUNCTION {add.doi}
2030 { duplicate$ empty$
2031 ’skip$
2032 { doi empty$
2033 ’skip$
2034 { "\href{http://dx.doi.org/" doi * "}{" * swap$ * "}" * }
52
2035 if$
2036 }
2037 if$
2038 }
2039 ⟨/eprint⟩
If .bst style is compiled without eprint option, we just ignore doi field.
2040 ⟨*!eprint⟩
2041 FUNCTION {add.doi} { }
2042 ⟨/!eprint⟩
2043
add.media New in version 1.2. Adds media field if strict options is in effect. If the media field is empty
add.media prints a value based on the type field. If the type is also empty add.media prints
equivalent of the word text in current language.
2044 ⟨*!strict⟩
2045 FUNCTION {add.media}
2046 { duplicate$ empty$
2047 ’skip$
2048 { media empty$
2049 ’skip$
2050 { " " * bbl.media enclose.square.brackets * }
2051 if$
2052 }
2053 if$
2054 }
2055 ⟨/!strict⟩
2056 ⟨*strict⟩
2057 FUNCTION {add.media}
2058 { duplicate$ empty$
2059 ’skip$
2060 { media empty$
2061 { " " * bbl.media.text enclose.square.brackets * }
2062 { " " * bbl.media enclose.square.brackets * }
2063 if$
2064 }
2065 if$
2066 }
2067 ⟨/strict⟩
2068
53
eprint = {identifier},
eprinttype = {Resource},
format.eprint The electronic identifier of an online publication. This is roughly comparable to a doi but
specific to a certain archive, repository, service, or system. Also see eprinttype and eprintclass.
This function should use url. TO BE DONE YET.
2069 ⟨*eprint⟩
2070 %FUNCTION {format.eprint}
2071 %{ eprint empty$
2072 % { "" }
2073 % { eprintclass empty$
2074 % { " \href{http://arxiv.org/abs/" eprint * "}" * "{" * eprint * "}" * }
2075 % { eprinttype empty$
2076 % { " \href{http://arxiv.org/abs/" eprint * "}" *
2077 % "{" * eprintclass * "/" * eprint * "}" *
2078 % }
2079 % { " \href{http://arxiv.org/abs/" eprint * "}" *
2080 % "{" * eprinttype * ":" * eprintclass * "/" * eprint * "}" *
2081 % }
2082 % if$}
2083 % if$}
2084 %if$}
2085
2086 %FUNCTION {format.eprint}
2087 %{ eprint empty$
2088 % { "" }
2089 % { eprinttype empty$
2090 % { "" }
2091 % { eprinttype "~: " *}
2092 % if$
2093 % eprintclass empty$
2094 % { }
2095 % { eprintclass * "/" *}
2096 % if$
2097 % eprint *
2098 % }
2099 % if$
2100 % url empty$
2101 % { }
2102 % { "\href{" url * "}{" * swap$ * "}" *}
2103 % if$
2104 %}
2105
2106 FUNCTION {format.eprint}
2107 { eprint empty$
2108 { "" }
2109 { eprinttype empty$
2110 { "" }
2111 { eprinttype "~: " *}
54
2112 if$
2113 eprintclass empty$
2114 { }
2115 { eprintclass * "/" *}
2116 if$
2117 url empty$
2118 { eprint * }
2119 { "\href{" * url * "}{" * eprint * "}" *}
2120 if$
2121 }
2122 if$
2123 }
2124
2125 FUNCTION {output.eprint.url}
2126 {
2127 eprint empty$
2128 { format.url output }
2129 { format.eprint output }
2130 if$
2131 }
2132
2133 ⟨/eprint⟩
2134
2135 ⟨*!eprint⟩
2136 FUNCTION {output.eprint.url}
2137 {
2138 format.url output
2139 }
2140 ⟨/!eprint⟩
2141
format.type.number
2149 FUNCTION {format.type.number}
2150 {
2151 type empty$
2152 { "" }
2153 {
2154 number empty$
2155 { "" }
2156 { type number tie.or.space.connect }
2157 if$
55
2158 }
2159 if$
2160 }
2161
format.requestdate
2162 FUNCTION {format.requestdate}
2163 { requestdate empty$
2164 { "" }
2165 { bbl.req requestdate tie.or.space.connect }
2166 if$
2167 }
2168
at.publicationdate
2169 FUNCTION {format.publicationdate}
2170 { publicationdate empty$
2171 { "" }
2172 { bbl.publ publicationdate tie.or.space.connect }
2173 if$
2174 }
2175
ormat.prioritydate
2176 FUNCTION {format.prioritydate}
2177 { prioritydate empty$
2178 { "" }
2179 { bbl.priority prioritydate tie.or.space.connect }
2180 if$
2181 }
2182
56
title in addition to the main title of the periodical, it goes in the issuetitle field. Note that editor
and related fields refer to the journal while translator and related fields refer to the article.
Required fields: author, title, journaltitle, year/date.
Optional fields: translator, annotator, commentator, subtitle, titleaddon, editor, editora, editorb,
editorc, journalsubtitle, issuetitle, issuesubtitle, language, origlanguage, series, volume, number, eid,
issue, month, pages, version, note, issn, addendum, pubstate, doi, eprint, eprintclass, eprinttype,
url, urldate.
2183 FUNCTION {article}
2184 {
2185 output.bibitem
2186 author.before
2187 ⟨natbib⟩ author format.key output
2188 format.title add.media "title" output.check
2189 new.slash
2190 author.after
2191 new.dblslash
2192 journal emphasize add.doi "journal" output.check % new in v.2
2193 new.block
2194 format.date "year" output.check
2195 new.block
2196 format.volume output
2197 format.number output
2198 new.block
2199 format.pages.page output
2200 new.block
2201 note output
2202 new.sentence
2203 % format.url output
2204 output.eprint.url
2205 format.annote output
2206 fin.entry
2207 }
2208
book A single-volume book with one or more authors where the authors share credit for the work as
a whole. In biblatex, this entry type also covers the function of the @inbook type of traditional
BibTeX.
Required fields: author, title, year/date.
Optional fields: editor, editora, editorb, editorc, translator, annotator, commentator, introduction,
foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, language, origlanguage,
volume, part, edition, volumes, series, number, note, publisher, location, isbn, chapter, pages,
pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate.
2209 FUNCTION {book}
2210 {
2211 output.bibitem
2212 author.before
2213 ⟨natbib⟩ author format.key output
2214 format.btitle add.doi add.media "title" output.check
2215 new.slash
57
2216 author.after
2217 editor.organization.after
2218 new.sentence
2219 format.number.series output
2220 new.block
2221 format.edition output
2222 new.block
2223 output.address.publisher
2224 format.date "year" output.check
2225 new.block
2226 format.bvolume output
2227 new.block
2228 format.pages.page output
2229 new.block
2230 ⟨eprint⟩ format.isbn output
2231 ⟨eprint⟩ new.block
2232 note output
2233 new.sentence
2234 % format.url output
2235 output.eprint.url
2236 format.annote output
2237 fin.entry
2238 }
2239
booklet A book-like work without a formal publisher or sponsoring institution. Use the field howpublished
to supply publishing information in free format, if applicable. The field type may be useful as well.
Required fields: author/editor, title, year/date.
Optional fields: subtitle, titleaddon, language, howpublished, type, note, location, chapter, pages,
pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate.
2240 FUNCTION {booklet}
2241 {
2242 output.bibitem
2243 author.before
2244 ⟨natbib⟩ author format.key output
2245 format.title add.doi add.media "title" output.check
2246 new.slash
2247 author.after
2248 editor.organization.after
2249 new.block
2250 howpublished output
2251 address.or.location output
2252 format.date "year" output.check
2253 new.block
2254 note output
2255 new.sentence
2256 % format.url output
2257 output.eprint.url
2258 format.annote output
2259 fin.entry
58
2260 }
2261
inbook A part of a book which forms a self-contained unit with its own title. Note that the profile of this
entry type is different from standard BibTeX.
Required fields: author, title, booktitle, year/date.
Optional fields: bookauthor, editor, editora, editorb, editorc, translator, annotator, commentator,
introduction, foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon,
booksubtitle, booktitleaddon, language, origlanguage, volume, part, edition, volumes, series,
number, note, publisher, location, isbn, chapter, pages, addendum, pubstate, doi, eprint, eprintclass,
eprinttype, url, urldate.
2262 FUNCTION {inbook}
2263 {
2264 output.bibitem
2265 author.before
2266 ⟨natbib⟩ author format.key output
2267 format.btitle add.doi add.media "title" output.check
2268 new.slash
2269 author.after
2270 new.dblslash
2271 % bookauthor.before
2272 booktitle "booktitle" output.check
2273 new.slash
2274 bookauthor.after
2275 editor.organization.after
2276 new.block
2277 format.edition output
2278 new.block
2279 format.number.series output
2280 new.sentence
2281 output.address.publisher
2282 format.date "year" output.check
2283 new.block
2284 format.bvolume output
2285 new.block
2286 format.pages.page output
2287 new.block
2288 ⟨eprint⟩ format.isbn output
2289 ⟨eprint⟩ new.block
2290 note output
2291 new.sentence
2292 % format.url output
2293 output.eprint.url
2294 format.annote output
2295 fin.entry
2296 }
2297
incollection A contribution to a collection which forms a self-contained unit with a distinct author and title.
The author refers to the title, the editor to the booktitle, i. e., the title of the collection.
Required fields: author, editor, title, booktitle, year/date.
59
Optional fields: editora, editorb, editorc, translator, annotator, commentator, introduction,
foreword, afterword, subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle,
booktitleaddon, language, origlanguage, volume, part, edition, volumes, series, number, note,
publisher, location, isbn, chapter, pages, addendum, pubstate, doi, eprint, eprintclass, eprinttype,
url, urldate.
2298 FUNCTION {incollection}
2299 {
2300 output.bibitem
2301 author.before
2302 ⟨natbib⟩ author format.key output
2303 new.sentence
2304 format.title add.doi add.media "title" output.check
2305 new.slash
2306 author.after
2307 new.dblslash
2308 booktitle "booktitle" output.check
2309 new.slash
2310 editor.organization.after
2311 new.block
2312 output.address.publisher
2313 format.date "year" output.check
2314 new.block
2315 format.bvolume output
2316 format.number.series output
2317 new.block
2318 format.pages.page output
2319 new.block
2320 note output
2321 new.sentence
2322 % format.url output
2323 output.eprint.url
2324 format.annote output
2325 fin.entry
2326 }
2327
proceedings A single-volume conference proceedings. This type is very similar to @collection. It supports
an optional organization field which holds the sponsoring institution. The editor is omissible.
Required fields: editor, title, year/date.
Optional fields: subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, eventtitle, eventdate,
venue, language, volume, part, volumes, series, number, note, organization, publisher, location,
month, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype,
url, urldate.
2328 FUNCTION {proceedings}
2329 {
2330 output.bibitem
2331 ⟨natbib⟩ editor format.key output
2332 format.btitle add.doi add.media "title" output.check
2333 new.slash
2334 editor.organization.after
60
2335 new.block
2336 format.bvolume output
2337 format.number.series output
2338 output.address.publisher
2339 format.date "year" output.check
2340 new.block
2341 note output
2342 new.sentence
2343 % format.url output
2344 output.eprint.url
2345 format.annote output
2346 fin.entry
2347 }
2348
inproceedings An article in a conference proceedings. This type is similar to @incollection. It supports an optional
organization field.
Required fields: author, editor, title, booktitle, year/date.
Optional fields: subtitle, titleaddon, maintitle, mainsubtitle, maintitleaddon, booksubtitle,
booktitleaddon, eventtitle, eventdate, venue, language, volume, part, volumes, series, number, note,
organization, publisher, location, month, isbn, chapter, pages, addendum, pubstate, doi, eprint,
eprintclass, eprinttype, url, urldate.
2349 FUNCTION {inproceedings}
2350 { output.bibitem
2351 author.before
2352 ⟨natbib⟩ author format.key output
2353 new.sentence
2354 format.title add.doi add.media "title" output.check
2355 new.slash
2356 author.after
2357 new.dblslash
2358 booktitle "booktitle" output.check
2359 new.slash
2360 editor.organization.after
2361 new.block
2362 format.bvolume output
2363 format.number.series output
2364 new.block
2365 % address empty$
2366 % { publisher output
2367 % format.date "year" output.check
2368 % }
2369 % { address output.nonnull
2370 % new.colon
2371 % publisher output
2372 % format.date "year" output.check
2373 % }
2374 % if$
2375 output.address.publisher
2376 format.date "year" output.check
61
2377 new.block
2378 format.pages.page output
2379 new.block
2380 note output
2381 new.sentence
2382 % format.url output
2383 output.eprint.url
2384 format.annote output
2385 fin.entry
2386 }
2387
manual Technical or other documentation, not necessarily in printed form. The author or editor is omissible.
Required fields: author/editor, title, year/date.
Optional fields: subtitle, titleaddon, language, edition, type, series, number, version, note,
organization, publisher, location, isbn, chapter, pages, pagetotal, addendum, pubstate, doi, eprint,
eprintclass, eprinttype, url, urldate.
2388 FUNCTION {manual}
2389 { output.bibitem
2390 author empty$
2391 { organization empty$
2392 ’skip$
2393 { organization output.nonnull
2394 address output
2395 }
2396 if$
2397 }
2398 { format.authors output.nonnull }
2399 if$
2400 ⟨natbib⟩ author format.key output
2401 new.block
2402 format.btitle add.doi add.media "title" output.check
2403 author empty$
2404 { organization empty$
2405 {
2406 address new.block.checka
2407 address output
2408 }
2409 ’skip$
2410 if$
2411 }
2412 {
2413 organization address new.block.checkb
2414 organization output
2415 address output
2416 }
2417 if$
2418 format.edition output
2419 format.date "year" output.check
2420 new.block
62
2421 note output
2422 new.sentence
2423 % format.url output
2424 output.eprint.url
2425 format.annote output
2426 fin.entry
2427 }
2428
patent A patent or patent request. The number or record token is given in the number field. Use the type
field to specify the type and the location field to indicate the scope of the patent, if different from
the scope implied by the type. Note that the location field is treated as a key list with this entry
type.
Required fields: author, title, number, year/date.
Optional fields: holder, subtitle, titleaddon, type, version, location, note, date, month, year,
addendum, pubstate, doi, eprint, eprint class, eprint type, url, urldate.
2429 FUNCTION {patent}
2430 {
2431 output.bibitem
2432 % title output.nonnull
2433 title add.media output.nonnull
2434 % add.blank
2435 % media enclose.square.brackets output % S.Kruchinin’s version
2436 new.colon
2437 format.type.number output
2438 add.blank
2439 address.or.location output
2440 new.colon
2441 ipc output
2442 new.slash
2443 format.authors.after "author" output.check
2444 add.blank
2445 authorcountry enclose.round.brackets output.nonnull
2446 ⟨natbib⟩ author format.key output
2447 new.semicolon
2448 holder output.nonnull
2449 new.semicolon
2450 credits output.nonnull
2451 new.block
2452 requestnumber add.number output
2453 new.semicolon
2454 format.requestdate output
2455 new.semicolon
2456 format.publicationdate output
2457 publication output
2458 new.semicolon
2459 format.prioritydate output
2460 prioritynumber output
2461 prioritycountry enclose.round.brackets output
2462 new.block
63
2463 note output
2464 new.sentence
2465 output.url
2466 format.annote output
2467 new.block
2468 pagetotal output
2469 fin.entry
2470 }
2471
misc A fallback type for entries which do not fit into any other category. Use the field howpublished to
supply publishing information in free format, if applicable. The field type may be useful as well.
author, editor, and year are omissible.
Required fields: author/editor, title, year/date.
2472 FUNCTION {misc}
2473 { output.bibitem
2474 format.authors output
2475 ⟨natbib⟩ author format.key output
2476 title howpublished new.sentence.checkb
2477 format.title add.media output
2478 howpublished new.block.checka
2479 howpublished output
2480 new.block
2481 format.date "year" output.check
2482 new.block
2483 note output
2484 new.sentence
2485 % format.url output
2486 output.eprint.url
2487 format.annote output
2488 fin.entry
2489 }
2490
unpublished A work with an author and a title which has not been formally published, such as a manuscript or
the script of a talk. Use the fields howpublished and note to supply additional information in free
format, if applicable.
Required fields: author, title, year/date.
Optional fields: subtitle, titleaddon, language, howpublished, note, location, isbn, date, month,
year, addendum, pubstate, url, urldate
2491 FUNCTION {unpublished}
2492 { output.bibitem
2493 author.before
2494 ⟨natbib⟩ author format.key output
2495 format.btitle "title" output.check
2496 new.slash
2497 author.after
2498 editor.organization.after
2499 new.block
2500 format.date "year" output.check
64
2501 new.block
2502 note "note" output.check
2503 new.sentence
2504 % format.url output
2505 output.eprint.url
2506 format.annote output
2507 fin.entry
2508 }
2509
online An online resource. Author, editor, and year are omissible. This entry type is intended for sources
such as web sites which are intrinsically online resources. Note that all entry types support the url
field. For example, when adding an article from an online journal, it may be preferable to use the
@article type and its url field.
Required fields: author/editor, title, year/date, url.
Optional fields: subtitle, titleaddon, language, version, note, organization, date, month, year,
addendum, pubstate, urldate.
2510 FUNCTION {online}
2511 { output.bibitem
2512 format.authors output
2513 ⟨natbib⟩ author format.key output
2514 title howpublished new.sentence.checkb
2515 format.title add.doi add.media "title" output.check
2516 % howpublished new.block.checka
2517 howpublished new.dblslash.checka
2518 ⟨!strict⟩ howpublished output
2519 ⟨strict⟩ howpublished enclose.square.brackets output
2520 editor.organization.after
2521 new.sentence
2522 new.block
2523 output.address.publisher
2524 format.date output
2525 new.block
2526 % format.url output
2527 output.eprint.url
2528 new.sentence
2529 note output
2530 format.annote output
2531 fin.entry
2532 }
2533
65
Required fields: author, title, type, institution, year/date.
Optional fields: subtitle, titleaddon, language, note, location, month, isbn, chapter, pages,
pagetotal, addendum, pubstate, doi, eprint, eprintclass, eprinttype, url, urldate
2538 ⟨*!(modern | strict)⟩
2539 FUNCTION {thesis}
2540 { output.bibitem
2541 format.authors "author" output.check
2542 ⟨natbib⟩ author format.key output
2543 new.sentence
2544 format.btitle "title" output.check
2545 new.colon
2546 bbl.phdthesis format.thesis.type output.nonnull
2547 new.slash
2548 %institution "institution" output.check
2549 institution.or.school "institution/school" output.check
2550 new.block
2551 output.address.publisher.date
2552 new.block
2553 format.pages.page output
2554 note output
2555 new.sentence
2556 format.url output
2557 format.annote output
2558 fin.entry
2559 }
2560 ⟨/!(modern | strict)⟩
2561 ⟨*modern | strict⟩
2562 FUNCTION {thesis}
2563 { output.bibitem
2564 format.authors "author" output.check
2565 ⟨natbib⟩ author format.key output
2566 new.sentence
2567 format.btitle add.doi add.media "title" output.check
2568 new.colon
2569 %%type "type" output.check
2570 bbl.phdthesis format.thesis.type output.nonnull
2571 new.colon
2572 %%number output % code of the speciality
2573 specialitycode.or.number output % code of the speciality, new in v.1.2i
2574 new.colon
2575 titleaddon output % date of defence and approvement; new in v.1.2i
2576 new.slash
2577 format.authors.after output
2578 new.semicolon
2579 %institution "institution" output.check
2580 institution.or.school "institution/school" output.check
2581 new.block
2582 output.address.publisher
2583 format.date "year" output.check
2584 new.block
66
2585 format.pages.page output
2586 new.block
2587 note output
2588 new.sentence
2589 % format.url output
2590 output.eprint.url
2591 format.annote output
2592 fin.entry
2593 }
2594 ⟨/modern | strict⟩
2595
67
2627 %new.sentence
2628 format.title add.doi add.media "title" output.check
2629 ⟨natbib⟩ title format.key output
2630 new.colon
2631 % format.techrep.type.number output.nonnull
2632 % type "type" output.check
2633 % format.report.type.number "type" output.check
2634 type "type" output.check
2635 new.colon
2636 number output
2637 new.slash
2638 %institution "institution" output.check
2639 institution.or.school "institution/school" output.check
2640 new.semicolon
2641 format.chief.after output % from editor field
2642 new.semicolon
2643 format.executor.after output % from author field
2644 new.block
2645 address.or.location output
2646 new.colon
2647 organization output
2648 format.date "year" output.check
2649 new.block % v.2
2650 format.pages.page output % v.2
2651 new.sentence % или new.block ?
2652 output.eprint.url
2653 new.block
2654 note output
2655 format.annote output
2656 fin.entry
2657 }
2658
68
2668 %institution "institution" output.check
2669 institution.or.school "institution/school" output.check
2670 new.block
2671 output.address.publisher.date
2672 new.block
2673 format.pages.page output
2674 note output
2675 new.sentence
2676 format.url output
2677 format.annote output
2678 fin.entry
2679 }
2680 ⟨/!(modern | strict)⟩
2681 ⟨*modern | strict⟩
2682 FUNCTION {phdthesis}
2683 { output.bibitem
2684 format.authors "author" output.check
2685 ⟨natbib⟩ author format.key output
2686 new.sentence
2687 format.btitle add.doi add.media "title" output.check
2688 new.colon
2689 bbl.phdthesis format.thesis.type output.nonnull
2690 new.colon
2691 %%number output % code of the speciality
2692 specialitycode.or.number output % code of the speciality, new in v.1.2i
2693 new.colon
2694 titleaddon output % date of defence and approvement; new in v.1.2i
2695 new.slash
2696 format.authors.after output
2697 new.semicolon
2698 %institution "institution" output.check
2699 institution.or.school "institution/school" output.check
2700 new.block
2701 output.address.publisher
2702 format.date "year" output.check
2703 new.block
2704 format.pages.page output
2705 new.block
2706 note output
2707 new.sentence
2708 % format.url output
2709 output.eprint.url
2710 format.annote output
2711 fin.entry
2712 }
2713 ⟨/modern | strict⟩
2714
mastersthesis Similar to @thesis except that the type field is optional and defaults to the localized term ‘Master’s
thesis’. You may still use the type field to override that.
2715 ⟨*!(modern | strict)⟩
69
2716 FUNCTION {mastersthesis}
2717 { output.bibitem
2718 format.authors "author" output.check
2719 ⟨natbib⟩ author format.key output
2720 new.sentence
2721 format.btitle "title" output.check
2722 new.colon
2723 bbl.mathesis format.thesis.type output.nonnull
2724 new.slash
2725 %institution "institution" output.check
2726 institution.or.school "institution/school" output.check
2727 new.block
2728 output.address.publisher.date
2729 new.block
2730 format.pages.page output
2731 note output
2732 new.sentence
2733 format.url output
2734 format.annote output
2735 fin.entry
2736 }
2737 ⟨/!(modern | strict)⟩
2738 ⟨*modern | strict⟩
2739 FUNCTION {mastersthesis}
2740 { output.bibitem
2741 format.authors "author" output.check
2742 ⟨natbib⟩ author format.key output
2743 new.sentence
2744 format.btitle add.doi add.media "title" output.check
2745 new.colon
2746 bbl.mathesis format.thesis.type output.nonnull
2747 new.colon
2748 %%number output % code of the speciality
2749 specialitycode.or.number output % code of the speciality, new in v.1.2i
2750 new.colon
2751 titleaddon output % date of defence and approvement; new in v.1.2i
2752 new.slash
2753 format.authors.after output
2754 new.semicolon
2755 %institution "institution" output.check
2756 institution.or.school "institution/school" output.check
2757 new.block
2758 output.address.publisher
2759 format.date "year" output.check
2760 new.block
2761 format.pages.page output
2762 new.block
2763 note output
2764 new.sentence
2765 % format.url output
70
2766 output.eprint.url
2767 format.annote output
2768 fin.entry
2769 }
2770 ⟨/modern | strict⟩
2771
docthesis Similar to @thesis except that the type field is optional and defaults to the localized term ‘Doctor’s
of sciences thesis’. You may still use the type field to override that.
2772 ⟨*!(modern | strict)⟩
2773 FUNCTION {docthesis}
2774 { output.bibitem
2775 format.authors "author" output.check
2776 ⟨natbib⟩ author format.key output
2777 new.sentence
2778 format.btitle "title" output.check
2779 new.colon
2780 bbl.docthesis format.thesis.type output.nonnull
2781 new.slash
2782 %institution "institution" output.check
2783 institution.or.school "institution/school" output.check
2784 new.block
2785 output.address.publisher.date
2786 new.block
2787 format.pages.page output
2788 note output
2789 new.sentence
2790 format.url output
2791 format.annote output
2792 fin.entry
2793 }
2794 ⟨/!(modern | strict)⟩
2795 ⟨*modern | strict⟩
2796 FUNCTION {docthesis}
2797 { output.bibitem
2798 format.authors "author" output.check
2799 ⟨natbib⟩ author format.key output
2800 new.sentence
2801 format.btitle add.doi add.media "title" output.check
2802 new.colon
2803 bbl.docthesis format.thesis.type output.nonnull
2804 new.colon
2805 %%number output % code of the speciality
2806 specialitycode.or.number output % code of the speciality, new in v.1.2i
2807 new.colon
2808 titleaddon output % date of defence and approvement; new in v.1.2i
2809 new.slash
2810 format.authors.after output
2811 new.semicolon
2812 %institution "institution" output.check
2813 institution.or.school "institution/school" output.check
71
2814 new.block
2815 output.address.publisher
2816 format.date "year" output.check
2817 new.block
2818 format.pages.page output
2819 new.block
2820 note output
2821 new.sentence
2822 % format.url output
2823 output.eprint.url
2824 format.annote output
2825 fin.entry
2826 }
2827 ⟨/modern | strict⟩
2828
conference
2829 FUNCTION {conference} { inproceedings }
2830
techreport TechReport is similar to @report except that the type field is optional and defaults to the
localized term ‘technical report’. You may still use the type field to override that.
2831 %FUNCTION {techreport}
2832 %{
2833 % output.bibitem
2834 % author.before
2835 % new.sentence
2836 % format.title add.doi add.media "title" output.check
2837 % new.colon
2838 % format.techrep.type.number output.nonnull
2839 % new.slash
2840 % author.after
2841 % editor.organization.after
2842 % new.block
2843 % address output
2844 % new.colon
2845 % institution "institution" output.check
2846 % format.date "year" output.check
2847 % new.block
2848 % note output
2849 % new.block % v.2
2850 % format.pages.page output % v.2
2851 % new.sentence
2852 %% format.url output
2853 % output.eprint.url
2854 % format.annote output
2855 % fin.entry
2856 %}
2857
2858 FUNCTION {techreport}
2859 {
72
2860 output.bibitem
2861 % author.before
2862 % new.sentence
2863 format.title add.doi add.media "title" output.check
2864 ⟨natbib⟩ title format.key output
2865 new.colon
2866 % format.techrep.type.number output.nonnull
2867 % type "type" output.check
2868 % format.report.type.number "type" output.check
2869 % type output
2870 format.techreport.type output
2871 new.colon
2872 number output
2873 new.slash
2874 %institution "institution" output.check
2875 institution.or.school "institution/school" output.check
2876 new.semicolon
2877 format.chief.after output % from editor field
2878 new.semicolon
2879 format.executor.after output % from author field
2880 new.block
2881 address.or.location output
2882 new.colon
2883 organization output
2884 format.date "year" output.check
2885 new.block % v.2
2886 format.pages.page output % v.2
2887 new.sentence % или new.block ?
2888 output.eprint.url
2889 new.block
2890 note output
2891 format.annote output
2892 fin.entry
2893 }
2894
default.type
2895 FUNCTION {default.type} { misc }
2896
73
2902 MACRO {jun} {"Jun."}
2903 MACRO {jul} {"Jul."}
2904 MACRO {aug} {"Aug."}
2905 MACRO {sep} {"Sep."}
2906 MACRO {oct} {"Oct."}
2907 MACRO {nov} {"Nov."}
2908 MACRO {dec} {"Dec."}
74
2946 MACRO {jcp} {"J. Comp. Phys."}
2947 MACRO {jchp} {"J. Chem. Phys."}
2948 MACRO {jetp} {"Sov. Phys.--JETP"}
2949 MACRO {jfe} {"J. Fusion Energy"}
2950 MACRO {jfm} {"J. Fluid Mech."}
2951 MACRO {jmp} {"J. Math. Phys."}
2952 MACRO {jne} {"J. Nucl. Energy"}
2953 MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."}
2954 MACRO {jnm} {"J. Nucl. Mat."}
2955 MACRO {jpc} {"J. Phys. Chem."}
2956 MACRO {jpp} {"J. Plasma Phys."}
2957 MACRO {jpsj} {"J. Phys. Soc. Japan"}
2958 MACRO {jsi} {"J. Sci. Instrum."}
2959 MACRO {jvst} {"J. Vac. Sci. \& Tech."}
2960 MACRO {nat} {"Nature"}
2961 MACRO {nature} {"Nature"}
2962 MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"}
2963 MACRO {nf} {"Nucl. Fusion"}
2964 MACRO {nim} {"Nucl. Inst. \& Meth."}
2965 MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."}
2966 MACRO {np} {"Nucl. Phys."}
2967 MACRO {npb} {"Nucl. Phys. B"}
2968 MACRO {nt/f} {"Nucl. Tech./Fusion"}
2969 MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"}
2970 MACRO {inc} {"Nuovo Cimento"}
2971 MACRO {nc} {"Nuovo Cimento"}
2972 MACRO {pf} {"Phys. Fluids"}
2973 MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."}
2974 MACRO {pfb} {"Phys. Fluids B: Plasma Phys."}
2975 MACRO {pl} {"Phys. Lett."}
2976 MACRO {pla} {"Phys. Lett. A"}
2977 MACRO {plb} {"Phys. Lett. B"}
2978 MACRO {prep} {"Phys. Rep."}
2979 MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"}
2980 MACRO {pp} {"Phys. Plasmas"}
2981 MACRO {pop} {"Phys. Plasmas"}
2982 MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"}
2983 MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"}
2984 MACRO {prl} {"Phys. Rev. Lett."}
2985 MACRO {pr} {"Phys. Rev."}
2986 MACRO {physrev} {"Phys. Rev."}
2987 MACRO {pra} {"Phys. Rev. A"}
2988 MACRO {prb} {"Phys. Rev. B"}
2989 MACRO {prc} {"Phys. Rev. C"}
2990 MACRO {prd} {"Phys. Rev. D"}
2991 MACRO {pre} {"Phys. Rev. E"}
2992 MACRO {ps} {"Phys. Scripta"}
2993 MACRO {procrsl} {"Proc. Roy. Soc. London"}
2994 MACRO {rmp} {"Rev. Mod. Phys."}
2995 MACRO {rsi} {"Rev. Sci. Inst."}
75
2996 MACRO {science} {"Science"}
2997 MACRO {sciam} {"Sci. Am."}
2998 MACRO {sam} {"Stud. Appl. Math."}
2999 MACRO {st} {"Sky and Telesc."}
76
2.8.3 Optics
Borrowed from photjour.mbs.
3041 MACRO {appopt} {"Appl. Opt."}
3042 MACRO {bell} {"Bell Syst. Tech. J."}
3043 MACRO {ell} {"Electron. Lett."}
3044 MACRO {jasp} {"J. Appl. Spectr."}
3045 MACRO {jqe} {"IEEE J. Quantum Electron."}
3046 MACRO {jlwt} {"J. Lightwave Technol."}
3047 MACRO {jmo} {"J. Mod. Opt."}
3048 MACRO {josa} {"J. Opt. Soc. America"}
3049 MACRO {josaa} {"J. Opt. Soc. Amer.~A"}
3050 MACRO {josab} {"J. Opt. Soc. Amer.~B"}
3051 MACRO {jdp} {"J. Phys. (Paris)"}
3052 MACRO {oc} {"Opt. Commun."}
3053 MACRO {ol} {"Opt. Lett."}
3054 MACRO {os} {"Opt. Spectrosc."}
3055 MACRO {phtl} {"IEEE Photon. Technol. Lett."}
3056 MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."}
3057 MACRO {vr} {"Vision Res."}
3058 MACRO {zph} {"Z. f. Physik"}
3059 MACRO {zphb} {"Z. f. Physik~B"}
3060 MACRO {zphd} {"Z. f. Physik~D"}
77
2.10 Sorting
Next chunk of code governs sorting reference list by authors’ names and titles.
3079 ⟨*sort | natbib⟩
3080
sortify
3081 FUNCTION {sortify}
3082 { purify$
3083 ⟨!utf8⟩ "l" change.case$
3084 }
3085 ⟨/sort | natbib⟩
3086
sort.format.names
3087 ⟨*sort⟩
3088 %% =====================================
3089 %% This version from old Gost package
3090 %%<*!natbib>
3091 FUNCTION {sort.format.names}
3092 { ’s :=
3093 #1 ’nameptr :=
3094 ""
3095 s num.names$ ’numnames :=
3096 numnames ’namesleft :=
3097 { namesleft #0 > }
3098 { nameptr #1 >
3099 { " " * }
3100 ’skip$
3101 if$
3102 s nameptr
3103 "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}"
3104 format.name$ ’t :=
3105 nameptr numnames = t "others" = and
3106 { "et al" * }
3107 %{ bbl.etal * }
3108 { t sortify * }
3109 if$
3110 nameptr #1 + ’nameptr :=
3111 namesleft #1 - ’namesleft :=
3112 }
3113 while$
3114 }
3115 %%</!natbib>
3116 %% This version from plainnat.bst
3117 %% It ignores second and subsequent authors but include year.
3118 %%<*natbib>
3119 %FUNCTION {sort.format.names}
3120 %{ ’s :=
3121 % #1 ’nameptr :=
3122 % ""
78
3123 % s num.names$ ’numnames :=
3124 % numnames ’namesleft :=
3125 % { namesleft #0 > }
3126 % {
3127 % s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ ’t :=
3128 % nameptr #1 >
3129 % {
3130 % " " *
3131 % namesleft #1 = t "others" = and
3132 % { "zzzzz" * }
3133 % { numnames #2 > nameptr #2 = and
3134 % { "zz" * year field.or.null * " " * }
3135 % ’skip$
3136 % if$
3137 % t sortify *
3138 % }
3139 % if$
3140 % }
3141 % { t sortify * }
3142 % if$
3143 % nameptr #1 + ’nameptr :=
3144 % namesleft #1 - ’namesleft :=
3145 % }
3146 % while$
3147 %}
3148 %%</natbib>
3149 %% =====================================
3150
sort.format.title
3151 FUNCTION {sort.format.title}
3152 { ’t :=
3153 "A " #2
3154 "An " #3
3155 "The " #4 t chop.word % Removes "The " if any
3156 chop.word % Removes "An " if any
3157 chop.word % Removes "A " if any
3158 sortify
3159 #1 global.max$ substring$
3160 }
3161
author.sort
3162 %% =====================================
3163 %% This version from old gost package.
3164 %%
3165 ⟨*!natbib⟩
3166 FUNCTION {author.sort}
3167 { author empty$
3168 { key empty$
3169 { "to sort, need author or key in " cite$ * warning$
79
3170 ""
3171 }
3172 { key sortify }
3173 if$
3174 }
3175 {
3176 author num.names$ #4 <
3177 {author sort.format.names }
3178 {title sort.format.title}
3179 if$
3180 }
3181 if$
3182 }
3183 ⟨/!natbib⟩
3184 %% This version from plainnat.bst
3185 ⟨*natbib⟩
3186 FUNCTION {author.sort}
3187 { author empty$
3188 { key empty$
3189 { "to sort, need author or key in " cite$ * warning$
3190 ""
3191 }
3192 { key sortify }
3193 if$
3194 }
3195 { author sort.format.names }
3196 if$
3197 }
3198 ⟨/natbib⟩
3199 %% =====================================
3200
author.title.sort
3201 ⟨*!natbib | natbib⟩
3202 FUNCTION {author.title.sort}
3203 { author empty$
3204 { title empty$
3205 { key empty$
3206 { "to sort, need author, title, or key in " cite$ * warning$
3207 ""
3208 }
3209 { key sortify }
3210 if$
3211 }
3212 { title sort.format.title }
3213 if$
3214 }
3215 {
3216 author num.names$ #4 <
3217 {author sort.format.names }
3218 {title sort.format.title}
80
3219 if$
3220 }
3221 if$
3222 }
3223 ⟨/!natbib | natbib⟩
3224 ⟨*natbib | natbib⟩
3225 FUNCTION {author.editor.sort}
3226 { author empty$
3227 { editor empty$
3228 { key empty$
3229 { "to sort, need author, editor, or key in " cite$ * warning$
3230 ""
3231 }
3232 { key sortify }
3233 if$
3234 }
3235 { editor sort.format.names }
3236 if$
3237 }
3238 { author sort.format.names }
3239 if$
3240 }
3241
3242 FUNCTION {author.organization.sort}
3243 { author empty$
3244 { organization empty$
3245 { key empty$
3246 { "to sort, need author, organization, or key in " cite$ * warning$
3247 ""
3248 }
3249 { key sortify }
3250 if$
3251 }
3252 { "The " #4 organization chop.word sortify }
3253 if$
3254 }
3255 { author sort.format.names }
3256 if$
3257 }
3258
3259 FUNCTION {editor.organization.sort}
3260 { editor empty$
3261 { organization empty$
3262 { key empty$
3263 { "to sort, need editor, organization, or key in " cite$ * warning$
3264 ""
3265 }
3266 { key sortify }
3267 if$
3268 }
81
3269 { "The " #4 organization chop.word sortify }
3270 if$
3271 }
3272 { editor sort.format.names }
3273 if$
3274 }
3275 ⟨/natbib | natbib⟩
3276
3277
presort Function to compute sort.key$. What is the space string "␣␣␣" for?
3278 ⟨*!natbib⟩
3279 FUNCTION {presort}%#1
3280 {
3281 author.title.sort
3282 " "
3283 *
3284 year field.or.null sortify
3285 *
3286 " "
3287 *
3288 title field.or.null
3289 sort.format.title
3290 *
3291 #1 entry.max$ substring$
3292 ’sort.key$ :=
3293 }
3294 ⟨/!natbib⟩
3295 ⟨*natbib⟩
3296 FUNCTION {presort}%#2
3297 { calc.label
3298 label sortify
3299 %author.title.sort
3300 " "
3301 *
3302 % ========= plainnat.bst =========
3303 % type$ "book" =
3304 % type$ "inbook" =
3305 % or
3306 % ’author.editor.sort
3307 % { type$ "proceedings" =
3308 % ’editor.organization.sort
3309 % { type$ "manual" =
3310 % ’author.organization.sort
3311 % ’author.sort
3312 % if$
3313 % }
3314 % if$
3315 % }
3316 % if$
3317 author.title.sort
82
3318 " "
3319 *
3320 year field.or.null sortify
3321 *
3322 " "
3323 *
3324 %cite$
3325 title field.or.null sort.format.title
3326 *
3327 #1 entry.max$ substring$
3328 ’sort.label :=
3329 sort.label *
3330 % ================================
3331 #1 entry.max$ substring$
3332 ’sort.key$ :=
3333 }
3334 ⟨/natbib⟩
3335 ⟨/sort⟩
3336
3337 ⟨*!sort⟩
3338 ⟨*natbib⟩
3339 INTEGERS { seq.num }
3340
3341 FUNCTION {init.seq}
3342 { #0 ’seq.num :=}
3343
3344 EXECUTE {init.seq}
3345
3346 FUNCTION {int.to.fix}
3347 { "000000000" swap$ int.to.str$ *
3348 #-1 #10 substring$
3349 }
3350
3351 FUNCTION {presort}%#3
3352 {
3353 calc.label % computes label
3354 label sortify % initiates sort.label
3355 " "
3356 *
3357 seq.num #1 + ’seq.num := % advance seq.num
3358 seq.num int.to.fix % prepend seq.num with 0s
3359 ’sort.label := % set sort.label to seq.num
3360 sort.label * % append seq.num to label
3361 #1 entry.max$ substring$ % cut if too long
3362 ’sort.key$ := % set sort.key$
3363 }
3364 ⟨/natbib⟩
3365 ⟨/!sort⟩
3366
3367 ⟨*sort | natbib⟩
83
3368 ITERATE {presort}
3369
3370 SORT
3371
3372 ⟨/sort | natbib⟩
3373
84
3407 }
3408 ’skip$
3409 if$
3410 }
3411 ⟨/!natbib⟩
3412 ⟨*natbib⟩
3413 FUNCTION {forward.pass}
3414 { last.label label =
3415 { last.extra.num #1 + ’last.extra.num :=
3416 last.extra.num int.to.chr$ ’extra.label :=
3417 }
3418 { "a" chr.to.int$ ’last.extra.num :=
3419 "" ’extra.label :=
3420 label ’last.label :=
3421 }
3422 if$
3423 number.label #1 + ’number.label :=
3424 }
3425 ⟨/natbib⟩
3426
3427 ITERATE {forward.pass}
3428
85
begin.bib Within thebibliography environment we define few formatting macros for user to customize how
the reference list is formatted.
3456 FUNCTION {begin.bib}
3457 { "\begin{thebibliography}{" longest.label * "}" * write$ newline$
3458 "\def\selectlanguageifdefined#1{" write$ newline$
3459 "\expandafter\ifx\csname date#1\endcsname\relax" write$ newline$
3460 % "\else\language\csname l@#1\endcsname\fi}" write$ newline$
3461 "\else\selectlanguage{#1}\fi}" write$ newline$
3462 "\providecommand*{\href}[2]{{\small #2}}" write$ newline$
3463 "\providecommand*{\url}[1]{{\small #1}}" write$ newline$
3464 "\providecommand*{\BibUrl}[1]{\url{#1}}" write$ newline$
3465 "\providecommand{\BibAnnote}[1]{}" write$ newline$
3466 "\providecommand*{\BibEmph}[1]{#1}" write$ newline$
3467 ⟨*modern|!modern⟩
3468 %"\ProvideTextCommandDefault{\cyrdash}{---}" write$ newline$
3469 %\DeclareUTFcharacter[\UTFencname]{x2014}{\cyrdash}
3470 %"\let\cyrdash\textemdash" write$ newline$
3471 %"\ProvideTextCommandDefault{\cyrdash}{\hbox to.8em{--\hss--}}" write$ newline$
3472 %"\ProvideTextCommandDefault{\cyrdash}{\textemdash}" write$ newline$
3473 "\ProvideTextCommandDefault{\cyrdash}{\iflanguage{russian}{\hbox to.8em{--\hss--}}{\textemdash}}" write$ ne
3474 %%"\ProvideTextCommandDefault{\cyrdash}{%" write$ newline$
3475 %%" \iflanguage{russian}{\hbox to.8em{--\hss--}}{%" write$ newline$
3476 %%" \iflanguage{ukrainian}{\hbox to.8em{--\hss--}}{\textemdash}}}" write$ newline$
3477 "\providecommand*{\BibDash}{\ifdim\lastskip>0pt\unskip\nobreak\hskip.2em plus 0.1em\fi" write$ newline$
3478 "\cyrdash\hskip.2em plus 0.1em\ignorespaces}" write$ newline$
3479 "\renewcommand{\newblock}{\ignorespaces}" write$ newline$
3480 ⟨/modern|!modern⟩
3481 ⟨natbib⟩ "\providecommand{\natexlab}[1]{#1}" write$ newline$
3482 preamble$ empty$
3483 ’skip$
3484 { preamble$ write$ newline$ }
3485 if$
3486 }
3487
3488
3489 EXECUTE {begin.bib}
3490
3491 EXECUTE {init.state.consts}
3492
3493 ITERATE {call.type$}
3494
end.bib
3495 FUNCTION {end.bib}
3496 { newline$
3497 % "\catcode‘\/=11" write$ newline$
3498 "\end{thebibliography}" write$ newline$
3499 }
3500
3501 EXECUTE {end.bib}
86
3502
3503 ⟨/bst⟩
That’s all, Folks!
Change History
v0.8 v1.2c
General: entry field annote added . . . . . . . . 8 General: entry field eid added . . . . . 8, 45, 46
macro \BibAnnote added . . . . . . . . 52, 86 entry field langid added . . . . . . . . . 8, 38
macro \BibEmph added . . . . . . . . . . 14, 86 fix Gost2003: "--- replaced by macro
macro \BibUrl added . . . . . . . . . . . 51, 86 \BibDash . . . . . . . . . . . . . . . . . . . 10, 35
v0.9 v1.2d
General: bug fix in @inproceedings entry General: \bbljan etc. macros removed . . . 73
type . . . . . . . . . . . . . . . . . . . . . . . . . . 61 v1.2e
v1.1 General: bbl.url added to replace URL
General: Entry type @online added . . . . . 65 string . . . . . . . . . . . . . . . . . . . . . . . . . 22
v1.2f
entry type @online added . . . . . . . . . . 14
General: entry patent added . . . . . . . . . . . 8
v1.2
entry field patent added . . . . . . . . . . . 55
General: @report entry . . . . . . . . . . . . . . 67
v1.2i
@thesis entry . . . . . . . . . . . . . . . . . . . 66 General: @dscithesis entry renamed to
entry field medium added . . . . . . . . . . . . 8 @docthesis . . . . . . . . . . . . . . . . . . . . 71
entry fields eprint, eprintclass, location field added as alias to address
eprinttype . . . . . . . . . . . . . . . . . . . . 54 field . . . . . . . . . . . . . . . . . . . . . . . . . . 36
entry fields eprint, eprintclass, media field normalised . . . . . . . . . . . . . 25
eprinttype added . . . . . . . . . . . . . . . . . 8 number field is now alias to
fix bbl.urldate for ukrainian (Andrey specialitycode . . . . . . . . . . . . . . . . . 36
Shvajkoy) . . . . . . . . . . . . . . . . . . . . . . 22 school field is now alias to instituttion 36
v1.2a corrected bbl.phdthesis and bbl.docthesis
General: default for \cyrdash added . . . . . 86 to comply GOST . . . . . . . . . . . . . . . . 23
v1.2b entry @MastersThesis added again (see
General: entry field numpages renamed to v1.1) . . . . . . . . . . . . . . . . . . . . . . . . . 69
pagetotal . . . . . . . . . . . . . . . . . . . 8, 46 typo fix in format.month . . . . . . . . . . . 34
3 Index
Numbers written in dark blue refer to the page where the corresponding entry is described; numbers
in black roman refer to the code lines where the entry is used.
87
bbl.docthesis . . . . . . . . . . 23 either.or.chec . . . . . . . . . 42 ielectronic . . . . . . . . . . . . 65
bbl.edby . . . . . . . . . . . . . . 15 emphasize . . . . . . . . . . . . . 14 inbook . . . . . . . . . . . . . . . . 59
bbl.edition . . . . . . . . . . . . 16 empty.misc.check . . . . . . . 48 incollection . . . . . . . . . . . 59
bbl.etal . . . . . . . . . . . . . . 18 enclose.round.brackets . . 15 init.state.consts . . . . . . . 9
bbl.executor . . . . . . . . . . . 26 enclose.square.brackets . 15 initialize.longest.label . 84
bbl.iin . . . . . . . . . . . . . . . 20 end.bib . . . . . . . . . . . . . . . 86 inproceedings . . . . . . . . . . 61
bbl.iissue . . . . . . . . . . . . 17 eng.ord . . . . . . . . . . . . . . . 43 institution.or.school . . . 36
bbl.iiss . . . . . . . . . . . . . . 17 extract.num . . . . . . . . . . . . 43 internet . . . . . . . . . . . . . . 65
bbl.in . . . . . . . . . . . . . . . . 20 field.or.null . . . . . . . . . . 14 is.num . . . . . . . . . . . . . . . . 43
bbl.mathesis . . . . . . . . . . . 23 fin.entry . . . . . . . . . . . . . 11 make.full.names . . . . . . . . 38
bbl.media.eresource . . . . . 25 format.address.publisher.date manual . . . . . . . . . . . . . . . . 62
bbl.media.online . . . . . . . 25 . . . . . . . . . . . . . . . . . 36 mastersthesis . . . . . . . . . . 69
bbl.media.text . . . . . . . . . 25 format.address.publisher . 36 misc . . . . . . . . . . . . . . . . . . 64
bbl.media . . . . . . . . . . . . . 26 format.annote . . . . . . . . . . 52 multi.page.check . . . . . . . 45
bbl.nnoaddress . . . . . . . . . 24 format.authors.after . . . . 33 n.dashify . . . . . . . . . . . . . 41
bbl.nnopublisher . . . . . . . 25 format.authors . . . . . . . . . 31 new.block.checka . . . . . . . 13
bbl.nnr . . . . . . . . . . . . . . . 20 format.bookauthors.after . 33 new.block.checkb . . . . . . . 13
bbl.nnumber . . . . . . . . . . . . 19 format.bookauthors . . . . . . 33 new.block . . . . . . . . . . . . . 11
bbl.nopublisher . . . . . . . . 24 format.btitle . . . . . . . . . . 41 new.colon . . . . . . . . . . . . . 12
bbl.nr . . . . . . . . . . . . . . . . 20 format.bvolume . . . . . . . . . 42 new.dblslash.checka . . . . . 14
bbl.number . . . . . . . . . . . . 19 format.chapter.pages . . . . 47 new.dblslash . . . . . . . . . . . 11
bbl.of . . . . . . . . . . . . . . . . 18 format.chief.after . . . . . . 33 new.semicolon . . . . . . . . . . 12
bbl.pages . . . . . . . . . . . . . 21 format.compiler.after . . . 34 new.sentence.checka . . . . . 14
bbl.page . . . . . . . . . . . . . . 21 format.date . . . . . . . . . . . . 35 new.sentence.checkb . . . . . 14
bbl.phdthesis . . . . . . . . . . 23 format.edition . . . . . . . . . 44 new.sentence . . . . . . . . . . . 12
bbl.ppages . . . . . . . . . . . . 21 format.editors.after . . . . 33 new.slash . . . . . . . . . . . . . 12
bbl.ppage . . . . . . . . . . . . . 22 format.eprint . . . . . . . . . . 54 non.stop . . . . . . . . . . . . . . 13
bbl.priority . . . . . . . . . . . 27 format.executor.after . . . 34 not . . . . . . . . . . . . . . . . . . 12
bbl.publ . . . . . . . . . . . . . . 27 format.full.names . . . . . . 38 online . . . . . . . . . . . . . . . . 65
bbl.req . . . . . . . . . . . . . . . 27 format.isbn . . . . . . . . . . . . 52 or . . . . . . . . . . . . . . . . . . . 13
bbl.techreport . . . . . . . . . 23 format.key . . . . . . . . . . . . 30 output.address.publisher.date
bbl.thesis.type‘ . . . . . . . 24 format.lab.names . . . . . . . 29 . . . . . . . . . . . . . . . . . 37
bbl.urldate . . . . . . . . . . . . 22 format.month . . . . . . . . . . . 34 output.bibitem . . . . . . . . . 38
bbl.url . . . . . . . . . . . . . . . 22 format.names.rev . . . . . . . 30 output.check . . . . . . . . . . . 11
bbl.vvolume . . . . . . . . . . . . 17 format.names . . . . . . . . . . . 28 output.nonnull . . . . . . . . . 10
bbl.vvol . . . . . . . . . . . . . . 17 format.number.series . . . . 42 output.url . . . . . . . . . . . . 52
begin.bib . . . . . . . . . . . . . 86 format.number . . . . . . . . . . 47 output . . . . . . . . . . . . . . . . 11
bookauthor.after . . . . . . . 51 format.pages.page . . . . . . 46 patent . . . . . . . . . . . . . . . . 63
bookauthor.before . . . . . . 49 format.pages . . . . . . . . . . . 45 phdthesis . . . . . . . . . . . . . 68
booklet . . . . . . . . . . . . . . . 58 format.prioritydate . . . . . 56 presort . . . . . . . . . . . . . . . 82
book . . . . . . . . . . . . . . . . . . 57 format.publicationdate . . 56 proceedings . . . . . . . . . . . . 60
bracify . . . . . . . . . . . . . . . 15 format.requestdate . . . . . . 56 report . . . . . . . . . . . . . . . . 67
change.language . . . . . . . . . 9 format.techrep.type.number reverse.pass . . . . . . . . . . . 85
chop.word . . . . . . . . . . . . . 13 . . . . . . . . . . . . . . . . . 48 sort.format.names . . . . . . 78
conference . . . . . . . . . . . . 72 format.thesis.type . . . . . . 48 sort.format.title . . . . . . 79
convert.edition . . . . . . . . 44 format.title . . . . . . . . . . . 34 sortify . . . . . . . . . . . . . . . 78
default.type . . . . . . . . . . . 73 format.type.number . . . . . . 55 space.word . . . . . . . . . . . . 15
docthesis . . . . . . . . . . . . . 71 format.url . . . . . . . . . . . . 51 specialitycode.or.number . 36
editor.full . . . . . . . . . . . . 38 format.vol.num.pages . . . . 46 techreport . . . . . . . . . . . . 72
editor.organization.after 51 format.volume . . . . . . . . . . 47 thesis . . . . . . . . . . . . . . . . 65
88
tie.connect . . . . . . . . . . . . 42 B \bblPp . . . . . . . . . . . . . . . 632
tie.or.space.connect . . . . 42 \bbland . . . . ... . . . . ... 513 \bblpp . . . . . . . . . . . . . . . 606
unpublished . . . . . . . . . . . . 64 \bbledby . . . ... . . . . ... 361 \bblVol . . . . . . . . . . . . . . 431
webpage . . . . . . . . . . . . . . . 65 \bbledition . ... . . . . ... 395 \bblVolume . . . . . . . . . . . 418
word.in . . . . . . . . . . . . . . . 41 \bblIn . . . . . ... . . . . ... 596 \BibAnnote . . . . . . 2013, 3465
www . . . . . . . . . . . . . . . . . . 65 \bblin . . . . . ... . . . . ... 586 \BibDash . . . . 141, 1265, 3477
\BibEmph . . . . . . . . . 331, 3466
\bblIss . . . . ... . . . . ... 461
\bibitem . . . . . . . . . . . 11,
\bblIssue . . ... . . . . ... 444
\␣ . . . . 363, 365, 368, 372, 12, 13, 1369, 1471, 1500
662, 665, 678, 681, 711, \bblno . . . . . ... . . . . 557, 573
\BibUrl . . . . . 1991, 1992, 3464
725, 727, 742, 744, 766, \bblNumber . ... . . . . ... 531
768, 769, 770, 776, 778, \bblnumber . ... . . . . ... 544 C
779, 780, 786, 788, 789, \bblof . . . . . ... . . . . 478, 495 \cyrdash . . . . . . . . . 3468,
790, 808, 812, 824, 825, \bblP . . . . . . ... . . . . ... 645 3469, 3470, 3471,
828, 829, 1175, 1182, 1196 \bblp . . . . . . ... . . . . ... 619 3472, 3473, 3474, 3478
89