%% This is the bibliography stylefile `vak.bst' by Vitaly Melnikov %% The file can be used to format the bibliographies of PhD thesys, books etc. %% according to the latest Russian standarts: GOST 7.82 – 2001 and GOST 7.1 – 2003. %% It introduces the minimum number new entries and styles to cover all frequently used %% situations. The style file provides an easy way to perform a semiautomatic, %% or a completely manual sort of the list of the references. %% The file contains parts of the stylefile file 'gost780s.bst' (v.2005.08.12) %% This file may be distributed and/or modified under the %% conditions of the LaTeX Project Public License %% Requires 8-bit bibtex with switch -B and csf file supporting cyrillic. %% bibtex8 -B -c .csf %% Please, send any bug reports via e-mail: %% melnikov at mail dot ifmo dot ru %% See examples *.pdf, *.tex (in Russian) %% Acknowledgements: %% to Maksym Polyakov for his stylefile file 'gost780s.bst' %% to Aleksandr Kirilenko (our university's bibliographer) for his useful consultations ENTRY { address annote author booktitle bookauthor chapter edition editor compiler %ñîñòàâèòåëü comment %ïå÷àòàåòñÿ òîëüêî â misk howpublished institution journal key month note number organization pages numpages publisher school series title type volume year language booklanguage url vipusk znumber country %% ñòðàíà ïàòåíòà perevod %% ïåðåâîä÷èê } {} { label } INTEGERS { output.state before.all mid.sentence after.sentence after.block after.dblslash after.slash after.column after.semicolumn} FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := #4 'after.dblslash := #5 'after.slash := #6 'after.column := #7 'after.semicolumn := } STRINGS { s t } STRINGS { curlanguage } FUNCTION {change.language} { booklanguage empty$ {""} {booklanguage 'curlanguage := "\selectlanguageifdefined{" curlanguage * "}" * } if$ } FUNCTION {output.nonnull} { swap$ output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ "\, ---\, " write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { output.state after.dblslash = { "~//" * change.language * " " * write$ } { output.state after.slash = { "~/ " * write$ } { output.state after.column = { "~: \," * write$ } { output.state after.semicolumn = { "~; \," * write$ } { add.period$ " " * write$ } if$ } if$ } if$ } if$ } if$ } if$ mid.sentence 'output.state := } if$ } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {new.dblslash} { output.state before.all = 'skip$ { after.dblslash 'output.state := } if$ } FUNCTION {new.slash} { output.state before.all = 'skip$ { after.slash 'output.state := } if$ } FUNCTION {new.column} { output.state before.all = 'skip$ { after.column 'output.state := } if$ } FUNCTION {new.semicolumn} { output.state before.all = 'skip$ { after.semicolumn 'output.state := } if$ } FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ } FUNCTION {add.blank} { " " * before.all 'output.state := } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {non.stop} { duplicate$ "}" * add.period$ #-1 #1 substring$ "." = } FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ } FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ } FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ } FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "\BibEmph{" swap$ * "}" * } if$ } FUNCTION {space.word} { " " swap$ * " " * } FUNCTION {bbl.edby} % { "\bbledby{}" } { curlanguage "english" = {"ed. by "} { curlanguage "ukrainian" = {"{\cyr\cyrp \cyrii\cyrd\ \cyrr\cyre\cyrd.\ }"} { curlanguage "russian" = {"{\cyr\cyrp\cyro\cyrd\ \cyrr\cyre\cyrd.\ }"} {"language is not defined: " language "edited by" * * warning$ "edited by"} if$} if$} if$ } FUNCTION {bbl.cmplr} { curlanguage "english" = {"compiler "} { curlanguage "ukrainian" = {"{\cyr\cyru \cyrk\cyrl.\ }"} { curlanguage "russian" = {"{\cyr\cyrs \cyro\cyrs\cyrt.\ }"} {"language is not defined: " language "compiler" * * warning$ "compiler"} if$} if$} if$ } FUNCTION {bbl.trnsl} { curlanguage "english" = {"transl. by "} { curlanguage "ukrainian" = {"{\cyr\cyrp\cyre\cyrr.\ }"} { curlanguage "russian" = {"{\cyr\cyrp\cyre\cyrr.\ }"} {"language is not defined: " language "translater" * * warning$ "translater"} if$} if$} if$ } FUNCTION {bbl.edition} % { "\bbledition{}" } { curlanguage "english" = {"edition"} { curlanguage "ukrainian" = {"{\cyr\cyrv\cyri\cyrd.}"} { curlanguage "russian" = {"{\cyr\cyri\cyrz\cyrd.}"} {"language is not defined: " language "edition" * * warning$ "edition"} if$} if$} if$ } FUNCTION {bbl.vvol} % { "\bblVol{}" } { curlanguage "english" = {"V."} { curlanguage "ukrainian" = curlanguage "russian" = or {"\CYRT."} {"language is not defined: " language "V." * * warning$ "V."} if$} if$ } FUNCTION {bbl.iiss} % { "\bblIss{}" } { curlanguage "english" = {"Iss."} { curlanguage "ukrainian" = {"\CYRV\cyri\cyrp."} { curlanguage "russian" = {"\CYRV\cyrery\cyrp."} {"language is not defined: " language * warning$ "Issue"} if$} if$} if$ } FUNCTION {bbl.of} % { "\bblof{}" } { curlanguage "english" = {"of"} { curlanguage "ukrainian" = {"{\cyr\cyrii\cyrz}"} { curlanguage "russian" = {"{\cyr\cyri\cyrz}"} {"language is not defined: " language "of" * * warning$ "of"} if$} if$} if$ } FUNCTION {bbl.etal} % { "\bblof{}" } { curlanguage "english" = {"et~al."} { curlanguage "ukrainian" = {"{\cyr\cyrt\cyra~\cyrii\cyrn.}"} { curlanguage "russian" = {"{\cyr\cyri~\cyrd\cyrr.}"} {"language is not defined: " language "at al" * * warning$ "at al."} if$} if$} if$ } FUNCTION {bbl.nr} % { "\bblno{}" } { curlanguage "english" = {"$\No$"} { curlanguage "ukrainian" = curlanguage "russian" = or {"{\cyr\textnumero}"} {"language is not defined: " language "$\No$" * * warning$ "$\No$"} if$} if$ } FUNCTION {bbl.pages} % { "\bblpp." } { curlanguage "english" = {"P."} { curlanguage "ukrainian" = curlanguage "russian" = or {"{\cyr\cyrs.}"} {"language is not defined: " language "P." * * warning$ "P."} if$} if$ } FUNCTION {bbl.ppages}% { "\bblPp." } { curlanguage "english" = {"P."} { curlanguage "ukrainian" = curlanguage "russian" = or {"{\cyr\CYRS.}"} {"language is not defined: " language "P." * * warning$ "P."} if$} if$ } FUNCTION {bbl.ppage} % { "\bblP." } { curlanguage "english" = {"P."} { curlanguage "ukrainian" = curlanguage "russian" = or {"{\cyr\CYRS.}"} {"language is not defined: " language "P." * * warning$ "P."} if$} if$ } FUNCTION {bbl.mthesis} { "Master's thesis" } FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { #1 "{vv~}{ll}{~jj}{,~f.}" format.name$ } FUNCTION {format.names.rev} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{f.}{~vv}{~ll}{, jj}" format.name$ 't := nameptr #1 > { nameptr #4 = numnames #4 > and { "others" 't := #1 'namesleft := } 'skip$ if$ namesleft #1 > { ", " * t * } { t "others" = t "~others" = or { " " * bbl.etal * } { ", " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {myformat.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}{~jj}{,~f.}" format.name$ 't := nameptr #1 > { nameptr #4 = numnames #4 > and { "others" 't := #1 'namesleft := } 'skip$ if$ namesleft #1 > { ", " * t * } { t "others" = t "~others" = or { " " * bbl.etal * } { ", " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { author format.names emphasize} if$ } FUNCTION {format.bookauthors} { bookauthor empty$ { "" } { bookauthor format.names} if$ } FUNCTION {format.authors.after} { author empty$ { "" } { author format.names.rev} if$ } FUNCTION {myformat.authors.after} { author empty$ { "" } { author myformat.names} if$ } FUNCTION {format.bookauthors.after} { bookauthor empty$ { "" } { bookauthor format.names.rev} if$ } FUNCTION {format.editors.after} { editor empty$ { "" } { bbl.edby editor format.names.rev * } if$ } FUNCTION {format.compiler.after} { compiler empty$ { "" } { bbl.cmplr compiler format.names.rev * } if$ } FUNCTION {format.perevod} { perevod empty$ { "" } { bbl.trnsl perevod * } if$ } FUNCTION {format.title} { title empty$ { "" } { title } if$ } FUNCTION {format.date} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ 'year { year ". " quote$ "--- " month * * * * } if$ } if$ } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {output.address.publisher.date} { address empty$ 'skip$ { address output publisher empty$ 'skip$ { new.column } if$ } if$ publisher output format.date output } FUNCTION {output.bibitem} { newline$ "\bibitem{" write$ cite$ write$ "}" write$ newline$ language empty$ {"english" 'curlanguage :=} {language 'curlanguage :=} if$ "\selectlanguageifdefined{" write$ curlanguage write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {word.in} { bbl.iin " " * } FUNCTION {format.btitle} { title } FUNCTION {tie.connect} {"~" swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { bbl.vvol volume tie.connect series empty$ 'skip$ { bbl.of space.word * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { series empty$ { "there's a number but no series in " cite$ * warning$ bbl.nr } { %new.dblslash new.sentence series bbl.nr tie.or.space.connect} if$ number tie.or.space.connect } if$ } { "" } if$ } FUNCTION {is.num} { chr.to.int$ duplicate$ "0" chr.to.int$ < not swap$ "9" chr.to.int$ > not and } FUNCTION {extract.num} { duplicate$ 't := "" 's := { t empty$ not } { t #1 #1 substring$ t #2 global.max$ substring$ 't := duplicate$ is.num { s swap$ * 's := } { pop$ "" 't := } if$ } while$ s empty$ 'skip$ { pop$ s } if$ } FUNCTION {convert.edition} { edition } FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { convert.edition "l" change.case$ " " * bbl.edition * } { convert.edition "t" change.case$ " " * bbl.edition * } if$ } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { bbl.ppages pages n.dashify tie.connect } { bbl.ppage pages tie.connect } if$ } if$ } FUNCTION {format.pages.page} { pages empty$ { numpages empty$ { "" } { numpages bbl.pages tie.connect } if$} { format.pages} if$ } FUNCTION {format.vol.num.pages} { volume field.or.null number empty$ 'skip$ { ", $\No$" number tie.or.space.connect * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } { ": " * pages n.dashify * } if$ } if$ } FUNCTION {format.volume} { volume empty$ { "" } { bbl.vvol volume tie.or.space.connect } if$ } FUNCTION {format.number} { number empty$ { "" } { bbl.nr number tie.or.space.connect } if$ } FUNCTION {format.znumber} { number empty$ { "" } { bbl.nr znumber tie.or.space.connect } if$ } FUNCTION {format.vipusk} { vipusk empty$ { "" } { bbl.iiss vipusk tie.or.space.connect } if$ } FUNCTION {myformat.number} { number empty$ { "" } { " \CYRP\cyra\cyrt. " number country tie.or.space.connect } if$ } FUNCTION {myzformat.number} { number empty$ { "" } { " \CYRZ\cyra\cyrya\cyrv\cyrk\cyra\ " number country tie.or.space.connect } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type %%"t" change.case$ } if$ } FUNCTION {author.before} { author empty$ 'skip$ {author num.names$ #4 < {format.authors output new.sentence} 'skip$ if$} if$ } FUNCTION {bookauthor.before} { bookauthor empty$ 'skip$ {bookauthor num.names$ #4 < {format.bookauthors output new.sentence} 'skip$ if$} if$ } FUNCTION {author.after} { author empty$ 'skip$ {format.authors.after output new.semicolumn } if$ } FUNCTION {myauthor.after} { author empty$ 'skip$ {myformat.authors.after output new.semicolumn } if$ } FUNCTION {bookauthor.after} { bookauthor empty$ 'skip$ {format.bookauthors.after output new.semicolumn } if$ } FUNCTION {editor.organization.after} { compiler empty$ {} { format.compiler.after output new.semicolumn } if$ editor empty$ {} { format.editors.after output new.semicolumn } if$ perevod empty$ {} { format.perevod output new.semicolumn } if$ organization empty$ {} {organization output new.semicolumn } if$ } FUNCTION {format.url} { url empty$ { "" } { curlanguage "english" = { %%after.sentence 'output.state := "Mode of access\BibUrl{ " url * "}" *} {%% after.sentence 'output.state := "\CYRR\cyre\cyrzh\cyri\cyrm\ \cyrd\cyro\cyrs\cyrt\cyru\cyrp\cyra:\ \BibUrl{ " url * "}" *} if$ } if$ } FUNCTION {format.annote} { annote empty$ { "" } { after.sentence 'output.state := "\BibAnnote{" annote add.period$ * "}" * } if$ } FUNCTION {article} { output.bibitem author.before format.title "title" output.check new.slash author.after new.dblslash journal emphasize "journal" output.check series emphasize "series" output.check new.block format.date output new.block format.volume output format.number output new.block format.vipusk output new.block format.pages.page output new.block format.url output new.sentence note output format.annote output fin.entry } FUNCTION {book} { output.bibitem author.before format.btitle "title" output.check new.slash author.after editor.organization.after new.sentence format.number.series output new.block format.edition output new.block output.address.publisher.date new.block format.bvolume output new.block format.pages.page output new.block format.url output new.sentence note output format.annote output fin.entry } FUNCTION {patent} { output.bibitem myformat.number output format.btitle "title" output.check new.slash myauthor.after editor.organization.after new.block format.znumber output new.semicolumn note output new.block format.pages.page output fin.entry } FUNCTION {zpatent} { output.bibitem myzformat.number output format.btitle "title" output.check new.slash myauthor.after editor.organization.after new.block format.znumber output new.semicolumn note output new.block format.pages.page output fin.entry } FUNCTION {booklet} { output.bibitem author.before format.title "title" output.check new.slash author.after editor.organization.after new.block howpublished output address output format.date output new.block format.pages.page output new.block note output new.sentence format.url output format.annote output fin.entry } FUNCTION {inbook} { output.bibitem author.before format.btitle "title" output.check new.slash author.after new.dblslash bookauthor.before booktitle "booktitle" output.check new.slash bookauthor.after editor.organization.after new.block format.edition output new.block format.number.series output new.sentence output.address.publisher.date new.block format.bvolume output format.pages.page output new.block note output new.sentence format.url output format.annote output fin.entry } FUNCTION {incollection} { output.bibitem author.before new.sentence format.title "title" output.check new.slash author.after new.dblslash booktitle "booktitle" output.check new.slash editor.organization.after new.block output.address.publisher.date new.block format.bvolume output format.number.series output new.block format.pages.page output new.block note output new.sentence format.url output format.annote output fin.entry } FUNCTION {inproceedings} { output.bibitem author.before new.sentence format.title "title" output.check new.slash author.after new.dblslash booktitle "booktitle" output.check new.slash editor.organization.after new.block format.bvolume output format.number.series output new.block output.address.publisher.date new.block format.pages.page output new.block note output new.sentence format.url output format.annote output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ new.block format.btitle "title" output.check author empty$ { organization empty$ { address new.block.checka address output } 'skip$ if$ } { organization address new.block.checkb organization output address output } if$ format.edition output format.date output new.block note output new.sentence format.url output format.annote output fin.entry } FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check new.block format.btitle "title" output.check new.block bbl.mthesis format.thesis.type output.nonnull school "school" output.check address output format.date "year" output.check new.block note output new.block format.url output format.annote output fin.entry } FUNCTION {misc} { output.bibitem comment output fin.entry } FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check new.sentence format.btitle "title" output.check new.column bbl.phdthesis format.thesis.type output.nonnull new.slash school "school" output.check new.block output.address.publisher.date new.block format.pages.page output note output new.sentence format.url output format.annote output fin.entry } FUNCTION {proceedings} { output.bibitem format.btitle "title" output.check new.slash editor.organization.after new.block format.bvolume output format.number.series output address empty$ { publisher output format.date "year" output.check } { address output.nonnull format.date "year" output.check new.sentence publisher output } if$ new.block note output new.sentence format.url output format.annote output fin.entry } FUNCTION {techreport} { output.bibitem author.before new.sentence format.title "title" output.check new.column new.slash institution "institution" output.check new.column author.after new.block editor.organization.after new.block note output new.sentence format.url output format.annote output output.address.publisher.date new.block format.pages.page output fin.entry } FUNCTION {unpublished} { output.bibitem author.before format.btitle "title" output.check new.slash author.after editor.organization.after new.block note "note" output.check new.sentence format.url output format.annote output fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"\bbljan{}"} MACRO {feb} {"\bblfeb{}"} MACRO {mar} {"\bblmar{}"} MACRO {apr} {"\bblapr{}"} MACRO {may} {"\bblmay{}"} MACRO {jun} {"\bbljun{}"} MACRO {jul} {"\bbljul{}"} MACRO {aug} {"\bblaug{}"} MACRO {sep} {"\bblsep{}"} MACRO {oct} {"\bbloct{}"} MACRO {nov} {"\bblnov{}"} MACRO {dec} {"\bbldec{}"} MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} READ FUNCTION {sortify} { purify$ "l" change.case$ } INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } FUNCTION {sort.format.names} { 's := #1 'nameptr := "" s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { nameptr #1 > { " " * } 'skip$ if$ s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := nameptr numnames = t "others" = and { "et al" * } { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ ""} { key sortify } if$ } { author num.names$ #4 < {author sort.format.names } {title sort.format.title} if$ } if$ } FUNCTION {author.title.sort} { key empty$ { author empty$ { title empty$ { "to sort, need author, title, or key in " cite$ * warning$ "" } { title sort.format.title } if$ } { author num.names$ #4 < {author sort.format.names } {title sort.format.title} %%åñëè áîëüøå 4 àâòîðîâ if$ } if$ } { key sortify } if$ } FUNCTION {presort} { author.title.sort " " * year field.or.null sortify * " " * title field.or.null sort.format.title * #1 entry.max$ substring$ 'sort.key$ := } ITERATE {presort} SORT STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := } FUNCTION {longest.label.pass} { number.label int.to.str$ 'label := number.label #1 + 'number.label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ } EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} FUNCTION {begin.bib} { "\begin{thebibliography}{" longest.label * "}" * write$ newline$ "\def\selectlanguageifdefined#1{" write$ newline$ "\expandafter\ifx\csname date#1\endcsname\relax" write$ newline$ "\else\language\csname l@#1\endcsname\fi}" write$ newline$ %% "\ifx\undefined\` \def\url#1{{\small #1}}\else\fi" write$ %%newline$ "\ifx\undefined\url\def\url#1{{ #1}}\else\fi" write$ newline$ "\ifx\undefined\BibUrl\def\BibUrl#1{\url{#1}}\else\fi" write$ newline$ "\ifx\undefined\BibAnnote\long\def\BibAnnote#1{}\else\fi" write$ newline$ "\ifx\undefined\BibEmph\def\BibEmph#1{\emph{#1}}\else\fi" write$ newline$ preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib}