量子技术进展的参考格式

量子技术进展的参考格式

我正在向 Wiley 杂志《Advanced Quantum Technologies》投稿一篇文章(https://onlinelibrary.wiley.com/journal/25119044)。我使用 LaTeX 和 BibTeX 来准备参考文献。不幸的是,该期刊似乎更倾向于使用 Word 提交的文章,因此它不提供任何有用的样式文件。我可以满足他们的大部分要求,但参考文献必须以相当具体的方式格式化:

[1] AB 第一作者,CD 第二作者,EF 最后作者,期刊名称 体积, 页。

期刊名称和卷号应为斜体;年份应为粗体。

有人知道我该如何管理这个,而不需要编写我自己的.bst文件吗?

答案1

以下是一份提案,其中@article@book(至少没有编辑)的格式如下:作者指南

它基于unsrtnat.bst与包一起使用的文件natbib

所做变更的摘要如下:

  • 添加FUNCTION {output.nonnull.nopunct}于第 114 行
  • FUNCTION {output.check.nopunct}在第 152 行添加
  • 添加FUNCTION {enbold}于第 248 行
  • "{ff~}{vv~}{ll}{, jj}""{f.~}{vv~}{ll}{, jj}"第 263 行改为
  • " and "", "第 266 行改为
  • "\penalty0 (" number * ")""\penalty0 (\emph{" number * "})"第 581 行改为
  • ":\penalty0 "", \penalty0 "第 592 行改为
  • FUNCTION {article}第 741 行 进行了大量编辑
  • FUNCTION {book}第 766 行进行了大量编辑

整个文件发布在第二个答案中,因为它不适合这个答案的有限大小。它也发布在此网址,上面引用的行号是相对于此文件的,其中包含所有原始注释。

请注意:

  • 我隐藏了文章标题,以及超链接/电子参考/doi/issn,但如果需要,您可以通过从原文复制粘贴的方式重新引入它们unsrtnat.bst
  • 如果您需要的话,还会为@book编辑器等添加类似的更改。@inbook
  • 我保留了number括号中的音量,但您可以轻松地将其隐藏起来。
  • 我在期刊名称和年份之间留了一个空格,因为它既不美观,又难以抑制。
  • 我没有解决“期刊标题应按照“化学文摘服务源索引”缩写”的要求,因为这是一个完全不同的问题,可以通过不同的方式实现,值得另一个问题。

带有参考书目的 MWE(MWEB)如下:

%-- 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}

结果如下:

mweb 的结果

答案2

unsrtnat-AQT.bst文件:

%% 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}

答案3

自 2023 年起,该期刊的作者指南链接到包含LaTeX 模板。此档案包含一个名为的 BibTeX 样式文件MSP.bst,可生成所需格式的引文。示例结果:

在此处输入图片描述

相关内容