John Blischak Add the PLOS bibtex style file. Authorea uses this to create the pdf, but does not output it when exporting the zip file. It uses the 2009 version, but presumably it hasn't changed much. Downloaded from here: http://journals.plos.org/plosone/s/latex  over 8 years ago

Commit id: 6dbc3af701dfcfdfa65bdc322374a4a2dfaec99d

deletions | additions      

         

plos2015.bst           

%%  %%   %%  %%  %% This `plos2015.bst' file is intended for use in PLOS submissions to   %% correctly compile the bibliography according to the PLOS manuscript   %% guidelines updated January 2015.  %%   %%  %% This is derived from the `vancouver.bst' bibliographic style file (for   %% LaTeX/BibTeX), generated with the docstrip utility and modified manually  %% to meet the  %% ``Uniform Requirements for Manuscripts Submitted to Biomedical Journals''  %% as published in N Engl J Med 1997;336:309-315.  %% (also known as the Vancouver style)  %% This specification may be found on the web page of the  %% International Committe of Medical Journal Editors:  %%  %% http://www.icmje.org  %%  %%-------------------------------------------------------------------  %%  %% Copyright 2004 Folkert van der Beek  %%  %% This work may be distributed and/or modified under the  %% conditions of the LaTeX Project Public License, either version 1.3  %% of this license or (at your option) any later version.  %% The latest version of this license is in  %% http://www.latex-project.org/lppl.txt  %% and version 1.3 or later is part of all distributions of LaTeX  %% version 2005/12/01 or later.  %%  %% This work has the LPPL maintenance status `maintained'.  %%   %% The Current Maintainer of this work is Folkert van der Beek.  %%  %% Complaints, suggestions and comments may be sent to  %%  %% Folkert van der Beek   %%  %%-------------------------------------------------------------------  %%  %% This bibliography style file is intended for texts in ENGLISH  %% This is a numerical citation style, and as such is standard LaTeX.  %% It requires no extra package to interface to the main text.  %% The form of the \bibitem entries is  %% \bibitem{key}...  %% Usage of \cite is as follows:  %% \cite{key} ==>> [#]  %% \cite[chap. 2]{key} ==>> [#, chap. 2]  %% where # is a number determined by the ordering in the reference list.  %% The order in the reference list is that by which the works were originally  %% cited in the text, or that in the database.  %  %% To change the reference numbering system from [1] to 1,  %% put the following code in the preamble:  %% \makeatletter % Reference list option change  %% \renewcommand\@biblabel[1]{#1} % from [1] to 1  %% \makeatother %  %%  %%---------------------------------------------------------------------  %% List of all possible fields  ENTRY  { address  assignee % for patents  author  booktitle % for articles in books  chapter % for incollection, esp. internet documents  cartographer % for maps  day  edition  editor  howpublished  institution % for technical reports  inventor % for patents  journal  key  month  note  number  organization  pages  part  publisher  school  series  title  type  volume  word  year  eprint % urlbst  doi % urlbst  url % urlbst  lastchecked % urlbst  updated % urlbst  }  {}  { label }  %% Declaration of integer variables  INTEGERS { output.state before.all mid.sentence after.sentence after.block }  STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl } % urlbst...  INTEGERS { hrefform addeprints adddoiresolver }  % Following constants may be adjusted by hand, if desired  FUNCTION {init.config.constants}  {  "Available from: " 'urlintro := % prefix before URL  "http://arxiv.org/abs/" 'eprinturl := % prefix to make URL from eprint ref  "arXiv:" 'eprintprefix := % text prefix printed before eprint ref  "http://dx.doi.org/" 'doiurl := % prefix to make URL from DOI  "doi:" 'doiprefix := % text prefix printed before DOI ref  #0 'addeprints := % 0=no eprints; 1=include eprints  #0 'adddoiresolver := % 0=no DOI resolver; 1=include it  #0 'hrefform := % 0=no crossrefs; 1=hypertex xrefs; 2=hyperref refs  }  INTEGERS {   bracket.state  outside.brackets  open.brackets  within.brackets  close.brackets  }  % ...urlbst to here  FUNCTION {init.state.consts}  { #0 'outside.brackets := % urlbst  #1 'open.brackets :=  #2 'within.brackets :=  #3 'close.brackets :=  #0 'before.all :=  #1 'mid.sentence :=  #2 'after.sentence :=  #3 'after.block :=  }  %% Declaration of string variables  STRINGS { s t}  % urlbst  FUNCTION {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...  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  output.nonnull.original  }  { % 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$  { "" }  { updated empty$  { inbrackets "cited " lastchecked * }  { inbrackets "updated " updated * "; cited " * lastchecked * }  if$  }  if$  }  % ...urlbst to here  FUNCTION {output}  { duplicate$ empty$  'pop$  'output.nonnull  if$  }  FUNCTION {output.check}  { 't :=  duplicate$ empty$  { pop$ "empty " t * " in " * cite$ * warning$ }  'output.nonnull  if$  }  FUNCTION {fin.entry}  {   bracket.state close.brackets = % urlbst  { "]" * }  'skip$  if$  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 {no.blank.or.punct}  { "" * before.all 'output.state :=  }  FUNCTION {add.semicolon}  {  ";" *  no.blank.or.punct  }  FUNCTION {date.block}  {  "." *  no.blank.or.punct  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % LOGICAL `NOT', `AND', AND `OR' %  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % Logical 'not':  % If the first element on the stack is A then this function  % does the following:  % push { #0 }  % push { #1 }  % So now the first 3 elements of the stack are  % { #1 } { #0 } A  % The first 3 are popped and subjected to 'if':  % If A > 0 then { #0 } is executed, else { #1 } is executed:  % if A > 0  % then 0  % else 1  % So consider integers as logicals, where 1 = true and 0 = false,  % then this does  % (if A then false else true)  % which is a logical 'not'.  FUNCTION {not}  { { #0 }  { #1 }  if$  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % Logical 'and':  % If the first 2 elements on the stack are A B  % then this function does the following:  % push 'skip$  % push { pop$ #0 }  % So now first 4 elements are  % { pop$ #0 } 'skip$ A B  % The first 3 are popped and subjected to 'if' (B is on top of  % the stack):  % If A > 0 then 'skip$ is executed, else { pop$ #0 } is executed:  % if A > 0  % then (B stays on top of stack)  % else (B is popped and #0 is pushed)  % So consider integers as logicals, where 1 = true and 0 = false,  % then this does  % (if A then B else false)  % which is a logical 'and'.  FUNCTION {and}  { 'skip$  { pop$ #0 }  if$  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % Logical 'or':  % If the first 2 elements on the stack are A B  % then this function does the following:  % push { pop$ #1 }  % push 'skip$  % So now first 4 elements are  % 'skip$ { pop$ #1 } A B  % The first 3 are popped and subjected to 'if' (B is on top of  % the stack):  % If A > 0 then { pop$ #1 } is executed, else 'skip$ is executed:  % if A > 0  % then (B is popped and #1 is pushed)  % else (B stays on top of stack)  % So consider integers as logicals, where 1 = true and 0 = false,  % then this does  % (if A then true else B)  % which is a logical 'or'.  FUNCTION {or}  { { pop$ #1 }  'skip$  if$  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % GENERAL PURPOSE FUNCTIONS FOR FORMATTING %  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % issues warning if field is empty  % call with  % "field" field warning.if.empty  % Note that the first field must be between quotes  % because it is the fieldname for use in the warning message.  %  FUNCTION {warning.if.empty}  { empty$  { "No " swap$ * " in " * cite$ * warning$ }  { pop$ }  if$  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %  % encloses string in pre- and postfix string  % call with  % prefix postfix S enclose.check  % delivers empty string if S empty  %  FUNCTION {enclose.check}  { duplicate$ empty$  { pop$ pop$ pop$  ""  }  { swap$ * * }  if$  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %  % emphasizes top of stack  % call with  % string" emphasize.check  %  FUNCTION {emphasize.check}  { "\Bem{" swap$  "}" swap$  enclose.check  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %  % brackets top of stack  % call with  % "string" bracket.check  %  FUNCTION {bracket.check}  { "[" swap$  "]" swap$  enclose.check  }  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %  % parenthesizes top of stack  % call with  % "string" parenthesize  %  FUNCTION {parenthesize.check}  { "(" swap$  ")" swap$  enclose.check  }  STRINGS {z}  FUNCTION {remove.dots}  { 'z := % expects string on top of the stack, pops the string and assigns it to variable z  "" % push empty string  { z empty$ not } % returns 0 if variable z is empty  { z #1 #1 substring$ % push the first character of variable z  z #2 global.max$ substring$ 'z := % assigns the 2nd to last character of variable z to variable z  duplicate$ "\" = % pushes 1 if the last character is "\", otherwise 0  { * % concatenates the last 2 literals  z #1 #1 substring$ % push the first character of variable z  z #2 global.max$ substring$ 'z := % assigns the 2nd to last character of variable z to variable z  * % concatenates the last 2 literals, i.e. every character, even a dot, following a "\" will be printed  }  { duplicate$ "." = % pushes 1 if the last character is ".", otherwise 0  'pop$ % pushes the pop$ function   { * } % concatenates the last 2 literals  if$ % pops the last character if it is a dot, otherwise concatenates it with the string on top of the stack  }  if$  }  while$  }  INTEGERS {l}  FUNCTION{string.length}  {  #1 'l :=  { duplicate$ duplicate$ #1 l substring$ = not }  { l #1 + 'l := }  while$  pop$ l  }  STRINGS {replace find text}  INTEGERS {find_length}  FUNCTION {find.replace}  {   'replace :=  'find :=  'text :=  find string.length 'find_length :=  ""  { text empty$ not }  { text #1 find_length substring$ find =  {  replace *  text #1 find_length + global.max$ substring$ 'text :=  }  { text #1 #1 substring$ *  text #2 global.max$ substring$ 'text :=  }  if$  }  while$  }  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}  { skip$ }  FUNCTION {tie.or.space.prefix}  { 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 ENGLISH  FUNCTION {bbl.and}  { "and"}  FUNCTION {bbl.etal}  { "et~al." }  FUNCTION {bbl.editors}  { "editors" }  FUNCTION {bbl.editor}  { "editor" }  FUNCTION {bbl.cartographers}  { "cartographers" }  FUNCTION {bbl.cartographer}  { "cartographer" }  FUNCTION {bbl.inventors}  { "inventors" }  FUNCTION {bbl.inventor}  { "inventor" }  FUNCTION {bbl.assignees}  { "assignees" }  FUNCTION {bbl.assignee}  { "assignee" }  FUNCTION {bbl.edby}  { "edited by" }  FUNCTION {bbl.edition}  { "ed." }  FUNCTION {bbl.volume}  { "vol." }  FUNCTION {bbl.of}  { "of" }  FUNCTION {bbl.number}  { "no." }  FUNCTION {bbl.nr}  { "no." }  FUNCTION {bbl.in}  { "in" }  FUNCTION {bbl.pages}  { "p." }  FUNCTION {bbl.page}  { "p." }  FUNCTION {bbl.chapter}  { "chap." }  FUNCTION {bbl.techrep}  { "Tech. Rep." }  FUNCTION {bbl.mthesis}  { "Master's thesis" }  FUNCTION {bbl.phdthesis}  { "Ph.D. thesis" }  FUNCTION {bbl.first}  { "1st" }  FUNCTION {bbl.second}  { "2nd" }  FUNCTION {bbl.third}  { "3rd" }  FUNCTION {bbl.fourth}  { "4th" }  FUNCTION {bbl.fifth}  { "5th" }  FUNCTION {bbl.st}  { "st" }  FUNCTION {bbl.nd}  { "nd" }  FUNCTION {bbl.rd}  { "rd" }  FUNCTION {bbl.th}  { "th" }  MACRO {jan} {"Jan."}  MACRO {feb} {"Feb."}  MACRO {mar} {"Mar."}  MACRO {apr} {"Apr."}  MACRO {may} {"May"}  MACRO {jun} {"Jun."}  MACRO {jul} {"Jul."}  MACRO {aug} {"Aug."}  MACRO {sep} {"Sep."}  MACRO {oct} {"Oct."}  MACRO {nov} {"Nov."}  MACRO {dec} {"Dec."}  FUNCTION {eng.ord}  { duplicate$ "1" swap$ *  #-2 #1 substring$ "1" =  { bbl.th * }  { duplicate$ #-1 #1 substring$  duplicate$ "1" =  { pop$ bbl.st * }  { duplicate$ "2" =  { pop$ bbl.nd * }  { "3" =  { bbl.rd * }  { bbl.th * }  if$  }  if$  }  if$  }  if$  }  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$  }  STRINGS { bibinfo}  INTEGERS { nameptr namesleft numnames }  FUNCTION {format.names}  { 'bibinfo :=  duplicate$ empty$ 'skip$ {  "." ". " find.replace 's :=  "" 't :=  #1 'nameptr :=  s num.names$ 'numnames :=  numnames 'namesleft :=  { namesleft #0 > }  { s nameptr  "{vv~}{ll}{ f{}}{ jj}"  format.name$  remove.dots  bibinfo bibinfo.check  't :=  nameptr #1 >  {  nameptr #6  #1 + =  numnames #6  > and  { "others" 't :=  #1 'namesleft := }  'skip$  if$  namesleft #1 >  { ", " * t * }  {  "," *  s nameptr "{ll}" format.name$ duplicate$ "others" =  { 't := }  { pop$ }  if$  t "others" =  {  " " * bbl.etal *  }  { " " * t * }  if$  }  if$  }  't  if$  nameptr #1 + 'nameptr :=  namesleft #1 - 'namesleft :=  }  while$  } if$  }  FUNCTION {format.names.org}  { 'bibinfo :=  duplicate$ empty$ 'skip$ {  's :=  "" 't :=  #1 'nameptr :=  s num.names$ 'numnames :=  numnames 'namesleft :=  { namesleft #0 > }  { s nameptr  "{ff~}{vv~}{ll}"  format.name$  bibinfo bibinfo.check  't :=  nameptr #1 >  {  namesleft #1 >  { "; " * t * }  {  ";" *  s nameptr "{ll}" format.name$ duplicate$ "others" =  { 't := }  { pop$ }  if$  t "others" =  {  " " * bbl.etal *  }  { " " * t * }  if$  }  if$  }  't  if$  nameptr #1 + 'nameptr :=  namesleft #1 - 'namesleft :=  }  while$  } if$  }  FUNCTION {format.names.ed}  {  format.names  }  FUNCTION {format.authors}  {   author "author" format.names  %%"." " " "author" find.replace format.names  }  FUNCTION {format.organizations}  { organization "organization" format.names.org  }  FUNCTION {get.bbl.editor}  { editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }  FUNCTION {get.bbl.cartographer}  { cartographer num.names$ #1 > 'bbl.cartographers 'bbl.cartographer if$ }  FUNCTION {get.bbl.inventor}  { inventor num.names$ #1 > 'bbl.inventors 'bbl.inventor if$ }  FUNCTION {get.bbl.assignee}  { assignee num.names$ #1 > 'bbl.assignees 'bbl.assignee if$ }  FUNCTION {format.editors}  { editor "editor" format.names duplicate$ empty$ 'skip$  {  "," *  " " *  get.bbl.editor  *  }  if$  }  FUNCTION {format.assignees}  { assignee "assignee" format.names.org duplicate$ empty$ 'skip$  {  "," *  " " *  get.bbl.assignee  *  }  if$  }  FUNCTION {format.cartographers}  { cartographer "cartographer" format.names duplicate$ empty$ 'skip$  {  "," *  " " *  get.bbl.cartographer  *  }  if$  }  FUNCTION {format.inventors}  { inventor "inventor" format.names duplicate$ empty$ 'skip$  {  "," *  " " *  get.bbl.inventor  *  }  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.type}  { type empty$  'skip$  { inbrackets type }  %%{ add.blank "[" type * "]" * }  if$  }  FUNCTION {output.bibitem}  { outside.brackets 'bracket.state := % urlbst  newline$  "\bibitem{" 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.journal.date}  {  month "month" bibinfo.check  duplicate$ empty$  year "year" bibinfo.check duplicate$ empty$  {  swap$ 'skip$  { "there's a month but no year in " cite$ * warning$ }  if$  *  }  { swap$ 'skip$  {  " " * swap$  }  if$  *  remove.dots  }  if$  duplicate$ empty$  'skip$  {  before.all 'output.state :=  after.sentence 'output.state :=  }  if$  }  FUNCTION {format.date}  {  no.blank.or.punct  ";"   duplicate$ empty$  year "year" bibinfo.check duplicate$ empty$  { swap$ 'skip$  { "there's a month but no year in " cite$ * warning$ }  if$  *  }  { swap$ 'skip$  {  swap$  " " * swap$  }  if$  *  }  if$  }  FUNCTION {format.btitle}  { title "title" bibinfo.check  duplicate$ empty$ 'skip$  {  }  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 {is.num}  { chr.to.int$  duplicate$ "0" chr.to.int$ < not  swap$ "9" chr.to.int$ > not and  }  FUNCTION {extract.num}  { duplicate$ 't :=  "" 's :=  { t empty$ not }  { t #1 #1 substring$  t #2 global.max$ substring$ 't :=  duplicate$ is.num  { s swap$ * 's := }  { pop$ "" 't := }  if$  }  while$  s empty$  'skip$  { pop$ s }  if$  }  FUNCTION {convert.edition}  { extract.num "l" change.case$ 's :=  s "first" = s "1" = or  { bbl.first 't := }  { s "second" = s "2" = or  { bbl.second 't := }  { s "third" = s "3" = or  { bbl.third 't := }  { s "fourth" = s "4" = or  { bbl.fourth 't := }  { s "fifth" = s "5" = or  { bbl.fifth 't := }  { s #1 #1 substring$ is.num  { s eng.ord 't := }  { edition 't := }  if$  }  if$  }  if$  }  if$  }  if$  }  if$  t  }  FUNCTION {format.edition}  { edition duplicate$ empty$ 'skip$  {  convert.edition  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.vol.num}  { 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$ *  }  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$ *  format.journal.pages  }  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  }  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.in.ed.title}  { format.title duplicate$ empty$ 'skip$  {  editor "editor" format.names.ed duplicate$ empty$ 'pop$  {  "," *  " " *  get.bbl.editor  ". " *  * swap$  * }  if$  word.in swap$ *  }  if$  }  FUNCTION {empty.misc.check}  { author empty$ title empty$ howpublished empty$  month empty$ year empty$ note empty$  and and and and and  { "all relevant fields are empty in " cite$ * warning$ }  'skip$  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.org.or.pub}  { 't :=  ""  address empty$ t empty$ and  'skip$  {  address "address" bibinfo.check *  t empty$  'skip$  { address empty$  'skip$  { ": " * }  if$  t *  }  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 {format.institution.address}  { institution "institution" bibinfo.check format.org.or.pub  }  % urlbst...  % Functions for making hypertext links.  % In all cases, the stack has (link-text href-url)  %  % make 'null' specials  FUNCTION {make.href.null}  {  pop$  }  % make hypertex specials  FUNCTION {make.href.hypertex}  {   "\special {html: }" * swap$ *  "\special {html:}" *  }  % make hyperref specials  FUNCTION {make.href.hyperref}  {   "\href {" swap$ * "} {" * 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$  }  FUNCTION {format.url}  { url empty$  { "" }  { 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$  { "" }  { doiprefix doi * doiurl doi * 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  output.url  addeprints eprint empty$ not and  { format.eprint output.nonnull }  'skip$  if$  adddoiresolver doi empty$ not and  { format.doi output.nonnull }  'skip$  if$  % addeprints  % { eprint empty$  % 'skip$  % { format.eprint output.nonnull }  % if$  % }  % 'skip$  % if$  }  % Webpage entry type.  % Title and url fields required;  % author, note, year, month, and lastchecked fields optional  STRINGS {database}  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$  % author empty$  % 'skip$  % { format.authors output.nonnull }  % if$  new.block  format.title "title" output.check  journal empty$  {  format.type "type" output.check  publisher empty$  'skip$  { format.publisher.address output }  if$  "database on the Internet" 'database :=  type database =  { format.journal.date "year" output.check }  { format.date "year" output.check }  if$  lastchecked empty$  'skip$  { format.lastchecked output }  if$  new.block  part empty$  'skip$  { part output }  if$  pages empty$  'skip$  { pages bracket.check output }  if$  }  { journal  remove.dots  "journal" bibinfo.check  "journal" output.check  format.type "type" output.check  format.journal.date "year" output.check  lastchecked empty$  'skip$  { format.lastchecked output  ";" no.blank.or.punct output  }  if$  no.blank.or.punct format.vol.num output  pages empty$  'skip$  { ":" no.blank.or.punct output  no.blank.or.punct pages bracket.check output  }  if$  new.block  }  if$  format.url "url" output.check  new.block  note output  fin.entry  }  % ...urlbst to here  FUNCTION {misc}  { output.bibitem  format.authors "author" output.check  format.editors "author and editor" output.check  format.title "title" output.check  type missing$  { skip$ }  { format.type "type" output.check }  %%{ inbrackets type output }  if$  new.block  format.publisher.address output  format.date "year" output.check  new.block  format.note output  new.block  howpublished new.block.checka  howpublished "howpublished" bibinfo.check output  output.web.refs % urlbst  fin.entry  empty.misc.check  }  FUNCTION {article}  { output.bibitem  format.authors "author" output.check  organization empty$  'skip$  { author empty$  {  format.organizations "organization" output.check  }  {  "; " *  no.blank.or.punct  format.organizations "organization" output.check  }  if$  }  if$  new.block  format.title "title" output.check  type missing$  { skip$ }  { format.type "type" output.check }  if$  new.block  journal  remove.dots  "journal" bibinfo.check  "journal" output.check  format.journal.date "year" output.check  add.semicolon  format.vol.num.pages output  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {book}  { output.bibitem  author empty$  { editor empty$  { format.organizations "organization" output.check }  { format.editors "author and editor" output.check }  if$  }   { format.authors output.nonnull  "author and editor" editor either.or.check  }  if$  new.block  format.btitle "title" output.check  format.bvolume output  new.block  format.edition output  new.sentence  author empty$ not  editor empty$ not  and  { format.editors "author and editor" output.check }  'skip$  if$  format.number.series output  format.publisher.address output  format.date "year" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {booklet}  { misc }  FUNCTION {dictionary}  { output.bibitem  format.booktitle "booktitle" output.check  format.bvolume output  new.block  format.edition output  new.sentence  format.publisher.address output  format.date "year" output.check  format.btitle "title" output.check  add.semicolon  add.blank  format.pages "pages" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {inbook}  { output.bibitem  format.authors "author" output.check  new.block  chapter "chapter" output.check  new.block  format.in.ed.title "title" output.check  format.bvolume output  format.edition output  new.sentence  format.number.series output  format.publisher.address output  format.date "year" output.check  date.block  add.blank  format.pages "pages" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {incollection}  { output.bibitem  format.authors "author" output.check  new.block  format.title "title" output.check  new.block  format.in.ed.booktitle "booktitle" output.check  format.bvolume output  format.edition output  new.sentence  format.number.series output  format.publisher.address output  format.date "year" output.check  date.block  add.blank  format.pages "pages" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {inproceedings}  { output.bibitem  format.authors "author" output.check  new.block  format.title "title" output.check  new.block  format.in.ed.booktitle "booktitle" output.check  format.bvolume output  new.sentence  format.number.series output  publisher empty$  { format.organization.address output }  { organization "organization" bibinfo.check output  format.publisher.address output  }  if$  format.date "year" output.check  date.block  add.blank  format.pages "pages" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {conference}  {inproceedings}  FUNCTION {manual}  {misc}  FUNCTION {phdthesis}  { output.bibitem  format.authors "author" output.check  new.block  format.btitle  "title" output.check  format.type "type" output.check  new.block  school "school" bibinfo.warn output  address "address" bibinfo.check output  format.date "year" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {mastersthesis}  {phdthesis}  FUNCTION {proceedings}  { output.bibitem  editor empty$  { organization "organization" bibinfo.check output  }  { format.editors output.nonnull }  if$  new.block  format.btitle "title" output.check  format.bvolume output  editor empty$  { publisher empty$  'skip$  {  new.sentence  format.number.series output  format.publisher.address output  }  if$  }  { publisher empty$  {  new.sentence  format.organization.address output }  {  new.sentence  organization "organization" bibinfo.check output  format.publisher.address output  }  if$  }  if$  format.date "year" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {techreport}  { output.bibitem  format.authors "author" output.check  new.block  format.title  "title" output.check  new.block  format.institution.address output  format.date "year" output.check  format.tr.number output.nonnull  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {map}  { output.bibitem  format.cartographers "cartographer" output.check  new.block  format.title  "title" output.check  format.type "type" output.check  new.block  format.publisher.address output  format.date "year" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {patent}  { output.bibitem  format.inventors "inventor" output.check  "; " *  no.blank.or.punct  format.assignees "assignee" output.check  new.block  format.title  "title" output.check  new.block  format.tr.number output.nonnull  format.date "year" output.check  new.block  format.note output  output.web.refs % urlbst  fin.entry  }  FUNCTION {unpublished}  { output.bibitem  format.authors "author" output.check  new.block  format.title "title" output.check  format.date output  new.block  format.note "note" output.check  output.web.refs % urlbst  fin.entry  }  FUNCTION {default.type} { misc }  READ  STRINGS { longest.label }  INTEGERS { number.label longest.label.width }  FUNCTION {initialize.longest.label}  { "" 'longest.label :=  #1 'number.label :=  #0 'longest.label.width :=  }  FUNCTION {longest.label.pass}  { number.label int.to.str$ 'label :=  number.label #1 + 'number.label :=  label width$ longest.label.width >  { label 'longest.label :=  label width$ 'longest.label.width :=  }  'skip$  if$  }  EXECUTE {initialize.longest.label}  ITERATE {longest.label.pass}  FUNCTION {begin.bib}  { preamble$ empty$  'skip$  { preamble$ write$ newline$ }  if$  "\begin{thebibliography}{" longest.label * "}" *  write$ newline$  }  EXECUTE {begin.bib}  EXECUTE {init.config.constants}  EXECUTE {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 `vancouver.bst'.