3

I am submitting an article to "Advanced Quantum Technologies", a Wiley journal (https://onlinelibrary.wiley.com/journal/25119044). I am using LaTeX, with BibTeX to prepare the references. Unfortunately the journal seems much more geared towards submissions made in Word, and so it does not provide any useful style files. I can satisfy most of their requirements, but the references must be formatted in a rather specific way:

[1] A. B. Firstauthor, C. D. Secondauthor, E. F. Lastauthor, Journal Title YEAR, Volume, Page.

Journal Title and Volume should be italic; YEAR should be bold.

Does anyone have an idea how I can manage this, without having to write my own .bst file?

  • Whitout to write by hand your bst file you could rather easily create it with the makebst script. Is it a solution for you ? – Jhor Oct 22 '19 at 5:18
  • Yes, that is one solution. Running makebst and answering (correctly!) all the questions is quite a tedious procedure though. I was really hoping that someone knew of a bst file that produced references in this format, or could do so after some minor tweaking. – Clara Diaz Sanchez Oct 23 '19 at 7:50
  • I have looked at standard .bst files, and patched one of them in order to suit your needs. The result is posted below in two answers. Notice that an other option would be to switch to biblatex+biber which makes somehow easier such kind of customization. Keep in mind that for submission you need to copy the .bbl into the .tex main, as explained in my answer to tex.stackexchange.com/q/124874/33514 – Jhor Oct 23 '19 at 14:27
  • I have found to small problems: volume not italicized and macro with wrong braket. It is now fixed in the files. – Jhor Oct 23 '19 at 15:50
  • Thank you so much @Jhor, that is wonderful! There is a slight problem that "and" in the list of authors gets converted to ",," but I can hand edit those occurrences. Thank you again! – Clara Diaz Sanchez Oct 23 '19 at 19:31
3

Here is a proposal, where @article and @book (without editors at least) are formatted according to Guide_for_Authors.

It is based on unsrtnat.bst file intended to be used with natbib package.

A summary of changes made is as follow:

  • added FUNCTION {output.nonnull.nopunct} at line 114
  • added FUNCTION {output.check.nopunct} at line 152
  • added FUNCTION {enbold} at line 248
  • changed "{ff~}{vv~}{ll}{, jj}" to "{f.~}{vv~}{ll}{, jj}" at line 263
  • changed " and " to ", " at line 266
  • changed "\penalty0 (" number * ")" to "\penalty0 (\emph{" number * "})" at line 581
  • changed ":\penalty0 " to ", \penalty0 " at line 592
  • heavily edited FUNCTION {article} at line 741
  • heavily edited FUNCTION {book} at line 766

The whole file is posted in a second answer as it doesn't fit in the limited size of this answer. It is also posted at this URL, and the lines numbers quoted above are relative to this file, which contains all the original comments.

Please notice that :

  • I suppressed the article title, and also the hyperlink/electronic reference/doi/issn but you could reintroduce them if needed, by copy paste from the original unsrtnat.bst
  • Similar changes remain to be added for @book-with editors and @inbook etc. if you need them.
  • I have kept the number in parenthesis for the volume, but you could easily suppress it.
  • I have left a space between the journal title and the year, because it is both ugly and difficult to suppress it.
  • I didn't addressed the requirement "Journal titles should be abbreviated in accordance with the "Chemical Abstracts Service Source Index" as this is a completely different issue, that can be achieved by different means and deserves another question.

The MWE with bibliography (MWEB) is as follows:

%-- simple biblio
\begin{filecontents}{\jobname.bib}
@article{einstein05,
  author = {Albert Einstein},
  title = {{Zur Elektrodynamik bewegter Körper}},
  journal = {Annalen der Physik},
  year = {1905},
  volume = {322},
  pages = {891--921},
  number = {10},
  doi = {10.1002/andp.19053221004}
}
@article{einstein_can_1935,
    title = {Can {Quantum}-{Mechanical} {Description} of {Physical} {Reality} {Be} {Considered} {Complete}?},
    volume = {47},
    doi = {10.1103/PhysRev.47.777},
    number = {10},
    urldate = {2018-03-05},
    journal = {Phys. Rev.},
    author = {Einstein, A. and Podolsky, B. and Rosen, N.},
    month = may,
    year = {1935},
    pages = {777--780},
}
@book{lorentz1922relativitatsprinzip,
  title={Das Relativit{\"a}tsprinzip},
  author={Lorentz, Hendrik A and Einstein, Albert and Minkowski, Hermann and Weyl, H},
  year={1922},
  publisher={Springer},
  address= {Vieweg Teubner Verlag, Wiesbaden},
  doi={https://doi.org/10.1007/978-3-663-16170-7 },
}
\end{filecontents}
%---article with some citations
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[square,semicolon,numbers,sort]{natbib} % required
\usepackage[english]{babel} % if babel used, must be loaded after natbib
\begin{document}
Some citations: \cite{einstein_can_1935}
\cite{lorentz1922relativitatsprinzip}
\cite{einstein05}
\bibliography{\jobname}
\bibliographystyle{unsrtnat-AQT}
\end{document}

with the result:

result of mweb

| improve this answer | |
2

The new unsrtnat-AQT.bstfile:

%% File edited by Jhor on 2019-10-23
%% to comply with requirement of "Advanced Quantum Technologies"
%% some other comment are to be retrieved from `unsrtnat.bst' file
ENTRY
    { address
        author
        booktitle
        chapter
        doi
        eid
        edition
        editor
        howpublished
        institution
        isbn
        issn
        journal
        key
        month
        note
        number
        organization
        pages
        publisher
        school
        series
        title
        type
        url
        volume
        year
    }
    {}
    { label extra.label sort.label short.list }

INTEGERS { output.state before.all mid.sentence after.sentence after.block }

FUNCTION {init.state.consts}
{ #0 'before.all :=
    #1 'mid.sentence :=
    #2 'after.sentence :=
    #3 'after.block :=
}

STRINGS { s t }

FUNCTION {output.nonnull}
{ 's :=
    output.state mid.sentence =
        { ", " * write$ }
        { output.state after.block =
                { add.period$ write$
                    newline$
                    "\newblock " write$
                }
                { output.state before.all =
                        'write$
                        { add.period$ " " * write$ }
                    if$
                }
            if$
            mid.sentence 'output.state :=
        }
    if$
    s
}

FUNCTION {output.nonnull.nopunct}
{ 's :=
    output.state mid.sentence =
        { " " * write$ }
        { output.state after.block =
                { %add.period$
                    ", " *
                    write$
                    newline$
                    "\newblock " write$
                }
                { output.state before.all =
                        'write$
                        { add.period$ " " * write$ }
                    if$
                }
            if$
            mid.sentence 'output.state :=
        }
    if$
    s
}

FUNCTION {output}
{ duplicate$ empty$
        'pop$
        'output.nonnull
    if$
}

FUNCTION {output.check}
{ 't :=
    duplicate$ empty$
        { pop$ "empty " t * " in " * cite$ * warning$ }
        'output.nonnull
    if$
}

FUNCTION {output.check.nopunct}
{ 't :=
    duplicate$ empty$
        { pop$ "empty " t * " in " * cite$ * warning$ }
        'output.nonnull.nopunct
    if$
}

FUNCTION {fin.entry}
{ add.period$
    write$
    newline$
}

FUNCTION {new.block}
{ output.state before.all =
        'skip$
        { after.block 'output.state := }
    if$
}

FUNCTION {new.sentence}
{ output.state after.block =
        'skip$
        { output.state before.all =
                'skip$
                { after.sentence 'output.state := }
            if$
        }
    if$
}

FUNCTION {not}
{    { #0 }
        { #1 }
    if$
}

FUNCTION {and}
{    'skip$
        { pop$ #0 }
    if$
}

FUNCTION {or}
{    { pop$ #1 }
        'skip$
    if$
}

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$ "" }
        { "\emph{" swap$ * "}" * }
    if$
}

FUNCTION {enbold}
{ duplicate$ empty$
        { pop$ "" }
        { "\textbf{" swap$ * "}" * }
    if$
}

INTEGERS { nameptr namesleft numnames }

FUNCTION {format.names}
{ 's :=
    #1 'nameptr :=
    s num.names$ 'numnames :=
    numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
            nameptr #1 >
                { namesleft #1 >
                        { ", " * t * }
                        { numnames #2 >
                                { "," * }
                                'skip$
                            if$
                            t "others" =
                                { " et~al." * }
                                { ", " * t * }
                            if$
                        }
                    if$
                }
                't
            if$
            nameptr #1 + 'nameptr :=
            namesleft #1 - 'namesleft :=
        }
    while$
}

FUNCTION {format.key}
{ empty$
        { key field.or.null }
        { "" }
    if$
}

FUNCTION {format.authors}
{ author empty$
        { "" }
        { author format.names }
    if$
}

FUNCTION {format.editors}
{ editor empty$
        { "" }
        { editor format.names
            editor num.names$ #1 >
                { ", editors" * }
                { ", editor" * }
            if$
        }
    if$
}

FUNCTION {format.isbn}
{ isbn empty$
        { "" }
        { new.block "ISBN " isbn * }
    if$
}

FUNCTION {format.issn}
{ issn empty$
        { "" }
        { new.block "ISSN " issn * }
    if$
}

FUNCTION {format.url}
{ url empty$
        { "" }
        { new.block "URL \url{" url * "}" * }
    if$
}

FUNCTION {format.doi}
{ doi empty$
        { "" }
        { new.block "\doi{" doi * "}" * }
    if$
}

FUNCTION {format.title}
{ title empty$
        { "" }
        { title "t" change.case$ }
    if$
}

FUNCTION {format.full.names}
{'s :=
    #1 'nameptr :=
    s num.names$ 'numnames :=
    numnames 'namesleft :=
        { namesleft #0 > }
        { s nameptr
            "{vv~}{ll}" format.name$ 't :=
            nameptr #1 >
                {
                    namesleft #1 >
                        { ", " * t * }
                        {
                            numnames #2 >
                                { "," * }
                                'skip$
                            if$
                            t "others" =
                                { " et~al." * }
                                { ", " * t * }
                            if$
                        }
                    if$
                }
                't
            if$
            nameptr #1 + 'nameptr :=
            namesleft #1 - 'namesleft :=
        }
    while$
}

FUNCTION {author.editor.full}
{ author empty$
        { editor empty$
                { "" }
                { editor format.full.names }
            if$
        }
        { author format.full.names }
    if$
}

FUNCTION {author.full}
{ author empty$
        { "" }
        { author format.full.names }
    if$
}

FUNCTION {editor.full}
{ editor empty$
        { "" }
        { editor format.full.names }
    if$
}

FUNCTION {make.full.names}
{ type$ "book" =
    type$ "inbook" =
    or
        'author.editor.full
        { type$ "proceedings" =
                'editor.full
                'author.full
            if$
        }
    if$
}

FUNCTION {output.bibitem}
{ newline$
    "\bibitem[" write$
    label write$
    ")" make.full.names duplicate$ short.list =
         { pop$ }
         { * }
     if$
    "]{" * write$
    cite$ 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 {format.date}
{ year duplicate$ empty$
        { "empty year in " cite$ * warning$
             pop$ "" }
        'skip$
    if$
    month empty$
        'skip$
        { month
            " " * swap$ *
        }
    if$
    extra.label *
}

FUNCTION {format.btitle}
{ title emphasize
}

FUNCTION {tie.or.space.connect}
{ duplicate$ text.length$ #3 <
        { "~" }
        { " " }
    if$
    swap$ * *
}

FUNCTION {either.or.check}
{ empty$
        'pop$
        { "can't use both " swap$ * " fields in " * cite$ * warning$ }
    if$
}

FUNCTION {format.bvolume}
{ volume empty$
        { "" }
        { "volume" volume tie.or.space.connect
            series empty$
                'skip$
                { " of " * series emphasize * }
            if$
            "volume and number" number either.or.check
        }
    if$
}

FUNCTION {format.number.series}
{ volume empty$
        { number empty$
                { series field.or.null }
                { output.state mid.sentence =
                        { "number" }
                        { "Number" }
                    if$
                    number tie.or.space.connect
                    series empty$
                        { "there's a number but no series in " cite$ * warning$ }
                        { " in " * series * }
                    if$
                }
            if$
        }
        { "" }
    if$
}

FUNCTION {format.edition}
{ edition empty$
        { "" }
        { output.state mid.sentence =
                { edition "l" change.case$ " edition" * }
                { edition "t" change.case$ " 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
                { "pages" pages n.dashify tie.or.space.connect }
                { "page" pages tie.or.space.connect }
            if$
        }
    if$
}

FUNCTION {format.eid}
{ eid empty$
        { "" }
        { "art." eid tie.or.space.connect }
    if$
}

FUNCTION {format.vol.num.pages}
{ "\emph{" volume * "}" *
%field.or.null
    number empty$
        'skip$
        { "\penalty0 (\emph{" number * "})" * *
            volume empty$
                { "there's a number but no volume in " cite$ * warning$ }
                'skip$
            if$
        }
    if$
    pages empty$
        'skip$
        { duplicate$ empty$
                { pop$ format.pages }
                { ", \penalty0 " * pages n.dashify * }
            if$
        }
    if$
}

FUNCTION {format.vol.num.eid}
{ volume field.or.null
    number empty$
        'skip$
        { "\penalty0 (" number * ")" * *
            volume empty$
                { "there's a number but no volume in " cite$ * warning$ }
                'skip$
            if$
        }
    if$
    eid empty$
        'skip$
        { duplicate$ empty$
                { pop$ format.eid }
                { ", \penalty0 " * eid * }
            if$
        }
    if$
}

FUNCTION {format.chapter.pages}
{ chapter empty$
        'format.pages
        { type empty$
                { "chapter" }
                { type "l" change.case$ }
            if$
            chapter tie.or.space.connect
            pages empty$
                'skip$
                { ", " * format.pages * }
            if$
        }
    if$
}

FUNCTION {format.in.ed.booktitle}
{ booktitle empty$
        { "" }
        { editor empty$
                { "In " booktitle emphasize * }
                { "In " format.editors * ", " * booktitle emphasize * }
            if$
        }
    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 {format.tr.number}
{ type empty$
        { "Technical Report" }
        'type
    if$
    number empty$
        { "t" change.case$ }
        { number tie.or.space.connect }
    if$
}

FUNCTION {format.article.crossref}
{ key empty$
        { journal empty$
                { "need key or journal for " cite$ * " to crossref " * crossref *
                    warning$
                    ""
                }
                { "In \emph{" journal * "}" * }
            if$
        }
        { "In " }
    if$
    " \citet{" * crossref * "}" *
}

FUNCTION {format.book.crossref}
{ volume empty$
        { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
            "In "
        }
        { "Volume" volume tie.or.space.connect
            " of " *
        }
    if$
    editor empty$
    editor field.or.null author field.or.null =
    or
        { key empty$
                { series empty$
                        { "need editor, key, or series for " cite$ * " to crossref " *
                            crossref * warning$
                            "" *
                        }
                        { "\emph{" * series * "}" * }
                    if$
                }
                'skip$
            if$
        }
        'skip$
    if$
    " \citet{" * crossref * "}" *
}

FUNCTION {format.incoll.inproc.crossref}
{ editor empty$
    editor field.or.null author field.or.null =
    or
        { key empty$
                { booktitle empty$
                        { "need editor, key, or booktitle for " cite$ * " to crossref " *
                            crossref * warning$
                            ""
                        }
                        { "In \emph{" booktitle * "}" * }
                    if$
                }
                { "In " }
            if$
        }
        { "In " }
    if$
    " \citet{" * crossref * "}" *
}

FUNCTION {article}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    crossref missing$
        { journal emphasize "journal" output.check.nopunct
            year enbold "year" output.check.nopunct
            eid empty$
                { format.vol.num.pages output }
                { format.vol.num.eid output }
            if$
        }
        { format.article.crossref output.nonnull
            eid empty$
                { format.pages output }
                { format.eid output }
            if$
        }
    if$
    new.block
    note output
    fin.entry
}

FUNCTION {book}
{ output.bibitem
    author empty$
        { format.editors "author and editor" output.check
            editor format.key output
        }
        { format.authors output.nonnull
            crossref missing$
                { "author and editor" editor either.or.check }
                'skip$
            if$
        }
    if$
    new.block
    format.btitle "title" output.check
    crossref missing$
        { format.bvolume output
            new.block
            publisher "publisher" output.check
            address output
            year enbold "year" output.check.nopunct
            new.sentence
            format.number.series output
            new.sentence
        }
        { new.block
            format.book.crossref output.nonnull
        }
    if$
    format.edition output
    new.block
    note output
    fin.entry
}

FUNCTION {booklet}
{ output.bibitem
    format.authors output
    author format.key output
    new.block
    format.title "title" output.check
    howpublished address new.block.checkb
    howpublished output
    address output
    format.date output
    format.isbn output
    format.doi output
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {inbook}
{ output.bibitem
    author empty$
        { format.editors "author and editor" output.check
            editor format.key output
        }
        { format.authors output.nonnull
            crossref missing$
                { "author and editor" editor either.or.check }
                'skip$
            if$
        }
    if$
    new.block
    format.btitle "title" output.check
    crossref missing$
        { format.bvolume output
            format.chapter.pages "chapter and pages" output.check
            new.block
            format.number.series output
            new.sentence
            publisher "publisher" output.check
            address output
        }
        { format.chapter.pages "chapter and pages" output.check
            new.block
            format.book.crossref output.nonnull
        }
    if$
    format.edition output
    format.date "year" output.check
    format.isbn output
    format.doi output
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {incollection}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    format.title "title" output.check
    new.block
    crossref missing$
        { format.in.ed.booktitle "booktitle" output.check
            format.bvolume output
            format.number.series output
            format.chapter.pages output
            new.sentence
            publisher "publisher" output.check
            address output
            format.edition output
            format.date "year" output.check
        }
        { format.incoll.inproc.crossref output.nonnull
            format.chapter.pages output
        }
    if$
    format.isbn output
    format.doi output
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {inproceedings}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    format.title "title" output.check
    new.block
    crossref missing$
        { format.in.ed.booktitle "booktitle" output.check
            format.bvolume output
            format.number.series output
            format.pages output
            address empty$
                { organization publisher new.sentence.checkb
                    organization output
                    publisher output
                    format.date "year" output.check
                }
                { address output.nonnull
                    format.date "year" output.check
                    new.sentence
                    organization output
                    publisher output
                }
            if$
        }
        { format.incoll.inproc.crossref output.nonnull
            format.pages output
        }
    if$
    format.isbn output
    format.doi output
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {conference} { inproceedings }

FUNCTION {manual}
{ output.bibitem
    format.authors output
    author format.key output
    new.block
    format.btitle "title" output.check
    organization address new.block.checkb
    organization output
    address output
    format.edition output
    format.date output
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {mastersthesis}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    format.title "title" output.check
    new.block
    "Master's thesis" format.thesis.type output.nonnull
    school "school" output.check
    address output
    format.date "year" output.check
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {misc}
{ output.bibitem
    format.authors output
    author format.key output
    title howpublished new.block.checkb
    format.title output
    howpublished new.block.checka
    howpublished output
    format.date output
    format.issn output
    format.url output
    new.block
    note output
    fin.entry
    empty.misc.check
}

FUNCTION {phdthesis}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    format.btitle "title" output.check
    new.block
    "PhD thesis" format.thesis.type output.nonnull
    school "school" output.check
    address output
    format.date "year" output.check
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {proceedings}
{ output.bibitem
    format.editors output
    editor format.key output
    new.block
    format.btitle "title" output.check
    format.bvolume output
    format.number.series output
    address output
    format.date "year" output.check
    new.sentence
    organization output
    publisher output
    format.isbn output
    format.doi output
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {techreport}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    format.title "title" output.check
    new.block
    format.tr.number output.nonnull
    institution "institution" output.check
    address output
    format.date "year" output.check
    format.url output
    new.block
    note output
    fin.entry
}

FUNCTION {unpublished}
{ output.bibitem
    format.authors "author" output.check
    author format.key output
    new.block
    format.title "title" output.check
    new.block
    note "note" output.check
    format.date output
    format.url output
    fin.entry
}

FUNCTION {default.type} { misc }

MACRO {jan} {"January"}
MACRO {feb} {"February"} 
MACRO {mar} {"March"} 
MACRO {apr} {"April"} 
MACRO {may} {"May"} 
MACRO {jun} {"June"} 
MACRO {jul} {"July"} 
MACRO {aug} {"August"} 
MACRO {sep} {"September"} 
MACRO {oct} {"October"} 
MACRO {nov} {"November"} 
MACRO {dec} {"December"}

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 {format.lab.names}
{ 's :=
    s #1 "{vv~}{ll}" format.name$
    s num.names$ duplicate$
    #2 >
        { pop$ " et~al." * }
        { #2 <
                'skip$
                { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
                        { " et~al." * }
                        { " and " * s #2 "{vv~}{ll}" format.name$ * }
                    if$
                }
            if$
        }
    if$
}

FUNCTION {author.key.label}
{ author empty$
        { key empty$
                { cite$ #1 #3 substring$ }
                'key
            if$
        }
        { author format.lab.names }
    if$
}

FUNCTION {author.editor.key.label}
{ author empty$
        { editor empty$
                { key empty$
                        { cite$ #1 #3 substring$ }
                        'key
                    if$
                }
                { editor format.lab.names }
            if$
        }
        { author format.lab.names }
    if$
}

FUNCTION {author.key.organization.label}
{ author empty$
        { key empty$
                { organization empty$
                        { cite$ #1 #3 substring$ }
                        { "The " #4 organization chop.word #3 text.prefix$ }
                    if$
                }
                'key
            if$
        }
        { author format.lab.names }
    if$
}

FUNCTION {editor.key.organization.label}
{ editor empty$
        { key empty$
                { organization empty$
                        { cite$ #1 #3 substring$ }
                        { "The " #4 organization chop.word #3 text.prefix$ }
                    if$
                }
                'key
            if$
        }
        { editor format.lab.names }
    if$
}

FUNCTION {calc.short.authors}
{ type$ "book" =
    type$ "inbook" =
    or
        'author.editor.key.label
        { type$ "proceedings" =
                'editor.key.organization.label
                { type$ "manual" =
                        'author.key.organization.label
                        'author.key.label
                    if$
                }
            if$
        }
    if$
    'short.list :=
}

FUNCTION {calc.label}
{ calc.short.authors
    short.list
    "("
    *
    year duplicate$ empty$
    short.list key field.or.null = or
         { pop$ "" }
         'skip$
    if$
    *
    'label :=
}

INTEGERS { seq.num }

FUNCTION {init.seq}
{ #0 'seq.num :=}

EXECUTE {init.seq}

FUNCTION {int.to.fix}
{ "000000000" swap$ int.to.str$ *
    #-1 #10 substring$
}

FUNCTION {presort}
{ calc.label
    label sortify
    "       "
    *
    seq.num #1 + 'seq.num :=
    seq.num int.to.fix
    'sort.label :=
    sort.label *
    #1 entry.max$ substring$
    'sort.key$ :=
}

ITERATE {presort}

SORT

STRINGS { longest.label last.label next.extra }

INTEGERS { longest.label.width last.extra.num number.label }

FUNCTION {initialize.longest.label}
{ "" 'longest.label :=
    #0 int.to.chr$ 'last.label :=
    "" 'next.extra :=
    #0 'longest.label.width :=
    #0 'last.extra.num :=
    #0 'number.label :=
}

FUNCTION {forward.pass}
{ last.label label =
        { last.extra.num #1 + 'last.extra.num :=
            last.extra.num int.to.chr$ 'extra.label :=
        }
        { "a" chr.to.int$ 'last.extra.num :=
            "" 'extra.label :=
            label 'last.label :=
        }
    if$
    number.label #1 + 'number.label :=
}

FUNCTION {reverse.pass}
{ next.extra "b" =
        { "a" 'extra.label := }
        'skip$
    if$
    extra.label 'next.extra :=
    extra.label
    duplicate$ empty$
        'skip$
        { "{\natexlab{" swap$ * "}}" * }
    if$
    'extra.label :=
    label extra.label * 'label :=
}

EXECUTE {initialize.longest.label}

ITERATE {forward.pass}

REVERSE {reverse.pass}

FUNCTION {bib.sort.order}
{ sort.label    'sort.key$ :=
}

ITERATE {bib.sort.order}

SORT

FUNCTION {begin.bib}
{    preamble$ empty$
        'skip$
        { preamble$ write$ newline$ }
    if$
    "\begin{thebibliography}{" number.label int.to.str$ * "}" *
    write$ newline$
    "\providecommand{\natexlab}[1]{#1}"
    write$ newline$
    "\providecommand{\url}[1]{\texttt{#1}}"
    write$ newline$
    "\expandafter\ifx\csname urlstyle\endcsname\relax"
    write$ newline$
    "   \providecommand{\doi}[1]{doi: #1}\else"
    write$ newline$
    "   \providecommand{\doi}{doi: \begingroup \urlstyle{rm}\Url}\fi"
    write$ newline$
}

EXECUTE {begin.bib}

EXECUTE {init.state.consts}

ITERATE {call.type$}

FUNCTION {end.bib}
{ newline$
    "\end{thebibliography}" write$ newline$
}

EXECUTE {end.bib}
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.