research-paper-writing

Write ML papers for NeurIPS/ICML/ICLR: design→submit.

  • Research
  • Paper Writing
  • Experiments
  • ML
  • AI
  • NeurIPS
  • ICML
  • ICLR
  • ACL
  • AAAI
  • COLM
  • LaTeX
  • Citations
  • Statistical Analysis

Declared platforms: linux · macos

Install
npx skills add 'https://github.com/NousResearch/hermes-agent/tree/main/optional-skills/research/research-paper-writing'
Download bundle ↓
main · 24fd22bScanned 2026-09-15

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗

templates/acl/acl_natbib.bst

templates/acl/acl_natbib.bstBrowse 56 files
View on GitHub
← Back to SKILL.md
%%% Modification of BibTeX style file acl_natbib_nourl.bst%%% ... by urlbst, version 0.9.1 (marked with "% urlbst")%%% See <https://purl.org/nxg/dist/urlbst> and repository <https://heptapod.host/nxg/urlbst>%%% Modifications Copyright 2002–23, Norman Gray,%%% and distributed under the terms of the LPPL; see README for discussion.%%%%%% Added webpage entry type, and url and lastchecked fields.%%% Added eprint support.%%% Added DOI support.%%% Added PUBMED support.%%% Added hyperref support.%%% Original headers follow... %%%% This is file `acl_natbib_basic.bst',%% generated with the docstrip utility.%%%% The original source files were:%%%% merlin.mbs  (with options: `ay,nat,pres,ed-au,keyxyr,blkyear,dt-beg,yr-per,note-yr,num-xser,pre-edn,xedn,nfss')%% ----------------------------------------%% *** Intended for ACL conferences ***%% %% Copyright 1994-2011 Patrick W Daly % =============================================================== % IMPORTANT NOTICE: % This bibliographic style (bst) file has been generated from one or % more master bibliographic style (mbs) files, listed above. % % This generated file can be redistributed and/or modified under the terms % of the LaTeX Project Public License Distributed from CTAN % archives in directory macros/latex/base/lppl.txt; either % version 1 of the License, or any later version. % =============================================================== % Name and version information of the main mbs file: % \ProvidesFile{merlin.mbs}[2011/11/18 4.33 (PWD, AO, DPC)] %   For use with BibTeX version 0.99a or later %------------------------------------------------------------------- % This bibliography style file is intended for texts in ENGLISH % This is an author-year citation style bibliography. As such, it is % non-standard LaTeX, and requires a special package file to function properly. % Such a package is    natbib.sty   by Patrick W. Daly % The form of the \bibitem entries is %   \bibitem[Jones et al.(1990)]{key}... %   \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... % The essential feature is that the label (the part in brackets) consists % of the author names, as they should appear in the citation, with the year % in parentheses following. There must be no space before the opening % parenthesis! % With natbib v5.3, a full list of authors may also follow the year. % In natbib.sty, it is possible to define the type of enclosures that is % really wanted (brackets or parentheses), but in either case, there must % be parentheses in the label. % The \cite command functions as follows: %   \citet{key} ==>>                Jones et al. (1990) %   \citet*{key} ==>>               Jones, Baker, and Smith (1990) %   \citep{key} ==>>                (Jones et al., 1990) %   \citep*{key} ==>>               (Jones, Baker, and Smith, 1990) %   \citep[chap. 2]{key} ==>>       (Jones et al., 1990, chap. 2) %   \citep[e.g.][]{key} ==>>        (e.g. Jones et al., 1990) %   \citep[e.g.][p. 32]{key} ==>>   (e.g. Jones et al., 1990, p. 32) %   \citeauthor{key} ==>>           Jones et al. %   \citeauthor*{key} ==>>          Jones, Baker, and Smith %   \citeyear{key} ==>>             1990 %--------------------------------------------------------------------- %% 2025 modified to truncate author lists of more than 20 authors ENTRY  { address    archivePrefix    author    booktitle    chapter    edition    editor    eid    eprint    eprinttype % = archivePrefix    howpublished    institution    journal    key    month    note    number    organization    pages    publisher    school    series    title    type    volume    year    doi % urlbst    pubmed % urlbst    url % urlbst    lastchecked % urlbst  }  {}  { label extra.label sort.label short.list }INTEGERS { output.state before.all mid.sentence after.sentence after.block }% urlbst...% urlbst constants and state variablesSTRINGS { urlintro  eprinturl eprintprefix doiprefix doiurl pubmedprefix pubmedurl  citedstring onlinestring linktextstring  openinlinelink closeinlinelink }INTEGERS { hrefform doiform inlinelinks makeinlinelink  addeprints adddoi addpubmed }FUNCTION {init.urlbst.variables}{  % The following constants may be adjusted by hand, if desired   % The first set allow you to enable or disable certain functionality.  #1 'addeprints :=	% 0=no eprints; 1=include eprints  #2 'hrefform :=	% 0=no crossrefs; 1=hypertex hrefs; 2=hyperref hrefs  #1 'inlinelinks :=	% 0=URLs explicit; 1=URLs attached to titles  #1 'adddoi :=	% 0=no DOI resolver; 1=include it  #1 'addpubmed :=	% 0=no PUBMED resolver; 1=include it  #0 'doiform :=	% 0=with href; 1=with \doi{}   % String constants, which you _might_ want to tweak.  "online" 'onlinestring :=	% label that a resource is online  "[link]" 'linktextstring :=	% anonymous link text  "http://www.ncbi.nlm.nih.gov/pubmed/" 'pubmedurl :=	% prefix to make URL from PUBMED  "https://doi.org/" 'doiurl :=	% prefix to make URL from DOI  "doi:" 'doiprefix :=	% printed text to introduce DOI  "https://arxiv.org/abs/" 'eprinturl :=	% prefix to make URL from eprint ref  "cited " 'citedstring :=	% label in "lastchecked" remark  "arXiv:" 'eprintprefix :=	% text prefix printed before eprint ref  "PMID:" 'pubmedprefix :=	% text prefix printed before PUBMED ref  "URL: " 'urlintro :=	% text prefix before URL   % The following are internal state variables, not configuration constants,  % so they shouldn't be fiddled with.  #0 'makeinlinelink :=     % state variable managed by possibly.setup.inlinelink  "" 'openinlinelink :=     % ditto  "" 'closeinlinelink :=    % ditto}INTEGERS {  bracket.state  outside.brackets  open.brackets  within.brackets  close.brackets}% ...urlbst to hereFUNCTION {init.state.consts}{ #0 'outside.brackets := % urlbst...  #1 'open.brackets :=  #2 'within.brackets :=  #3 'close.brackets := % ...urlbst to here   #0 'before.all :=  #1 'mid.sentence :=  #2 'after.sentence :=  #3 'after.block :=}STRINGS { s t}% urlbstFUNCTION {output.nonnull.original}{ '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} % urlbst...% Minimal DOI parsing.% Given a DOI on the stack, check whether it starts with 'doiurl' or not.% In either case, leave on the stack first a DOI with, and then a DOI without, the URL prefix.FUNCTION {parse.doi}{  #1 doiurl text.length$ substring$  doiurl =    { doi      doi doiurl text.length$ #1 + #999 substring$ }    { doiurl doi *      doi }  if$}% The following three functions are for handling inlinelink.  They wrap% a block of text which is potentially output with write$ by multiple% other functions, so we don't know the content a priori.% They communicate between each other using the variables makeinlinelink% (which is true if a link should be made), and closeinlinelink (which holds% the string which should close any current link.  They can be called% at any time, but start.inlinelink will be a no-op unless something has% previously set makeinlinelink true, and the two ...end.inlinelink functions% will only do their stuff if start.inlinelink has previously set% closeinlinelink to be non-empty.% (thanks to 'ijvm' for suggested code here)FUNCTION {uand}{ 'skip$ { pop$ #0 } if$ } % 'and' (which isn't defined at this point in the file)FUNCTION {possibly.setup.inlinelink}{ makeinlinelink hrefform #0 > uand    { doi empty$ adddoi uand        { pubmed empty$ addpubmed uand            { eprint empty$ addeprints uand                { url empty$                    { "" }                    { url }                  if$ }                { eprinturl eprint * }              if$ }            { pubmedurl pubmed * }          if$ }%        { doiurl doi * }        { doi empty$            { "XXX" }            { doi parse.doi pop$ }          if$        }      if$      % an appropriately-formatted URL is now on the stack      hrefform #1 = % hypertex        { "\special {html:<a href=" quote$ * swap$ * quote$ * "> }{" * 'openinlinelink :=          "\special {html:</a>}" 'closeinlinelink := }        { "\href {" swap$ * "} {" * 'openinlinelink := % hrefform=#2 -- hyperref          % the space between "} {" matters: a URL of just the right length can cause "\% newline em"          "}" 'closeinlinelink := }      if$      #0 'makeinlinelink :=      }    'skip$  if$ % makeinlinelink}FUNCTION {add.inlinelink}{ openinlinelink empty$    'skip$    { openinlinelink swap$ * closeinlinelink *      "" 'openinlinelink :=      }  if$}FUNCTION {output.nonnull}{ % Save the thing we've been asked to output  's :=  % If the bracket-state is close.brackets, then add a close-bracket to  % what is currently at the top of the stack, and set bracket.state  % to outside.brackets  bracket.state close.brackets =    { "]" *      outside.brackets 'bracket.state :=    }    'skip$  if$  bracket.state outside.brackets =    { % We're outside all brackets -- this is the normal situation.      % Write out what's currently at the top of the stack, using the      % original output.nonnull function.      s      add.inlinelink      output.nonnull.original % invoke the original output.nonnull    }    { % Still in brackets.  Add open-bracket or (continuation) comma, add the      % new text (in s) to the top of the stack, and move to the close-brackets      % state, ready for next time (unless inbrackets resets it).  If we come      % into this branch, then output.state is carefully undisturbed.      bracket.state open.brackets =        { " [" * }        { ", " * } % bracket.state will be within.brackets      if$      s *      close.brackets 'bracket.state :=    }  if$} % Call this function just before adding something which should be presented in% brackets.  bracket.state is handled specially within output.nonnull.FUNCTION {inbrackets}{ bracket.state close.brackets =    { within.brackets 'bracket.state := } % reset the state: not open nor closed    { open.brackets 'bracket.state := }  if$} FUNCTION {format.lastchecked}{ lastchecked empty$    { "" }    { inbrackets citedstring lastchecked * }  if$}% ...urlbst to hereFUNCTION {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.original} % urlbst (renamed from fin.entry, so it can be wrapped below){ 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 {add.blank}{  " " * before.all 'output.state :=} FUNCTION {date.block}{  new.block} FUNCTION {not}{   { #0 }    { #1 }  if$}FUNCTION {and}{   'skip$    { pop$ #0 }  if$}FUNCTION {or}{   { pop$ #1 }    'skip$  if$}FUNCTION {new.block.checkb}{ empty$  swap$ empty$  and    'skip$    'new.block  if$}FUNCTION {field.or.null}{ duplicate$ empty$    { pop$ "" }    'skip$  if$}FUNCTION {emphasize}{ duplicate$ empty$    { pop$ "" }    { "\emph{" swap$ * "}" * }  if$}FUNCTION {tie.or.space.prefix} % puts ~ before the preceding part if it is of length <3{ duplicate$ text.length$ #3 <    { "~" }    { " " }  if$  swap$} FUNCTION {capitalize}{ "u" change.case$ "t" change.case$ } FUNCTION {space.word}{ " " swap$ * " " * } % Here are the language-specific definitions for explicit words. % Each function has a name bbl.xxx where xxx is the English word. % The language selected here is ENGLISHFUNCTION {bbl.and}{ "and"} FUNCTION {bbl.etal}{ "et~al." } FUNCTION {bbl.editors}{ "editors" } FUNCTION {bbl.editor}{ "editor" } FUNCTION {bbl.edby}{ "edited by" } FUNCTION {bbl.edition}{ "edition" } FUNCTION {bbl.volume}{ "volume" } FUNCTION {bbl.of}{ "of" } FUNCTION {bbl.number}{ "number" } FUNCTION {bbl.nr}{ "no." } FUNCTION {bbl.in}{ "in" } FUNCTION {bbl.pages}{ "pages" } FUNCTION {bbl.page}{ "page" } FUNCTION {bbl.chapter}{ "chapter" } FUNCTION {bbl.techrep}{ "Technical Report" } FUNCTION {bbl.mthesis}{ "Master's thesis" } FUNCTION {bbl.phdthesis}{ "Ph.D. thesis" } 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"} % bibinfo.check avoids acting on missing fields while bibinfo.warn will% issue a warning message if a missing field is detected. Prior to calling% the bibinfo functions, the user should push the field value and then its% name string, in that order.FUNCTION {bibinfo.check}{ swap$  duplicate$ missing$    {      pop$ pop$      ""    }    { duplicate$ empty$        {          swap$ pop$        }        { swap$          pop$        }      if$    }  if$}FUNCTION {bibinfo.warn}{ swap$  duplicate$ missing$    {      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$      ""    }    { duplicate$ empty$        {          swap$ "empty " swap$ * " in " * cite$ * warning$        }        { swap$          pop$        }      if$    }  if$}INTEGERS { nameptr namesleft numnames }  STRINGS  { bibinfo} FUNCTION {format.names}{ 'bibinfo :=  duplicate$ empty$ 'skip$ {  's :=  "" 't :=  #1 'nameptr :=  s num.names$ 'numnames :=  numnames 'namesleft :=    { namesleft #0 > }    { s nameptr      "{ff~}{vv~}{ll}{, jj}" % first name first for all authors      format.name$      bibinfo bibinfo.check      't :=      nameptr #1 >        {          nameptr #19	% truncate after 19 names          #1 + =          numnames #20	% if there are more than 20 names          > and            { "others" 't :=              #1 'namesleft := }            'skip$          if$		% end truncation of long list of names          namesleft #1 >            { ", " * t * }            {              s nameptr "{ll}" format.name$ duplicate$ "others" =                { 't := }                { pop$ }              if$              numnames #2 >                { "," * }                'skip$              if$              t "others" =                {		  %%                 " " * bbl.etal *		  % compute the number of remaining authors		  " and " * numnames nameptr - #1 + int.to.str$ * " others" *                }                {                  bbl.and                  space.word * t *                }              if$            }          if$        }        't      if$      nameptr #1 + 'nameptr :=      namesleft #1 - 'namesleft :=    }  while$  } if$}FUNCTION {format.names.ed}{  format.names}FUNCTION {format.key}{ empty$    { key field.or.null }    { "" }  if$} FUNCTION {format.authors}{ author "author" format.names}FUNCTION {get.bbl.editor}{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } FUNCTION {format.editors}{ editor "editor" format.names duplicate$ empty$ 'skip$    {      "," *      " " *      get.bbl.editor      *    }  if$}FUNCTION {format.note}{ note empty$    { "" }    { note #1 #1 substring$      duplicate$ "{" =        'skip$        { output.state mid.sentence =          { "l" }          { "u" }        if$        change.case$        }      if$      note #2 global.max$ substring$ * "note" bibinfo.check    }  if$} FUNCTION {format.title}{ title  duplicate$ empty$ 'skip$    { "t" change.case$ }  if$  "title" bibinfo.check}FUNCTION {format.full.names}{'s := "" 't :=  #1 'nameptr :=  s num.names$ 'numnames :=  numnames 'namesleft :=    { namesleft #0 > }    { s nameptr      "{vv~}{ll}" format.name$      't :=      nameptr #1 >        {          namesleft #1 >            { ", " * t * }            {              s nameptr "{ll}" format.name$ duplicate$ "others" =                { 't := }                { pop$ }              if$              t "others" =                {                  " " * bbl.etal *                }                {                  numnames #2 >                    { "," * }                    'skip$                  if$                  bbl.and                  space.word * t *                }              if$            }          if$        }        't      if$      nameptr #1 + 'nameptr :=      namesleft #1 - 'namesleft :=    }  while$} FUNCTION {author.editor.key.full}{ author empty$    { editor empty$        { key empty$            { cite$ #1 #3 substring$ }            'key          if$        }        { editor format.full.names }      if$    }    { author format.full.names }  if$} FUNCTION {author.key.full}{ author empty$    { key empty$         { cite$ #1 #3 substring$ }          'key      if$    }    { author format.full.names }  if$} FUNCTION {editor.key.full}{ editor empty$    { key empty$         { cite$ #1 #3 substring$ }          'key      if$    }    { editor format.full.names }  if$} FUNCTION {make.full.names}{ type$ "book" =  type$ "inbook" =  or    'author.editor.key.full    { type$ "proceedings" =        'editor.key.full        'author.key.full      if$    }  if$} FUNCTION {output.bibitem.original} % urlbst (renamed from output.bibitem, so it can be wrapped below){ 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 {word.in}{ bbl.in capitalize  " " * } FUNCTION {format.date}{ year "year" bibinfo.check duplicate$ empty$    {    }    'skip$  if$  extra.label *  before.all 'output.state :=  after.sentence 'output.state :=}FUNCTION {format.btitle}{ title "title" bibinfo.check  duplicate$ empty$ 'skip$    {      emphasize    }  if$}FUNCTION {either.or.check}{ empty$    'pop$    { "can't use both " swap$ * " fields in " * cite$ * warning$ }  if$}FUNCTION {format.bvolume}{ volume empty$    { "" }    { bbl.volume volume tie.or.space.prefix      "volume" bibinfo.check * *      series "series" bibinfo.check      duplicate$ empty$ 'pop$        { swap$ bbl.of space.word * swap$          emphasize * }      if$      "volume and number" number either.or.check    }  if$}FUNCTION {format.number.series}{ volume empty$    { number empty$        { series field.or.null }        { series empty$            { number "number" bibinfo.check }            { output.state mid.sentence =                { bbl.number }                { bbl.number capitalize }              if$              number tie.or.space.prefix "number" bibinfo.check * *              bbl.in space.word *              series "series" bibinfo.check *            }          if$        }      if$    }    { "" }  if$} FUNCTION {format.edition}{ edition duplicate$ empty$ 'skip$    {      output.state mid.sentence =        { "l" }        { "t" }      if$ change.case$      "edition" bibinfo.check      " " * bbl.edition *    }  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 duplicate$ empty$ 'skip$    { duplicate$ multi.page.check        {          bbl.pages swap$          n.dashify        }        {          bbl.page swap$        }      if$      tie.or.space.prefix      "pages" bibinfo.check      * *    }  if$}FUNCTION {format.journal.pages}{ pages duplicate$ empty$ 'pop$    { swap$ duplicate$ empty$        { pop$ pop$ format.pages }        {          ":" *          swap$          n.dashify          "pages" bibinfo.check          *        }      if$    }  if$}FUNCTION {format.journal.eid}{ eid "eid" bibinfo.check  duplicate$ empty$ 'pop$    { swap$ duplicate$ empty$ 'skip$      {          ":" *      }      if$      swap$ *    }  if$}FUNCTION {format.vol.num.pages}{ volume field.or.null  duplicate$ empty$ 'skip$    {      "volume" bibinfo.check    }  if$  number "number" bibinfo.check duplicate$ empty$ 'skip$    {      swap$ duplicate$ empty$        { "there's a number but no volume in " cite$ * warning$ }        'skip$      if$      swap$      "(" swap$ * ")" *    }  if$ *  eid empty$    { format.journal.pages }    { format.journal.eid }  if$} FUNCTION {format.chapter}{ chapter empty$    'format.pages    { type empty$        { bbl.chapter }        { type "l" change.case$          "type" bibinfo.check        }      if$      chapter tie.or.space.prefix      "chapter" bibinfo.check      * *    }  if$} FUNCTION {format.chapter.pages}{ chapter empty$    'format.pages    { type empty$        { bbl.chapter }        { type "l" change.case$          "type" bibinfo.check        }      if$      chapter tie.or.space.prefix      "chapter" bibinfo.check      * *      pages empty$        'skip$        { ", " * format.pages * }      if$    }  if$} FUNCTION {format.booktitle}{  booktitle "booktitle" bibinfo.check  emphasize}FUNCTION {format.in.booktitle}{ format.booktitle duplicate$ empty$ 'skip$    {      word.in swap$ *    }  if$}FUNCTION {format.in.ed.booktitle}{ format.booktitle duplicate$ empty$ 'skip$    {      editor "editor" format.names.ed duplicate$ empty$ 'pop$        {          "," *          " " *          get.bbl.editor          ", " *          * swap$          * }      if$      word.in swap$ *    }  if$}FUNCTION {format.thesis.type}{ type duplicate$ empty$    'pop$    { swap$ pop$      "t" change.case$ "type" bibinfo.check    }  if$}FUNCTION {format.tr.number}{ number "number" bibinfo.check  type duplicate$ empty$    { pop$ bbl.techrep }    'skip$  if$  "type" bibinfo.check  swap$ duplicate$ empty$    { pop$ "t" change.case$ }    { tie.or.space.prefix * * }  if$}FUNCTION {format.article.crossref}{  word.in  " \cite{" * crossref * "}" *}FUNCTION {format.book.crossref}{ volume duplicate$ empty$    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$      pop$ word.in    }    { bbl.volume      capitalize      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *    }  if$  " \cite{" * crossref * "}" *}FUNCTION {format.incoll.inproc.crossref}{  word.in  " \cite{" * crossref * "}" *}FUNCTION {format.org.or.pub}{ 't :=  ""  address empty$ t empty$ and    'skip$    {      t empty$        { address "address" bibinfo.check *        }        { t *          address empty$            'skip$            { ", " * address "address" bibinfo.check * }          if$        }      if$    }  if$}FUNCTION {format.publisher.address}{ publisher "publisher" bibinfo.warn format.org.or.pub} FUNCTION {format.organization.address}{ organization "organization" bibinfo.check format.org.or.pub} FUNCTION {archiveprefix.or.eprinttype} % holder for eprinttype with archiveprefix precedence{  archiveprefix empty$  {    eprinttype empty$      { "" } % not using 'skip$ to reduce errors like "nothing to pop from stack"      { eprinttype }    if$  }  { archiveprefix }  if$} FUNCTION {output.eprint} % this is only used with the @misc record type (common for arXiv and other preprint server bibtex records){  eprint empty$    {% if eprint field is empty      publisher field.or.null "arXiv" = % field.or.null here helps when no publisher field in the record        { publisher " preprint" * } % add " preprint" to publisher with the idea that publisher is the name of the preprint server        { "" } % if publisher != "arXiv" then empty output      if$      emphasize % no output function after emphasize because nothing goes after this    }    {% if eprint field is not empty      archiveprefix.or.eprinttype empty$        { "" } % not using 'skip$ to reduce errors like "nothing to pop from stack"        {% if archiveprefix or eprinttype fields are not empty          journal empty$            { "Preprint" } % if journal field is empty: output just "Preprint" emphasized like a journal name            { journal } % if journal field is not empty, output it (takes precedence)          if$          emphasize output % emphasize what we formed before, setting output as a border to the subblock that follows with the comma delimiter          archiveprefix.or.eprinttype ":" * eprint * % subblock with eprinttype and eprint number        }      if$    }  if$} % urlbst...% Functions for making hypertext links.% In all cases, the stack has (link-text href-url)%% make 'null' specialsFUNCTION {make.href.null}{  pop$}% make hypertex specialsFUNCTION {make.href.hypertex}{  "\special {html:<a href=" quote$ *  swap$ * quote$ * "> }" * swap$ *  "\special {html:</a>}" *}% make hyperref specialsFUNCTION {make.href.hyperref}{  "\href {" swap$ * "} {\path{" * swap$ * "}}" *}FUNCTION {make.href}{ hrefform #2 =    'make.href.hyperref      % hrefform = 2    { hrefform #1 =        'make.href.hypertex  % hrefform = 1        'make.href.null      % hrefform = 0 (or anything else)      if$    }  if$} % If inlinelinks is true, then format.url should be a no-op, since it's% (a) redundant, and (b) could end up as a link-within-a-link.FUNCTION {format.url}{ inlinelinks #1 = url empty$ or   { "" }   { hrefform #1 =       { % special case -- add HyperTeX specials         urlintro "\url{" url * "}" * url make.href.hypertex * }       { urlintro "\url{" * url * "}" * }     if$   }  if$}FUNCTION {format.eprint}{ eprint empty$    { "" }    { eprintprefix eprint * eprinturl eprint * make.href }  if$} FUNCTION {format.doi}{ doi empty$    { "" }    { doi parse.doi % leaves "https://doi.org/DOI" DOI on the stack      's := 't :=      doiform #1 =        { "\doi{" s * "}" * }        { doiprefix s * t make.href }      if$    }  if$} FUNCTION {format.pubmed}{ pubmed empty$    { "" }    { pubmedprefix pubmed * pubmedurl pubmed * make.href }  if$} % Output a URL.  We can't use the more normal idiom (something like% `format.url output'), because the `inbrackets' within% format.lastchecked applies to everything between calls to `output',% so that `format.url format.lastchecked * output' ends up with both% the URL and the lastchecked in brackets.FUNCTION {output.url}{ url empty$    'skip$    { new.block      format.url output      format.lastchecked output    }  if$} FUNCTION {output.web.refs}{  new.block  inlinelinks    'skip$ % links were inline -- don't repeat them    { % If the generated DOI will be the same as the URL,      % then don't print the URL (thanks to Joseph Wright      % for (the original version of) this code,      % at http://tex.stackexchange.com/questions/5660)      adddoi          doi empty$ { "X" } { doi parse.doi pop$ } if$ % DOI URL to be generated          url empty$ { "Y" } { url } if$          % the URL, or "Y" if empty          =                                       % are the strings equal?          and        'skip$        { output.url }      if$      addeprints eprint empty$ not and        { format.eprint output.nonnull }        'skip$      if$      adddoi doi empty$ not and        { format.doi output.nonnull }        'skip$      if$      addpubmed pubmed empty$ not and        { format.pubmed output.nonnull }        'skip$      if$    }  if$} % Wrapper for output.bibitem.original.% If the URL field is not empty, set makeinlinelink to be true,% so that an inline link will be started at the next opportunityFUNCTION {output.bibitem}{ outside.brackets 'bracket.state :=  output.bibitem.original  inlinelinks url empty$ not doi empty$ not or pubmed empty$ not or eprint empty$ not or and    { #1 'makeinlinelink := }    { #0 'makeinlinelink := }  if$} % Wrapper for fin.entry.originalFUNCTION {fin.entry}{ output.web.refs  % urlbst  makeinlinelink       % ooops, it appears we didn't have a title for inlinelink    { possibly.setup.inlinelink % add some artificial link text here, as a fallback      linktextstring output.nonnull }    'skip$  if$  bracket.state close.brackets = % urlbst    { "]" * }    'skip$  if$  fin.entry.original} % Webpage entry type.% Title and url fields required;% author, note, year, month, and lastchecked fields optional% See references%   ISO 690-2 http://www.nlc-bnc.ca/iso/tc46sc9/standard/690-2e.htm%   http://www.classroom.net/classroom/CitingNetResources.html%   http://neal.ctstateu.edu/history/cite.html%   http://www.cas.usf.edu/english/walker/mla.html% for citation formats for web pages.FUNCTION {webpage}{ output.bibitem  author empty$    { editor empty$        'skip$  % author and editor both optional        { format.editors output.nonnull }      if$    }    { editor empty$        { format.authors output.nonnull }        { "can't use both author and editor fields in " cite$ * warning$ }      if$    }  if$  new.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$  format.title "title" output.check  inbrackets onlinestring output  new.block  year empty$    'skip$    { format.date "year" output.check }  if$  % We don't need to output the URL details ('lastchecked' and 'url'),  % because fin.entry does that for us, using output.web.refs.  The only  % reason we would want to put them here is if we were to decide that  % they should go in front of the rather miscellaneous information in 'note'.  new.block  note output  fin.entry}% ...urlbst to here  FUNCTION {article}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title "title" output.check  new.block  crossref missing$    {      journal      "journal" bibinfo.check      emphasize      "journal" output.check      possibly.setup.inlinelink format.vol.num.pages output% urlbst    }    { format.article.crossref output.nonnull      format.pages output    }  if$  new.block  format.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$  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.btitle "title" output.check  format.edition output  crossref missing$    { format.bvolume output      new.block      format.number.series output      new.sentence      format.publisher.address output    }    {      new.block      format.book.crossref output.nonnull    }  if$  new.block  format.note output  fin.entry}FUNCTION {booklet}{ output.bibitem  format.authors output  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title "title" output.check  new.block  howpublished "howpublished" bibinfo.check output  address "address" bibinfo.check output  new.block  format.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$  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.btitle "title" output.check  crossref missing$    {      format.edition output      format.bvolume output      format.chapter "chapter" output.check      new.block      format.number.series output      new.sentence      format.publisher.address output    }    {      format.chapter "chapter" output.check      new.block      format.book.crossref output.nonnull    }  if$  new.block  format.note output  fin.entry} FUNCTION {incollection}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title "title" output.check  new.block  crossref missing$    { format.in.ed.booktitle "booktitle" output.check      format.edition output      format.bvolume output      format.number.series output      format.chapter.pages output      new.sentence      format.publisher.address output    }    { format.incoll.inproc.crossref output.nonnull      format.chapter.pages output    }  if$  new.block  format.note output  fin.entry}FUNCTION {inproceedings}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title "title" output.check  new.block  crossref missing$    { format.in.booktitle "booktitle" output.check      format.bvolume output      format.number.series output      format.pages output      address "address" bibinfo.check output      new.sentence      organization "organization" bibinfo.check output      publisher "publisher" bibinfo.check output    }    { format.incoll.inproc.crossref output.nonnull      format.pages output    }  if$  new.block  format.note output  fin.entry}FUNCTION {conference} { inproceedings }FUNCTION {manual}{ output.bibitem  format.authors output  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.btitle "title" output.check  format.edition output  organization address new.block.checkb  organization "organization" bibinfo.check output  address "address" bibinfo.check output  new.block  format.note output  fin.entry} FUNCTION {mastersthesis}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title  "title" output.check  new.block  bbl.mthesis format.thesis.type output.nonnull  school "school" bibinfo.warn output  address "address" bibinfo.check output  month "month" bibinfo.check output  new.block  format.note output  fin.entry} FUNCTION {misc}{ output.bibitem  format.authors output  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title output  new.block  howpublished "howpublished" bibinfo.check output  new.block  output.eprint output  new.block  format.note output  fin.entry}FUNCTION {phdthesis}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.btitle  "title" output.check  new.block  bbl.phdthesis format.thesis.type output.nonnull  school "school" bibinfo.warn output  address "address" bibinfo.check output  new.block  format.note output  fin.entry} FUNCTION {presentation}{ output.bibitem  format.authors output  author format.key output  new.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title output  new.block  format.organization.address "organization and address" output.check  month "month" output.check  year "year" output.check  new.block  format.note output  new.sentence  type missing$ 'skip$  {"(" type capitalize * ")" * output}    if$  fin.entry} FUNCTION {proceedings}{ output.bibitem  format.editors output  editor format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.btitle "title" output.check  format.bvolume output  format.number.series output  new.sentence  publisher empty$    { format.organization.address output }    { organization "organization" bibinfo.check output      new.sentence      format.publisher.address output    }  if$  new.block  format.note output  fin.entry} FUNCTION {techreport}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title  "title" output.check  new.block  format.tr.number output.nonnull  institution "institution" bibinfo.warn output  address "address" bibinfo.check output  new.block  format.note output  fin.entry} FUNCTION {unpublished}{ output.bibitem  format.authors "author" output.check  author format.key output  format.date "year" output.check  date.block  title empty$ 'skip$ 'possibly.setup.inlinelink if$ % urlbst  format.title "title" output.check  new.block  format.note "note" output.check  fin.entry} FUNCTION {default.type} { misc }READFUNCTION {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 :=  "" 't :=  s #1 "{vv~}{ll}" format.name$  s num.names$ duplicate$  #2 >    { pop$      " " * bbl.etal *    }    { #2 <        'skip$        { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =            {              " " * bbl.etal *            }            { bbl.and space.word * 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 {editor.key.label}{ editor empty$    { key empty$        { cite$ #1 #3 substring$ }        'key      if$    }    { editor format.lab.names }  if$} FUNCTION {calc.short.authors}{ type$ "book" =  type$ "inbook" =  or    'author.editor.key.label    { type$ "proceedings" =        'editor.key.label        'author.key.label      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 :=} FUNCTION {sort.format.names}{ 's :=  #1 'nameptr :=  ""  s num.names$ 'numnames :=  numnames 'namesleft :=    { namesleft #0 > }    { s nameptr      "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}"      format.name$ 't :=      nameptr #1 >        {          "   "  *          namesleft #1 = t "others" = and            { "zzzzz" 't := }            'skip$          if$          t sortify *        }        { 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 sort.format.names }  if$}FUNCTION {author.editor.sort}{ author empty$    { editor empty$        { key empty$            { "to sort, need author, editor, or key in " cite$ * warning$              ""            }            { key sortify }          if$        }        { editor sort.format.names }      if$    }    { author sort.format.names }  if$}FUNCTION {editor.sort}{ editor empty$    { key empty$        { "to sort, need editor or key in " cite$ * warning$          ""        }        { key sortify }      if$    }    { editor sort.format.names }  if$}FUNCTION {presort}{ calc.label  label sortify  "    "  *  type$ "book" =  type$ "inbook" =  or    'author.editor.sort    { type$ "proceedings" =        'editor.sort        'author.sort      if$    }  if$  #1 entry.max$ substring$  'sort.label :=  sort.label  *  "    "  *  title field.or.null  sort.format.title  *  #1 entry.max$ substring$  'sort.key$ :=} ITERATE {presort}SORTSTRINGS { last.label next.extra }INTEGERS { last.extra.num last.extra.num.extended last.extra.num.blank number.label }FUNCTION {initialize.extra.label.stuff}{ #0 int.to.chr$ 'last.label :=  "" 'next.extra :=  #0 'last.extra.num :=  "a" chr.to.int$ #1 - 'last.extra.num.blank :=  last.extra.num.blank 'last.extra.num.extended :=  #0 'number.label :=}FUNCTION {forward.pass}{ last.label label =    { last.extra.num #1 + 'last.extra.num :=      last.extra.num "z" chr.to.int$ >       { "a" chr.to.int$ 'last.extra.num :=         last.extra.num.extended #1 + 'last.extra.num.extended :=       }       'skip$      if$      last.extra.num.extended last.extra.num.blank >        { last.extra.num.extended int.to.chr$          last.extra.num int.to.chr$          * 'extra.label := }        { last.extra.num int.to.chr$ 'extra.label := }      if$    }    { "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$    { year field.or.null #-1 #1 substring$ chr.to.int$ #65 <       { "{\natexlab{" swap$ * "}}" * }      { "{(\natexlab{" swap$ * "})}" * }    if$ }  if$  'extra.label :=  label extra.label * 'label :=}EXECUTE {initialize.extra.label.stuff}ITERATE {forward.pass}REVERSE {reverse.pass}FUNCTION {bib.sort.order}{ sort.label  "    "  *  year field.or.null sortify  *  "    "  *  title field.or.null  sort.format.title  *  #1 entry.max$ substring$  'sort.key$ :=}ITERATE {bib.sort.order}SORTFUNCTION {begin.bib}{ preamble$ empty$    'skip$    { preamble$ write$ newline$ }  if$  "\begin{thebibliography}{" number.label int.to.str$ * "}" *  write$ newline$  "\providecommand{\natexlab}[1]{#1}"  write$ newline$}EXECUTE {begin.bib}EXECUTE {init.urlbst.variables} % urlbstEXECUTE {init.state.consts}ITERATE {call.type$}FUNCTION {end.bib}{ newline$  "\end{thebibliography}" write$ newline$}EXECUTE {end.bib}%% End of customized bst file%%%% End of file `acl_natbib_basic.bst'.