diff --git a/MS/MS.aux b/MS/MS.aux index 43a420b..b8497ff 100644 --- a/MS/MS.aux +++ b/MS/MS.aux @@ -1,10 +1,10 @@ \relax \providecommand\zref@newlabel[2]{} \providecommand*\new@tpo@label[2]{} -\providecommand\hyper@newdestlabel[2]{} -\providecommand*\HyPL@Entry[1]{} \providecommand \babel@aux [2]{\global \let \babel@toc \@gobbletwo } \@nameuse{bbl@beforestart} +\providecommand\hyper@newdestlabel[2]{} +\providecommand*\HyPL@Entry[1]{} \HyPL@Entry{0<>} \babel@aux{english}{} \@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}{section.1}\protected@file@percent } diff --git a/MS/MS.html.md b/MS/MS.html.md index eeb338c..0898277 100644 --- a/MS/MS.html.md +++ b/MS/MS.html.md @@ -15,7 +15,19 @@ format: toc: true css: _extensions/inst/css/style.css keep-md: true - epub: default + # epub: default + # nature-pdf: + # # journal.cite-style is included in the tex file but ignored by pandoc if + # # cite-method is not `natbib`. + # journal: + # cite-style: sn-nature + # # `citeproc` is the pandoc default. Set `cite-method: natbib` if required + # # to use the bst styles from the upstream template. + # cite-method: natbib + # keep-tex: true + # equal-margins: false + # acs-pdf: + # keep-tex: true docx: reference-doc: _extensions/inst/word/MS.docx pdf: @@ -55,16 +67,6 @@ editor: --- - - - - - - - - - - ::: {.content-visible when-format="html"} # Color tip {.unnumbered} @@ -77,24 +79,6 @@ editor: ::: - - - - - - - - - - - - - - - - - - # Introduction @@ -111,9 +95,18 @@ To cite a figure in `SM.qmd`, use this syntax: Fig. S1. # Conclusions + + + # Acknowledgements {.unnumbered} This work was financially supported by the National Natural Science Foundation of China (52030002, 51878649), and Youth Innovation Promotion Association CAS. # References {.unnumbered} + +::: {.cell layout-align="center"} + +::: + + diff --git a/MS/MS.qmd b/MS/MS.qmd index 7e227d5..f2d29f3 100644 --- a/MS/MS.qmd +++ b/MS/MS.qmd @@ -15,7 +15,19 @@ format: toc: true css: _extensions/inst/css/style.css keep-md: true - epub: default + # epub: default + # nature-pdf: + # # journal.cite-style is included in the tex file but ignored by pandoc if + # # cite-method is not `natbib`. + # journal: + # cite-style: sn-nature + # # `citeproc` is the pandoc default. Set `cite-method: natbib` if required + # # to use the bst styles from the upstream template. + # cite-method: natbib + # keep-tex: true + # equal-margins: false + # acs-pdf: + # keep-tex: true docx: reference-doc: _extensions/inst/word/MS.docx pdf: @@ -68,11 +80,10 @@ editor: ```{r} -#| label: setup #| include: false #| cache: false lang <- "en" -RM <- "F" # global rendermode, L: load pdata; F: fast load pdf # nolint +RM <- "F" # global rendermode, L: load pdata; F: fast load pdf # nolint isRendering <- isTRUE(getOption("knitr.in.progress")) require(tidyverse) require(lubridate) @@ -80,7 +91,9 @@ require(patchwork) require(drwateR) rmdify::rmd_init() biburl <- "https://drc.drwater.net/datapool/public/BB/Ref.bib" -if (!isRendering) { download.file(biburl, destfile = "Ref.bib") } +if (!isRendering) { + download.file(biburl, destfile = "Ref.bib") +} ``` # Introduction @@ -97,6 +110,9 @@ To cite a figure in `SM.qmd`, use this syntax: `r zref("sfg-demofigure")`. # Conclusions + + + # Acknowledgements {.unnumbered} This work was financially supported by the National Natural Science Foundation of China (52030002, 51878649), and Youth Innovation Promotion Association CAS. diff --git a/MS/SM.aux b/MS/SM.aux index 6f9b36e..cc48a71 100644 --- a/MS/SM.aux +++ b/MS/SM.aux @@ -1,10 +1,10 @@ \relax \providecommand\zref@newlabel[2]{} \providecommand*\new@tpo@label[2]{} -\providecommand\hyper@newdestlabel[2]{} -\providecommand*\HyPL@Entry[1]{} \providecommand \babel@aux [2]{\global \let \babel@toc \@gobbletwo } \@nameuse{bbl@beforestart} +\providecommand\hyper@newdestlabel[2]{} +\providecommand*\HyPL@Entry[1]{} \HyPL@Entry{0<>} \babel@aux{english}{} \newlabel{supplementary-material}{{}{2}{Supplementary Material}{section*.1}{}} diff --git a/MS/_est.qmd b/MS/_est.qmd new file mode 100644 index 0000000..f1d86ec --- /dev/null +++ b/MS/_est.qmd @@ -0,0 +1,36 @@ +# FIGURES {-} + +- Fig. 1: Caption of Fig. 1 +- Fig. 2: Caption of Fig. 2 + + +# ASSOCIATED CONTENT {-} + +## Supporting Information {-} + +The Supporting Information is available free of charge at https://. + +Description of Figure S1 (Fig. S1); +Description of Table S1 (Table S1); +(PDF) + + +# AUTHOR INFORMATION {-} + +## Corresponding Authors {-} + +- **Ming Su**: *1. Key Laboratory of Environmental Aquatic Chemistry, State Key Laboratory of Regional Environment and Sustainability, Research Center for Eco-Environmental Sciences, Chinese Academy of Sciences, Beijing 100085, China; 2. University of Chinese Academy of Sciences, Beijing 100049, China;* ORCID: https://orcid.org/0000-0001-9821-1268; Email: +- **Min Yang**: *National Engineering Research Center of Industrial Wastewater Detoxication and Resource Recovery, Research Center for Eco-Environmental Sciences, Chinese Academy of Sciences, Beijing 100085, China;* ORCID: https://orcid.org/0009-0005-4902-7620; Email: + +## Authors + +- **First Last**: *1. Key Laboratory of Environmental Aquatic Chemistry, State Key Laboratory of Regional Environment and Sustainability, Research Center for Eco-Environmental Sciences, Chinese Academy of Sciences; 2. School of Ecology and Environment, Inner Mongolia University, Hohhot 010021, China;* ORCID: https://orcid.org/0009-0005-4902-7620 + +## Author contributions {-} + + + +## Notes {-} + +The authors declare no competing financial interest. + diff --git a/_extensions/christopherkenny/nature/_extension.yml b/_extensions/christopherkenny/nature/_extension.yml new file mode 100644 index 0000000..198f085 --- /dev/null +++ b/_extensions/christopherkenny/nature/_extension.yml @@ -0,0 +1,27 @@ +title: Nature Journal Template +author: Christopher Kenny, Cameron Smith +version: 1.0.1 +quarto-required: ">=1.4.0" +contributes: + formats: + common: + toc: false + biblio-config: false + pdf: + include-in-header: header.tex + format-resources: + - sn-jnl.cls + - sn-apacite.bst + - sn-aps.bst + - sn-basic.bst + - sn-chicago.bst + - sn-mathphys-ay.bst + - sn-mathphys-num.bst + - sn-nature.bst + - sn-vancouver.bst + template-partials: + - "partials/doc-class.tex" + - "partials/title.tex" + - "partials/_author.tex" + - "partials/_affiliation.tex" + - "partials/before-body.tex" diff --git a/_extensions/christopherkenny/nature/csl/nature-no-superscript.csl b/_extensions/christopherkenny/nature/csl/nature-no-superscript.csl new file mode 100644 index 0000000..bba16d5 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/nature-no-superscript.csl @@ -0,0 +1,127 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-basic-author-date.csl b/_extensions/christopherkenny/nature/csl/springer-basic-author-date.csl new file mode 100644 index 0000000..e397afa --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-basic-author-date.csl @@ -0,0 +1,239 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-basic-brackets-no-et-al.csl b/_extensions/christopherkenny/nature/csl/springer-basic-brackets-no-et-al.csl new file mode 100644 index 0000000..ae783d0 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-basic-brackets-no-et-al.csl @@ -0,0 +1,184 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-humanities-author-date.csl b/_extensions/christopherkenny/nature/csl/springer-humanities-author-date.csl new file mode 100644 index 0000000..6756fe6 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-humanities-author-date.csl @@ -0,0 +1,473 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-humanities-brackets.csl b/_extensions/christopherkenny/nature/csl/springer-humanities-brackets.csl new file mode 100644 index 0000000..1f4d567 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-humanities-brackets.csl @@ -0,0 +1,421 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-mathphys-author-date.csl b/_extensions/christopherkenny/nature/csl/springer-mathphys-author-date.csl new file mode 100644 index 0000000..c679bc4 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-mathphys-author-date.csl @@ -0,0 +1,198 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-mathphys-brackets.csl b/_extensions/christopherkenny/nature/csl/springer-mathphys-brackets.csl new file mode 100644 index 0000000..e6efba5 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-mathphys-brackets.csl @@ -0,0 +1,152 @@ + + diff --git a/_extensions/christopherkenny/nature/csl/springer-vancouver.csl b/_extensions/christopherkenny/nature/csl/springer-vancouver.csl new file mode 100644 index 0000000..1d032c6 --- /dev/null +++ b/_extensions/christopherkenny/nature/csl/springer-vancouver.csl @@ -0,0 +1,179 @@ + + diff --git a/_extensions/christopherkenny/nature/header.tex b/_extensions/christopherkenny/nature/header.tex new file mode 100644 index 0000000..9be6852 --- /dev/null +++ b/_extensions/christopherkenny/nature/header.tex @@ -0,0 +1,20 @@ +%%%% Standard Packages + +\usepackage{graphicx}% +\usepackage{multirow}% +\usepackage{amsmath,amssymb,amsfonts}% +\usepackage{amsthm}% +\usepackage{mathrsfs}% +\usepackage[title]{appendix}% +\usepackage{xcolor}% +\usepackage{textcomp}% +\usepackage{manyfoot}% +\usepackage{booktabs}% +\usepackage{algorithm}% +\usepackage{algorithmicx}% +\usepackage{algpseudocode}% +\usepackage{listings}% + +%%%% + +\raggedbottom \ No newline at end of file diff --git a/_extensions/christopherkenny/nature/partials/_affiliation.tex b/_extensions/christopherkenny/nature/partials/_affiliation.tex new file mode 100644 index 0000000..599ce84 --- /dev/null +++ b/_extensions/christopherkenny/nature/partials/_affiliation.tex @@ -0,0 +1 @@ +$if(it.department)$\orgdiv{$it.department$}$endif$$if(it.name)$, \orgname{$it.name$}$endif$$if(it.address)$, \orgaddress{\street{$it.address$}$if(it.city)$, \city{$it.city$}$endif$$if(it.state)$, \state{$it.state$}$endif$$if(it.postal-code)$, \postcode{$it.postal-code$}$endif$$if(it.country)$, \country{$it.country$}$endif$}$endif$ diff --git a/_extensions/christopherkenny/nature/partials/_author.tex b/_extensions/christopherkenny/nature/partials/_author.tex new file mode 100644 index 0000000..12e288a --- /dev/null +++ b/_extensions/christopherkenny/nature/partials/_author.tex @@ -0,0 +1 @@ +$if(it.name.given)$\fnm{$it.name.given$}$endif$ $if(it.name.family)$\sur{$it.name.family$}$endif$ diff --git a/_extensions/christopherkenny/nature/partials/before-body.tex b/_extensions/christopherkenny/nature/partials/before-body.tex new file mode 100644 index 0000000..a6a514c --- /dev/null +++ b/_extensions/christopherkenny/nature/partials/before-body.tex @@ -0,0 +1,3 @@ +$if(title)$ +\maketitle +$endif$ \ No newline at end of file diff --git a/_extensions/christopherkenny/nature/partials/doc-class.tex b/_extensions/christopherkenny/nature/partials/doc-class.tex new file mode 100644 index 0000000..290ba13 --- /dev/null +++ b/_extensions/christopherkenny/nature/partials/doc-class.tex @@ -0,0 +1,17 @@ +\documentclass[ +$if(journal.cite-style)$ + $journal.cite-style$, +$else$ + default, +$endif$ +$if(fontsize)$ + $fontsize$, +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{sn-jnl} + +$if(equal-margins)$ +\setlength\evensidemargin{\oddsidemargin} +$endif$ diff --git a/_extensions/christopherkenny/nature/partials/title.tex b/_extensions/christopherkenny/nature/partials/title.tex new file mode 100644 index 0000000..4958ac4 --- /dev/null +++ b/_extensions/christopherkenny/nature/partials/title.tex @@ -0,0 +1,25 @@ +$if(title)$ +\title[$title$]{$title$} +$endif$ + +% author setup +$for(by-author)$ +\author$if(by-author.attributes.corresponding)$*$endif$[$if(by-author.affiliations)$$for(by-author.affiliations)$$it.id$$sep$,$endfor$$endif$]{$_author.tex()$}$if(by-author.email)$ +\email{$by-author.email$}$endif$$if(by-author.attributes.equal-contributor)$ +\equalcont{These authors contributed equally to this work.}$endif$$endfor$ + +% affil setup +$for(by-affiliation)$ +\affil[$it.id$]{$_affiliation.tex()$} +$endfor$ + +% abstract + +$if(abstract)$ +\abstract{$abstract$} +$endif$ + +% keywords +$if(keywords)$ +\keywords{$for(keywords)$$keywords$$sep$, $endfor$} +$endif$ \ No newline at end of file diff --git a/_extensions/christopherkenny/nature/sn-apacite.bst b/_extensions/christopherkenny/nature/sn-apacite.bst new file mode 100644 index 0000000..be1dc53 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-apacite.bst @@ -0,0 +1,5364 @@ +%% +%% This is file `apacite.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% apacite.dtx (with options: `bibstyle') +%% +%% This is a generated file. +%% +%% Copyright (C) 1994-2013 Erik Meijer and any individual authors listed +%% elsewhere in this file. +%% +%% This file is part of the `apacite' package. +%% ------------------------------------------- +%% +%% It 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. +%% +%% The `apacite' package consists of the files apacite.dtx and +%% apacite.ins, and the following generated files: +%% apacite.sty, apacdoc.sty, apacite.drv, +%% apacite.bst, apacitex.bst, apacann.bst, apacannx.bst, +%% apa5ex.bib, apacxmpl.tex, +%% english.apc, dutch.apc, finnish.apc, french.apc, +%% german.apc, ngerman.apc, greek.apc, norsk.apc, +%% spanish.apc, swedish.apc. +%% +%% This work has the LPPL maintenance status `maintained' +%% +%% The Current Maintainer of this work is Erik Meijer +%% +%% This file may only be distributed together with a copy of the +%% source files of the apacite package, i.e., apacite.dtx and +%% apacite.ins. You may however distribute the apacite package without +%% the generated files. +%% +%% apacite.bst +%% [2013/07/21 v6.03 APA bibliography style] +%% apacite.bst : reference list according to APA manual +%% Written by Erik Meijer + +FUNCTION {identify.apacite.version} +{ % Put identifying string in the .blg file + "apacite.bst" + " [2013/07/21 v6.03 APA bibliography style]" + * top$ +} +ENTRY + { address + annote + annotate + author + booktitle + chair + chapter + day + doi + edition + editor + englishtitle + firstkey + howpublished + institution + journal + key + keywords + lastchecked + month + nihms + note + number + organization + originaladdress + originalbooktitle + originaledition + originaleditor + originaljournal + originalnumber + originalpages + originalpublisher + originalvolume + originalyear + pages + pmcid + publisher + school + series + symposium + text + title + translator + type + url + urldate + volume + year + eprint + archive + archivePrefix + primaryClass + eid + adsurl + adsnote + version + } + { cite.order %% order of first citation + title.number %% for sorting titles + cite.initials %% dummy (0-1) indicating whether or not + %% initials of the 1st author must + %% be used for citing + cite.num.names.full %% number of names to be cited for full and + cite.num.names.short %% short cite + add.to.year %% For a, b, c, etc. after year + %% in multiple citations with same author-year + } + { year.label %% For sorting entries by year + author.year.sort.label %% For sorting entries and checking whether + %% initials should be added, how many authors + %% should be cited and whether a, b, etc. + %% after year is necessary + title.sort.label %% for sorting titles + citeorder.sort.label %% for sorting by citation order + type.2 %% Replacement for type with misc entries and + %% entries that revert to misc. + } +INTEGERS { len pos name.max old.number numnames numnames.old + nameptr lastname format.num.names cite.initials.old + cite.num.names.old add.to.year.old forward + multiresult dot brace.level + } + +STRINGS { s t u old.label field + aut1f aut1s aut1f.old aut1s.old + aut2 aut2.old + aut3 aut3.old + aut4 aut4.old + aut5 aut5.old + aut6 aut6.old + year.label.old + } +FUNCTION {test} { #0 } +FUNCTION {dump.stack} +{ "---- STACK {" cite$ * "} ----" * top$ + stack$ + "---- END STACK {" cite$ * "} ----" * top$ +} +FUNCTION {make.index} { #0 } +FUNCTION {unsorted} { #0 } +MACRO {jan} {"{\APACmonth{01}}"} +MACRO {feb} {"{\APACmonth{02}}"} +MACRO {mar} {"{\APACmonth{03}}"} +MACRO {apr} {"{\APACmonth{04}}"} +MACRO {may} {"{\APACmonth{05}}"} +MACRO {jun} {"{\APACmonth{06}}"} +MACRO {jul} {"{\APACmonth{07}}"} +MACRO {aug} {"{\APACmonth{08}}"} +MACRO {sep} {"{\APACmonth{09}}"} +MACRO {oct} {"{\APACmonth{10}}"} +MACRO {nov} {"{\APACmonth{11}}"} +MACRO {dec} {"{\APACmonth{12}}"} +MACRO {winter} {"{\APACmonth{13}}"} +MACRO {spring} {"{\APACmonth{14}}"} +MACRO {summer} {"{\APACmonth{15}}"} +MACRO {fall} {"{\APACmonth{16}}"} +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % 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$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % issues warning if title, type, and howpublished are empty + % +FUNCTION {check.relevant.fields} +{ title empty$ + type empty$ and + howpublished empty$ and + { "No title, type, and howpublished in " cite$ * warning$ } + 'skip$ + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % delivers 1 if (both editor and translator + % not empty and not equal to each other) + % 0 if (editor or translator empty) or + % (editor = translator) + % +FUNCTION {editor.ne.trans} +{ translator empty$ + { #0 } + { editor empty$ + { #0 } + { translator editor = + { #0 } + { #1 } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {conv.int.to.str} +{ duplicate$ #10 < + { "0000" swap$ int.to.str$ * } + { duplicate$ #100 < + { "000" swap$ int.to.str$ * } + { duplicate$ #1000 < + { "00" swap$ int.to.str$ * } + { duplicate$ #10000 < + { "0" swap$ int.to.str$ * } + { int.to.str$ } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {ref.type} +{ type$ "article" = + type$ "magazine" = + type$ "newspaper" = + type$ "book" = + type$ "techreport" = + type$ "unpublished" = + type$ "misc" = + type$ "booklet" = + type$ "manual" = + type$ "proceedings" = + or + or + or + or + or + or + or + or + or + { #1 } + { type$ "incollection" = + type$ "phdthesis" = + type$ "mastersthesis" = + type$ "lecture" = + type$ "inbook" = + type$ "inproceedings" = + type$ "conference" = + type$ "intechreport" = + or + or + or + or + or + or + or + { #2 } + { type$ "literal" = + { #3 } + { #0 } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {is.atype} +{ type$ "article" = + type$ "magazine" = + type$ "newspaper" = + type$ "incollection" = + type$ "inbook" = + type$ "inproceedings" = + type$ "conference" = + type$ "intechreport" = + type$ "manual" = + or + or + or + or + or + or + or + or + { #1 } + { journal empty$ not + % + type$ "phdthesis" = + type$ "mastersthesis" = + or + % + and + { #1 } + { type$ "misc" = + type empty$ not and + { type "\bibmessage" = + type "\bibcomputerprogram" = + type "\bibcomputerprogrammanual" = + type "\bibcomputerprogramandmanual" = + type "\bibcomputersoftware" = + type "\bibcomputersoftwaremanual" = + type "\bibcomputersoftwareandmanual" = + type "\bibprogramminglanguage" = + or + or + or + or + or + or + or + { #1 } + { #0 } + if$ + } + { #0 } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % connects two strings with connect string + % if one of them empty, then connect string + % is left out + % + % call with S1 S2 connectstring connect.check + % +FUNCTION {connect.check} +{ 'u := + % + % if S2 = "" + % + duplicate$ empty$ + % + % then remove S2 + % + { pop$ + % + % S1 is on top of stack. + % if it is empty, it is replaced by the empty string "" + % + duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ + } + % + % else swap S1 and S2 so that S1 can be checked + % + { swap$ + % + % if S1 is empty, remove S1 so that S2 is left on the + % stack and is the result is given + % + duplicate$ empty$ + { pop$ } + % + % now the real work starts: + % push the connect string "C" + % so that top of stack is "C" "S1" "S2" + % concatenate, so that top of stack is + % "S1+C" "S2" + % + { u * + % + % swap and concatenate + % + swap$ * + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % connects two strings with space ("\ ") + % if length of second is 4 or larger, + % connects them with non-breaking space ("tie", "~") + % if length of second smaller than 4 + % + % call with S1 S2 tie.or.space.connect + % result: "S1\ S2" or "S1~S2" + % +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #4 < + { "~" } + { "\ " } + if$ + swap$ * * +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % connects two strings with comma (", ") + % if one of them is empty, the comma is left out + % + % call with S1 S2 connect.with.comma.check + % result: "S1, S2" + % +FUNCTION {connect.with.comma.check} +{ ", " connect.check } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % connects two strings with semicolon ("; ") + % if one of them is empty, semicolon is left out + % + % call with S1 S2 connect.with.semicolon.check + % result: "S1; S2" + % +FUNCTION {connect.with.semicolon.check} +{ "; " connect.check } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % connects two strings with colon (": ") + % if one of them is empty, colon is left out + % + % call with S1 S2 connect.with.colon.check + % result: "S1: S2" + % +FUNCTION {connect.with.colon.check} +{ ": " connect.check } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % connects two strings with space ("\ ") + % + % call with S1 S2 connect.with.space.check + % result: "S1\ S2" + % +FUNCTION {connect.with.space.check} +{ "\ " connect.check } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % 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 + % +FUNCTION {bracket.check} +{ "[" swap$ + "]" swap$ + enclose.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % parenthesizes top of stack + % call with + % "string" parenthesize + % +FUNCTION {parenthesize.check} +{ "(" swap$ + ")" swap$ + enclose.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % checks whether argument is "multiresult": + % whether it contains '-', '+', or ',' characters + % used with pages to check whether pp. or p. must be used + % +FUNCTION {multi.result.check} +{ 't := + #0 'multiresult := + % + % while (not multiresult) and (length(t) > 1) do + % + { multiresult not + t text.length$ #1 > + and + } + % + % if t(1-2) = "--" or t(1) = "+" or "," + % then multiresult = 1 + % else t = t(2-last) + % + { t #1 #2 substring$ 's := + "--" s = + { #1 'multiresult := } + { t #1 #1 substring$ 's := + "+" s = + "," s = + or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + if$ + } + while$ + multiresult +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % Checks whether an author is a corporate author, i.e., + % whether the field starts with "{\bibcorporate". + % Call with + % field is.bibcorporate + % +FUNCTION {is.bibcorporate} +{ #1 #14 substring$ "{\bibcorporate" = } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {remove.spaces} +{ % Remove spaces from string. + % Works best if string only contains alphanumeric characters and spaces. + 's := % The original string + s text.length$ 'len := % Its length (no. of characters) + "" 't := % Initialize the transformed string + #0 'pos := + % + % while (pos < len) do + % + { pos len < } + { pos #1 + 'pos := + s pos #1 substring$ 'u := + % + % u is the pos-th character in s + % If it is a space, move to next character, + % else copy character to output. + % + u " " = + 'skip$ + { t u * 't := } + if$ + } + while$ + % + % Now push the result back on the stack + t +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % end block by writing what's left on the stack and + % starting a new line + % +FUNCTION {output.end.block} +{ write$ + newline$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % end block by adding a period and writing what's left + % on the stack and starting a new line + % +FUNCTION {output.dot.end.block} +{ add.period$ + output.end.block +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % starting new block by writing what's left on the stack, + % starting a new line and adding some extra space or + % whatever is more defined in \newblock + % +FUNCTION {output.new.block} +{ output.end.block + "\newblock" write$ newline$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % starting new block by writing what's left on the stack, + % starting a new line and adding some extra space or + % whatever is more defined in \newblock + % +FUNCTION {output.dot.new.block} +{ add.period$ + output.new.block +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {start.new.block} +{ "\unskip\ " write$ newline$ + "\newblock " write$ newline$ +} + +FUNCTION {sort.name.format.classic} { "{ll{}}{ f{}}{ vv{}}{ jj{}}" } + +FUNCTION {cite.name.format.classic} { "{ll}" } + +FUNCTION {author.name.format.classic} { "{ll}{, f{.}.}{ vv}{, jj}" } + +FUNCTION {index.name.format.classic} { "{ll}{, f{.}.}{ vv}{, jj}" } + +FUNCTION {sort.name.format} { "{vv{}}{ll{}}{ f{}}{ jj{}}" } + +FUNCTION {cite.name.format} { "{vv }{ll}" } + +FUNCTION {cite.initials.name.format} { "{f{.}.~~}{vv }{ll}{ jj}" } + +FUNCTION {author.name.format} { "{vv }{ll}{, f{.}.}{, jj}" } + +FUNCTION {editor.name.format} { "{f{.}.~~}{vv }{ll}{ jj}" } + +FUNCTION {index.name.format} { "{vv }{ll}{, f{.}.}{, jj}" } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {init.initials} +{ "yyyyy" 'aut1f.old := + "yyyyy" 'aut1s.old := + #0 'cite.initials.old := +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {update.no.initials} +{ 'field := + field 'aut1f.old := + field 'aut1s.old := + #0 'cite.initials.old := +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {check.add.initials.aut} +{ % + % If last name is equal to previous last name + % but initials are different, then initials should + % be cited. If initials are also the same, initials + % should be cited if that is the case for the previous + % author . + % + aut1s aut1s.old = + { aut1f aut1f.old = + { cite.initials.old 'cite.initials := } + { #1 'cite.initials := + aut1f 'aut1f.old := + aut1s 'aut1s.old := + cite.initials 'cite.initials.old := + } + if$ + } + { % + % Different last name. + aut1f 'aut1f.old := + aut1s 'aut1s.old := + cite.initials 'cite.initials.old := + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {check.add.initials.field} +{ 'field := + field #1 cite.initials.name.format format.name$ 'aut1f := + field #1 cite.name.format format.name$ 'aut1s := + % + % Now do the actual work + % + check.add.initials.aut +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {check.add.initials} +{ % + % Check whether author or editor or other field acts as author. + % Initials are only relevant with author or editor. + % + firstkey empty$ not + { key empty$ not + { % + % Both key and firstkey are nonempty. + % Then, key is treated as last name of first author, + % and firstkey is treated as last name + initials of + % first author . + % + firstkey sortify remove.spaces 'aut1f := + key sortify remove.spaces 'aut1s := + check.add.initials.aut + } + { firstkey sortify remove.spaces update.no.initials } + if$ + } + { key empty$ not + { key sortify remove.spaces update.no.initials } + { % + % No key or firstkey, so find out which field + % to use as author. + % + % Check reference type: + % if result is 1 then possibly editor acts as author + % 2 then editor does not act as author + % 3 then key should have been used + % 0 then unknown reference type + ref.type #2 = + { % + % Format first author with and without initials + author empty$ + { title.sort.label update.no.initials } + { author check.add.initials.field } + if$ + } + { % + % Format first author with and without initials + author empty$ + { editor empty$ + { title.sort.label update.no.initials } + { editor check.add.initials.field } + if$ + } + { author check.add.initials.field } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {tentative.cite.num.names.field} +{ 'field := + field num.names$ 'numnames := + numnames #3 < + { % + % 1 or 2 names: always cite all of them. + numnames 'cite.num.names.full := + numnames 'cite.num.names.short := + } + { numnames #6 < + { % + % 3-5 names: cite all of them the first time, + % only the first name later times + numnames 'cite.num.names.full := + #1 'cite.num.names.short := + } + { % + % 6 or more names: cite only the first name + #1 'cite.num.names.full := + #1 'cite.num.names.short := + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {tentative.cite.num.names} +{ % + % Check whether author or editor or other field acts as author. + % Number of names is only relevant with author or editor. + % + firstkey empty$ not + { + #1 'cite.num.names.full := + #1 'cite.num.names.short := + } + { key empty$ not + { + #1 'cite.num.names.full := + #1 'cite.num.names.short := + } + { % + % No key or firstkey, so find out which field + % to use as author. + % + % Check reference type: + % if result is 1 then possibly editor acts as author + % 2 then editor does not act as author + % 3 then key should have been used + % 0 then unknown reference type + ref.type #2 = + { % + % Format first author with and without initials + author empty$ + { + #1 'cite.num.names.full := + #1 'cite.num.names.short := + } + { author tentative.cite.num.names.field } + if$ + } + { % + % Format first author with and without initials + author empty$ + { editor empty$ + { + #1 'cite.num.names.full := + #1 'cite.num.names.short := + } + { editor tentative.cite.num.names.field } + if$ + } + { author tentative.cite.num.names.field } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {init.cite.num.names} +{ #0 'cite.num.names.old := + #0 'numnames.old := + "yyyy" 'year.label.old := + #0 'add.to.year.old := + "" 'aut1f.old := + "" 'aut2.old := + "" 'aut3.old := + "" 'aut4.old := + "" 'aut5.old := + "" 'aut6.old := +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {update.cite.num.names} +{ cite.num.names.short 'cite.num.names.old := + numnames 'numnames.old := + year.label 'year.label.old := + add.to.year 'add.to.year.old := + aut1f 'aut1f.old := + aut2 'aut2.old := + aut3 'aut3.old := + aut4 'aut4.old := + aut5 'aut5.old := + aut6 'aut6.old := +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.6.authors} +{ % + % First author: with initials. + % + field #1 cite.initials.name.format format.name$ 'aut1f := + % + % Second and later authors: without initials. + % + numnames #1 > + name.max #1 > + and + { % + % 2nd author + field #2 cite.name.format format.name$ 'aut2 := + % + numnames #2 > + name.max #2 > + and + { % + % 3nd author + field #3 cite.name.format format.name$ 'aut3 := + % + numnames #3 > + name.max #3 > + and + { % + % 4th author + field #4 cite.name.format format.name$ 'aut4 := + % + numnames #4 > + name.max #4 > + and + { % + % 5th author + field #5 cite.name.format format.name$ 'aut5 := + % + numnames #5 > + name.max #5 > + and + { % + % 6th author + field #6 cite.name.format format.name$ 'aut6 := + } + { % + % 5 authors: 6 is empty + % + "" 'aut6 := + } + if$ + } + { % + % 4 authors: 5-6 are empty + % + "" 'aut5 := + "" 'aut6 := + } + if$ + } + { % + % 3 authors: 4-6 are empty + % + "" 'aut4 := + "" 'aut5 := + "" 'aut6 := + } + if$ + } + { % + % 2 authors: 3-6 are empty + % + "" 'aut3 := + "" 'aut4 := + "" 'aut5 := + "" 'aut6 := + } + if$ + } + { % + % Only 1 author: 2-6 are empty + % + "" 'aut2 := + "" 'aut3 := + "" 'aut4 := + "" 'aut5 := + "" 'aut6 := + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {change.add.to.year} +{ + forward #1 = + { % + % Moving forward: this add.to.year number must be 1 higher than + % previous. + % + add.to.year.old #0 > + { add.to.year.old #1 + 'add.to.year := } + { #2 'add.to.year := } + if$ + } + { % + % Moving backward: this add.to.year number must be 1 lower than + % previous. + % + add.to.year.old #1 - 'add.to.year := + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {definitive.cite.num.names.1.or.2} +{ % + numnames numnames.old = + { % + % Same number of names: ambiguity could arise. Check whether current + % and previous have the same author(s). + % + aut1f aut1f.old = + { % + % Same first author: if the second author is also the same or if + % there is only one author, a's and b's should be added. + % + aut2 aut2.old = + numnames #2 = + and + % + numnames #1 = + or + { % + % Same author(s): add to year. + % + change.add.to.year + } + { % + % Different second author: no ambiguity possible. + % + skip$ + } + if$ + } + { % + % Different first author: no ambiguity possible. + % + skip$ + } + if$ + } + { % + % Different number of names: no ambiguity possible. + % + skip$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {definitive.cite.num.names.3.or.more} +{ % + % Check whether current and previous have the same first author. + % + aut1f aut1f.old = + { % + % Same first author: check second author + % + aut2 aut2.old = + { % + % Same 1st & 2nd author: check 3rd. + % + aut3 aut3.old = + { % + % Same 1st-3rd authors: check 4th. + % + numnames.old #3 = + { numnames #3 = + { % + % Both current and previous have 3 authors, which are + % the same, so both have identical author-year + % combinations, so ambiguity should be resolved by + % a's and b's. Check whether more authors were + % necessary for previous one. + % + change.add.to.year + cite.num.names.short cite.num.names.old < + { cite.num.names.old + 'cite.num.names.short := + } + 'skip$ + if$ + } + { % + % Previous has 3 authors, current has more, with same + % first 3, so at least 4 must be used for current to + % make a difference. + % + cite.num.names.short #4 < + { #4 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + { numnames #3 = + { % + % Current has 3 authors, previous has more, with same + % first 3, so all 3 of current must be used. + % + numnames 'cite.num.names.short := + } + { % + % Same 1st-3rd author and both current and previous + % have at least 4 authors: check 4th. + % + aut4 aut4.old = + { % + % Same 1st-4th authors: check 5th. + % + numnames.old #4 = + { numnames #4 = + { % + % Both current and previous have 4 authors, + % which are the same, so both have + % identical author-year combinations, so + % ambiguity should be resolved by a's and + % b's. Check whether more authors were + % necessary for previous one. + % + change.add.to.year + cite.num.names.short cite.num.names.old < + { cite.num.names.old + 'cite.num.names.short := + } + 'skip$ + if$ + } + { % + % Previous has 4 authors, current has more, + % with same first 4, so at least 5 must be + % used for current to make a difference. + % + cite.num.names.short #5 < + { #5 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + { numnames #4 = + { % + % Current has 4 authors, previous has more, + % with same first 4, so all 4 of current + % must be used. + % + numnames 'cite.num.names.short := + } + { % + % Same 1st-4th author and both current and + % previous have at least 5 authors: check + % 5th. + % + aut5 aut5.old = + { % + % Same 1st-5th authors: check 6th. + % + numnames.old #5 = + { numnames #5 = + { % + % Both current and previous + % have 5 authors, which are the + % same, so both have identical + % author-year combinations, so + % ambiguity should be resolved + % by a's and b's. Check whether + % more authors were necessary + % for previous one. + % + change.add.to.year + cite.num.names.short + cite.num.names.old < + { cite.num.names.old + 'cite.num.names.short := + } + 'skip$ + if$ + } + { % + % Previous has 5 authors, + % current has more, with same + % first 5, so at least 6 must + % be used for current to make + % a difference. + % + cite.num.names.short #6 < + { #6 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + { numnames #5 = + { % + % Current has 5 authors, + % previous has more, with same + % first 5, so all 5 of current + % must be used. + % + numnames 'cite.num.names.short := + } + { % + % Same 1st-5th author and both + % current and previous have at + % least 6 authors. If one has + % 6 authors and the other has + % more or the 6th is different, + % 6 should be used (which is + % the maximum). + % + numnames #6 > + numnames.old #6 = + and + % + numnames #6 = + numnames.old #6 > + and + % + or + % + aut6 aut6.old = + not + % + or + { #6 cite.num.names.short < + { #6 + 'cite.num.names.short + := + } + 'skip$ + if$ + } + { % + % The first 6 authors are + % the same and either both + % have 6 or both have more. + % So for all practical + % purposes they have + % identical author-year + % combination, so ambiguity + % should be resolved by a's + % and b's. Check whether + % more authors were + % necessary for previous + % one. + % + change.add.to.year + cite.num.names.short + cite.num.names.old + < + { cite.num.names.old + 'cite.num.names.short + := + } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + { % + % Different 5th author: citing 5 authors is + % sufficient for this comparison. + % + cite.num.names.short #5 < + { #5 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + { % + % Different 4th author: citing 4 authors is + % sufficient for this comparison. + % + cite.num.names.short #4 < + { #4 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + if$ + } + if$ + } + { % + % Different 3rd author: citing 3 authors is sufficient for this + % comparison. + % + cite.num.names.short #3 < + { #3 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + { % + % Different 2nd author: citing 2 authors is sufficient for this + % comparison. + % + cite.num.names.short #2 < + { #2 'cite.num.names.short := } + 'skip$ + if$ + } + if$ + } + { % + % Different first author: no ambiguity, move to next entry. + % + skip$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {definitive.cite.num.names.field} +{ 'field := + field num.names$ 'numnames := + % + % Format authors + % + format.6.authors + % + % Now compare authors with authors of previous entry. + % + cite.num.names.short numnames.old > + { % + % The previous entry has less authors than already defined + % necessary to be cited. No ambiguity is possible and we're ready. + % + skip$ + } + { % + % Both previous and current entry have at least one author . + % + year.label year.label.old = + { % + % Same year label: possibly ambiguous citation. + % + % First check: current and/or previous have 1 or + % 2 authors. + % + numnames #3 < + numnames.old #3 < + or + % + { definitive.cite.num.names.1.or.2 } + { definitive.cite.num.names.3.or.more } + if$ + } + { % + % Different year label: everything's fine, + % move to next entry. + % + skip$ + } + if$ + } + if$ + % + % If during the previous process the name maximum is exceeded + % (which was not checked), correct this. NOTE: If the name + % maximum is smaller than 6, this could lead to ambiguous + % citations if, e.g., the year and the first 5 authors are + % the same, but the 6th author is different. + % + cite.num.names.short name.max > + { name.max 'cite.num.names.short := } + 'skip$ + if$ + % + % For a "full" cite, the number of names should always be at least + % as large as for a "short" cite. + % + cite.num.names.full cite.num.names.short < + { cite.num.names.short 'cite.num.names.full := } + 'skip$ + if$ + % + % Update "old" variables for next entry. + % + update.cite.num.names +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {definitive.cite.no.names} +{ % + % The formatted field that acts as author is on top + % of the stack. + 'aut1f := + "" 'aut2 := + "" 'aut3 := + "" 'aut4 := + "" 'aut5 := + "" 'aut6 := + #1 'numnames := + % + year.label year.label.old = + { % + % Same year label: possibly ambiguous citation. + % + definitive.cite.num.names.1.or.2 + } + { % + % Different year label: everything's fine, + % move to next entry. + % + skip$ + } + if$ + % + % Update "old" variables for next entry. + % + update.cite.num.names +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {definitive.cite.num.names} +{ % + % Check whether author or editor or other field acts as author. + % Number of names is only relevant with author or editor. + % + firstkey empty$ not + { firstkey sortify remove.spaces definitive.cite.no.names } + { key empty$ not + { key sortify remove.spaces definitive.cite.no.names } + { % + % No key or firstkey, so find out which field + % to use as author. + % + % Check reference type: + % if result is 1 then possibly editor acts as author + % 2 then editor does not act as author + % 3 then key should have been used + % 0 then unknown reference type + ref.type #2 = + { % + % Format first author with and without initials + author empty$ + { title.sort.label definitive.cite.no.names } + { author definitive.cite.num.names.field } + if$ + } + { % + % Format first author with and without initials + author empty$ + { editor empty$ + { title.sort.label definitive.cite.no.names } + { editor definitive.cite.num.names.field } + if$ + } + { author definitive.cite.num.names.field } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.tentative.year.sort.label} +{ % + % Implicit or explicit ``no date'' is put at the front + % (the year zero; years B.C. will imply complications) + % because these are possibly old works. + % ``In press'' is put at the end. + % + year empty$ + { "0000" 'year.label := } + { year "\bibnodate" = + year "l" change.case$ "no date" = or + year "l" change.case$ "n.d." = or + { "0000" 'year.label := } + { year "\BIP" = + year "l" change.case$ "in press" = or + year "l" change.case$ "forthcoming" = or + { "9999" 'year.label := } + { % It is not checked whether the year field + % makes sense. + year sortify remove.spaces 'year.label := + } + if$ + } + if$ + } + if$ + % + % Push year sort label on the stack + year.label +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {month.number.day} +{ month empty$ + { "" } + { month sortify remove.spaces + % + % Add the day when available. + day empty$ + 'skip$ + { "/" * + day sortify remove.spaces * + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.name.sort.label} +{ % + % Author or editor-acting-as-author available. + % => Make tentative "short cite with initials" author + % label (L1) of one of the forms + % "Last1 F1" + % "Last1 F1 Last2" + % "Last1 F1 zzzz" ("zzzz" representing et al.) + % => If more than 2 'authors': make label (L2) for 2nd-6th authors + % of one of the forms + % "Last2 Last3" + % "Last2 Last3 Last4" + % "Last2 Last3 Last4 Last5" + % "Last2 Last3 Last4 Last5 Last6" + % "Last2 Last3 Last4 Last5 Last6 zzzz" + % + % Then format year label (L3) of one of the forms: + % "0000" (missing year or explicit 'no date') + % "9999" ('in press') + % year (otherwise; don't use originalyear here yet) + % + % From earlier sorting of titles, we have title number. Convert + % to string, which gives title label (L4) . + % + % Then tentative sorting label (author.year.sort.label) is a + % concatenation of + % L1 + % " " + % L3 + % " " + % L2 + % " " + % L4 + % + % The name field is on top of the stack. + 'field := + % + % numnames is the total number of names contained in field + field num.names$ 'numnames := + % + % Format first author + field #1 sort.name.format format.name$ + % + % Format the second author if there are two, or else "zzzz" = et al. + numnames #1 = + 'skip$ + { numnames #2 = + { % + % Two authors: format second author + field #2 "{ll{}}" format.name$ 's := + s "others" = + { " zzzz" * } % Add "et al."-substitute + { " " * s * } % Add second author + if$ + } + { " zzzz" * } % 3 or more authors: add "et al."-substitute + if$ + } + if$ + " " * % Add spaces + make.tentative.year.sort.label * % Add year (L3). + " " * % Add spaces + % + % Now build up L2 if applicable + numnames #3 < + 'skip$ + { % + % Treat last author slightly differently + numnames name.max > + { name.max 'lastname := + " zzzz" % Push "et al."-substitute on stack + } + { numnames 'lastname := + "" % Push empty string on stack + } + if$ + % + % Names 2 to "last" - 1 + "" % Push empty string on stack + #2 'nameptr := + { nameptr lastname < } + { % Add name no. nameptr + field nameptr "{ll{}}" format.name$ * + " " * + nameptr #1 + 'nameptr := + } + while$ + % + % "Last" author + field lastname "{ll{}}" format.name$ 's := + s "others" = + { "zzzz" * } % Add "et al."-substitute + { s * } % Add last author + if$ + % + swap$ * % Add the previously formatted empty string or + % "et al."-substitute if there are many authors. + * % Add L2 to the earlier labels. + } + if$ + % + " " * % Add spaces + title.number conv.int.to.str * % Add sorted title number (L4). + sortify % Clean up and convert to lowercase + " " * % Add spaces + month.number.day * % Add month and day when available + 'author.year.sort.label := % Assign result to sort label. +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.field.year.sort.label} +{ % + % 'field' acts as first author (L1), subsequent authors + % are empty (L2). + % + % Then format year label (L3) of one of the forms: + % "0000" (missing year or explicit 'no date') + % "9999" ('in press') + % year (otherwise; don't use originalyear here yet) + % + % From earlier sorting of titles, we have title number. Convert + % to string, which gives title label (L4) . + % + % Then tentative sorting label (author.year.sort.label) is a + % concatenation of + % L1 + % " " + % L3 + % " " + % L2 + % " " + % L4 + % + % 'field' is on top of the stack. It is already supposed to be cleaned + % (i.e., sortified and space-removed), so this is already L1. + " " * % Add spaces to L1 + make.tentative.year.sort.label * % Add year (L3). + " " * % Add spaces + " " * % L2 is empty, add spaces + title.number conv.int.to.str * % Add sorted title number (L4). + sortify % Clean up and convert to lowercase + " " * % Add spaces + month.number.day * % Add month and day when available + 'author.year.sort.label := % Assign result to sort label. +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.author.editor.sort.label} +{ author empty$ + { editor empty$ + { % + % Use what has previously been stored in title.sort.label + % as author substitute . + title.sort.label make.field.year.sort.label + } + { editor make.name.sort.label } + if$ + } + { author make.name.sort.label } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.author.sort.label} +{ author empty$ + { % + % Use what has previously been stored in title.sort.label + % as author substitute . + title.sort.label make.field.year.sort.label + } + { author make.name.sort.label } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.tentative.sort.label} +{ % + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % General strategy: + % + % Ordinary situation: author or editor-acting-as-author + % available. + % => Make tentative "short cite with initials" author + % label (L1) of one of the forms + % "Last1 F1" + % "Last1 F1 Last2" + % "Last1 F1 zzzz" ("zzzz" representing et al.) + % => If more than 2 'authors': make label (L2) for 2nd-6th authors + % of one of the forms + % "Last2 Last3" + % "Last2 Last3 Last4" + % "Last2 Last3 Last4 Last5" + % "Last2 Last3 Last4 Last5 Last6" + % "Last2 Last3 Last4 Last5 Last6 zzzz" + % When key is available (overrules author and editor fields): + % => L1 = key, L2 = "" + % No author, editor, and key: define title or substitute as key + % and format as key. + % + % Then format year label (L3) of one of the forms: + % "0000" (missing year or explicit 'no date') + % "9999" ('in press') + % year (otherwise; don't use originalyear here yet) + % + % From earlier sorting of titles, we have title number. Convert + % to string, which gives title label (L4) . + % + % Then tentative sorting label (author.year.sort.label) is a + % concatenation of + % L1 + % " " + % L3 + % " " + % L2 + % " " + % L4 + % + % This can then be sorted, from which it can be derived + % whether initials are necessary, how many names must + % be used for short and full citations, and whether "a"'s and + % "b"'s etc. are necessary behind the year labels. + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % key and firstkey overrule author information + % + firstkey empty$ not + { key empty$ not + { % + % Both key and firstkey available: + % for sorting and checking initials, treat key as last + % name and firstkey as initials. + % + key sortify remove.spaces + " " * + firstkey sortify remove.spaces * + make.field.year.sort.label + } + { firstkey sortify remove.spaces make.field.year.sort.label } + if$ + } + { key empty$ not + { key sortify remove.spaces make.field.year.sort.label } + { % + % No key or firstkey, so find out which field + % to use as author. + % + % Check reference type: + % if result is 1 then possibly editor acts as author + % 2 then editor does not act as author + % 3 then key should have been used + % 0 then unknown reference type + ref.type + duplicate$ #1 = + { pop$ + make.author.editor.sort.label + } + { duplicate$ #2 = + { pop$ + make.author.sort.label + } + { #3 = + { "no key in " cite$ * warning$ + make.author.editor.sort.label + } + { make.author.editor.sort.label } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + % + author.year.sort.label 'sort.key$ := +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.definitive.name.sort.label} +{ % + % Author or editor-acting-as-author available. + % => Make author-with-initials label (L1) of one of the forms + % "Last1 F1 Last2 F2 ... LastN FN" + % "Last1 F1 Last2 F2 ... Last6 F6 zzzz" + % (where N <= 6 is the total number of authors, and + % "zzzz" represents et al. if there are more than 6 authors) + % No author, editor, and key: define title or substitute as sort key. + % + % The name field is on top of the stack. + 'field := + % + % numnames is the total number of names contained in field + field num.names$ 'numnames := + % + % If there are more than 6 authors, only 6 are mentioned. + numnames name.max > + { name.max 'format.num.names := } + { numnames 'format.num.names := } + if$ + % Initialize stack with empty string + "" + % + % Cycle over authors. + #1 'nameptr := + { nameptr format.num.names < } + { % Format author and add spaces + field nameptr sort.name.format format.name$ * + " " * + nameptr #1 + 'nameptr := + } + while$ + % Format last author that must be formatted + field nameptr sort.name.format format.name$ * + % Add et al. if necessary + nameptr numnames < + { " zzzz" * } + 'skip$ + if$ + sortify % Clean up and change case + " " * % Add spaces + year.label * % Add year + " " * % Add spaces + title.number conv.int.to.str * % Add sorted title number + " " * % Add spaces + month.number.day * % Add month and day when available + 'author.year.sort.label := % Assign result to sort label. +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.definitive.field.year.sort.label} +{ % + % 'field' acts as author (L1). + % + % Then format year label (L2) of one of the forms: + % "0000" (missing year or explicit `no date') + % "9999" (`in press') + % year (otherwise; don't use originalyear here yet) + % + % From earlier sorting of titles, we have title number. Convert + % to string, which gives title label (L3) . + % + % Then tentative sorting label (author.year.sort.label) is a + % concatenation of + % L1 + % " " + % L2 + % " " + % L3 + % + % 'field' is on top of the stack. It is already supposed to be cleaned + % (i.e., sortified and space-removed), so this is already L1. + " " * % Add spaces + year.label * % Add year + " " * % Add spaces + title.number conv.int.to.str * % Add sorted title number + " " * % Add spaces + month.number.day * % Add month and day when available + 'author.year.sort.label := % Assign result to sort label. +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.definitive.author.editor.sort.label} +{ author empty$ + { editor empty$ + { % + % Use what has previously been stored in title.sort.label + % as author substitute . + title.sort.label make.definitive.field.year.sort.label + } + { editor make.definitive.name.sort.label } + if$ + } + { author make.definitive.name.sort.label } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.definitive.author.sort.label} +{ author empty$ + { % + % Use what has previously been stored in title.sort.label + % as author substitute . + title.sort.label make.definitive.field.year.sort.label + } + { author make.definitive.name.sort.label } + if$ +} +FUNCTION {make.final.sort.key} +{ ref.type #2 = + { make.definitive.author.sort.label } + { make.definitive.author.editor.sort.label } + if$ + unsorted + { citeorder.sort.label 'sort.key$ := } + { author.year.sort.label 'sort.key$ := } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + { s } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {chop.articles} +{ 's := + "a " #2 + "an " #3 + "the " #4 + s + chop.word + chop.word + chop.word +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.sort.title} +{ % + % Remove non-alphanumeric characters and change to lower case . + sortify + % + % Remove "a ", "an ", and "the " from the front . + chop.articles #1 entry.max$ substring$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.sort.title} +{ title empty$ + { text empty$ + { type empty$ + { howpublished empty$ + { note empty$ + { url empty$ + { " " } + { url format.sort.title } + if$ + } + { note format.sort.title } + if$ + } + { howpublished format.sort.title } + if$ + } + { type format.sort.title } + if$ + } + { text format.sort.title } + if$ + } + { title format.sort.title } + if$ + remove.spaces + 'title.sort.label := + title.sort.label 'sort.key$ := +} +FUNCTION {make.title.number} +{ title.sort.label old.label = + { + old.number 'title.number := + } + { + old.number #1 + 'title.number := + title.number 'old.number := + title.sort.label 'old.label := + } + if$ +} +FUNCTION {make.citeorder.number} +{ old.number #1 + 'cite.order := + cite.order 'old.number := + cite.order conv.int.to.str 'citeorder.sort.label := +} + +FUNCTION {last.part.name.format.classic} { "{ll}" } + +FUNCTION {von.junior.name.format.classic} { "{ vv}{, jj}" } + +FUNCTION {last.part.name.format} { "{vv }{ll}" } + +FUNCTION {initials.with.space.name.format} { "{f.}" } + +FUNCTION {von.last.junior.name.format} { "{vv }{ll}{ jj}" } + +FUNCTION {von.junior.name.format} { "{, jj}" } + +FUNCTION {one.complete.name.format} { "{vv }{ll}{, jj}{, ff}" } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {string.length} +{ #0 'pos := + % If the next character exists, i.e., is not empty, + % add 1 to the string length. + % We cannot use empty$ because " " empty$ is true. + { duplicate$ pos #1 + #1 substring$ "" = not } + { pos #1 + 'pos := } + while$ + pop$ pos +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {transform.spaces.and.hyphens} +{ 's := % The original string + s string.length 'len := % Its length (no. of characters) + "" 't := % Initialize the transformed string + #1 'pos := + #0 'brace.level := + % + % while (pos < len) do + % + { pos len < } + { % First, check whether we are at brace level 0 + brace.level #0 = + { + % At least two characters left: check for ". ", ".~", and ".-". + % If so, replace and shift two positions. + s pos #2 substring$ ". " = + s pos #2 substring$ ".~" = or + { t "." * 't := + pos #2 + 'pos := + } + { s pos #2 substring$ ".-" = + { t "\BHBI " * 't := + pos #2 + 'pos := + } + { % neither is true, copy one character and shift one position + t s pos #1 substring$ * 't := + % Check whether we need to increase brace level. + % Note that this is not sophisticated: it does not capture + % \{, \verb+}+, etc. + % Note also that unbalanced braces cause problems. + s pos #1 substring$ "{" = + { brace.level #1 + 'brace.level := } + 'skip$ + if$ + pos #1 + 'pos := + } + if$ + } + if$ + } + { % Not at brace level 0: copy result literally + t s pos #1 substring$ * 't := + % Check whether we need to increase or decrease brace level. + % Note that this is not sophisticated: it does not capture + % \{, \verb+}+, etc. + s pos #1 substring$ "{" = + { brace.level #1 + 'brace.level := } + { s pos #1 substring$ "}" = + { brace.level #1 - 'brace.level := } + 'skip$ + if$ + } + if$ + pos #1 + 'pos := + } + if$ + } + while$ + % + pos len = + { % Last character, copy + t s pos #1 substring$ * 't := + } + { % pos = len + 1, so s ends with ". " or ".-" + % This should not have happened, but make the best out of it. + % Push last two characters of s on the stack, i.e., ". " or ".-". + s len #1 - #2 substring$ + % Remove "\BPBI " or "\BHBI " from t + t text.length$ 'len := % Length of t (no. of characters) + t #1 len #6 - substring$ + % Concatenate and assign to t + swap$ * 't := + } + if$ + % + % Now push the result back on the stack + t +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.initials.with.hyphen} +{ % Format initials. + % Call with + % field authornumber format.initials.with.hyphen + % e.g. + % author #1 format.initials.with.hyphen + % Instead of field, a string may also be used. + % + % First, format initials in the default way, retaining spaces + % and hyphens. + initials.with.space.name.format format.name$ + transform.spaces.and.hyphens +} + +FUNCTION {format.last.part.name} +{ % Format a name with last.part.name.format, + % as part of more complicated things. + % Call with + % field authornumber format.last.part.name + % e.g. + % author #1 format.last.part.name + % Instead of field, a string may also be used. + last.part.name.format format.name$ +} + +FUNCTION {format.von.last.junior.name} +{ % Format a name with von.last.junior.name.format, + % for citing or as part of more complicated things. + % Call with + % field authornumber format.von.last.junior.name + % e.g. + % author #1 format.von.last.junior.name + % Instead of field, a string may also be used. + von.last.junior.name.format format.name$ +} + +FUNCTION {format.von.junior.name} +{ % Format a name with von.last.junior.name.format, + % for citing or as part of more complicated things. + % Call with + % field authornumber format.von.junior.name + % e.g. + % author #1 format.von.junior.name + % Instead of field, a string may also be used. + von.junior.name.format format.name$ +} + +FUNCTION {format.cite.initials.name} +{ % Format a name for citing with initials. + % Call with + % field authornumber format.cite.initials.name + % e.g. + % author #1 format.cite.initials.name + % Instead of field, a string may also be used. + % + % First, extract the complete name, format it in the canonical form, + % and push on the stack. + one.complete.name.format format.name$ + % + % Format the initials and push on the stack. + duplicate$ #1 format.initials.with.hyphen + % + % Format the von-last-junior part and push on the stack. + swap$ #1 format.von.last.junior.name + % + % Connect with "~" hyphen (if they're both non-empty). + "~" connect.check +} + +FUNCTION {format.author.name} +{ % Format an author name for the reference list. + % Call with + % field authornumber format.author.name + % e.g. + % author #1 format.author.name + % Instead of field, a string may also be used. + % + % First, extract the complete name, format it in the canonical form, + % and push on the stack. + one.complete.name.format format.name$ + % + % Make two copies of the name, format the last name and push on the stack. + duplicate$ duplicate$ #1 format.last.part.name + % + % Format the initials and push on the stack. + swap$ #1 format.initials.with.hyphen + % + % Connect with last name. + connect.with.comma.check + % + % Format the von-junior part and connect with initials. + swap$ #1 format.von.junior.name "" connect.check +} + +FUNCTION {format.editor.name} +{ % Format a name for the reference list as an editor. + % Call with + % field authornumber format.editor.name + % e.g. + % author #1 format.editor.name + % Instead of field, a string may also be used. + % + format.cite.initials.name +} + +FUNCTION {format.index.name} +{ % Format an author name for the index. + % Call with + % field authornumber format.index.name + % e.g. + % author #1 format.index.name + % Instead of field, a string may also be used. + % + format.author.name +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +FUNCTION {comma.between.two} { "\BCBT {}" } + +FUNCTION {comma.between.names} { ", " } + +FUNCTION {comma.before.last} { "\BCBL {}" } + +FUNCTION {dots.before.last} { "\BDBL {}" } + +FUNCTION {and.before.last} { "\ \BBA {} " } + +FUNCTION {no.and.before.last} { " " } + +FUNCTION {et.al.string.cite} { "\ \protect \BOthers {.}" } + +FUNCTION {et.al.string} { "\ \BOthers {.}" } + +FUNCTION {et.al.string.period} { "\ \BOthersPeriod {.}" } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {add.name.index} +{ % + % + make.index + { "%" * write$ newline$ + % Check for corporate author + field is.bibcorporate + { "\corporateAX{" } + { "\AX{" } + if$ + write$ + field nameptr sort.name.format format.name$ sortify write$ newline$ + "@" write$ + field nameptr format.index.name + "}%" * write$ newline$ + } + { "%" * write$ newline$ } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.name.cite.label} +{ 'field := + 'format.num.names := + % + field num.names$ 'numnames := % numnames is the total number of names + % contained in field + % + % It is implicit in the APA manual that if "et al." would refer + % to exactly one author, then this author should be named + % instead of "et al." + % + format.num.names numnames #1 - = + { numnames 'format.num.names := } + 'skip$ + if$ + % + % Format first author: with or without initials + % + #1 'nameptr := + cite.initials #1 = + { field nameptr format.cite.initials.name } + { field nameptr cite.name.format format.name$ } + if$ + add.name.index % Add index entry when desired. + % + numnames #1 = + 'skip$ + { format.num.names #1 = + { % + % First author et al. + % + et.al.string.cite write$ + } + { numnames #2 = + { % + % Given that format.num.names > 1, it is 2. + % Format second author. + % + #2 'nameptr := + field nameptr cite.name.format format.name$ 's := + % + % Check if 2nd author is explicit "others". + % If so, insert "et al." string. + % + s "others" = + { et.al.string.cite write$ } % First et al. + { % + % First \& Second + % + and.before.last write$ + s + add.name.index % Add index entry when desired. + } + if$ + } + { % + % 3 or more names, 2 or more must be cited + % + % for nameptr := 2 to format.num.names - 1 do + % + #2 'nameptr := + { nameptr format.num.names < } + { % + % Put comma between consecutive authors + % + comma.between.names write$ + % + % Format and add next author + % + field nameptr cite.name.format format.name$ + add.name.index % Add index entry when desired. + % + % Move to next author + % + nameptr #1 + 'nameptr := + } + while$ + % + % nameptr = format.num.names + % Format this author. + % + field nameptr cite.name.format format.name$ 's := + % + format.num.names numnames = + { % + % This is also the last author. Add (optional) comma. + % + comma.before.last write$ + % + % Check if this author is explicit "others". + % If so, insert "et al." string. + % + s "others" = + { et.al.string.cite write$ } + { and.before.last write$ + s + add.name.index % Add index entry when desired. + } + if$ + } + { % + % This is not the last author. + % Add comma, author name, and "et al." + % + comma.between.names write$ + s + add.name.index % Add index entry when desired. + % + comma.before.last et.al.string.cite * write$ + } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.title.cite.label} +{ % + % Formatting: check if formatted as article title or + % as book title, and insert this formatting. + % + is.atype + { "\APACciteatitle {" } + { "\APACcitebtitle {" } + if$ + % + title empty$ + { text empty$ + { type empty$ + { howpublished empty$ + { note empty$ + { url empty$ + { cite$ } + { url } + if$ + } + { note } + if$ + } + { howpublished } + if$ + } + { type } + if$ + } + { text } + if$ + } + { title } + if$ + % + % Connect with formatting. + % + * "}" * + % + % Write to output + % + write$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.author.editor.cite.label} +{ author empty$ + { editor empty$ + { % + % No author or editor: + % Use title or other description as citation label. + % + make.title.cite.label + "}{%" write$ newline$ + make.title.cite.label + } + { cite.num.names.full editor make.name.cite.label + "}{%" write$ newline$ + cite.num.names.short editor make.name.cite.label + } + if$ + } + { cite.num.names.full author make.name.cite.label + "}{%" write$ newline$ + cite.num.names.short author make.name.cite.label + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.author.cite.label} +{ author empty$ + { % + % No author: + % Use title or other description as citation label. + % + make.title.cite.label + "}{%" write$ newline$ + make.title.cite.label + } + { cite.num.names.full author make.name.cite.label + "}{%" write$ newline$ + cite.num.names.short author make.name.cite.label + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.definitive.year.supplement} +{ % + % Add "a", "b", etc. when necessary. + % + add.to.year #0 = + { "" } + { "{\protect " + year empty$ + { "\BCntND " * } + { year "\bibnodate" = + year "l" change.case$ "no date" = or + year "l" change.case$ "n.d." = or + { "\BCntND " * } + { year "\BIP" = + year "l" change.case$ "in press" = or + year "l" change.case$ "forthcoming" = or + { "\BCntIP " * } + { "\BCnt " * } + if$ + } + if$ + } + if$ + "{" * add.to.year int.to.str$ * "}}" * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {protect.year} +{ year empty$ + { "{\protect \bibnodate {}}" } + { year "\bibnodate" = + year "l" change.case$ "no date" = or + year "l" change.case$ "n.d." = or + { "{\protect \bibnodate {}}" } + { year "\BIP" = + year "l" change.case$ "in press" = or + year "l" change.case$ "forthcoming" = or + { "{\protect \BIP {}}" } + { year } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.definitive.year.label} +{ "{\protect \APACyear {" + originalyear empty$ + { protect.year } + { originalyear "\bibnodate" = % date of original publication unknown + originalyear "l" change.case$ "no date" = or + originalyear "l" change.case$ "n.d." = or + { translator empty$ + { protect.year } + { "{\protect \BTRANSL {}}~" protect.year * } + if$ + } + { year empty$ + { originalyear "/{\protect \bibnodate {}}" * } % 1923/n.d. + { originalyear year = + { protect.year } + { originalyear "/" * protect.year * } % 1923/1961 + if$ + } + if$ + } + if$ + } + if$ + * "}}%" * write$ newline$ + % + % Add "a", "b", etc. when necessary. + % + "{\protect \APACexlab {" "}}" + make.definitive.year.supplement enclose.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {make.cite.labels} +{ newline$ + % + % Write a few lines for testing purposes. + % + test + { "\bibitem [] {} \fullciteA {" cite$ * "}" * write$ newline$ + "\bibitem [] {} \citeA {" cite$ * "}" * write$ newline$ + } + 'skip$ + if$ + % + "\bibitem [\protect \citeauthoryear {%" write$ newline$ + % + % When key or firstkey is available, this takes precedence. + % + firstkey empty$ not + { % + % Full cite: firstkey. + % + firstkey write$ + "}{%" write$ newline$ + % + % Short cite: if key is not empty and cite.initials is 0, + % then key, else firstkey. + % + cite.initials #0 = + key empty$ not + and + { key } + { firstkey } + if$ + write$ + } + { key empty$ not + { % + % No firstkey, but key available: + % Both full and short labels are key. + % + key write$ + "}{%" write$ newline$ + key write$ + } + { % No key or firstkey, so find out which field + % to use as author. + % + % Check reference type: + % if result is 1 then possibly editor acts as author + % 2 then editor does not act as author + % 3 then key should have been used + % 0 then unknown reference type + ref.type #2 = + { make.author.cite.label } + { make.author.editor.cite.label } + if$ + } + if$ + } + if$ + "}{%" write$ newline$ + % + % Make year label that's used for citations + % + make.definitive.year.label write$ + "}]{%" write$ newline$ + cite$ write$ + "} " write$ newline$ + % author.year.sort.label write$ newline$ % for testing purposes + % year.label write$ newline$ % for testing purposes + % + % If the item is used in a meta-analysis, indicate this with + % a star. + % + "\APACinsertmetastar {%" write$ newline$ + cite$ write$ + "}%" write$ newline$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {editor.postfix} +{ editor num.names$ #1 > + { "(\BEDS)" } + { "(\BED)" } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {editor.trans.postfix} +{ editor num.names$ #1 > + { "(\BEDS{} \BAnd{} \BTRANSS)" } + { "(\BED{} \BAnd{} \BTRANS)" } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % "(Trans.)" postfix + % translator must not be empty + % +FUNCTION {trans.postfix} +{ translator num.names$ #1 > + { "(\BTRANSS)" } + { "(\BTRANS)" } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {authors.editors.reflist.apa5} +{ 'field := + 'dot := + % + field num.names$ 'numnames := % numnames is the total number of names + % contained in field + numnames 'format.num.names := % Format all authors + format.num.names name.max > % Unless this exceeds the maximum of 6. + { dot + { name.max 'format.num.names := } % Format 6 authors + { cite.num.names.full 'format.num.names := } % Format 1 editor + if$ + } + 'skip$ + if$ + % + % Enclose authors in APACrefauthors environment to allow crude style + % options in \LaTeX. + "\begin{APACrefauthors}%" + write$ newline$ + % + % It is kind of explicit in the APA manual that if "et al." would + % refer to exactly one author (the 7th), then this author should + % still be replaced by "et al.", unlike with citations. + % So format.num.names is not adapted. + % + % Format first author + % + #1 'nameptr := + field nameptr format.author.name + % + % Add period if required and if this is the only author. + % + numnames #1 = + dot + and + { add.period$ } + 'skip$ + if$ + add.name.index % Add index entry when desired. + % + numnames #1 = + 'skip$ + { format.num.names #1 = + { % + % First author et al. + % + comma.between.two + % + % Add period if required. + % + dot + { et.al.string.period * } + { et.al.string * } + if$ + write$ + } + { numnames #2 = + { % + % Given that format.num.names > 1, it is 2. + % + comma.between.two write$ + % + % Format second author. + % + #2 'nameptr := + field nameptr format.author.name 's := + % + % Check if 2nd author is explicit "others". + % If so, insert "et al." string. + % + s "others" = + { % + % First et al. + % Add period if required. + % + dot + { et.al.string.period } + { et.al.string } + if$ + write$ + } + { % + % First \& Second + % + and.before.last write$ + % + % Add period if required. + % + dot + { s add.period$ } + { s } + if$ + add.name.index % Add index entry when desired. + } + if$ + } + { % + % 3 or more names, 2 or more must be cited + % + % for nameptr := 2 to format.num.names - 1 do + % + #2 'nameptr := + { nameptr format.num.names < } + { % + % Put comma between consecutive authors + % + comma.between.names write$ + % + % Format and add next author + % + field nameptr format.author.name + add.name.index % Add index entry when desired. + % + % Move to next author + % + nameptr #1 + 'nameptr := + } + while$ + % + % nameptr = format.num.names + % Format this author. + % + field nameptr format.author.name 's := + % + format.num.names numnames = + { % + % This is also the last author. Add (optional) comma. + % + comma.before.last write$ + % + % Check if this author is explicit "others". + % If so, insert "et al." string. + % + s "others" = + { % + % Add period if required. + % + dot + { et.al.string.period } + { et.al.string } + if$ + write$ + } + { and.before.last write$ + % + % Add period if required. + % + dot + { s add.period$ } + { s } + if$ + add.name.index % Add index entry when desired. + } + if$ + } + { % + % This is not the last author. + % Add comma, author name, and "et al." + % + comma.between.names write$ + s + add.name.index % Add index entry when desired. + % + comma.before.last + % + % Add period if required. + % + dot + { et.al.string.period * } + { et.al.string * } + if$ + write$ + } + if$ + } + if$ + } + if$ + } + if$ + % + % End APACrefauthors environment. + "\end{APACrefauthors}%" + write$ newline$ +} + +FUNCTION {authors.reflist.apa6} +{ 'field := + 'dot := + field num.names$ 'numnames := + numnames #7 > + { #7 'format.num.names := } + { numnames 'format.num.names := } + if$ + "\begin{APACrefauthors}%" + write$ newline$ + #1 'nameptr := + field nameptr format.author.name + numnames #1 = + { dot + { %add.period$ +} + 'skip$ + if$ + add.name.index + } + { add.name.index + numnames #2 = + { comma.between.two write$ + #2 'nameptr := + field nameptr format.author.name 's := + s "others" = + { "`others' not consistent with 6th ed. of the APA Manual" + warning$ + dot + { et.al.string.period } + { et.al.string } + if$ + write$ newline$ + } + { and.before.last write$ + dot + { s add.period$ } + { s } + if$ + add.name.index + } + if$ + } + { %% for nameptr := 2 to format.num.names - 1 do + #2 'nameptr := + { nameptr format.num.names < } + { comma.between.names write$ + field nameptr format.author.name + add.name.index + nameptr #1 + 'nameptr := + } + while$ + field numnames format.author.name 's := + format.num.names numnames = + { comma.before.last write$ + s "others" = + { "`others' not consistent with 6th ed. of the APA " + "Manual" * + warning$ + dot + { et.al.string.period } + { et.al.string } + if$ + write$ + } + { no.and.before.last write$ + dot + { s add.period$ } + { s } + if$ + add.name.index + } + if$ + } + { dots.before.last write$ + s + add.name.index + } + if$ + } + if$ + } + if$ + "\end{APACrefauthors}%" + write$ newline$ +} + +FUNCTION {format.author.names} +{ 'field := + 'dot := + dot + { dot field authors.reflist.apa6 } + { dot field authors.editors.reflist.apa5 } + if$ +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.authors} +{ #1 author format.author.names } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.editors.as.authors} +{ #0 editor format.author.names + "\ " editor.postfix * add.period$ write$ newline$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.ed.trans.as.authors} +{ #0 editor format.author.names + "\ " editor.trans.postfix * add.period$ write$ newline$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.editor.names} +{ 'field := + % + field num.names$ 'numnames := % numnames is the total number of names + % contained in field + numnames 'format.num.names := % Format all authors + format.num.names name.max > % Unless this exceeds the maximum of 6. + { #1 'format.num.names := } % Then it becomes 1 (First et al.) + 'skip$ + if$ + % + % Format first editor + % + field #1 format.editor.name + % + numnames #1 = + 'skip$ + { format.num.names #1 = + { et.al.string * } % First editor et al., no comma. + { numnames #2 = + { % + % Given that format.num.names > 1, it is 2. + % No comma. Format second editor. + % + field #2 format.editor.name 's := + % + % Check if 2nd editor is explicit "others". + % If so, insert "et al." string. + % + s "others" = + { et.al.string * } % First et al. + { and.before.last * s * } % First \& Second + if$ + } + { % + % 3 or more names, 2 or more must be cited + % + % for nameptr := 2 to format.num.names - 1 do + % + #2 'nameptr := + { nameptr format.num.names < } + { % + % Put comma between consecutive editors + % + comma.between.names * + % + % Format and add next editor + % + field nameptr format.editor.name * + % + % Move to next editor + % + nameptr #1 + 'nameptr := + } + while$ + % + % nameptr = format.num.names + % Format this editor. + % + field nameptr format.editor.name 's := + % + format.num.names numnames = + { % + % This is also the last editor. Add (optional) comma. + % + comma.before.last * + % + % Check if this editor is explicit "others". + % If so, insert "et al." string. + % + s "others" = + { et.al.string * } + { and.before.last * s * } + if$ + } + { % + % This is not the last editor. + % Add comma, editor name, and "et al." + % + comma.between.names * s * + comma.before.last * et.al.string * + } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format editors in case editors do not act as authors + % (such as reference to chapter in edited book) + % + % L. W. Poon (Ed.) (1 editor) + % or + % A. S. Gurman \& D. P. Kniskern (Eds.) (2 editors) + % or + % L. Poon, A. Jones, \& D. P. Smith (Eds.) (>2 editors) + % + % editor must not be empty + % +FUNCTION {format.editors.in.line} +{ editor format.editor.names + editor.postfix connect.with.space.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format editors in case editors are also translators + % and do not act as authors + % (such as reference to chapter in edited book + % of translated articles) + % + % L. W. Poon (Ed. and Trans.) (1 editor) + % or + % A. S. Gurman \& D. P. Kniskern (Eds. and Trans.) (2 editors) + % or + % L. Poon, A. Jones, \& D. P. Smith (Eds. and Trans.) (>2 editors) + % + % editor must not be empty + % +FUNCTION {format.editors.trans.in.line} +{ editor format.editor.names + editor.trans.postfix connect.with.space.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format translators in case translators act as editors + % (such as reference to chapter in translated book) + % + % L. W. Poon (Trans.) (1 translator) + % or + % A. S. Gurman \& D. P. Kniskern (Trans.) (2 translators) + % or + % L. Poon, A. Jones, \& D. P. Smith (Trans.) (>2 translators) + % + % translator must not be empty + % +FUNCTION {format.translators.in.line} +{ translator format.editor.names + trans.postfix connect.with.space.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format translators in case translator does not act as editor + % (such as reference to translated book) + % + % L. Solotaroff, Trans. + % +FUNCTION {format.translators.in.paren.check} +{ translator empty$ + { "" } + { translator format.editor.names + translator num.names$ #1 > + { ", \BTRANSS{}" * } + { ", \BTRANS{}" * } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format editors and translators in case neither act as editor + % (such as reference to edited or translated book with a + % a single author) + % + % L. Solotaroff, Ed. + % L. Solotaroff, Ed. \& Trans. + % L. Solotaroff, Trans. + % L. Solotaroff, Ed. \& S. Prokofieff, Trans. + % +FUNCTION {format.editors.translators.in.paren.check} +{ editor empty$ + { translator empty$ + { "" } + { translator format.editor.names + translator num.names$ #1 > + { ", \BTRANSS{}" * } + { ", \BTRANS{}" * } + if$ + } + if$ + } + { editor format.editor.names + editor num.names$ #1 > + { ", \BEDS{}" * } + { ", \BED{}" * } + if$ + translator empty$ + 'skip$ + { editor translator = + { editor num.names$ #1 > + { " \BAnd{} \BTRANSS" * } + { " \BAnd{} \BTRANS" * } + if$ + } + { " \BAnd{} " * + translator format.editor.names * + translator num.names$ #1 > + { ", \BTRANSS{}" * } + { ", \BTRANS{}" * } + if$ + } + if$ + } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % translator of article + % +FUNCTION {format.atrans.check} +{ format.translators.in.paren.check parenthesize.check } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format "In editor (Ed.), " + % +FUNCTION {format.in.editors} +{ "\BIn{} " + editor empty$ + 'skip$ + { format.editors.in.line * ", " * } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format "In translator (Trans.)," + % +FUNCTION {format.in.trans} +{ "\BIn{} " + translator empty$ + 'skip$ + { format.translators.in.line * ", " * } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format "In editor (Ed. and Trans.)" + % or "In editor (Ed.)" if editor not equal to translator + % +FUNCTION {format.in.editors.trans} +%{ "\BIn{} " Commented by SPI +{ " " + editor empty$ + { translator empty$ + 'skip$ + { format.translators.in.line * ", " * } + if$ + } + { translator empty$ + { format.editors.in.line * } + { editor translator = + { format.editors.trans.in.line * } + { format.editors.in.line * } + if$ + } + if$ + ", " * + } + if$ +} + +FUNCTION {in.format.in.editors.trans} +{ "\BIn{} " + editor empty$ + { translator empty$ + 'skip$ + { format.translators.in.line * ", " * } + if$ + } + { translator empty$ + { format.editors.in.line * } + { editor translator = + { format.editors.trans.in.line * } + { format.editors.in.line * } + if$ + } + if$ + ", " * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.year.check} +{ "\APACrefYear{" + protect.year * + % + % Add "a", "b", etc. when necessary. + % + make.definitive.year.supplement * + "}" * +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +FUNCTION {format.year.month.day.check} +{ "\APACrefYearMonthDay{" + protect.year * + % + % Add "a", "b", etc. when necessary. + % + make.definitive.year.supplement * + "}{" * + % + % Add month and day when present. + % + month empty$ + 'skip$ + { month * } + if$ + "}{" * + day empty$ + 'skip$ + { day * } + if$ + "}" * +} +FUNCTION {format.year.nomonth.day.check} +{ "\APACrefYearMonthDay{" + protect.year * + % + % Add "a", "b", etc. when necessary. + % + make.definitive.year.supplement * + "}{" * + % + % Add month and day when present. + % + month empty$ + 'skip$ + { } + if$ + "}{" * + day empty$ + 'skip$ + { day * } + if$ + "}" * +} + +FUNCTION {format.atitle.no.dot} +{ "{\BBOQ}" swap$ + "{\BBCQ}" swap$ + duplicate$ empty$ + 'skip$ + { duplicate$ + % Two arguments: Title twice: (1) don't change case; (2) change case + "\APACrefatitle {" swap$ * "} {" * swap$ + "t" change.case$ + * "}" * + } + if$ + enclose.check +} + +FUNCTION {format.atitle.dot} +{ "{\BBOQ}" swap$ + "{\BBCQ}" swap$ + duplicate$ empty$ + 'skip$ + { duplicate$ + % Two arguments: Title twice: (1) don't change case; (2) change case + "\APACrefatitle {" swap$ * "} {" * swap$ + "t" change.case$ + * "}" * add.period$ + } + if$ + enclose.check +} + +FUNCTION {format.atitle.connect} +{ swap$ + duplicate$ empty$ + { pop$ + format.atitle.dot + } + { swap$ + format.atitle.no.dot + swap$ connect.with.space.check + add.period$ + } + if$ +} + +FUNCTION {format.btitle.no.dot} +{ duplicate$ empty$ + { pop$ + "" + } + { duplicate$ + % Two arguments: Title twice: (1) don't change case; (2) change case + "\APACrefbtitle {" swap$ * "} {" * swap$ + "t" change.case$ + * "}" * + } + if$ +} + +FUNCTION {format.btitle.dot} +{ duplicate$ empty$ + { pop$ + "" + } + { add.period$ format.btitle.no.dot } + if$ +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title of book and similar + % field must be on top of stack + % second element on stack must be connected: + % if that is empty, then btitle.dot + % else btitle.no.dot, connect, and add period + % +FUNCTION {format.btitle.connect} +{ swap$ + duplicate$ empty$ + { pop$ + format.btitle.dot + } + { swap$ + format.btitle.no.dot + swap$ connect.with.space.check + add.period$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title of book and similar + % field must be on top of stack + % second element on stack must be connected + % +FUNCTION {format.btitle.connect.no.dot} +{ swap$ + duplicate$ empty$ + { pop$ + format.btitle.no.dot + } + { swap$ + format.btitle.no.dot + swap$ connect.with.space.check + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format englishtitle (of nonenglish article, etc.) + % +FUNCTION {format.aetitle.check} +{ englishtitle empty$ + { "" } + { % Two arguments: Title twice: (1) don't change case; (2) change case + "\APACrefaetitle {" englishtitle * "} {" * + englishtitle "t" change.case$ * "}" * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format englishtitle (of nonenglish book, etc.) + % +FUNCTION {format.betitle.check} +{ englishtitle empty$ + { "" } + { % Two arguments: Title twice: (1) don't change case; (2) change case + "\APACrefbetitle {" englishtitle * "} {" * + englishtitle "t" change.case$ * "}" * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format type (of article, etc.) + % +FUNCTION {format.atype.check} +{ type bracket.check } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format title and englishtitle (of article, etc.) + % +FUNCTION {format.atitle.check} +{ format.aetitle.check + title format.atitle.connect +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format title, englishtitle, and type + % (of article, etc.) + % +FUNCTION {format.atitle.type.check} +{ format.aetitle.check + format.atype.check connect.with.space.check + title format.atitle.connect +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format title, englishtitle, + % and translator (of article, etc.) + % +FUNCTION {format.atitle.trans.check} +{ format.aetitle.check + format.atrans.check connect.with.space.check + title format.atitle.connect +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format title, englishtitle, type, + % and translator (of article, etc.) + % +FUNCTION {format.atitle.type.trans.check} +{ format.aetitle.check + format.atype.check connect.with.space.check + format.atrans.check connect.with.space.check + title format.atitle.connect +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format journal, volume, number and pages + % call with + % formatted.pages format.journal.vol.num.pages.check + % +FUNCTION { format.journal.vol.num.pages.check } +{ "journal" journal warning.if.empty + duplicate$ empty$ + journal empty$ and + volume empty$ and + number empty$ and + { pop$ "" } + { "\APACjournalVolNumPages{" journal "" connect.check + "}{" * volume "" connect.check + "}{" * number "" connect.check + "}{" * swap$ "" connect.check + ",}" * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % volume of book, checks whether + % "Volume" or "Volumes" + % + % call with + % field format.bvolume.check + % +FUNCTION {format.bvolume.check} +{ duplicate$ empty$ + 'skip$ + { duplicate$ multi.result.check + { "\BVOLS" swap$ tie.or.space.connect } + { "\BVOL" swap$ tie.or.space.connect } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % edition of book, must not be empty + % call with + % field format.edition.check + % +FUNCTION {format.edition.check} +{ duplicate$ empty$ + 'skip$ + { "\PrintOrdinal{" swap$ * "}" * + "\BEd" connect.with.space.check + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % volume and edition of book + % +FUNCTION {format.bvol.edition.check} +{ edition format.edition.check + volume format.bvolume.check + connect.with.comma.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % volume and edition of book + % +FUNCTION {format.bvol.edition} +{ format.bvol.edition.check + parenthesize.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % volume and edition and translator of translated book + % +FUNCTION {format.bvol.edition.trans} +{ format.bvol.edition.check + format.translators.in.paren.check connect.with.semicolon.check + parenthesize.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % volume, edition, editor, and translator of (translated) book + % +FUNCTION {format.bvol.edition.editor.trans} +{ format.bvol.edition.check + format.editors.translators.in.paren.check connect.with.semicolon.check + parenthesize.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % formats pages by first checking if 1 or more pages + % and prefixing pages with "p." or "pp." (these strings + % are given in the commands \BPG and \BPGS, respectively), + % whichever is applicable, and do a tie or space connect + % + % call with + % field format.bpages.check + % +FUNCTION {format.bpages.check} +{ duplicate$ empty$ + 'skip$ + { duplicate$ multi.result.check + { "\BPGS" swap$ tie.or.space.connect } + { "\BPG~" swap$ * } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % formats chapters by first checking if 1 or more chapters + % and prefixing pages with "chap." (this string + % is given in the commands \BCHAP and \BCHAPS, respectively), + % whichever is applicable, and do a tie or space connect + % + % call with + % field format.bchapter.check + % +FUNCTION {format.bchapter.check} +{ duplicate$ empty$ + 'skip$ + { duplicate$ multi.result.check + { "\BCHAPS" swap$ tie.or.space.connect } + { "\BCHAP" swap$ tie.or.space.connect } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % volume, edition, and pages or chapter of article in book etc. + % +FUNCTION {format.bvol.edition.pages} +{ format.bvol.edition.check + pages empty$ + { chapter format.bchapter.check connect.with.comma.check } + { pages format.bpages.check connect.with.comma.check } + if$ + parenthesize.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title, volume, edition of book + % +FUNCTION {format.btitle.vol.edition} +{ format.betitle.check + format.bvol.edition connect.with.space.check + title format.btitle.connect.no.dot +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title, volume, edition, and translator of book + % +FUNCTION {format.btitle.vol.edition.trans} +{ format.betitle.check + format.bvol.edition.trans connect.with.space.check + title format.btitle.connect.no.dot +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title, volume, edition, editor, and translator of book + % +FUNCTION {format.btitle.vol.edition.editor.trans} +{ format.betitle.check + format.bvol.edition.editor.trans connect.with.space.check + title format.btitle.connect.no.dot +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format address and publisher of book etc. + % + % New York: Wiley + % or + % Wiley (if address empty) + % or + % New York (if publisher empty) + % +FUNCTION {format.address.publisher} +{ % + % If publisher = author or publisher = "author" or publisher = "Author" + % then hand over the final choice how to format this to \LaTeX. + % (I could imagine similar code for editors, but the APA manual does + % not mention it and then we'd have to check whether the editor is in + % the author position, so let's keep it simple until someone complains.) + % + author empty$ + publisher empty$ or + { publisher "\APACaddressPublisher{" } + { author publisher = + "author" publisher = or + "Author" publisher = or + { author "\APACaddressPublisherEqAuth{" } + { publisher "\APACaddressPublisher{" } + if$ + } + if$ + address "" connect.check "}{" * + % Recover publisher that was pushed onto the stack previously. + swap$ "" connect.check "}" * +} + +FUNCTION {format.address.publisher.check} +{ publisher empty$ + address empty$ + and + 'skip$ + { + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.address.publisher + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format number as in reports: No. 2017 + % call with + % field format.rnumber.check + % +FUNCTION {format.rnumber.check} +{ duplicate$ empty$ + 'skip$ + { duplicate$ multi.result.check + { "\BNUMS" swap$ tie.or.space.connect } + { "\BNUM" swap$ tie.or.space.connect } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format type and number of a standalone item + % call with + % format.type.number + % +FUNCTION { format.type.number } +{ type empty$ + { type.2 } + { type } + if$ + number empty$ + { bracket.check } + { number format.rnumber.check connect.with.space.check + parenthesize.check + } + if$ +} + +FUNCTION {format.howpublished} +{ howpublished empty$ + 'skip$ + { % clear the stack + duplicate$ empty$ + 'pop$ + { output.dot.new.block } + if$ + "\APAChowpublished {" howpublished * "}" * + } + if$ +} +FUNCTION {output.howpublished} +{ howpublished empty$ + 'skip$ + { "\APAChowpublished {" howpublished * "}" * + output.dot.new.block + } + if$ +} +FUNCTION {howpublished.block} +{ howpublished empty$ + 'skip$ + { start.new.block + "\APAChowpublished {" howpublished * "}" * + output.dot.end.block + } + if$ +} +FUNCTION {begin.end.url.env} +{ "\begin{APACrefURL} " + lastchecked empty$ + { urldate empty$ + 'skip$ + { "[{" * urldate * "}]" * } + if$ + } + { "[{" * lastchecked * "}]" * } + if$ + " \end{APACrefURL} " +} + +FUNCTION {begin.end.doi.env} +{ "\begin{APACrefDOI} " + " \end{APACrefDOI} " +} + +FUNCTION {begin.end.msg.env} +{ "\begin{APACrefURLmsg} " + " \end{APACrefURLmsg} " +} +FUNCTION {format.url} +{ type.2 empty$ + { begin.end.url.env } + { type.2 "\bibmessage" = + { begin.end.msg.env } + { begin.end.url.env } + if$ + } + if$ +%%"\url{" url * "}" * + "{" url * "}" * + enclose.check +} +FUNCTION {url.block} +{ doi empty$ + { url empty$ + 'skip$ + { start.new.block + format.url + output.end.block + } + if$ + } + 'skip$ + if$ +} +FUNCTION {format.doi} +{ begin.end.doi.env + "\doi{" doi * "}" * + enclose.check +} +FUNCTION {doi.block} +{ doi empty$ + 'skip$ + { start.new.block + format.doi + output.end.block + } + if$ +} +FUNCTION {format.note} +{ "\APACrefnote{" "}" note enclose.check } +FUNCTION {note.block} +{ note empty$ + 'skip$ + { start.new.block + format.note + output.end.block + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format original year of publication and note + % (reprint or translation) + % +FUNCTION {format.orig.year.note} +{ originalyear empty$ + { format.note } + { "\APACorigyearnote{" + originalyear "" connect.check "}{" * + note "" connect.check "}" * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format original journal of publication and note + % (reprint or translation) + % +FUNCTION {format.orig.journal.note} +{ "\APACorigjournalnote{" + originalyear "" connect.check "}{" * + originaljournal "" connect.check "}{" * + originalvolume "" connect.check "}{" * + originalnumber "" connect.check "}{" * + originalpages "" connect.check "}{" * + note "" connect.check "}" * +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format original book of publication and note + % (reprint or translation) + % +FUNCTION {format.orig.book.note} +{ "\APACorigbooknote{" originalyear "" connect.check "}{" * + % + originaleditor empty$ + 'skip$ + { originaleditor num.names$ #1 > + { "\APACorigEDS {" * originaleditor format.editor.names * "}" * } + { "\APACorigED {" * originaleditor format.editor.names * "}" * } + if$ + } + if$ + % + "}{" * + originalbooktitle format.btitle.no.dot "" connect.check "} {" * + originaledition format.edition.check "" connect.check "} {" * + originalvolume format.bvolume.check "" connect.check "} {" * + originalpages format.bpages.check "" connect.check "} {" * + originaladdress "" connect.check "} {" * + originalpublisher "" connect.check "} {" * + note "" connect.check "}" * +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format information about original publication of reprint + % and format optional note + % +FUNCTION {format.orig.note} +{ originaljournal empty$ + { originalbooktitle empty$ + { note empty$ + { originalyear empty$ + 'skip$ + { originalyear "\bibnodate" = + originalyear "l" change.case$ "no date" = or + originalyear "l" change.case$ "n.d." = or + 'skip$ + { output.new.block + format.orig.year.note + } + if$ + } + if$ + } + { output.new.block + format.orig.year.note + } + if$ + } + { output.new.block + format.orig.book.note + } + if$ + } + { output.new.block + format.orig.journal.note + } + if$ +} +FUNCTION {fin.entry} +{ %doi empty$ + % 'skip$ + % { output.new.block + % format.doi + % } + % if$ + output.end.block + "\PrintBackRefs{\CurrentBib}" write$ newline$ + test + { "\vspace{\baselineskip}" write$ newline$ } + 'skip$ + if$ +} +FUNCTION {fin.entry.2} +{ doi.block + "\PrintBackRefs{\CurrentBib}" write$ newline$ + test + { "\vspace{\baselineskip}" write$ newline$ } + 'skip$ + if$ +} + +FUNCTION {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { " {[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + { "{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {periodical} +{ + author empty$ + % + % no author: possibly special issue with editors as authors + % (APA manual, ex. 11, p. 121) + % + { editor empty$ + % + % no author or editor: title serves as author. + % title formatted as article title (APA manual not consistent in this, + % compare statement on p. 119: ``treat as book title'' and + % example 8, p. 121: no underlining => article title) + % + { format.atitle.type.trans.check output.new.block + % + % now formatted date on top of stack + % + output.dot.new.block + } + % + % format editor and year, and check if year is present + % format article title and check if title or type present + % + { format.editors.as.authors start.new.block + % + % now formatted date on top of stack + % + output.dot.new.block + format.atitle.type.trans.check output.new.block + } + if$ + } + % + % format author and year, and check if year is present + % format article title and check if title or type present + % + { format.authors start.new.block + % + % now formatted date on top of stack + % + output.dot.new.block + format.atitle.type.trans.check output.new.block + } + if$ + % + % format journal name, volume and issue number, and pages + % and check if journal not empty + % + format.journal.vol.num.pages.check +% output.new.block + doi empty$ + 'skip$ + { output.new.block + format.doi + } + if$ + % + % if not empty, insert howpublished. + % (used if article is retrieved from the internet) + % +% format.howpublished add.period$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % possible reprint and optional note + % + format.orig.note + output.new.block + format.eprint + output.new.block + format.primaryClass + fin.entry + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % journal article + % +FUNCTION {article} +{ pages format.year.month.day.check periodical } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % magazine article + % +FUNCTION {magazine} +{ pages format.year.month.day.check periodical } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % newspaper article + % +FUNCTION {newspaper} +{ pages format.bpages.check format.year.month.day.check periodical } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % (translation of) entire book + % +FUNCTION {book} +{ % + % author or editor, + % year, title, englishtitle, translator + % + author empty$ + % + % no author: possibly edited book with editors as authors + % + { editor empty$ + % + % no author or editor: title serves as author. + % title formatted as book title + % + { format.btitle.vol.edition.trans + format.type.number connect.with.space.check + output.dot.new.block + format.year.check add.period$ + } + % + % format editor and year, and check if year is present + % format booktitle, volume, and edition and check if title present + % + { translator empty$ + { format.editors.as.authors start.new.block + format.year.check output.dot.new.block + format.btitle.vol.edition + } + % + % format translator correctly + % + { translator editor = + not + { format.editors.as.authors start.new.block + format.year.check output.dot.new.block + format.btitle.vol.edition.trans + } + { format.ed.trans.as.authors start.new.block + format.year.check output.dot.new.block + format.btitle.vol.edition + } + if$ + } + if$ + format.type.number connect.with.space.check + add.period$ + } + if$ + } + % + % format author and year, and check if year is present + % format booktitle, volume, and edition and check if title present + % + { format.authors start.new.block + format.year.check output.dot.new.block + format.btitle.vol.edition.editor.trans + format.type.number connect.with.space.check + add.period$ + } + if$ + % + % format address and publisher + % + format.address.publisher.check + % + % if not empty, insert howpublished. + % (used if book is retrieved from the internet) + % + format.howpublished add.period$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format original publication (of reprint/translation) + % and optional note + % + format.orig.note + fin.entry +} +FUNCTION {incollection} +{ author empty$ + { editor.ne.trans + { format.atitle.type.trans.check } + { format.atitle.type.check } + if$ + output.new.block + format.year.month.day.check add.period$ + } + { format.authors start.new.block + format.year.month.day.check output.dot.new.block + editor.ne.trans + { format.atitle.type.trans.check } + { format.atitle.type.check } + if$ + } + if$ + editor empty$ + translator empty$ and + edition empty$ and + volume empty$ and + pages empty$ and + chapter empty$ and + booktitle empty$ and + 'skip$ + { + output.new.block + format.in.editors.trans + format.bvol.edition.pages + booktitle format.btitle.connect * add.period$ + } + if$ + format.address.publisher.check + format.howpublished add.period$ + url empty$ + 'skip$ + { + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + format.orig.note + fin.entry +} + +FUNCTION {inbookcollection} +{ author empty$ + { editor.ne.trans + { format.atitle.type.trans.check } + { format.atitle.type.check } + if$ + output.new.block + format.year.month.day.check add.period$ + } + { format.authors start.new.block + format.year.month.day.check output.dot.new.block + editor.ne.trans + { format.atitle.type.trans.check } + { format.atitle.type.check } + if$ + } + if$ + editor empty$ + translator empty$ and + edition empty$ and + volume empty$ and + pages empty$ and + chapter empty$ and + booktitle empty$ and + 'skip$ + { + output.new.block + in.format.in.editors.trans + format.bvol.edition.pages + booktitle format.btitle.connect * add.period$ + } + if$ + format.address.publisher.check + format.howpublished add.period$ + url empty$ + 'skip$ + { + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + format.orig.note + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % technical report number + % +FUNCTION {format.tr.number} +{ type empty$ + { "\BTR{}" } + { type "\bibnotype" = + { "" } + { type } + if$ + } + if$ + number format.rnumber.check connect.with.space.check +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title, volume, edition, report number + % +FUNCTION {format.tr.title.number} +{ format.betitle.check + % Single out the situation in which there is no number + % and type = {\bibnotype}, i.e., no type as well. + % (Why not use book then?) + type empty$ + { % Now, we're in the regular situation with at least a + % number, a type, a volume, or an edition. + "\APACbVolEdTR{" format.bvol.edition.check * "}{" * + format.tr.number * "}" * + } + { type "\bibnotype" = + number empty$ + volume empty$ + edition empty$ + and + and + and + { "" } + { % Now, we're in the regular situation with at least a + % number, a type, a volume, or an edition. + "\APACbVolEdTR {" format.bvol.edition.check * "}{" * + format.tr.number * "}" * + } + if$ + } + if$ + connect.with.space.check + title format.btitle.connect +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % format address and institution of reports etc. + % + % Washington, DC: National Institute of Education + % or + % National Institute of Education (if address empty) + % + % warning if no institution + % +FUNCTION {format.address.institution.check} +{ url empty$ + doi empty$ and + { "institution" institution warning.if.empty + "address" address warning.if.empty + } + 'skip$ + if$ + institution empty$ + address empty$ + and + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + % + % If institution = author or institution = "author" + % or institution = "Author" then hand over the final choice how to + % format this to \LaTeX. See also format.address.publisher + % + author empty$ + institution empty$ or + { institution "\APACaddressInstitution{" } + { author institution = + "author" institution = or + "Author" institution = or + { author "\APACaddressInstitutionEqAuth{" } + { institution "\APACaddressInstitution{" } + if$ + } + if$ + address "" connect.check "}{" * + % Recover institution that was pushed onto the stack previously. + swap$ "" connect.check "}" * + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % reports + % +FUNCTION {techreport} +{ author empty$ + % + % no author: possibly edited report with editors as authors + % + { editor empty$ + % + % no author or editor: title serves as author. + % title formatted as book title + % + { format.tr.title.number output.dot.new.block + format.year.month.day.check add.period$ + } + % + % format editor and year, and check if year is present + % format report title and check if title present + % format volume, edition, type, and number + % + { format.editors.as.authors start.new.block + format.year.month.day.check output.dot.new.block + format.tr.title.number add.period$ + } + if$ + } + % + % format author and year, and check if year is present + % format report title and check if title present + % format volume, edition, type, and number + % + { format.authors start.new.block + format.year.month.day.check output.dot.new.block + format.tr.title.number add.period$ + } + if$ + % + % format address and institution, check if institution present + % + format.address.institution.check + % + % if not empty, insert howpublished. + % (used if report is retrieved from the internet) + % + format.howpublished add.period$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format optional note + % + note empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.note + } + if$ + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % (translated) article or chapter in report + % +FUNCTION {intechreport} +{ author empty$ + % + % no author: title serves as author. + % title formatted as article title (APA manual not consistent in this, + % compare statement on p. 119: ``treat as book title'' and + % example 8, p. 121: no underlining => article title) + % + { editor.ne.trans + { format.atitle.trans.check } + { format.atitle.check } + if$ + output.new.block + format.year.month.day.check output.dot.new.block + } + % + % format author and year, and check if year is present + % format article title and check if title or type present + % + { format.authors start.new.block + format.year.month.day.check output.dot.new.block + editor.ne.trans + { format.atitle.trans.check } + { format.atitle.check } + if$ + output.new.block + } + if$ + % + % format "In " editor " (Ed. \& Trans.), " + % booktitle, volume, edition, pages + % + format.in.editors.trans + % + % volume, edition, report type and number, pages + % + "\APACbVolEdTRpgs {" format.bvol.edition.check * "} {" * + format.tr.number * + "} {" * pages format.bpages.check * + "}" * + % + booktitle format.btitle.connect * + add.period$ + % + % format address and publisher + % + format.address.institution.check + % + % if not empty, insert howpublished. + % (used if report is retrieved from the internet) + % + format.howpublished add.period$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format original publication (of reprint/translation) + % and optional note + % + format.orig.note + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % papers presented at conferences etc. + % +FUNCTION {lecture} +{ author empty$ + { "author" author warning.if.empty } + { format.authors start.new.block } + if$ + % + % format year, month, and day, and check if year present + % format title and check if title present + % format howpublished and check if howpublished present + % + format.year.month.day.check output.dot.new.block + symposium empty$ + { format.betitle.check + title format.btitle.connect output.new.block + howpublished empty$ + { "symposium and howpublished missing in " cite$ * warning$ + "" + } + { "\APAChowpublished {" howpublished * "}" * } + if$ + address connect.with.comma.check + } + { format.atitle.type.check output.new.block + "\BIn{} " + chair empty$ + 'skip$ + { chair format.editor.names + chair num.names$ #1 > + { "(\BCHAIRS)" } + { "(\BCHAIR)" } + if$ + connect.with.space.check * ", " * + } + if$ + symposium format.btitle.no.dot * + format.howpublished + address connect.with.comma.check + } + if$ + add.period$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format optional note + % + note empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.note + } + if$ + fin.entry +} + +FUNCTION {format.ttitle.type.school} +{ doi empty$ not + url empty$ not or + howpublished empty$ not or + { pop$ } + { swap$ pop$ } + if$ + type empty$ + 'skip$ + { type "\bibnotype" = + { pop$ + "" + } + { pop$ + type + } + if$ + } + if$ + duplicate$ empty$ + doi empty$ + url empty$ and + howpublished empty$ and + address empty$ + school empty$ and or and + { 'pop$ + title empty$ not + englishtitle empty$ not or + { start.new.block } + 'skip$ + if$ + "" + } + { start.new.block + "\APACtypeAddressSchool {" swap$ * "}{" * + doi empty$ + url empty$ and + howpublished empty$ and + { "}{}" * } + { address "" connect.check "}{" * + school "" connect.check "}" * + } + if$ + } + if$ + format.betitle.check swap$ + connect.with.space.check + "title" title warning.if.empty + title format.btitle.connect +} +FUNCTION {unpub.address.school.block} +{ doi empty$ + url empty$ and + howpublished empty$ and + { "school" school warning.if.empty + school empty$ + address empty$ and + 'skip$ + { start.new.block + "\APACaddressSchool {" address "" connect.check "}{" * + school "" connect.check "}" * + output.dot.end.block + } + if$ + } + 'skip$ + if$ +} +FUNCTION {thesis} +{ journal empty$ not + { pop$ pop$ + article + } + { author empty$ + { "author" author warning.if.empty } + { format.authors start.new.block } + if$ + format.year.check output.dot.end.block + format.ttitle.type.school output.dot.end.block + unpub.address.school.block + howpublished.block + url.block + note.block + fin.entry.2 + } + if$ +} +FUNCTION {phdthesis} +{ "\BPhD" "\BUPhD" thesis } +FUNCTION {mastersthesis} +{ "\BMTh" "\BUMTh" thesis } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title of something (used in unpublished and misc) + % english translation of title + % type and number of something + % +FUNCTION {format.btitle.type.num} +{ format.betitle.check + format.bvol.edition connect.with.space.check + format.type.number + connect.with.space.check + title empty$ + { add.period$ } + { title format.btitle.connect } + if$ +} + +FUNCTION {format.version} +{ + version empty$ + { "" } + { " " * version *} + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title of message or software-related thing (used in misc) + % english translation of title + % type and number of something + % +FUNCTION {format.mtitle.type.num} +{ format.aetitle.check + format.bvol.edition connect.with.space.check + type.2 "\bibmessage" = + { number empty$ + 'skip$ + { type.2 number tie.or.space.connect + bracket.check + connect.with.space.check + } + if$ + } + { format.type.number + connect.with.space.check + } + if$ + title empty$ + { add.period$ } + { title format.atitle.connect } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % title, english translation of title, + % type and number of something (used in misc) + % +FUNCTION {output.misctitle.type.num} +{ type.2 empty$ + { format.btitle.type.num } + { type.2 "\bibmessage" = + type.2 "\bibcomputerprogram" = or + type.2 "\bibcomputerprogrammanual" = or + type.2 "\bibcomputerprogramandmanual" = or + type.2 "\bibcomputersoftware" = or + type.2 "\bibcomputersoftwaremanual" = or + type.2 "\bibcomputersoftwareandmanual" = or + type.2 "\bibprogramminglanguage" = or + { format.mtitle.type.num } + { format.btitle.type.num } + if$ + } + if$ +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % unpublished manuscripts, etc. + % +FUNCTION {unpublished} +{ check.relevant.fields + author empty$ + % + % no author: possibly edited book with editors as authors + % + { editor empty$ + % + % no author or editor: title serves as author. + % title formatted as book title + % + { format.btitle.type.num output.new.block + format.year.month.day.check add.period$ + } + % + % format editor and year, and check if year is present + % format book title, volume, and edition and check if title present + % + { format.editors.as.authors start.new.block + format.year.month.day.check output.dot.new.block + format.btitle.type.num + } + if$ + } + % + % format author and year, and check if year is present + % format book title, volume, and edition + % and check if title or type present + % + { format.authors start.new.block + format.year.month.day.check output.dot.new.block + format.btitle.type.num + } + if$ + howpublished empty$ + organization empty$ and + address empty$ and + 'skip$ + { output.new.block + "\APAChowpublished{" "}" howpublished enclose.check + organization connect.with.comma.check + address connect.with.comma.check + add.period$ + } + if$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format optional note + % + note empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.note + } + if$ + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % nonprint media and other things that don't fit + % +FUNCTION {misc} +{ % + % To handle @manual: use type.2 instead of type. + type.2 empty$ + type empty$ not and + { type 'type.2 := } + 'skip$ + if$ + % + author empty$ + % + % no author: possibly edited item with editors as authors + % + { editor empty$ + % + % no author or editor: title/type serves as author. + % title formatted as book title + % + % if no title and no type, howpublished is title + % + { title empty$ + type.2 empty$ and + { howpublished empty$ + { "No author, editor, title, type, and howpublished in " + cite$ * warning$ + "" + } + { "\APAChowpublished{" howpublished * "}" * add.period$ } + if$ + format.year.month.day.check add.period$ + } + { output.misctitle.type.num %output.new.block + format.year.month.day.check add.period$ + format.howpublished add.period$ + } + if$ + } + % + % format editor and year, and check if year is present + % format book title, volume, and edition and check if title present + % + { format.editors.as.authors start.new.block + format.year.month.day.check output.dot.new.block + output.misctitle.type.num output.dot.new.block + format.howpublished add.period$ + } + if$ + } + % + % format author and year, and check if year is present + % format book title, volume, and edition + % and check if title or type present + % + { format.authors start.new.block + format.year.month.day.check output.dot.new.block + output.misctitle.type.num + format.howpublished add.period$ + } + if$ + % + address empty$ + publisher empty$ and + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.address.publisher add.period$ + } + if$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format optional note + % + note empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.note + } + if$ + fin.entry +} + +FUNCTION {softmisc} +{ % + % To handle @manual: use type.2 instead of type. + type.2 empty$ + type empty$ not and + { type 'type.2 := } + 'skip$ + if$ + % + author empty$ + % + % no author: possibly edited item with editors as authors + % + { editor empty$ + % + % no author or editor: title/type serves as author. + % title formatted as book title + % + % if no title and no type, howpublished is title + % + { title empty$ + type.2 empty$ and + { howpublished empty$ + { "No author, editor, title, type, and howpublished in " + cite$ * warning$ + "" + } + { "\APAChowpublished{" howpublished * "}" * add.period$ } + if$ + format.year.month.day.check add.period$ + } + { output.misctitle.type.num %output.new.block + format.year.month.day.check add.period$ + format.howpublished add.period$ + } + if$ + } + % + % format editor and year, and check if year is present + % format book title, volume, and edition and check if title present + % + { format.editors.as.authors start.new.block + format.year.month.day.check output.dot.new.block + output.misctitle.type.num output.dot.new.block + format.howpublished add.period$ + } + if$ + } + % + % format author and year, and check if year is present + % format book title, volume, and edition + % and check if title or type present + % + { format.authors start.new.block + format.year.nomonth.day.check output.dot.new.block + output.misctitle.type.num + format.version + format.howpublished add.period$ + } + if$ + % + address empty$ + publisher empty$ and + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.address.publisher add.period$ + } + if$ + % + % format url + % + url empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.url + } + if$ + % + % format optional note + % + note empty$ + 'skip$ + { % Clear the stack + duplicate$ empty$ + 'skip$ + { output.new.block } + if$ + format.note + } + if$ + output.dot.new.block + format.softmisc.eprint + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % for legal cases and other cases that need to be + % done by hand + % +FUNCTION {literal} +{ "key" key warning.if.empty + "text" text warning.if.empty + text empty$ + { "" } + { text } + if$ + fin.entry +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % technical documentation + % +FUNCTION {manual} +{ % + % If type is empty, assume that it is a computer software manual. + % + type empty$ + { "\bibcomputersoftwaremanual" 'type.2 := } + 'skip$ + if$ + misc +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % booklet + % +FUNCTION {booklet} +{ misc } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % part of a book + % +FUNCTION {inbook} +{ inbookcollection } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % article in proceedings + % +FUNCTION {inproceedings} +{ incollection } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % article in proceedings (Kopka & Daly, 2004, p. 230) + % +FUNCTION {conference} +{ inproceedings } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % proceedings + % +FUNCTION {proceedings} +{ misc } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + % + % unknown types + % +FUNCTION {default.type} +{ misc } + +FUNCTION {initialize} +{ + #6 'name.max := +%% #250 'entry.max$ := +%% #5000 'global.max$ := +} +FUNCTION {init.old.number} +{ #0 'old.number := } +FUNCTION {init.old.label} +{ "zzzzzz" 'old.label := } +FUNCTION {init.cite.initials.add.to.year} +{ #0 'cite.initials := + #0 'add.to.year := +} +FUNCTION {move.forward} +{ #1 'forward := } +FUNCTION {move.backward} +{ #0 'forward := } +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{}" write$ newline$ + "\renewcommand{\doi}[1]{\url{https://doi.org/#1}}" + write$ newline$ + "\bibcommenthead" write$ newline$ +} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +FUNCTION {write.bbl.entry} +{ + make.cite.labels + call.type$ +} +READ +EXECUTE { identify.apacite.version } +EXECUTE { initialize } +EXECUTE { init.old.number } +ITERATE { make.citeorder.number } +ITERATE { make.sort.title } +SORT +EXECUTE { init.old.number } +EXECUTE { init.old.label } +ITERATE { make.title.number } +ITERATE { make.tentative.sort.label } +SORT +ITERATE { init.cite.initials.add.to.year } +EXECUTE { init.initials } +ITERATE { check.add.initials } +EXECUTE { init.initials } +REVERSE { check.add.initials } +ITERATE { tentative.cite.num.names } +EXECUTE { init.cite.num.names } +EXECUTE { move.forward } +ITERATE { definitive.cite.num.names } +EXECUTE { init.cite.num.names } +EXECUTE { move.backward } +REVERSE { definitive.cite.num.names } +ITERATE { make.final.sort.key } +SORT +EXECUTE { begin.bib } +ITERATE { write.bbl.entry } +EXECUTE { end.bib } + +%% +%% End of file `apacite.bst'. diff --git a/_extensions/christopherkenny/nature/sn-aps.bst b/_extensions/christopherkenny/nature/sn-aps.bst new file mode 100644 index 0000000..49cf96b --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-aps.bst @@ -0,0 +1,1533 @@ +%% +%% This is file `spphys.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `seq-no,vonx,nm-init,ed-au,yr-par,xmth,jtit-x,jttl-rm,thtit-a,vol-bf,volp-com,jpg-1,pgsep-c,num-xser,ser-vol,ser-ed,jnm-x,pub-date,pre-pub,doi,edpar,edby,fin-bare,pp,ed,abr,ord,jabr,xand,url,url-blk,nfss,') +%% ---------------------------------------- +%%********************************************************************************%% +%% %% +%% For Springer physics publications. Based on the APS reference style. %% +%% Report bugs and improvements to: Joylene Vette-Guillaume or Frank Holzwarth %% +%% Springer-Verlag 2004/10/15 %% +%% %% +%%********************************************************************************%% +%% +%% Copyright 1994-2004 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}[2004/02/09 4.13 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % 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. + %--------------------------------------------------------------------- + +ENTRY + { address + author + booktitle + chapter + doi + edition + editor + eid + howpublished + institution + journal + key + keywords + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + eprint + archive + archivePrefix + primaryClass + adsurl + adsnote + version + } + {} + { label } +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} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ duplicate$ empty$ + 'pop$ + 'write$ + if$ + 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 {add.comma} +{ duplicate$ empty$ + 'skip$ + { "," * add.blank } + if$ +} + +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.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 {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "\textbf{" swap$ * "}" * } + if$ +} +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} +{ "eds." } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "ed. by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +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$ +} + +MACRO {acmcs} {"ACM Comput. Surv."} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Commun. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Software Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput. Aid. Des."} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Program."} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Graphic."} + +MACRO {toms} {"ACM Trans. Math. Software"} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} + +MACRO {tcs} {"Theor. Comput. Sci."} + +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$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f{.}.~}{vv~}{ll}{, jj}" + 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 +} +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 + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + new.block + "\doi{" swap$ * "}" * + } + 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 {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {if.digit} +{ duplicate$ "0" = + swap$ duplicate$ "1" = + swap$ duplicate$ "2" = + swap$ duplicate$ "3" = + swap$ duplicate$ "4" = + swap$ duplicate$ "5" = + swap$ duplicate$ "6" = + swap$ duplicate$ "7" = + swap$ duplicate$ "8" = + swap$ "9" = or or or or or or or or or +} +FUNCTION {n.separate} +{ 't := + "" + #0 'numnames := + { t empty$ not } + { t #-1 #1 substring$ if.digit + { numnames #1 + 'numnames := } + { #0 'numnames := } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames #5 = + { duplicate$ #1 #2 substring$ swap$ + #3 global.max$ substring$ + "," swap$ * * + } + 'skip$ + if$ + } + while$ +} +FUNCTION {n.dashify} +{ +%% n.separate + '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 + " " * } + +FUNCTION {format.date} +{ + "" + 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$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " (" swap$ * ")" * + } + if$ +} +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$ + { emphasize ", " * swap$ * } + 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 {first.page} +{ 't := + "" + { t empty$ not t #1 #1 substring$ "-" = not and } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + while$ +} + +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$ + bolden + 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.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.ed.booktitle} +{format.booktitle duplicate$ empty$ 'skip$ + { + format.bvolume duplicate$ empty$ 'pop$ + { ", " swap$ * * } + if$ + editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { + bbl.edby + " " * swap$ * + swap$ + "," * + " " * 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.article.crossref} +{ + key duplicate$ empty$ + { pop$ + journal duplicate$ empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * warning$ } + { "journal" bibinfo.check emphasize word.in swap$ * } + if$ + } + { word.in swap$ * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + editor num.names$ duplicate$ + #2 > + { pop$ + "editor" bibinfo.check + " " * bbl.etal + * + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + "editor" bibinfo.check + " " * bbl.etal + * + } + { + bbl.and space.word + * editor #2 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + * + } + if$ + } + if$ + } + if$ +} +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$ + 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$ + "" * + } + { series emphasize * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { format.booktitle duplicate$ empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + } + { word.in swap$ * } + if$ + } + { word.in key * " " *} + if$ + } + { word.in format.crossref.editor * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + year empty$ + { "empty year in " cite$ * warning$ } + 'skip$ + if$ + address empty$ t empty$ and + year empty$ and + 'skip$ + { + add.blank "(" * + t empty$ + { address "address" bibinfo.check * + } + { t * + address empty$ + 'skip$ + { ", " * address "address" bibinfo.check * } + if$ + } + if$ + year empty$ + 'skip$ + { t empty$ address empty$ and + 'skip$ + { ", " * } + if$ + year "year" bibinfo.check + * + } + 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.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { "{[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + add.comma + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + new.block + format.eprint output + add.blank + format.primaryClass output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + add.comma + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.edition output + new.block + format.number.series output + new.sentence + format.publisher.address output + format.pages output + } + { + new.block + format.book.crossref output.nonnull + format.date "year" output.check + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + add.comma + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + add.comma + format.btitle "title" output.check + crossref missing$ + { + format.publisher.address output + format.bvolume output + format.edition output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + format.date "year" output.check + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + add.comma + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.edition output + format.number.series output + format.publisher.address output + format.chapter.pages output + new.sentence + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + add.comma + format.btitle "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.number.series output + format.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization "organization" bibinfo.check + duplicate$ empty$ 'pop$ + { output + address "address" bibinfo.check output + } + if$ + } + { format.authors output.nonnull } + if$ + add.comma + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address "address" bibinfo.check output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + } + if$ + format.edition output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + add.comma + format.title + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished "howpublished" bibinfo.check output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry + empty.misc.check +} + +FUNCTION {softmisc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + version output + howpublished new.block.checka + howpublished "howpublished" bibinfo.check output + format.date output + format.doi output + new.block + format.url output + new.block + format.note output + new.block + format.softmisc.eprint output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + add.comma + format.title + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +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 + format.number.series output + editor empty$ + { publisher empty$ + 'skip$ + { + new.sentence + 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.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + add.comma + format.title + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + format.doi output + new.block + format.url output + new.block + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + add.comma + format.title "title" output.check + format.date output + format.doi output + new.block + format.url output + new.block + format.note "note" output.check + 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$ + "\providecommand{\url}[1]{{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + %%"\expandafter\ifx\csname urlstyle\endcsname\relax" + %% write$ newline$ + %%" \providecommand{\doi}[1]{\discretionary{}{}{}#1}\else" + %%write$ newline$ + %%" \providecommand{\doi}{\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + "\providecommand{\doi}[1]{\url{https://doi.org/#1}}" + write$ newline$ + "\bibcommenthead" write$ newline$ +} +EXECUTE {begin.bib} +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 `spphys.bst'. + diff --git a/_extensions/christopherkenny/nature/sn-basic.bst b/_extensions/christopherkenny/nature/sn-basic.bst new file mode 100644 index 0000000..5072a4d --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-basic.bst @@ -0,0 +1,1798 @@ +%% +%% This is file `spbasic.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `ay,nat,seq-lab,vonx,nm-rvx,ed-rev,jnrlst,dt-beg,yr-par,yrp-x,yrpp-xsp,note-yr,jxper,jttl-rm,thtit-a,pgsep-c,num-xser,ser-vol,jnm-x,btit-rm,bt-rm,pre-pub,doi,edparxc,blk-tit,in-col,fin-bare,pp,ed,abr,mth-bare,ord,jabr,xand,eprint,url,url-blk,em-x,nfss,') +%% ---------------------------------------- +%% +%%********************************************************************************%% +%% %% +%% For Springer medical, life sciences, chemistry, geology, engineering and %% +%% computer science publications. %% +%% For use with the natbib package (see below). Default is author-year citations. %% +%% When citations are numbered, please use \usepackage[numbers]{natbib}. %% +%% %% +%%********************************************************************************%% +%% +%% Copyright 1994-2004 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}[2004/02/09 4.13 (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., p. 32) + % \citeauthor{key} ==>> Jones et al. + % \citeauthor*{key} ==>> Jones, Baker, and Smith + % \citeyear{key} ==>> 1990 + %--------------------------------------------------------------------- + +ENTRY + { address + archive + author + booktitle + chapter + doi + edition + editor + eid + eprint + howpublished + institution + journal + key + keywords + month + note + number + organization + pages + publisher + school + series + title + type + url + volume + year + archivePrefix + primaryClass + adsurl + adsnote + version + } + {} + { 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} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {fin.entry} +{ duplicate$ empty$ + 'pop$ + 'write$ + if$ + 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} +{ "\hspace{0pt}" * before.all 'output.state := +} + +FUNCTION {date.block} +{ + add.blank +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +STRINGS {z} +FUNCTION {remove.dots} +{ 'z := + "" + { z empty$ not } + { z #1 #1 substring$ + z #2 global.max$ substring$ 'z := + duplicate$ "." = 'pop$ + { * } + if$ + } + while$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + 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} +{ "eds" } + +FUNCTION {bbl.editor} +{ "ed" } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn." } + +FUNCTION {bbl.volume} +{ "vol" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp" } + +FUNCTION {bbl.incoll.pages} +{ "p" } + +FUNCTION {bbl.page} +{ "p" } + +FUNCTION {bbl.chapter} +{ "chap" } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "PhD 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$ +} + +MACRO {acmcs} {"ACM Comput Surv"} + +MACRO {acta} {"Acta Inf"} + +MACRO {cacm} {"Commun ACM"} + +MACRO {ibmjrd} {"IBM~J~Res Dev"} + +MACRO {ibmsj} {"IBM Syst~J"} + +MACRO {ieeese} {"IEEE Trans Softw Eng"} + +MACRO {ieeetc} {"IEEE Trans Comput"} + +MACRO {ieeetcad} + {"IEEE Trans Comput Aid Des"} + +MACRO {ipl} {"Inf Process Lett"} + +MACRO {jacm} {"J~ACM"} + +MACRO {jcss} {"J~Comput Syst Sci"} + +MACRO {scp} {"Sci Comput Program"} + +MACRO {sicomp} {"SIAM J~Comput"} + +MACRO {tocs} {"ACM Trans Comput Syst"} + +MACRO {tods} {"ACM Trans Database Syst"} + +MACRO {tog} {"ACM Trans Graphic"} + +MACRO {toms} {"ACM Trans Math Softw"} + +MACRO {toois} {"ACM Trans Office Inf Syst"} + +MACRO {toplas} {"ACM Trans Program Lang Syst"} + +MACRO {tcs} {"Theor Comput Sci"} + +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$ +} + +FUNCTION {format.eprint} +{ eprint duplicate$ empty$ + 'skip$ + { "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} + +FUNCTION {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { "{[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.soft.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{ f{}}{jj}" + format.name$ 't := + nameptr #1 > + { + nameptr #3 + #1 + = + numnames #3 + > 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.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 + "(" swap$ * ")" * + * + } + if$ +} +FUNCTION {format.doi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\doi{" swap$ * "}" * + } + 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} +{ newline$ + "\bibitem[{" write$ + label write$ + ")" make.full.names duplicate$ short.list = + { pop$ } + { * } + if$ + "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {add.period} +{ duplicate$ empty$ + 'skip$ + { "." * add.blank } + if$ +} + +FUNCTION {if.digit} +{ duplicate$ "0" = + swap$ duplicate$ "1" = + swap$ duplicate$ "2" = + swap$ duplicate$ "3" = + swap$ duplicate$ "4" = + swap$ duplicate$ "5" = + swap$ duplicate$ "6" = + swap$ duplicate$ "7" = + swap$ duplicate$ "8" = + swap$ "9" = or or or or or or or or or +} +FUNCTION {n.separate} +{ 't := + "" + #0 'numnames := + { t empty$ not } + { t #-1 #1 substring$ if.digit + { numnames #1 + 'numnames := } + { #0 'numnames := } + if$ + t #-1 #1 substring$ swap$ * + t #-2 global.max$ substring$ 't := + numnames #5 = + { duplicate$ #1 #2 substring$ swap$ + #3 global.max$ substring$ + "," swap$ * * + } + 'skip$ + if$ + } + while$ +} +FUNCTION {n.dashify} +{ +%% n.separate + '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$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + " (" swap$ * ")" * +} +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$ + { emphasize ", " * swap$ * } + 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.journal.eid} +{ eid "eid" bibinfo.check + duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ 'skip$ + { + ":" * + } + if$ + swap$ * + } + if$ +} + +FUNCTION {format.incoll.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.incoll.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} + +FUNCTION {format.incoll.chapter.pages} +{ chapter empty$ + 'format.incoll.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.incoll.pages * } + if$ + } + 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.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$ * ") " * + * 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 {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { + journal + remove.dots + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.sentence + format.doi output + format.url output + format.note output + format.soft.eprint output + add.blank + format.primaryClass output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + date.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.edition output + new.sentence + format.number.series output + format.publisher.address output + } + { + new.sentence + format.book.crossref output.nonnull + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint 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 + format.btitle "title" output.check + crossref missing$ + { + format.bvolume output + format.edition output + format.publisher.address output + format.chapter.pages "chapter and pages" output.check + new.sentence + format.number.series output + } + { + format.chapter.pages "chapter and pages" output.check + new.sentence + format.book.crossref output.nonnull + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.edition output + new.sentence + format.number.series output + format.publisher.address output + format.incoll.chapter.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.incoll.chapter.pages output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.bvolume output + new.sentence + format.publisher.address output + } + if$ + format.number.series output + format.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + new.sentence + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.edition output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.sentence + howpublished "howpublished" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {insert.comma} +{ duplicate$ empty$ + 'skip$ + { ", " * add.blank } + if$ +} + +FUNCTION {softmisc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + insert.comma + version output + new.sentence + howpublished "howpublished" bibinfo.check output + format.doi output + format.url output + format.note output + format.softmisc.eprint output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title + "title" output.check + new.sentence + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.doi output + format.url output + format.note output + format.eprint output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + format.doi output + format.url output + format.note "note" output.check + format.eprint output + fin.entry +} + +FUNCTION {default.type} { misc } +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 := + "" '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$ + { pop$ "????" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { numnames #2 > nameptr #2 = and + { "zz" * year field.or.null * " " * } + 'skip$ + if$ + t sortify * + } + if$ + } + { 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} +SORT +STRINGS { last.label next.extra } +INTEGERS { last.extra.num number.label } +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #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.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} +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]{{#1}}" + write$ newline$ + "\providecommand{\urlprefix}{URL }" + write$ newline$ + %%"\expandafter\ifx\csname urlstyle\endcsname\relax" + %%write$ newline$ + %%" \providecommand{\doi}[1]{\discretionary{}{}{}https://doi.org/#1}\else" + %%write$ newline$ + %%" \providecommand{\doi}{\discretionary{}{}{}\begingroup \urlstyle{rm}\Url}\fi" + "\providecommand{\doi}[1]{\url{https://doi.org/#1}}" + write$ newline$ + "\providecommand{\eprint}[2][]{\url{#2}}" + write$ newline$ + " \bibcommenthead " + write$ newline$ +} +EXECUTE {begin.bib} +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 `spbasic.bst'. + diff --git a/_extensions/christopherkenny/nature/sn-chicago.bst b/_extensions/christopherkenny/nature/sn-chicago.bst new file mode 100644 index 0000000..bb6d2c6 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-chicago.bst @@ -0,0 +1,1808 @@ +%%% ==================================================================== +%%% @BibTeX-style-file{ +%%% author = "Glenn Paulley", +%%% version = "4", +%%% date = "28 August 1992", +%%% time = "10:23:39 199", +%%% filename = "chicago.bst", +%%% address = "Data Structuring Group +%%% Department of Computer Science +%%% University of Waterloo +%%% Waterloo, Ontario, Canada +%%% N2L 3G1", +%%% telephone = "(519) 885-1211", +%%% FAX = "(519) 885-1208", +%%% checksum = "26323 1654 5143 37417", +%%% email = "gnpaulle@bluebox.uwaterloo.ca", +%%% codetable = "ISO/ASCII", +%%% keywords = "", +%%% supported = "yes", +%%% abstract = "A BibTeX bibliography style that follows the +%%% `B' reference style of the 13th Edition of +%%% the Chicago Manual of Style. A detailed +%%% feature list is given below.", +%%% docstring = "The checksum field above contains a CRC-16 +%%% checksum as the first value, followed by the +%%% equivalent of the standard UNIX wc (word +%%% count) utility output of lines, words, and +%%% characters. This is produced by Robert +%%% Solovay's checksum utility.", +%%% } +%%% ==================================================================== +% +% "Chicago" BibTeX style, chicago.bst +% =================================== +% +% BibTeX `chicago' style file for BibTeX version 0.99c, LaTeX version 2.09 +% Place it in a file called chicago.bst in the BibTeX search path. +% You need to include chicago.sty as a \documentstyle option. +% (Placing it in the same directory as the LaTeX document should also work.) +% This "chicago" style is based on newapa.bst (American Psych. Assoc.) +% found at ymir.claremont.edu. +% +% Citation format: (author-last-name year) +% (author-last-name and author-last-name year) +% (author-last-name, author-last-name, and author-last-name year) +% (author-last-name et al. year) +% (author-last-name) +% author-last-name (year) +% (author-last-name and author-last-name) +% (author-last-name et al.) +% (year) or (year,year) +% year or year,year +% +% Reference list ordering: alphabetical by author or whatever passes +% for author in the absence of one. +% +% This BibTeX style has support for abbreviated author lists and for +% year-only citations. This is done by having the citations +% actually look like +% +% \citeauthoryear{full-author-info}{abbrev-author-info}{year} +% +% The LaTeX style has to have the following (or similar) +% +% \let\@internalcite\cite +% \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite} +% \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite} +% \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite} +% \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite} +% \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite} +% +% These TeX macro definitions are found in chicago.sty. Additional +% commands to manipulate different components of a citation can be defined +% so that, for example, you can list author's names without parentheses +% if using a citation as a noun or object in a sentence. +% +% This file was originally copied from newapa.bst at ymir.claremont.edu. +% +% Features of chicago.bst: +% ======================= +% +% - full names used in citations, but abbreviated citations are available +% (see above) +% - if an entry has a "month", then the month and year are also printed +% as part of that bibitem. +% - all conjunctions use "and" instead of "\&" +% - major modification from Chicago Manual of Style (13th ed.) is that +% only the first author in a reference appears last name first- +% additional authors appear as J. Q. Public. +% - pages are listed as "pp. xx-xx" in all entry types except +% article entries. +% - book, inbook, and manual use "location: publisher" (or organization) +% for address and publisher. All other types list publishers separately. +% - "pp." are used to identify page numbers for all entry types except +% articles. +% - organization is used as a citation label if neither author nor editor +% is present (for manuals). +% - "et al." is used for long author and editor lists, or when "others" +% is used. +% +% Modifications and bug fixes from newapa.bst: +% =========================================== +% +% - added month, year to bib entries if month is present +% - fixed bug with In proceedings, added necessary comma after title +% - all conjunctions changed to "and" from "\&" +% - fixed bug with author labels in my.full.label: "et al." now is +% generated when "others" is an author name +% - major modification from Chicago Manual of Style (13th ed.) is that +% only the first author in a reference appears last name first- +% additional authors appear as J. Q. Public. +% - pages are listed as "pp. xx-xx" in all entry types except +% article entries. Unnecessary (IMHO) "()" around page numbers +% were removed, and page numbers now don't end with a period. +% - created chicago.sty for use with this bibstyle (required). +% - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume, +% number, and /or pages. Renamed to format.jour.vol. +% - fixed bug in formatting booktitles: additional period an error if +% book has a volume. +% - fixed bug: editors usually given redundant period before next clause +% (format.editors.dot) removed. +% - added label support for organizations, if both author and editor +% are missing (from alpha.bst). If organization is too long, then +% the key field is used for abbreviated citations. +% - In proceedings or books of several volumes, no comma was written +% between the "Volume x" and the page numbers (this was intentional +% in newapa.bst). Fixed. +% - Some journals may not have volumes/numbers, only month/year (eg. +% IEEE Computer). Fixed bug in article style that assumed volume/number +% was always present. +% +% Original documentation for newapa.sty: +% ===================================== +% +% This version was made by modifying the master file made by +% Oren Patashnik (PATASHNIK@SCORE.STANFORD.EDU), and the 'named' BibTeX +% style of Peter F. Patel-Schneider. +% +% Copyright (C) 1985, all rights reserved. +% Copying of this file is authorized only if either +% (1) you make absolutely no changes to your copy, including name, or +% (2) if you do make changes, you name it something other than 'newapa.bst'. +% There are undoubtably bugs in this style. If you make bug fixes, +% improvements, etc. please let me know. My e-mail address is: +% spencer@cgrg.ohio.state.edu or 71160.3141@compuserve.com +% +% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst', +% with lots of tweaking to make it look like APA style, along with tips +% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'. + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + keywords + month + note + doi + number + organization + pages + publisher + school + series + title + type + volume + year + eprint + archive + archivePrefix + primaryClass + eid + adsurl + adsnote + version + } + {} + { label.year extra.label sort.year sort.label } + +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 u } + +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 {add.blank} +{ " " * before.all 'output.state := +} + +% Use a colon to separate output. Used only for address/publisher +% combination in book/inbook types, address/institution for manuals, +% and organization:publisher for proceedings (inproceedings). +% +FUNCTION {output.nonnull.colon} +{ '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.colon} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull.colon + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {output.check.colon} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull.colon + if$ +} + +FUNCTION {output.year.check} +{ year empty$ + { "empty year in " cite$ * warning$ } + { write$ + " " year * extra.label * + month empty$ + { "" * } + { ", " * month * "" * } + if$ + mid.sentence 'output.state := + } + 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$ +} + +% +% Emphasize the top string on the stack. +% +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +% +% Emphasize the top string on the stack, but add a trailing space. +% +FUNCTION {emphasize.space} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "\/}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } +% +% Format bibliographical entries with the first author last name first, +% and subsequent authors with initials followed by last name. +% All names are formatted in this routine. +% +FUNCTION {format.names} +{ 's := + #1 'nameptr := % nameptr = 1; + s num.names$ 'numnames := % numnames = num.name$(s); + numnames 'namesleft := + { namesleft #0 > } + + { nameptr #1 = + {s nameptr "{vv~}{ll}{, jj}{, f{.}.}" format.name$ 't := } + {s nameptr "{f{.}.~}{vv~}{ll}{, jj}" format.name$ 't := } + if$ + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } % from Chicago Manual of Style + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ +} + +FUNCTION {my.full.label} +{ 's := + #1 'nameptr := % nameptr = 1; + s num.names$ 'numnames := % numnames = num.name$(s); + numnames 'namesleft := + { namesleft #0 > } + + { s nameptr "{vv~}{ll}" format.name$ 't := % get the next name + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } % from Chicago Manual of Style + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ + +} + +FUNCTION {format.names.fml} +% +% Format names in "familiar" format, with first initial followed by +% last name. Like format.names, ALL names are formatted. +% +{ 's := + #1 'nameptr := % nameptr = 1; + s num.names$ 'numnames := % numnames = num.name$(s); + 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." * } + { " and " * t * } +% { " \& " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := % nameptr += 1; + namesleft #1 - 'namesleft := % namesleft =- 1; + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +% +% Format editor names for use in the "in" types: inbook, incollection, +% inproceedings: first initial, then last names. When editors are the +% LABEL for an entry, then format.editor is used which lists editors +% by last name first. +% +FUNCTION {format.editors.fml} +{ editor empty$ + { "" } + { editor format.names.fml + editor num.names$ #1 > + { " (Eds.)" * } + { " (Ed.)" * } + if$ + } + if$ +} + +% +% Format editor names for use in labels, last names first. +% +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { " eds." * } + { " ed." * } + if$ + } + if$ +} + +FUNCTION {in.format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { " eds. " swap$ * } + { " ed. " swap$ * } + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ } + if$ +} + +% Note that the APA style requres case changes +% in article titles. The following does not +% change cases. If you perfer it, uncomment the +% following and comment out the above. + +%FUNCTION {format.title} +%{ title empty$ +% { "" } +% { title } +% if$ +%} + +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.btitle} +{ edition empty$ + { title emphasize } + { title empty$ + { title emphasize } + { volume empty$ % gnp - check for volume, then don't need period + { "{\em " title * "\/} (" * edition * " ed.)" * "." * } + { "{\em " title * "\/} (" * edition * " ed.)" * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.emphasize.booktitle} +{ edition empty$ + { booktitle emphasize } + { booktitle empty$ + { booktitle emphasize } + { volume empty$ % gnp - extra period an error if book has a volume + { "{\em " booktitle * "\/} (" * edition * " ed.)" * "." *} + { "{\em " booktitle * "\/} (" * edition * " ed.)" * } + if$ + } + if$ + } + if$ + } + + +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 % gnp - changed to mixed case + 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" } % gnp - changed to mixed case always + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + 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 + { "pp.\ " pages n.dashify tie.or.space.connect } % gnp - removed () + { "pp.\ " pages tie.or.space.connect } + if$ + } + if$ +} + + +FUNCTION {format.in.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "" pages n.dashify tie.or.space.connect } % gnp - removed () + { "" pages tie.or.space.connect } + if$ + } + if$ +} + +% By Young (and Spencer) +% GNP - fixed bugs with missing volume, number, and/or pages +% +% Format journal, volume, number, pages for article types. +% +FUNCTION {format.jour.vol} +{ journal empty$ + { "no journal in " cite$ * warning$ + "" } + { journal emphasize.space } + if$ + number empty$ + { volume empty$ + { "no number and no volume in " cite$ * warning$ + "" * } + { "~" * Volume * "" * } + if$ + } + { volume empty$ + {"no volume for " cite$ * warning$ + "~(" * number * ")" * } + { "~" * + volume emphasize.space + "(" * number * ")" * * } + if$ + } + if$ + pages empty$ + {"page numbers missing in " cite$ * warning$ + "" * } % gnp - place a null string on the stack for output + { duplicate$ empty$ + { pop$ format.pages } + { ": " * pages n.dashify * } % gnp - removed pp. for articles + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "Chapter" } % gnp - changed to mixed case + { type "t" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + {"page numbers missing in " cite$ * warning$} % gnp - added check + { ", " * format.pages * } + if$ + } + if$ +} + + +FUNCTION {format.in.chapter.pages} +{ chapter empty$ + 'format.in.pages + { type empty$ + { "Chapter" } % gnp - changed to mixed case + { type "t" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + {"page numbers missing in " cite$ * warning$} % gnp - added check + { ", " * format.in.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "In " format.emphasize.booktitle * } + { "In " format.editors.fml * ", " * format.emphasize.booktitle * } + if$ + } + if$ +} + +FUNCTION {format.in.coll.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { "" format.emphasize.booktitle * } + { "In " format.emphasize.booktitle * ", " * in.format.editors * } + if$ + } + 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} +{ "See" + "\citeN{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * editor #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Volume" volume tie.or.space.connect % gnp - changed to mixed case + " 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$ + "" * + } + { "{\em " * series * "\/}" * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \citeN{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ "See" + " \citeN{" * crossref * "}" * +} + +% format.lab.names: +% +% determines "short" names for the abbreviated author information. +% "Long" labels are created in calc.label, using the routine my.full.label +% to format author and editor fields. +% +% There are 4 cases for labels. (n=3 in the example) +% a) one author Foo +% b) one to n Foo, Bar and Baz +% c) use of "and others" Foo, Bar et al. +% d) more than n Foo et al. +% +FUNCTION {format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #2 > % change number to number of others allowed before + % forcing "et al". + { s #1 "{vv~}{ll}" format.name$ " et~al." * } + { + numnames #1 - 'namesleft := + #2 'nameptr := + s #1 "{vv~}{ll}" format.name$ + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s nameptr "{vv~}{ll}" format.name$ * } + if$ + } + { ", " * s nameptr "{vv~}{ll}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { "no key, author in " cite$ * warning$ + cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { "no key, editor in " cite$ * warning$ + cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +% +% added - gnp. Provide label formatting by organization if author is null. +% +{ author empty$ + { organization empty$ + { key empty$ + { "no key, author or organization in " cite$ * warning$ + cite$ #1 #3 substring$ } + 'key + if$ + } + { organization } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +% +% added - gnp. Provide label formatting by organization if editor is null. +% +{ editor empty$ + { organization empty$ + { key empty$ + { "no key, editor or organization in " cite$ * warning$ + cite$ #1 #3 substring$ } + 'key + if$ + } + { organization } + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "no key, author, or editor in " cite$ * warning$ + cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {calc.label} +% +% Changed - GNP. See also author.organization.sort, editor.organization.sort +% Form label for BibTeX entry. The classification of which fields are used +% for which type of entry (book, inbook, etc.) are taken from alpha.bst. +% The change here from newapa is to also include organization as a +% citation label if author or editor is missing. +% +{ 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$ + + author empty$ % generate the full label citation information. + { editor empty$ + { organization empty$ + { "no author, editor, or organization in " cite$ * warning$ + "??" } + { organization } + if$ + } + { editor my.full.label } + if$ + } + { author my.full.label } + if$ + +% leave label on the stack, to be popped when required. + + "}{" * swap$ * "}{" * +% year field.or.null purify$ #-1 #4 substring$ * +% +% save the year for sort processing afterwards (adding a, b, c, etc.) +% + year field.or.null purify$ #-1 #4 substring$ + 'label.year := +} + +FUNCTION {output.bibitem} +{ newline$ + + "\bibitem[\protect\citeauthoryear{" write$ + calc.label write$ + sort.year write$ + "}]{" write$ + + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {output.doi} +{ + doi empty$ + { skip$ } + { "\doi{" doi * "}" * output } + if$ +} + +FUNCTION {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { "{[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {article} +{ output.bibitem + format.authors + "author" output.check +add.period$ "" * + author format.key output % added + output.year.check % added + new.block + format.title + "title" output.check + new.block + crossref missing$ + { format.jour.vol output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + output.doi + new.block + format.eprint output + add.blank + format.primaryClass output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors + "author and editor" output.check } + { format.authors + output.nonnull +add.period$ "" * + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + output.year.check % added + new.block + format.btitle + "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + address output + publisher "publisher" output.check.colon + } + { new.block + format.book.crossref output.nonnull + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output % added + output.year.check % added + new.block + format.title + "title" output.check + new.block + howpublished output + address output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors + "author and editor" output.check + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + output.year.check % added + 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 + address output + publisher + "publisher" output.check.colon + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors + "author" output.check +add.period$ "" * + author format.key output % added + output.year.check % added + new.block + format.title + "title" output.check + crossref missing$ + { format.in.coll.ed.booktitle +"booktitle" output.check + format.bvolume output + format.number.series output + format.in.chapter.pages output % gnp - was special.output.nonnull +% left out comma before page numbers + new.sentence + address output + publisher "publisher" output.check.colon + } + { format.incoll.inproc.crossref + output.nonnull + format.in.chapter.pages output + } + if$ + new.block + note output + new.block + output.doi + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors + "author" output.check + author format.key output % added + output.year.check % added + 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 + address output + format.pages output + new.sentence + organization output + publisher output.colon + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { editor empty$ + { organization "organization" output.check + organization format.key output } % if all else fails, use key + { format.editors "author and editor" output.check } + if$ + } + { format.authors output.nonnull } + if$ + output.year.check % added + new.block + format.btitle + "title" output.check + organization address new.block.checkb +% Reversed the order of "address" and "organization", added the ":". + address output + organization "organization" output.check.colon +% address output +% ":" output +% organization output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors + "author" output.check + author format.key output % added + output.year.check % added + new.block + format.title + "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output +add.period$ "" * + author format.key output % added + output.year.check % added + title howpublished new.block.checkb + format.title output + new.block + howpublished output + new.block + note output + fin.entry +} + +FUNCTION {softmisc} +{ output.bibitem + format.authors output +add.period$ "" * + author format.key output % added + %%output.year.check % added + year output + title howpublished new.block.checkb + format.title output + version output + new.block + howpublished output + new.block + note output + new.block + format.softmisc.eprint output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors + "author" output.check + author format.key output % added + output.year.check % added + new.block + format.btitle + "title" output.check + new.block + "Ph.\ D. thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output + organization format.key output } % gnp - changed from author format.key + { format.editors output.nonnull } + if$ +% author format.key output % gnp - removed (should be either +% editor or organization + output.year.check % added (newapa) + new.block + format.btitle + "title" output.check + format.bvolume output + format.number.series output + address output + new.sentence + organization output + publisher output.colon + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors + "author" output.check + author format.key output % added + output.year.check % added + new.block + format.title + "title" output.check + new.block + format.tr.number output.nonnull + institution + "institution" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors + "author" output.check + author format.key output % added + output.year.check % added + new.block + format.title + "title" output.check + new.block + note "note" output.check + 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 {ai} {"Artificial Intelligence"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + + + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = t "others" = and + { " et~al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" } + { key sortify } + if$ + } + { author 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 {author.editor.sort} +{ author empty$ + { "missing author in " cite$ * warning$ + 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 {author.organization.sort} +% +% added - GNP. Stack author or organization for sorting (from alpha.bst). +% Unlike alpha.bst, we need entire names, not abbreviations +% +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { organization sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +% +% added - GNP. Stack editor or organization for sorting (from alpha.bst). +% Unlike alpha.bst, we need entire names, not abbreviations +% +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { organization sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +% +% Presort creates the bibentry's label via a call to calc.label, and then +% sorts the entries based on entry type. Chicago.bst adds support for +% including organizations as the sort key; the following is stolen from +% alpha.bst. +% +{ calc.label sortify % recalculate bibitem label + year field.or.null purify$ #-1 #4 substring$ * % add year + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.organization.sort + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + #1 entry.max$ substring$ % added for newapa + 'sort.label := % added for newapa + sort.label % added for newapa + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT % by label, year, author/editor, title + +STRINGS { last.label next.extra } + +INTEGERS { last.extra.num } + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +% +% Pass through all entries, comparing current entry to last one. +% Need to concatenate year to the stack (done by calc.label) to determine +% if two entries are the same (see presort) +% +{ last.label + calc.label year field.or.null purify$ #-1 #4 substring$ * % add year + #1 entry.max$ substring$ = % are they equal? + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + calc.label year field.or.null purify$ #-1 #4 substring$ * % add year + #1 entry.max$ substring$ 'last.label := % assign to last.label + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + label.year extra.label * 'sort.year := + extra.label 'next.extra := +} + +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} + +SORT % by sort.label, year, title --- giving final bib. order. + +FUNCTION {begin.bib} + +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{}" write$ newline$ + "\providecommand{\doi}[1]{\url{https://doi.org/#1}}" + write$ newline$ + "\bibcommenthead" write$ newline$ +} + + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + diff --git a/_extensions/christopherkenny/nature/sn-jnl.cls b/_extensions/christopherkenny/nature/sn-jnl.cls new file mode 100644 index 0000000..bb00241 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-jnl.cls @@ -0,0 +1,1791 @@ +%% +%% This is file `sn-jnl.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% classes.dtx (with options: `sn-jnl') +%% +%% This is a generated file. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file was generated from file(s) of the LaTeX base system. +%% -------------------------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3c +%% 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.3c or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% This file may only be distributed together with a copy of the LaTeX +%% base system. You may however distribute the LaTeX base system without +%% such generated files. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% The list of derived (unpacked) files belonging to the distribution +%% and covered by LPPL is defined by the unpacking scripts (with +%% extension .ins) which are part of the distribution. +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{sn-jnl} + [2019/11/18 v0.1: An authoring template for Springer Journal articles] + +\newif\if@restonecol +\newif\if@titlepage \@titlepagefalse +\newif\if@cropmarkson \@cropmarksonfalse +\newif\ifDoublecol \Doublecolfalse% +\newif\ifpagebody\global\pagebodyfalse% +\newif\if@iicol\global\@iicolfalse% +\newif\if@bibcomment\global\@bibcommentfalse% +\newif\if@referee\global\@refereefalse% +\newif\if@vrulerlinenumberon\global\@vrulerlinenumberonfalse% +\newif\if@pdflatex\global\@pdflatexfalse% +\newif\if@remarkboxon\global\@remarkboxonfalse% + +\newif\if@Numbered@refstyle\global\@Numbered@refstylefalse% Namedate + +\newif\if@Spr@basic@refstyle\global\@Spr@basic@refstylefalse% 1.Basic Springer Nature Reference Style/Chemistry Reference Style -> sn-basic.bst +\newif\if@Mathphys@numrefstyle\global\@Mathphys@numrefstylefalse% 2.Math and Physical Sciences Reference Style -> sn-mathphys.bst +\newif\if@Mathphys@ayrefstyle\global\@Mathphys@ayrefstylefalse% 2.Math and Physical Sciences Reference Style -> sn-mathphys.bst +\newif\if@APS@refstyle\global\@APS@refstylefalse% 3.American Physical Society (APS) Reference Style -> sn-APS.bst +\newif\if@Vancouver@refstyle\global\@Vancouver@refstylefalse% 4.Vancouver Reference Style -> sn-vancouver.bst +\newif\if@APA@refstyle\global\@APA@refstylefalse% 5.APA-based Social Sciences/Psychology Reference Style -> sn-apacite.bst +\newif\if@Chicago@refstyle\global\@Chicago@refstylefalse% 6.Chicago-based Humanities Reference Style -> sn-chicago.bst +\newif\if@Standard@Nature@refstyle\global\@Standard@Nature@refstylefalse% 7.Standard Nature Research Style -> sn-nature.bst + +%% Template Options +\DeclareOption{a4paper}{\PassOptionsToPackage{a4}{crop}} +\DeclareOption{a3paper}{\PassOptionsToClass{a3paper}{article}\PassOptionsToPackage{a3}{crop}} +\DeclareOption{centre}{\PassOptionsToPackage{center}{crop}} +\DeclareOption{crop}{\PassOptionsToPackage{frame}{crop}\global\@cropmarksontrue} +\DeclareOption{nocrop}{\PassOptionsToPackage{off}{crop}\global\@cropmarksontrue} +\DeclareOption{info}{\PassOptionsToPackage{info}{crop}} +\DeclareOption{noinfo}{\PassOptionsToPackage{noinfo}{crop}} + +%% Classfile Options +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{titlepage}{\@titlepagetrue} +\DeclareOption{notitlepage}{\@titlepagefalse} +\DeclareOption{onecolumn}{\@twocolumnfalse} +\DeclareOption{twocolumn}{\@twocolumntrue} +\DeclareOption{openbib}{\let\if@openbib\iftrue} +\DeclareOption{pagegrid}{\global\pagebodytrue}% +\DeclareOption{iicol}{\global\@iicoltrue}% +\DeclareOption{bibcomment}{\global\@bibcommenttrue}% +\DeclareOption{referee}{\global\@refereetrue}% +\DeclareOption{lineno}{\global\@vrulerlinenumberontrue}% +\DeclareOption{pdflatex}{\global\@pdflatextrue}% +\DeclareOption{remarkboxoff}{\global\@remarkboxonfalse}% + +\DeclareOption{sn-basic}{\global\@Spr@basic@refstyletrue}% +\DeclareOption{sn-mathphys-num}{\global\@Mathphys@numrefstyletrue}% +\DeclareOption{sn-mathphys-ay}{\global\@Mathphys@ayrefstyletrue}% +\DeclareOption{sn-aps}{\global\@APS@refstyletrue}% +\DeclareOption{sn-vancouver}{\global\@Vancouver@refstyletrue}% +\DeclareOption{sn-apa}{\global\@APA@refstyletrue}% +\DeclareOption{sn-chicago}{\global\@Chicago@refstyletrue}% +\DeclareOption{sn-nature}{\global\@Standard@Nature@refstyletrue}% + +\DeclareOption{Numbered}{\global\@Numbered@refstyletrue}% +\DeclareOption{NameDate}{\global\@Numbered@refstylefalse}% + + +%%\ExecuteOptions{twosidecrop,crop,centre,info,croppage} +\ProcessOptions +\LoadClass[twoside,fleqn]{article} + +\gdef\refereedefns{% +\if@referee% +\usepackage{setspace}% +\doublespacing% +\fi}% +\refereedefns% + +%% General Packages Used +% +%\AtBeginDocument{% +%%\newcommand*\ExtraParaSkip{12pt}% +%\SetFootnoteHook{\hspace*{-8pt}}% +%\DeclareNewFootnote{A}[gobble]% +%\setlength{\skip\footinsA}{0pt} +%}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Fonts & Sizes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%% Fonts Used +%%\RequirePackage[T1]{fontenc}% +% +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}% +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}% +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}% +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}% +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}% +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}% +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}% +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}% +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}% +% +\renewcommand\normalsize{% + \@setfontsize\normalsize{10bp}{12bp}% + \abovedisplayskip 12\p@ \@plus2\p@ \@minus1\p@ + \abovedisplayshortskip \z@ \@plus3\p@% + \belowdisplayshortskip 3\p@ \@plus3\p@ \@minus3\p@% + \belowdisplayskip \abovedisplayskip% + \let\@listi\@listI}% +\normalsize% +% +\newcommand\medsize{% + \@setfontsize\small\@xipt{13}% + \abovedisplayskip 5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 3\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip}% +% +\renewcommand\small{% + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 3\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip}% +% +\renewcommand\footnotesize{% + \@setfontsize\footnotesize{7}{8}% + \abovedisplayskip 5\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 3\p@ \@plus\p@ \@minus\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% + \belowdisplayskip \abovedisplayskip} +% +\renewcommand\scriptsize{\@setfontsize\scriptsize\@ixpt\@ixpt}% +\newcommand\scrisize{\@setfontsize\scrisize{9.3}{9}}% +\renewcommand\tiny{\@setfontsize\tiny\@vpt\@vipt}% +\renewcommand\large{\@setfontsize\large{12}{14}}% +\newcommand\larg{\@setfontsize\larg{11}{13}}% +\renewcommand\Large{\@setfontsize\Large{16}{18}}% +\renewcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}}% +\renewcommand\huge{\@setfontsize\huge\@xxpt{25}}% +\renewcommand\Huge{\@setfontsize\Huge\@xxvpt{30}}% +% +\DeclareMathSizes{\@ixpt}{\@ixpt}{7}{5}% +\DeclareMathSizes{\@xpt}{\@xpt}{7}{5}% +\DeclareMathSizes{\@xipt}{\@xipt}{7}{5}% +% +\DeclareRobustCommand*\textsubscript[1]{% + \@textsubscript{\selectfont#1}}% +% +\def\@textsubscript#1{% + {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Layout Settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%%\RequirePackage{geometry}% +% +\newlength\columnhsize% +% +%% Regular Pages (for Opening page - redefined) +% +\if@iicol% +% +%% for double column used sn-medium design trim and page size %% +% +\setlength\headheight{12pt}% +\setlength\headsep{5.15mm}% +% +\setlength\columnsep{8mm}% +\setlength\columnhsize{76mm}% +% +\setlength\maxdepth{0pt}% +\setlength\footnotesep{7\p@}% +\setlength{\skip\footins}{18\p@ \@plus 6\p@ \@minus 3\p@}% +% +\RequirePackage[% + reversemp, + paperwidth=210mm, + paperheight=297mm, + top={26mm}, + headheight={12pt}, + headsep={5.15mm}, + text={160mm,216mm}, + marginparsep=5mm, + marginparwidth=12mm, + bindingoffset=6mm, + footskip=10.13mm,twocolumn]{geometry}% +% +\renewcommand\footnoterule{% + \kern3\p@% + \hrule \@height.2mm \@width\columnwidth% + \kern5.5\p@}% +% +\else% +%% For single column used smallcond design trim and page size %% +\RequirePackage[% + reversemp, + paperwidth=210mm, + paperheight=297mm, + top={26mm}, + headheight={5.5pt}, + headsep={5.6mm}, + text={31pc,194.25mm}, + marginparsep=5mm, + marginparwidth=12mm, + bindingoffset=6mm, + footskip=10mm]{geometry} +% + \setlength\maxdepth{0pt}% + \setlength\columnsep{5mm}% + \setlength{\marginparsep}{5mm}% + \setlength{\marginparwidth}{12mm}% + \setlength\footnotesep{5.75\p@}% + \setlength{\skip\footins}{8\p@ \@plus 4\p@ \@minus 0\p@}% +% +\renewcommand\footnoterule{% + \kern3\p@% + \ifodd\c@page% + \hrule \@height.2mm \@width\textwidth% + \else% + \hrule \@height.2mm \@width37mm + \fi% + \kern5.5\p@}% +% +\fi% +% +% +\setlength\parindent{1.5em}% +% +\def\StepUpCounter#1{\global\advance#1by 1\relax}% +\def\StepDownCounter#1{\global\advance#1by -1\relax}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Pagination Settings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Line spacing +\setlength\lineskip{1\p@}% +\setlength\normallineskip{1\p@}% +%%\renewcommand\baselinestretch{1.5}% +\parskip=0pt% +% +% Page break penalties +% +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% +% Disallow widows and orphans +% +\clubpenalty 10000 +\widowpenalty 10000 +% +% Disable page breaks before equations, allow pagebreaks after +% equations and discourage widow lines before equations. +% +\displaywidowpenalty 100 +\predisplaypenalty 10000 +\postdisplaypenalty 0 +% +% Set these global demerits +% +\doublehyphendemerits 1000000 % corresponds to badness 800 +\finalhyphendemerits 1000000 % corresponds to badness 1000 +% +% Allow loose lines rather than overfull lines +% +\vbadness=9999 +\tolerance=9999 +% +% Allow breaking the page in the middle of a paragraph +% +\interlinepenalty 0 +% +% Disallow breaking the page after a hyphenated line +\brokenpenalty 10000 +% +% Hyphenation; don't split words into less than three characters +\lefthyphenmin=3 +\righthyphenmin=3 +% +% Float placement parameters +% +% The total number of floats that can be allowed on a page. +\setcounter{totalnumber}{3} +% +% The maximum number of floats at the top and bottom of a page. +\setcounter{topnumber}{5} +\setcounter{bottomnumber}{5} +% +% The maximum part of the top or bottom of a text page that can be +% occupied by floats. This is set so that at least four lines of text +% fit on the page. +\renewcommand\topfraction{.921} +\renewcommand\bottomfraction{.921} + +% The minimum amount of a text page that must be occupied by text. +% This should accomodate four lines of text. +\renewcommand\textfraction{.13} + +% The minimum amount of a float page that must be occupied by floats. +\renewcommand\floatpagefraction{.887} + +% The same parameters repeated for double column output +\renewcommand\dbltopfraction{.88} +\renewcommand\dblfloatpagefraction{.88} + +% Space between floats +\setlength\floatsep{18\p@ \@plus 4\p@ \@minus 2\p@} + +% Space between floats and text +\setlength\textfloatsep{15\p@ \@plus 4\p@ \@minus 2\p@} + +% Space above and below an inline figure +\setlength\intextsep {18\p@ \@plus 4\p@ \@minus 2\p@} + +% For double column floats +\setlength\dblfloatsep {20\p@ \@plus 4\p@ \@minus 2\p@} +\setlength\dbltextfloatsep{15\p@ \@plus 4\p@ \@minus 2\p@} + +\hyphenation{Figure Figures Table Tables Equation Equations Section Sections Appendix Theorem Lemma} + + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Math Settings %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% For above/below spacing +\def\eqnarray{% + \stepcounter{equation}% + \def\@currentlabel{\p@equation\theequation}% + \global\@eqnswtrue + \m@th + \global\@eqcnt\z@ + \tabskip\@centering + \let\\\@eqncr + $$\everycr{}\halign to\displaywidth\bgroup + \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel + &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil + &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep + $\displaystyle{##}$\hfil\tabskip\@centering + &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup + \tabskip\z@skip + \cr +} +\def\endeqnarray{% + \@@eqncr + \egroup + \global\advance\c@equation\m@ne + $$\@ignoretrue +} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Titles %%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\renewcommand\refname{References}% +\renewcommand\figurename{Fig.}% defined as per springer style +\renewcommand\tablename{Table}% +\renewcommand\appendixname{Appendix}% +\renewcommand\abstractname{Abstract}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Article Front Matter %%%%%%%%%%%%%%%%%%%%%%%%%%% +% + +\def\raggedleft{\leftskip0pt plus 1fil\parfillskip=0pt\relax}% +\def\raggedright{\rightskip0pt plus 1fil\parfillskip=0pt\relax}% +\def\raggedcenter{\leftskip=0pt plus 0.5fil\rightskip=0pt plus 0.5fil% +\parfillskip=0pt\let\hb=\break}% +\def\titraggedcenter{\leftskip=12pt plus 0.5fil\rightskip=12pt plus 0.5fil% +\parfillskip=0pt\let\hb=\break}% +\def\absraggedcenter{\leftskip=24pt plus 0.5fil\rightskip=24pt plus 0.5fil% +\parfillskip=0pt\let\hb=\break}% + +% +%%% Font Def +\def\Artcatfont{\reset@font\fontsize{8bp}{10bp}\selectfont}% +\def\Titlefont{\reset@font\fontsize{17bp}{22.5bp}\selectfont\titraggedcenter}% +\def\SubTitlefont{\reset@font\fontsize{14bp}{16.5bp}\selectfont\titraggedcenter}% +\def\Authorfont{\reset@font\fontsize{12bp}{14.5bp}\selectfont\boldmath\titraggedcenter}% +\def\addressfont{\reset@font\fontsize{11bp}{13.5bp}\selectfont\titraggedcenter}% +\def\abstractheadfont{\reset@font\fontsize{9bp}{11bp}\bfseries\selectfont\titraggedcenter}% +\def\abstractsubheadfont{\reset@font\fontsize{9bp}{11bp}\bfseries\selectfont}% +\def\abstractfont{\reset@font\fontsize{9bp}{11bp}\selectfont\leftskip=24pt\rightskip=24pt\parfillskip=0pt plus 1fil}% +\def\keywordfont{\reset@font\fontsize{8bp}{9.5bp}\selectfont\leftskip=24pt\rightskip=24pt plus0.5fill}% +\def\historyfont{\reset@font\fontsize{8bp}{9.5bp}\selectfont\leftskip=24pt\rightskip=24pt plus0.5fill}% + +%% Article Type + +\newbox\artcatbox% + + + +\def\articletype#1{\if!#1!\else\setbox\artcatbox\hbox{\Artcatfont\hskip1mm#1\hskip1mm}\fi% +\gdef\ArtType{\fboxsep=0pt{\vbox to 4mm{\vfil% + {\raggedright\box\artcatbox}\vfil}}}% +\gdef\@ArtType{#1}}% +%%\articletype{RESEARCH ARTICLE}% +\articletype{}% + + +%% Article Title + +\renewcommand{\title}[2][]{% +\gdef\@checktitle{#1}\ifx\@checktitle\empty\gdef\@title{#2}% +\gdef\s@title{#2}\else\gdef\@title{#2}\gdef\s@title{#1}\fi% +\markboth{\textit{\s@title}}{\textit{\s@title}}}% + +\def\subtitle#1{\gdef\@subtitle{#1}}\subtitle{}% + +%% Cross Link for Author & Address +\def\jmkLabel#1{\@bsphack\protected@write\@auxout{}{\string\Newlabel{#1}{\@currentlabel}}\@esphack}% +\def\Newlabel#1#2{\expandafter\xdef\csname X@#1\endcsname{#2}}% +\def\jmkRef#1{\@ifundefined{X@#1}{0}{\csname X@#1\endcsname}}% + +%% Article Author(s) +\let\sep\@empty% +\let\authorsep\@empty% +\newcount\aucount% +\newcount\corraucount% +\newcount\punctcount% +% +\def\artauthors{}% +\newif\if@auemail% +\newif\if@corauemail% +% +\def\au@and{\ifnum\punctcount=2\ and\else\unskip, \advance\punctcount by -1 \fi}% +% +\def\author{\advance\aucount by 1\@ifstar\@@corrauthor\@@author}% +% +\newcommand{\@@author}[2][]{\def\@authfrstarg{#1}\@corauemailfalse% +\g@addto@macro\artauthors{% + \ifnum\aucount=1% + \global\@auemailtrue% + \else% + \global\@auemailfalse% + \fi% + \Authorfont% + \def\baselinestretch{1}% + \authorsep{#2}\unskip\ifx\@authfrstarg\empty\else\textsuperscript{\smash{{% + \@for\@@affmark:=#1\do{\edef\affnum{\@ifundefined{X@\@@affmark}{\@@affmark}{\jmkRef{\@@affmark}}}% + \unskip\sep\affnum\let\sep=,}}}}\fi% + \def\authorsep{{\au@and} }%%% + \global\let\sep\@empty\global\let\@corref\@empty% +}}% +% +\newcommand{\@@corrauthor}[2][]{\def\@authfrstarg{#1}\@corauemailtrue\advance\corraucount by 1% +\g@addto@macro\artauthors{% + \global\@auemailtrue% + \Authorfont% + \def\baselinestretch{1}% + \authorsep{#2}\unskip\ifx\@authfrstarg\empty\else\textsuperscript{\smash{{% + \@for\@@affmark:=#1\do{\edef\affnum{\@ifundefined{X@\@@affmark}{\@@affmark}{\jmkRef{\@@affmark}}}% + \unskip\sep\affnum\let\sep=,}}}{*}\hskip-1pt}\fi\unskip% + \def\authorsep{\au@and~}%%% + \global\let\sep\@empty\global\let\@corref\@empty% +}}% +%% +%% Miscellaneous macros %% +%% +\def\fnm#1{\leavevmode\hbox{#1}}% +\def\sur#1{\unskip~\nobreak\leavevmode\hbox{#1}}% +\def\spfx#1{#1}% +\def\pfx#1{#1}% +\def\sfx#1{#1}% +\def\tanm#1{#1}% +\def\dgr#1{#1}% +% +%% Author Email +% +\let\nomail\relax% +\def\corrauthemail{}% +\def\authemail{}% + +\newcount\emailcnt% + +\def\email#1{\global\advance\emailcnt by 1\relax% +\if@corauemail% + \g@addto@macro\corrauthemail{% + \setcounter{footnote}{0}% + \textcolor{blue}{#1};\ % + }% +\else% + \g@addto@macro\authemail{% + \setcounter{footnote}{0}% + \textcolor{blue}{#1};\ % + }% +\fi} + +%% Corrseponding Address +\def\@copycorthanks{}% +\def\auaddress{}% +\def\@auaddress{}% + +\newcounter{affn}% +\newcount\addcount% To check the count of address + +\renewcommand\theaffn{\arabic{affn}}% + +\def\affil{\advance\addcount by 1\@ifstar\@@coraddress\@@address}% + +\newcommand{\@@coraddress}[2][]{%\advance\addcount by 1 +\g@addto@macro\auaddress{% + \stepcounter{affn}% + \xdef\@currentlabel{\theaffn}% + \jmkLabel{\theaffn}% + {\textsuperscript{#1*}#2.\par} } +} + +%% Macros for present address + +\newif\ifpresentaddress% + +\def\@presentaddresstxt{}% +\def\presentaddresstxt#1{\gdef\@presentaddresstxt{#1:}}\presentaddresstxt{Present Address}% +\newcommand{\presentaddress}[1]{\gdef\@presentaddresstext{\@presentaddresstxt\par#1}\global\presentaddresstrue}% + +%% Macros for equally contributed + +\newif\ifequalcont% + +%\def\@equalconttxt{}% +%\def\equalcontxt#1{\gdef\@equalconttxt{#1}}\equalcontxt{These authors contributed equally to this work.}% +%\newcommand{\equalcont}[1][\@equalconttxt]{\gdef\@equalconttext{#1}\g@addto@macro\artauthors{$^{\dagger}$}\global\equalconttrue}% + +\def\@equalconttxt{}% +\def\equalcontxt#1{\gdef\@equalconttxt{#1}}\equalcontxt{}% +\newcommand{\equalcont}[1]{\gdef\@equalconttext{#1}\g@addto@macro\artauthors{$^{\dagger}$}\global\equalconttrue}% + +%% Author Address + +\newcommand{\@@address}[2][]{%%\advance\addcount by 1 +\g@addto@macro\auaddress{% + \stepcounter{affn}% + \xdef\@currentlabel{\theaffn}% + \jmkLabel{\theaffn}% + {\textsuperscript{#1}#2.\par} }%\theaffn +} + +%% Address tagging +\newcommand{\orgdiv}[1]{#1}% +\newcommand{\orgname}[1]{#1}% +\newcommand{\orgaddress}[1]{#1}% +\newcommand{\street}[1]{#1}% +\newcommand{\postcode}[1]{#1}% +\newcommand{\city}[1]{#1}% +\newcommand{\state}[1]{#1}% +\newcommand{\country}[1]{#1}% + +%% Article notes + +\def\@artnote{}% +\def\artnote#1{\gdef\@artnote{#1}}% + +%% Miscellaneous notes + +\def\@miscnote{}% +\def\miscnote#1{\gdef\@miscnote{\par\addvspace{3pt}#1}}% + +%% Motto + +\def\mottofont{\reset@font\fontfamily{\rmdefault}\fontsize{8.5bp}{10bp}\fontshape{it}\selectfont\raggedright} +% +\let\@motto\@empty +\def\mottoraggedright{\rightskip0mm\leftskip=42mm plus 1fil\parfillskip=0pt\relax}% +\newcommand{\motto}[2][]{\gdef\@headcheck{#1}\gdef\@motto{\@headcheck\ifx\@headcheck\@empty\vskip12pt\else\fi{\mottofont\mottoraggedright#2\par}}} + +%% Article Abstract +\newcommand\abstracthead{\@startsection {section}{1}{\z@}{-22pt \@plus0ex \@minus0ex}{3pt}{\abstractheadfont}} +\newcommand\subabstracthead{\@startsection{subsection}{2}{\z@}{3pt \@plus0ex \@minus0ex}{-.5em}{\abstractsubheadfont}} + +\def\@abstract{}% +\long\def\abstract#1{\def\@abstract{% +\let\paragraph\subabstracthead% +\abstractfont% +\abstracthead*{\abstractname}% +#1\par}}% + +\def\printabstract{\ifx\@abstract\empty\else\@abstract\fi\par}% + +\def\printkeywords{\ifx\@keywords\empty\else\@keywords\fi\par}% + +% +%% Keywords +\def\keywordname{Keywords}% +\def\keywords#1{\ifx#1\empty\else\def\@keywords{\par\addvspace{10pt}{\keywordfont{\bfseries\keywordname:} #1\par}}\fi}% +\def\@keywords{}% + +%% PACs + +\def\pacsbullet{\hbox{\hskip2.5pt,\hskip2.5pt}}% + +\def\change@commas#1,#2{% + \ifx#2\@empty% + #1% + \else% + #1\nobreak\hbox{\pacsbullet}\allowbreak\expandafter\change@commas% + \fi% + #2}% + +\newcommand\keywordhead[1]{\par\addvspace{10pt}% +{{\keywordfont\bfseries#1:\ }}}% + +\newcommand{\pacs}[1]{\keywordhead{\pacsname}#1}% +% +\newcount\PacsCount% +\PacsCount=0% +% +\newcount\PacsTmpCnt% +\PacsTmpCnt=1% +% +\gdef\StorePacsText#1#2{% +\edef\GetRoman{\romannumeral#1}% +\expandafter\gdef\csname\GetRoman StorePacsTxt\endcsname{#2}% +}% +% +\let\oldpacs\pacs% +\renewcommand\pacs[2][PAC Codes]{\gdef\pacsname{{\bfseries#1}}\gdef\@pacs{\keywordfont\raggedright\oldpacs\change@commas#2,\@empty\par} +\StepUpCounter{\PacsCount}% +\StorePacsText{\the\PacsCount}{\gdef\pacsname{{\bfseries#1}}\keywordfont\raggedright\oldpacs\change@commas#2,\@empty}% +}% + +\def\@pacs{}% + +%% Glossary + +\def\gloshead{Glossary}% + +\newenvironment{glos}[1][\gloshead]{\begingroup\parindent=0pt% +\section*{#1} +\def\item[##1]{##1,\ }}{% +\endgroup}% +% + +%% Article History + +\def\received#1{\g@addto@macro\@history{{Received #1}}}% +\def\revised#1{\g@addto@macro\@history{{; revised #1}}}% +\def\accepted#1{\g@addto@macro\@history{{; accepted #1}}}% + +%% Remark on Front page %% + +\newdimen\FMremarkdim% + +\newcommand{\FMremark}{\begingroup\parindent=0pt\parskip=0pt% +\if@referee\singlespacing\fi% +\fboxsep=6pt\fboxrule=0.5pt% +\FMremarkdim=\textwidth%%\paperwidth% +\advance\FMremarkdim-\fboxsep% +\advance\FMremarkdim-2\fboxrule% +\if@referee\vskip-21pt\fi% +%%\fbox{\vbox{\hsize=\FMremarkdim\small% +\unvbox\fmremarkbox +%%}}% +\endgroup} + +\newbox\fmremarkbox% + +\newenvironment{fmremark}{\begingroup\parindent=0pt% +\fboxsep=6pt\fboxrule=0.5pt% +\FMremarkdim=\textwidth%%\paperwidth% +\advance\FMremarkdim-\fboxsep% +\advance\FMremarkdim-2\fboxrule% +\global\setbox\fmremarkbox\vbox\bgroup\small% +}{\egroup\endgroup} + +%% Article Header Definition +\renewcommand{\@maketitle}{\newpage\null% + \if@remarkboxon\vbox to 0pt{\vspace*{-78pt}\hspace*{-18pt}\FMremark}\else\vskip21pt\fi%%\par% + \hsize\textwidth\parindent0pt%%%\vskip7pt% + %% Aritle Type + {\hbox to \textwidth{{\Artcatfont\ArtType\hfill}\par}} + %% Aritle Title + \ifx\@title\empty\else% + \removelastskip\vskip20pt\nointerlineskip% + {\Titlefont\@title\par} + %\addcontentsline{toc}{chapter}{\@title}% for bookmarks + \fi% + %% Aritle SubTitle + \ifx\@subtitle\empty\else% + \vskip9pt% + {{\SubTitlefont\@subtitle\par}} + \fi% + %% Aritle Authors, Address and Correspondings + \ifnum\aucount>0 + \global\punctcount\aucount% + \vskip20pt% + \artauthors\par%% authors and emails + {\vskip7pt\addressfont\auaddress\par%% corresponding adress + \removelastskip\vskip24pt% + \ifnum\emailcnt>0\relax% + \ifx\corrauthemail\@empty\else{\ifnum\aucount>1*\fi}% + Corresponding author(s). E-mail(s): \corrauthemail\par\fi% + \ifx\authemail\@empty\else Contributing authors:\ \authemail\fi% + \fi% + \ifequalcont{\par$^{\dagger}$\@equalconttext\par}\fi% + \removelastskip\vskip24pt% + \ifpresentaddress{\par\@presentaddresstext\par}\fi% + } + \fi% + {\printabstract\par}% + {\printkeywords\par}% + \ifx\@pacs\empty\else% + \loop\ifnum\PacsCount>0% + \csname\romannumeral\PacsTmpCnt StorePacsTxt\endcsname\par% + \StepDownCounter{\PacsCount}% + \StepUpCounter{\PacsTmpCnt}% + \repeat% + \fi% + %%{\printhistory\par}% + %%{\ifx\@motto\empty\else\@motto\fi}% + \removelastskip\vskip36pt\vskip0pt}% + +\usepackage{cuted}% +\@ifpackageloaded{cuted}{\gdef\@setmarks{}}{}% + +%% Printing Article Header +\newdimen\firstpagehtcheck + +\renewcommand\maketitle{\par + \@afterindentfalse% + \begingroup + \gdef\UrlFont{\rmfamily}% + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\smash{\@thefnmark}}}}% + \long\def\@makefntext##1{\parindent 1em\noindent\small\selectfont + \hbox{\@textsuperscript{\normalfont\@thefnmark}}##1}% + \if@twocolumn + \ifnum \col@number=\@ne% +\setbox0=\vbox{\@maketitle} +\firstpagehtcheck=\ht0% +\advance\firstpagehtcheck by \dp0% +\ifdim\firstpagehtcheck>\textheight% +\setbox1=\vsplit0to2\textheight% +\setbox1=\vbox{\unvbox1}% +\setbox2=\vbox{\unvbox0}% +\unvbox1% +\stripsep=0pt% +\begin{strip} +\unvbox2% +\end{strip} +\else +\twocolumn[\@maketitle]% +\fi +\else +\@maketitle +\fi% + \else% + \newpage% + \global\@topnum\z@% Prevents figures from going at top of page. + \@maketitle% + \fi% + \endgroup% + \ifx\@artnote\@empty\else\footnoteA{\@artnote}\fi% + \ifx\@miscnote\@empty\else\footnoteA{\@miscnote\par}\fi% + \setcounter{footnote}{0}% + \global\let\thanks\relax% + \global\let\artnote\relax% + \global\let\maketitle\relax% + \global\let\@maketitle\relax% + \global\let\@thanks\@empty% + \global\let\@author\@empty% + \global\let\@date\@empty% + \global\let\title\relax% + \global\let\author\relax% + \global\let\date\relax% + \global\let\and\relax% + \pagestyle{headings}% + %%%print continuous abstract on next page + \@afterheading% + %%\vskip-18pt% this is included to avoid vertical space at the beginning of left column on article opening pages +}% + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Page Styles %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\def\opheaderfont{\reset@font\fontsize{10bp}{0bp}\selectfont}% +\def\headerfont{\reset@font\fontsize{10bp}{0bp}\selectfont}% +\def\footerfont{\reset@font\fontsize{10bp}{0bp}\selectfont}% + +%% Regular Page Style +\def\ps@headings{% + \def\@oddfoot{\hfill\thepage\hfill}% + \let\@evenfoot\@oddfoot% + \def\@evenhead{% + \vbox to 0pt{\vspace*{-48pt}% + \hbox to \hsize{\hfill \relax\hfill}}\par%% + \hspace*{-\textwidth}\hbox to \hsize{\hfill}}% + \def\@oddhead{% + \vbox to 0pt{\vspace*{-48pt}% + \hbox to \hsize{\hfill \relax\hfill}}\par%% + \hspace*{-\textwidth}\hbox to \hsize{\hfill}}% + \let\@mkboth\markboth% + }% + + +%% Opening Page Style +\def\ps@titlepage{% + %%\def\@oddhead{\vbox{\vskip-36pt\hbox to \textwidth{\hfill\includegraphics{springer-nature-logo}\hspace*{-1pt}}}}% + %%\let\@oddhead\@empty\let\@evenhead\@empty% + \def\@oddhead{% + \vbox to 0pt{\vspace*{-38pt}% + \hbox to \hsize{\hfill \hfill}}}%% + \let\@evenhead\@oddhead% + \def\@oddfoot{\vbox to 18pt{\vfill\reset@font\rmfamily\hfil\thepage\hfil}}%% + \def\@evenfoot{}}% + +\def\ps@plain{\let\@mkboth\@gobbletwo% +\let\@oddhead\@empty\let\@evenhead\@empty% +\def\@oddfoot{\vbox to 18pt{\vfill\reset@font\rmfamily\hfil ddd\thepage\hfil}}% +\let\@evenfoot\@oddfoot}% + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Sections %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% + +\def\numbered{\setcounter{secnumdepth}{3}}% +\def\unnumbered{\setcounter{secnumdepth}{0}}% +\numbered%% default is numbered Sections + +\renewcommand\thesection {\@arabic\c@section}% +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection}% +\renewcommand\thesubsubsection{\thesubsection.\@arabic\c@subsubsection}% +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph}% +\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph}% +%% +\def\@seccntformat#1{\csname the#1\endcsname\hskip.5em}% + +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup + #6{% + \@hangfrom{\hskip #3\relax\@svsec}% + \interlinepenalty \@M #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}% + \else + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8.}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}}% + \fi + \@xsect{#5}} +% +\def\sectionfont{\reset@font\fontfamily{\rmdefault}\fontsize{14bp}{16bp}\bfseries\selectfont\raggedright\boldmath}% +\def\subsectionfont{\reset@font\fontfamily{\rmdefault}\fontsize{12bp}{14bp}\bfseries\selectfont\raggedright\boldmath}% +\def\subsubsectionfont{\reset@font\fontsize{11bp}{13bp}\bfseries\selectfont\raggedright\boldmath}% +\def\paragraphfont{\reset@font\fontsize{10bp}{12bp}\bfseries\itshape\selectfont\raggedright}% +% +\def\subparagraphfont{\itshape}% +\def\bmheadfont{\reset@font\fontfamily{\rmdefault}\fontsize{10bp}{12bp}\bfseries\selectfont\raggedright\boldmath}% +% +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-12pt \@plus -4pt \@minus -2pt}% + {9pt}% + {\sectionfont}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-12pt \@plus -4pt \@minus -2pt}% + {6pt}% + {\subsectionfont}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-12pt \@plus -4pt \@minus -2pt}% + {6pt}% + {\subsubsectionfont}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {-12pt \@plus -4pt \@minus-2pt}% + {3pt}% + {\paragraphfont}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\z@}% + {6pt \@plus1ex \@minus.2ex}% + {-1em}% + {\subparagraphfont}} +\newcommand\bmhead{\@startsection{subparagraph}{5}{\z@}% + {6pt \@plus1ex \@minus .2ex}% + {-1em}% + {\bmheadfont}} +% +\def\@startsection#1#2#3#4#5#6{% + \if@noskipsec \leavevmode \fi + \par + \@tempskipa #4\relax + \@afterindenttrue + \ifdim \@tempskipa <\z@ + \@tempskipa -\@tempskipa \@afterindentfalse + \fi + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty\addvspace\@tempskipa + \fi + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}}% + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Lists %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\newdimen\labelwidthi% +\newdimen\labelwidthii% +\newdimen\labelwidthiii% +\newdimen\labelwidthiv% + +\def\normal@labelsep{0.5em}% +\labelsep\normal@labelsep% +\settowidth{\labelwidthi}{(iii)}% +\settowidth{\labelwidthii}{(d)}% +\settowidth{\labelwidthiii}{(iii)}% +\settowidth{\labelwidthiv}{(M)}% + +\leftmargini\labelwidthi \advance\leftmargini\labelsep +\leftmarginii\labelwidthii \advance\leftmarginii\labelsep +\leftmarginiii\labelwidthiii \advance\leftmarginiii\labelsep +\leftmarginiv\labelwidthiv \advance\leftmarginiv\labelsep + +\def\setleftmargin#1#2{\settowidth{\@tempdima}{#2}\labelsep\normal@labelsep + \csname labelwidth#1\endcsname\@tempdima + \@tempdimb\@tempdima \advance\@tempdimb\labelsep + \csname leftmargin#1\endcsname\@tempdimb} +\def\@listI{\leftmargin\leftmargini + \labelwidth\labelwidthi \labelsep\normal@labelsep + \topsep \z@ \partopsep\z@ \parsep\z@ \itemsep\z@ + \listparindent 1em} +\def\@listii{\leftmargin\leftmarginii + \labelwidth\labelwidthii \labelsep\normal@labelsep + \topsep\z@ \partopsep\z@ \parsep\z@ \itemsep\z@ + \listparindent 1em} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\labelwidthiii \labelsep\normal@labelsep + \topsep\z@ \partopsep\z@ \parsep\z@ \itemsep\z@ + \listparindent 1em} +\def\@listiv{\leftmargin\leftmarginiv + \labelwidth\labelwidthiv \labelsep\normal@labelsep + \topsep\z@ \partopsep\z@ \parsep\z@ \itemsep\z@ + \listparindent 1em} +\let\@listi\@listI +\@listi +% +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +\def\labelitemi{$\bullet$} \def\labelitemii{$\cdot$} +\def\labelenumi{\theenumi.} \def\theenumi{\arabic{enumi}} +\def\labelenumii{(\alph{enumii})} \def\theenumii{\alph{enumii}} +\def\labelenumiii{(\roman{enumiii})}\def\theenumiii{\roman{enumiii}} +\def\labelenumiv{(\Alph{enumiv})} \def\theenumiv{\Alph{enumiv}} + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Ordered & Unordered List %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\def\listfont{\normalsize}% +% +\def\enumargs{% + \listfont% + \leftmargini0pt% + \leftmarginii0pt% + \leftmarginiii0pt% + \ifnum\@enumdepth=3\topsep0pt\else\ifnum\@enumdepth=2\topsep0pt\else\topsep 6pt\fi\fi% + \partopsep \z@% + \itemsep \z@% + \parsep \z@% + \labelsep 0.5em% + \rightmargin \z@% + \raggedright% + \listparindent \parindent% + \itemindent \z@}% + +\def\enumerate{% + \@ifnextchar[{\@numerate}{\@numerate[0.]}} + +\def\@numerate[#1]{\par% + \ifnum \@enumdepth >3 \@toodeep\else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth} + \list{\csname label\@enumctr\endcsname}{% + \enumargs% + \setlength{\leftmargin}{\csname leftmargin\romannumeral\the\@enumdepth\endcsname} + \usecounter{\@enumctr} + \settowidth\labelwidth{#1} + \addtolength{\leftmargin}{\labelwidth} + \addtolength{\leftmargin}{\labelsep} + \def\makelabel##1{\hss\llap{##1}}}% + \fi + } +\let\endenumerate\endlist + +%%Unnumbered list%% + +\def\unenumargs{% + \listfont% + \leftmargini\parindent% + \topsep6pt% + \partopsep \z@% + \itemsep \z@% + \parsep \z@% + \labelsep 0\p@% + \rightmargin \z@% + \raggedright% + \listparindent \parindent% + \itemindent -12pt}% + +\def\unenumerate{% + \@ifnextchar[{\@unenumerate}{\@unenumerate[0.]}} + +\def\@unenumerate[#1]{\par% + \ifnum \@enumdepth >3 \@toodeep\else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth} + \list{}{% + \unenumargs + \setlength{\leftmargin}{\csname leftmargin\romannumeral\the\@enumdepth\endcsname} + \usecounter{\@enumctr} + \settowidth\labelwidth{#1} + \addtolength{\leftmargin}{0pt} + \addtolength{\leftmargin}{0pt} + \def\makelabel##1{\hss\llap{##1}}}% + \fi + } + +\let\endunenumerate\endlist% + +%% bulleted list + +\def\itemargs{% + \listfont% + \leftmargini0pt% + \leftmarginii0pt% + \ifnum\@enumdepth=3\topsep0pt\else\ifnum\@enumdepth=2\topsep0pt\else\topsep 6pt\fi\fi% + \partopsep \z@% + \itemsep \z@% + \parsep \z@% + \labelsep 0.5em% + \rightmargin \z@% + \raggedright% + \listparindent \z@% + \itemindent \z@}% + +\renewcommand\labelitemi{\raise1pt\hbox{\textbullet}}% +\renewcommand\labelitemii{\textendash}% + +\def\itemize{% + \@ifnextchar[{\@itemize}{\@itemize[$\bullet$]}} + +\def\@itemize[#1]{\par% + \ifnum \@itemdepth >3 \@toodeep\else + \advance\@itemdepth \@ne + \edef\@itemctr{item\romannumeral\the\@itemdepth} + \list{\csname label\@itemctr\endcsname}{% + \itemargs + \setlength{\leftmargin}{\csname leftmargin\romannumeral\the\@itemdepth\endcsname} + \settowidth\labelwidth{#1} + \addtolength{\leftmargin}{\labelwidth} + \addtolength{\leftmargin}{\labelsep} + \def\makelabel##1{\hss \llap{##1}}}% + \fi + } +\let\enditemize\endlist +% +\def\quote{\list{}{\itemindent\z@ + \leftmargin 1em \rightmargin \z@}% +\item[]} +\let\endquote\endlist +% +\def\descriptionlabel#1{\hspace\labelsep \itshape #1} +\def\description{\list{}{\labelwidth\z@ + \leftmargin \z@ \topsep6pt\itemindent \z@ %-\leftmargin + \let\makelabel\descriptionlabel}} +\let\enddescription\endlist + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Float %%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\setlength\abovecaptionskip{2.25\p@}% +\setlength\belowcaptionskip{6\p@}% + +\setlength\arraycolsep{2\p@}% +\setlength\tabcolsep{6\p@}% +\setlength\arrayrulewidth{.4\p@}% +\setlength\doublerulesep{2\p@}% +\setlength\tabbingsep{\labelsep}% + +\def\fnum@figure{{\bfseries\figurename\space\thefigure}}% +\def\fnum@table{{\bfseries\tablename\space\thetable}}% + +\def\FigName{figure}% + +\long\def\@makecaption#1#2{% + \ifx\FigName\@captype + \vskip\abovecaptionskip + \@figurecaption{#1}{#2} + \else + \@tablecaption{#1}{#2} + \vskip\belowcaptionskip + \fi% +} + +%% Figure + +\def\figurecaptionfont{\reset@font\fontfamily{\rmdefault}\fontsize{8}{9.5}\selectfont}% + +\newdimen\figwidth% +\newdimen\figheight% +\newdimen\sidecapwidth +\newdimen\wrapcapline% +\newdimen\totalwrapline% +\newdimen\wraptotline% + +%% Figures macro +\newbox\figurebox% +\newbox\wrapfigcapbox + +\def\FIG#1#2{% +\setbox\figurebox\hbox{#1}% +%% Figure dimensions +\figwidth\wd\figurebox% +\figheight\ht\figurebox% +{\parbox{\hsize}{% +\centerline{\box\figurebox}% +%% Caption +#2}}} + +%% Figures caption +\newbox\figcapbox +\newbox\capbox +\long\def\@figurecaption#1#2{{\figurecaptionfont{\bfseries#1}\hskip.7em#2\par}}% + +\newenvironment{unnumfigure}{\begingroup\setlength{\topsep}{12pt}% +\begin{center}}{\end{center}\endgroup} + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\@ifpackageloaded{booktabs}{\cmidrulewidth=.15pt}{}% +% +\def\tablecaptionfont{\reset@font\fontsize{8bp}{9.5bp}\selectfont}% +\def\tablebodyfont{\reset@font\fontsize{8bp}{9.5bp}\selectfont}% +\def\tablecolheadfont{\reset@font\fontsize{8bp}{9.5bp}\selectfont\bfseries\boldmath}% +\def\tablefootnotefont{\reset@font\fontsize{8bp}{9.5bp}\selectfont}% + +%% Table Macro + +\newskip\headwidthskip% + +\def\tabraggedcenter{\leftskip=0pt plus 0.5fil\rightskip=0pt plus 0.5fil\parfillskip=0pt}% + +\newenvironment{@processtable}[4]{% +\setbox4=\hbox to \hsize{\hss% +\begin{minipage}[t]{#4}% +\tabraggedcenter% +\caption{#1}\par% +{\tablebodyfont\noindent\ignorespaces#2\par}\par\vglue6pt% +{\if!#3!\else{\tablefootnotefont#3}\fi}% +\end{minipage}% +\hss}% +\box4\par}% + +\newcommand\TBL[3]{\begingroup% +% +\if!#1!\let\caption\relax\fi% +% + \global\setbox\temptbox=\hbox{\bgroup{\tablebodyfont#2}\egroup}% + \global\tempdime\wd\temptbox% + \@processtable{#1}{\global\headwidthskip=\tempdime% + \vbox{#2}}{#3}{\tempdime}% +\endgroup}% + +%% Table Caption +\newbox\tabcapbox% +\newbox\temptbox% +\newdimen\tempdime% +\newdimen\tabhtdime% + +\long\def\@tablecaption#1#2{% + \setbox\tabcapbox\vbox{\tablecaptionfont\raggedright% + {\bfseries #1}{\hskip2mm}#2\vphantom{y}\par}% + \box\tabcapbox% +} + +%% Table Column Heads +\def\TCH#1{{\tablecolheadfont #1}} + +%% Table Footnotes + +\newenvironment{tablenotes}{\list{}{\setlength{\labelsep}{0pt}% +\setlength{\labelwidth}{0pt}% +\setlength{\leftmargin}{0pt}% +\setlength{\rightmargin}{0pt}% +\setlength{\topsep}{-6pt}% +\setlength{\itemsep}{2pt}% +\setlength{\partopsep}{0pt}% +\setlength{\listparindent}{0em}% +\setlength{\parsep}{0pt}}% +\item\relax% +}{\endlist}% + +\def\tnote#1{$^{#1}$}%% + +%% Table Rules + +\def\toprule{%\noalign{\vskip3pt} +\noalign{\ifnum0=`}\fi + \hrule \@height 0\p@ \@width 0pt + \hrule \@height 0.75\p@ % <- rule height + \hrule \@height 5pt \@width 0pt + \futurelet\@tempa\@xhline} +% Middle rule +\def\midrule{\noalign{\ifnum0=`}\fi% + \hrule \@height 3pt \@width 0pt + \hrule \@height .5pt % <- rule height + \hrule \@height 5pt \@width 0pt + \futurelet \@tempa\@xhline} +% Bottom rule +\def\botrule{\noalign{\ifnum0=`}\fi + \hrule \@height 3pt \@width 0pt + \hrule \@height 0.75\p@ % <- rule height + \hrule \@height 3pt \@width 0pt + \futurelet\@tempa\@xhline} +% +\def\@@@cmidrule[#1-#2]#3#4{\global\@cmidla#1\relax + \global\advance\@cmidla\m@ne + \ifnum\@cmidla>0\global\let\@gtempa\@cmidrulea\else + \global\let\@gtempa\@cmidruleb\fi + \global\@cmidlb#2\relax + \global\advance\@cmidlb-\@cmidla + \global\@thisrulewidth=#3 + \@setrulekerning{#4} + \ifnum\@lastruleclass=\z@\vskip 3\p@\fi + \ifnum0=`{\fi}\@gtempa + \noalign{\ifnum0=`}\fi\futurenonspacelet\@tempa\@xcmidrule} +\def\@xcmidrule{% + \ifx\@tempa\cmidrule + \vskip-\@thisrulewidth + \global\@lastruleclass=\@ne + \else \ifx\@tempa\morecmidrules + \vskip \cmidrulesep + \global\@lastruleclass=\@ne\else + \vskip 5\p@ + \global\@lastruleclass=\z@ + \fi\fi + \ifnum0=`{\fi}} +\let\cline\cmidrule + +\usepackage[figuresright]{rotating}% +\usepackage{threeparttable} + +\let\tableorg\table% +\let\endtableorg\endtable% + +\let\sidewaystableorg\sidewaystable% +\let\endsidewaystableorg\endsidewaystable% + +\renewenvironment{table}[1][]% +{\begin{tableorg}[#1]% +\begin{center} +\begin{threeparttable} +\tablebodyfont% +\renewcommand\footnotetext[2][]{{\removelastskip\vskip3pt% +\let\tablebodyfont\tablefootnotefont% +\hskip0pt\if!##1!\else{\smash{$^{##1}$}}\fi##2\par}}% +}{\end{threeparttable}\end{center}\end{tableorg}} + +\renewenvironment{sidewaystable}[1][]% +{\begin{sidewaystableorg}[#1]% +\begin{center} +\begin{threeparttable} +\tablebodyfont% +\renewcommand\footnotetext[2][]{{\removelastskip\vskip3pt% +\let\tablebodyfont\tablefootnotefont% +\hskip0pt\if!##1!\else{\smash{$^{##1}$}}\fi##2\par}}% +}{\end{threeparttable}\end{center}\end{sidewaystableorg}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Other Env. %%%%%%%%%%%%%%%%%%%%%%%%% + +\def\quotefont{\reset@font\fontfamily{\rmdefault}\fontsize{9}{11}\selectfont}% + +\renewenvironment{quote} + {\list{}{\topsep=0pt\topsep6pt\leftmargin=1em\raggedright\quotefont}% + \item\relax} + {\endlist} + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%% Appendix %%%%%%%%%%%%%%%%%%%%%%%%% +% + +\newif\ifbackmatter% +\newcommand{\backmatter}{\global\backmattertrue}% + +\usepackage[title]{appendix}% + +\@ifpackageloaded{appendix}{% +% +\renewenvironment{appendices}{% + \@resets@pp + \if@dotoc@pp + \if@dopage@pp % both page and toc + \if@chapter@pp % chapters + \clear@ppage + \fi + \appendixpage + \else % toc only + \if@chapter@pp % chapters + \clear@ppage + \fi + \addappheadtotoc + \fi + \else + \if@dopage@pp % page only + \appendixpage + \fi + \fi + \if@chapter@pp + \if@dotitletoc@pp \@redotocentry@pp{chapter} \fi + \else + \if@dotitletoc@pp \@redotocentry@pp{section} \fi + \if@dohead@pp + \def\sectionmark##1{% + \if@twoside + \markboth{\@formatsecmark@pp{##1}}{} + \else + \markright{\@formatsecmark@pp{##1}}{} + \fi} + \fi + \if@dotitle@pp + \def\sectionname{\appendixname} + \def\@seccntformat##1{\@ifundefined{##1name}{}{\csname ##1name\endcsname\ }% + \csname the##1\endcsname\quad} + \fi + \fi +}{% + \@ppsaveapp\@pprestoresec} +%% +\AtBeginDocument{% +% +\let\oldappendices\appendices% +\let\oldendappendices\endappendices% +%% +\renewenvironment{appendices}{% +\setcounter{figure}{0}% +\setcounter{table}{0}% +\setcounter{equation}{0}% +%% +\begin{oldappendices}% + \gdef\thefigure{\@Alph\c@section\arabic{figure}}% + \gdef\thetable{\@Alph\c@section\arabic{table}}% + \gdef\theequation{\@Alph\c@section\arabic{equation}}% +}{\end{oldappendices}} +} +%% +}{} + + +% +%%%%%%%%%%%%%%%%%%%%%%%%%%% Article History %%%%%%%%%%%%%%%%%%%% +% +\def\@history{} +\def\printhistory{{\par\addvspace{8pt}% +\historyfont\noindent% +\ifx\@history\empty\gdef\@history{Received xx xxx xxxx}\fi\@history\par}}% +% +%%%%%%%%%%%%%%%%%%%%%%% Footnotes %%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\renewcommand\@makefntext[1]{% + \hskip8pt{\smash{\@makefnmark}}#1} +% +\RequirePackage{hyperref}% +%%\RequirePackage{hypcap}% +% ctk \gdef\breakurldefns{% +% ctk \if@pdflatex\else% +% ctk \RequirePackage[hyphenbreaks]{breakurl}% +% ctk % \let\href\burlalt% +% ctk \fi}% +% ctk \breakurldefns% +% \bgroup +% \catcode`\&=12\relax +% \hyper@normalise\burl@addtocharlistbefore{%} +% \hyper@normalise\burl@addtocharlistafter{:/.?#&_,;!=+~}%% for extra breaks in url +% \egroup +% \burl@defifstructure +% +\hypersetup{% + colorlinks, + breaklinks=true, + plainpages=false,% + citecolor=blue, + linkcolor=blue, + urlcolor=blue, + bookmarksopen=true,% + bookmarksnumbered=false,% + bookmarksdepth=5% +} +% +\AtBeginDocument{\renewcommand\UrlFont{\rmfamily}}% +% +\AtBeginDocument{% +\@ifpackageloaded{natbib}{% + \renewcommand\bibsection{% + \section*{\refname}% + }% +}{}% +}% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +\pagestyle{headings}% +\pagenumbering{arabic}% +\sloppy% +\frenchspacing% +\flushbottom% + +%%% special parameters for TeX +\adjdemerits=100 +\linepenalty=100 +% +%%%%%%%%%%%%%%% Biography +% +\RequirePackage{wrapfig}% +% +% +% \begin{wrapfigure}[12]{r}[34pt]{5cm}
\end{wrapfigure} +% -- - ---- --- +% [number of narrow lines] {placement} [overhang] {width of figure} +\newcount\wraplines% +%%\wraplines=5% +% +\newbox\@authorfigbox% +\newskip\@authorfigboxdim% +% +\newskip\biofigadjskip% +\biofigadjskip=0pt% +% +\def\authbiotextfont{\reset@font\fontsize{8bp}{9.5bp}\selectfont}% +% +\newenvironment{biography}[2]{\par\addvspace{11.5pt plus3.375pt minus1.6875pt}%\lineno@off% +\def\author##1{{\bfseries##1}}% +\if!#1!\def\@authorfig{}\else\def\@authorfig{{#1}}\fi% +\setbox\@authorfigbox=\hbox{#1}% +\@authorfigboxdim=\wd\@authorfigbox% +\if@iicol\advance\@authorfigboxdim by -10pt\else\advance\@authorfigboxdim by -2pt\fi% +\wraplines=9\fboxrule=1pt\fboxsep=6pt% +\noindent{% +\ifx\@authorfig\@empty\else\unskip% +\begin{wrapfigure}[\wraplines]{l}[0pt]{\@authorfigboxdim}%{38.25mm}% +\vskip-19pt\addvspace{\biofigadjskip}% +\@authorfig% +\end{wrapfigure}% +\fi% +{\authbiotextfont#2\par}% +\par% +}}{\par\addvspace{10.5pt plus3.375pt minus1.6875pt}} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Theorem %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +\@ifpackageloaded{amsthm}{% +% +%\let\proof\relax% +%\let\endproof\relax% + +\def\@begintheorem#1#2[#3]{% + \deferred@thm@head{\the\thm@headfont \thm@indent + \@ifempty{#1}{\let\thmname\@gobble}{\let\thmname\@iden}% + \@ifempty{#2}{\let\thmnumber\@gobble}{\let\thmnumber\@iden}% + \@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@iden}% + \thm@swap\swappedhead\thmhead{#1}{#2}{#3}% + \the\thm@headpunct + \thmheadnl % possibly a newline. + \hskip\thm@headsep + }% + \ignorespaces +} + +\def\@endtheorem{\endtrivlist\@endpefalse} + + +\AtBeginDocument{% +% +\DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi} + +\DeclareSymbolFont{AMSa}{U}{msa}{m}{n}% +\DeclareMathSymbol{\opensquare}{\mathord}{AMSa}{"03}% +\def\qedsymbol{\ensuremath{\opensquare}}% +% +\newenvironment{spiproof}[1][\proofname]{\par\removelastskip%\vspace*{2pt}% + \pushQED{\qed}% + \small\normalfont \topsep7.5\p@\@plus7.5\p@\relax% + \trivlist% + \item[\hskip\labelsep% + \itshape% + #1\@addpunct{}]\ignorespaces% +}{% + \popQED\endtrivlist\@endpefalse% +}% +% +\let\proof\spiproof\let\endproof\endspiproof% +% +}% +% +\def\thm@space@setup{% +\thm@preskip=12pt% +\thm@postskip=12pt} +% +%%%%%%%%%%%%%%%%%% StyleOne +% +\newtheoremstyle{thmstyleone}% Numbered +{18pt plus2pt minus1pt}% Space above +{18pt plus2pt minus1pt}% Space below +{\small\itshape}% Body font +{0pt}% Indent amount +{\small\bfseries}% Theorem head font +{}% Punctuation after theorem head +{.5em}% Space after theorem headi +{\thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}% + \thmnote{ {\the\thm@notefont(#3)}}}% Theorem head spec (can be left empty, meaning `normal') +% +\newtheoremstyle{thmstyletwo}% Numbered +{18pt plus2pt minus1pt}% Space above +{18pt plus2pt minus1pt}% Space below +{\small\normalfont}% Body font +{0pt}% Indent amount +{\small\itshape}% Theorem head font +{}% Punctuation after theorem head +{.5em}% Space after theorem headi +{\thmname{#1}\thmnumber{\@ifnotempty{#1}{ }{#2}}% + \thmnote{ {\the\thm@notefont(#3)}}}% Theorem head spec (can be left empty, meaning `normal') +% +\newtheoremstyle{thmstylethree}% Definition +{18pt plus2pt minus1pt}% Space above +{18pt plus2pt minus1pt}% Space below +{\small\normalfont}% Body font +{0pt}% Indent amount +{\small\bfseries}% Theorem head font +{}% Punctuation after theorem head +{.5em}% Space after theorem headi +{\thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}% + \thmnote{ {\the\thm@notefont(#3)}}}% Theorem head spec (can be left empty, meaning `normal') +% +\newtheoremstyle{thmstylefour}% Proof +{18pt plus2pt minus1pt}% Space above +{18pt plus2pt minus1pt}% Space below +{\small\normalfont}% Body font +{0pt}% Indent amount +{\small\itshape}% Theorem head font +{}% Punctuation after theorem head +{.5em}% Space after theorem headi +{\global\proofthmtrue\thmname{#1} \thmnote{#3}}% Theorem head spec (can be left empty, meaning `normal') +% +}{} + +%% Macros for bibliographystyles %% + +% \def\bibcommenthead{\if@bibcomment\begingroup\parindent=0pt\parskip=0pt% +% \removelastskip\vskip13pt\nointerlineskip% +% +% \vbox{\bibfont If you are submitting to one of the Nature Research journals, using the eJP +% submission system, please include the references within the manuscript file itself. You may +% do this by copying the reference list from your .bbl file, and pasting it into the bibliography +% environment of the main manuscript .tex file.}\par% +% \removelastskip\nobreak\vskip13pt\nobreak% +% \endgroup\fi}% + +\def\bibcommenthead{}% + +\if@Spr@basic@refstyle% +\if@Numbered@refstyle% + \usepackage[super,sort&compress]{natbib}% + \gdef\NumBib{YES}% +\else% + \usepackage[authoryear]{natbib}% + \gdef\NumBib{NO}% +\fi% + \bibliographystyle{sn-basic}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi% + +\if@Mathphys@numrefstyle% + \usepackage[super,sort&compress]{natbib}% + \gdef\NumBib{YES}% + \bibliographystyle{sn-mathphys-num}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\else% +\if@Mathphys@ayrefstyle% + \usepackage[authoryear]{natbib}% + \gdef\NumBib{NO}% + \bibliographystyle{sn-mathphys-ay}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi\fi% +\if@APS@refstyle% + \usepackage[super,sort&compress]{natbib}% + \gdef\NumBib{YES}% + \bibliographystyle{sn-APS}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi% +\if@Vancouver@refstyle% +\if@Numbered@refstyle% + \usepackage[super,sort&compress]{natbib}% + \gdef\NumBib{YES}% +\else% + \usepackage[authoryear]{natbib}% + \gdef\NumBib{NO}% +\fi% + \bibliographystyle{sn-vancouver}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi% +\if@APA@refstyle% +\if@Numbered@refstyle% + \usepackage[natbibapa]{apacite}% + \gdef\NumBib{YES}% +\else% + \usepackage[natbibapa]{apacite}% + \gdef\NumBib{NO}% +\fi% + \bibliographystyle{sn-apacite}% + \def\refdoi#1{\urlstyle{rm}\url{#1}}% + \renewcommand{\doiprefix}{}% + \AtBeginDocument{% + \renewcommand{\BPBI}{.}% Period between initials - command from apacite.sty + }% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi% +\if@Chicago@refstyle% +\if@Numbered@refstyle% + \usepackage[super,sort&compress]{natbib}% + \gdef\NumBib{YES}% +\else% + \usepackage[authoryear]{natbib}% + \gdef\NumBib{NO}% +\fi% + \bibliographystyle{sn-chicago}% + \hypersetup{urlcolor=black,colorlinks=false,pdfborder={0 0 0}}\urlstyle{same}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi% +\if@Standard@Nature@refstyle% + \usepackage[super,sort&compress]{natbib}% + \gdef\NumBib{YES}% + \bibliographystyle{sn-nature}% + \setlength{\bibsep}{1em}% + \def\bibfont{\reset@font\fontfamily{\rmdefault}\normalsize\selectfont}% +\fi% + +\AtBeginDocument{\allowdisplaybreaks}% + +\def\eqnheadfont{\reset@font\fontfamily{\rmdefault}\fontsize{16}{18}\bfseries\selectfont}% + +\newcommand{\eqnhead}[1]{\begingroup% +\begin{center} +{\eqnheadfont #1}\par% +\end{center} +\removelastskip\vskip24pt% +\thispagestyle{titlepage}%% +%%\thispagestyle{empty}% +\endgroup} + +%% Macros for border matrix %% + +\newif\if@borderstar + +\def\bordermatrix{\@ifnextchar*{% +\@borderstartrue\@bordermatrix@i}{\@borderstarfalse\@bordermatrix@i*}% +} +\def\@bordermatrix@i*{\@ifnextchar[{\@bordermatrix@ii}{\@bordermatrix@ii[()]}} +\def\@bordermatrix@ii[#1]#2{% +\begingroup +\m@th\@tempdima8.75\p@\setbox\z@\vbox{% +\def\cr{\crcr\noalign{\kern 2\p@\global\let\cr\endline }}% +\ialign {$##$\hfil\kern 2\p@\kern\@tempdima & \thinspace % +\hfil $##$\hfil && \quad\hfil $##$\hfil\crcr\omit\strut % +\hfil\crcr\noalign{\kern -\baselineskip}#2\crcr\omit % +\strut\cr}}% +\setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}% +\setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}% +\setbox\tw@\hbox{% +$\kern\wd\@ne\kern -\@tempdima\left\@firstoftwo#1% +\if@borderstar\kern2pt\else\kern -\wd\@ne\fi% +\global\setbox\@ne\vbox{\box\@ne\if@borderstar\else\kern 2\p@\fi}% +\vcenter{\if@borderstar\else\kern -\ht\@ne\fi% +\unvbox\z@\kern-\if@borderstar2\fi\baselineskip}% +\if@borderstar\kern-2\@tempdima\kern2\p@\else\,\fi\right\@secondoftwo#1 $% +}\null \;\vbox{\kern\ht\@ne\box\tw@}% +\endgroup +} + +%% Macros for line numbers %% + +\if@vrulerlinenumberon% +% +\usepackage{vruler}% +% +%%\setvruler[][][][][][][][][] +\def\linenoon{%%\definecolor{blue}{gray}{0}% +\def\tiny{\normalsize\color{black}}% +\setvruler[12bp][1][1][3][1][1.18\textwidth][26pt][-7pt][0.99\textheight]% for even pages: left side; for odd pages: right side; +%%\linkbluecolor +}% +\linenoon% +\def\lineno@off{\unsetvruler}% +\fi% +%% url macros %% + +\gdef\orcidlogo{% +\includegraphics{Orcidlogo.eps}% +}% + +\gdef\orcid#1{\href{#1}{\orcidlogo}}% + + +\endinput diff --git a/_extensions/christopherkenny/nature/sn-mathphys-ay.bst b/_extensions/christopherkenny/nature/sn-mathphys-ay.bst new file mode 100644 index 0000000..fa05df2 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-mathphys-ay.bst @@ -0,0 +1,3208 @@ +%% This is file `bmc-mathphys.bst' (created: 2011-12-27) +%% Compatible with bibtex version 0.99d. +%% +%% Please submit bugs or your comments to vtex@vtex.lt +%% Start subject with a "[BMC] bibtex: " + subject +%% +%% Sorting entries is done by name and year fields! +%% +%% You are free to use this style file as you see fit, provided +%% that you do not make changes to the file. +%% If you DO make changes, you are required to rename this file. +%% +%% It may be distributed under the terms of the LaTeX Project Public +%% License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +%% LIMITATIONS: +%% If you are getting error like +%% "Sorry---you've exceeded BibTeX's number of string global-variables" +%% that means you are using to old bibtex version. You should download latest version 0.99d. +%% (One of the binaries location is minimals.contextgarden.net/current/bin/common/) +%% +%% BibTeX programming: Linas Stonys, VTeX, Lithuania, lstonys@vtex.lt +% +% Changes: +% 2013-07-15 -- added XML output (taken from bmc_article.bst) v2.0 +% + +ENTRY + { address + author + booktitle + bnumber + chapter + doi + edition + editor + howpublished + institution + isbn + journal + key + keywords + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + url + info + options + urldate + eprint + archive + archivePrefix + primaryClass + eid + adsurl + adsnote + version + } + {} + { label extra.label sort.label short.list} + +INTEGERS { output.state before.all mid.sentence after.sentence + after.block after.authors between.elements bother + Nisbn Nmonth slen set.settings tmp month.printed} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.authors := + #5 'between.elements := +} + +STRINGS { s t element} +STRINGS { longest.label last.label list.string default.list} +STRINGS { v l f j b temp.str} + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { " " * write$ newline$} + { output.state after.block = + { add.period$ write$ + newline$ + } + { + output.state after.authors = + { ": " * write$ + newline$ + } + { output.state between.elements = + { ", " * write$ newline$} + { output.state before.all = + 'write$ + { add.period$ " " * write$ newline$} + if$ + } + if$ + } + 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 {fin.entry} +{ write$ newline$ } + +FUNCTION {stupid.colon} +{ after.authors 'output.state := } + + +FUNCTION {insert.comma} +{ output.state before.all = + 'skip$ + { between.elements '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 {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {sort.format.month} +{ 't := + t #1 #2 substring$ "01" = + t #1 #1 substring$ "1" = + t #2 #2 substring$ "" = + and or + { "January" } + { t #1 #2 substring$ "02" = + t #1 #1 substring$ "2" = + t #2 #2 substring$ "" = + and or + { "February" } + { t #1 #2 substring$ "03" = + t #1 #1 substring$ "3" = + t #2 #2 substring$ "" = + and or + { "March" } + { t #1 #2 substring$ "04" = + t #1 #1 substring$ "4" = + or + { "April" } + { t #1 #2 substring$ "05" = + t #1 #1 substring$ "5" = + or + { "May" } + { t #1 #2 substring$ "06" = + t #1 #1 substring$ "6" = + or + { "June" } + { t #1 #2 substring$ "07" = + t #1 #1 substring$ "7" = + or + { "July" } + { t #1 #2 substring$ "08" = + t #1 #1 substring$ "8" = + or + { "August" } + { t #1 #2 substring$ "09" = + t #1 #1 substring$ "9" = + or + { "September" } + { t #1 #2 substring$ "10" = + { "October" } + { t #1 #2 substring$ "11" = + { "November" } + { t #1 #2 substring$ "12" = + { "December" } + { t } % No match + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + +} + +INTEGERS {sk} +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {make.tag} +{ 't := + duplicate$ empty$ + { pop$ "" } + { bother #0 = + { + t "volume" = + {"\textbf{" swap$ * "}" * } + 'skip$ + if$ + } + { "\b" t * "{" * swap$ * "}" * } + if$ + } + if$ +} + + + +FUNCTION {springer.publisher} +{publisher #1 #8 substring$ "Springer" = + { "Springer" } + { publisher } + if$ +} + +FUNCTION {format.adsurl} +{ + adsurl empty$ + { "" } + {" \href{" adsurl "}" *} + if$ +} + +FUNCTION {format.adsnote} +{ + adsnote empty$ + { "" } + { ". " * adsnote *} + if$ +} + + +FUNCTION {format.soft.title} +{ + title empty$ + { "" } + { title "," *} + if$ +} + +FUNCTION {format.softmisctitle} +{ title empty$ + { ""} + { version empty$ + { title ", " *} + { title ", " * version " " *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { "{[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.pub.address} +{ publisher empty$ + howpublished empty$ + and + { + address empty$ + 'skip$ + { volume empty$ + 'insert.comma + 'new.sentence + if$ + address + type$ "inproceedings" = + {"conflocation"} + {"location"} + if$ + make.tag output + } + if$ + } + { + address empty$ + { publisher empty$ + {howpublished} + {springer.publisher} + if$ + "publisher" make.tag + #1 bother = + {", \blocation{???}" * } + 'skip$ + if$ + output + } + { + publisher empty$ + {howpublished } + {springer.publisher } + if$ + "publisher" make.tag output + insert.comma + address "location" make.tag output + } + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {mk.tag} +{ 'temp.str := + duplicate$ empty$ + { pop$ "" } + { + b "nothing" = + 'skip$ + { "\b" temp.str * "{" * swap$ * "}" * } + if$ + } + if$ +} + +FUNCTION {space.after.dot} +{'j := + t 'f := + j 't := + s 'j := + "" 'l := + "" 's := + { t empty$ not } + { + t #1 #3 substring$ "{-}" = + { l " {q}. " * 'l := + t #4 global.max$ substring$ 't := + } + 'skip$ + if$ + + t #1 #1 substring$ 's := + l s * 'l := + s "." = + { + t #2 #1 substring$ " " = + 'skip$ + { + l " " * 'l := + t #2 #4 substring$ "{\,}" = + { t #5 global.max$ substring$ 't := } + 'skip$ + if$ + } + if$ + } + 'skip$ + if$ + t #2 global.max$ substring$ 't := + } + while$ + f 't := + j 's := + l +} + +FUNCTION {fix.inits}{ + 't := + "" 'element := + { t empty$ not } + { + t #1 #3 substring$ ".q." = + { element ".-" * 'element := + t #3 global.max$ substring$ 't := + } + {element t #1 #1 substring$ * 'element :=} + if$ + + t #2 global.max$ substring$ 't := + } + while$ + element +} + +FUNCTION {fix.snm}{ + 't := + "" 'element := + { t empty$ not } + { + t #1 #3 substring$ "{-}" = + {element "-" * 'element := + t #3 global.max$ substring$ 't := + } + {element t #1 #1 substring$ * 'element :=} + if$ + + t #2 global.max$ substring$ 't := + } + while$ + element +} + +FUNCTION {enbrace.dash}{ + 't := + "" 'element := + { t empty$ not } + { + t #1 #1 substring$ "-" = + {element "{-}" * 'element :=} + {element t #1 #1 substring$ * 'element :=} + if$ + t #2 global.max$ substring$ 't := + } + while$ + element +} + +FUNCTION {fix.name}{ + + enbrace.dash 's := + "" 'l := + "" 't := + + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { + s nameptr "{vv~}{ll}{, jj}" format.name$ + s nameptr "{, ff}" format.name$ space.after.dot * 'l := + #1 nameptr = + {l 't :=} + {t " and " * l * 't := } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + t +} + +FUNCTION {name.separator}{ + namesleft #1 > + {", " * } + 'skip$ + if$ +} + +FUNCTION {format.author.editor} +{ 'b := + + bother #1 = + b "nothing" = + or + 'skip$ + {"b" b * 'b :=} + if$ + + b "editor" = + b "beditor" = + b "nothing" = + or or + {editor 's :=} + {author 's :=} + if$ + + %% modifying name + s fix.name 's := + + "" 't := + + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + + s numnames "{ll}" format.name$ 'l := + l "others" = + l "{others}" = + l "et al." = + l "{et al.}" = + or or or + {#1 'tmp :=} + {#0 'tmp :=} + if$ + + { namesleft #0 > } + { s nameptr "{vv}" format.name$ "particle" mk.tag 'v := + s nameptr "{ll}" format.name$ fix.snm "snm" mk.tag 'l := + s nameptr "{f{.}.}" format.name$ fix.inits "inits" mk.tag 'f := + s nameptr "{jj}" format.name$ "suffix" mk.tag 'j := + + + namesleft #1 = + tmp #1 = + and + { b "bauthor" = + b "beditor" = + or + {"et al."} + {"\betal"} + if$ + #1 'tmp := + } + { + b "bauthor" = + b "beditor" = + or + {"\oauthor{"} + { + b "nothing" = + {""} + {"\b" b * "{" *} + if$ + } +%% if$ +%% +%% v empty$ +%% 'skip$ +%% {v * " " *} + if$ + + l empty$ + 'skip$ + { l *} + if$ + + f empty$ + 'skip$ + {", " * f *} + if$ + + j empty$ + 'skip$ + {" " * j *} + if$ + + b "nothing" = + {""} + {"}"} + if$ + + * "" 't := + } + if$ + + name.separator + write$ + + namesleft #1 > + b "nothing" = not + and + { namesleft #2 = + tmp #1 = + and + 'skip$ + 'newline$ + if$ + } + 'skip$ + if$ + + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.editors} +{ editor empty$ + 'skip$ + { + bother #0 = + { author empty$ + {"editor"} + {"nothing"} + if$ + } + {"editor"} + if$ + format.author.editor + editor num.names$ #1 > + { " (eds.)" } + { " (ed.)" } + if$ + write$ + } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + 'skip$ + {"author" format.author.editor} + if$ +} + +FUNCTION {cite.author.editor} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 = + { s #2 "{vv~}{ll}{ jj}{ f}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + 'skip$ + if$ + } + if$ +} + +FUNCTION {check.auth.edit.org} +{author empty$ + { + editor empty$ + { + organization empty$ + {""} + {organization} + if$ + } + {editor cite.author.editor} + if$ + } + {author cite.author.editor} + if$ +} + +FUNCTION {check.year} +{ year empty$ + {""} + {year extra.label *} + if$ +} + +INTEGERS { multiresult char.num k int} +INTEGERS {str.length count return save.num1 save.num2} +FUNCTION {is.in.list}{ + 'f := + %%%% saveing "s" and "t" + s 'j := + f 's := + t 'f := + list.string text.length$ 'str.length := + list.string 't := +% s text.length$ 'slen := + int 'save.num1 := + count 'save.num2 := + #1 'int := + #1 'count := + #0 'return := + + { count str.length = not + #0 str.length = not + and + } + { + count #1 + 'count := + t int #1 substring$ "," = + { + t #1 int substring$ s "," * = + { + #1 'return := + str.length 'count := + } + 'skip$ + if$ + + int #1 + 'int := + t int global.max$ substring$ 't := + #0 'int := + } + 'skip$ + if$ + int #1 + 'int := + } + while$ + + save.num1 'int := + save.num2 'count := + + #0 return = + { s t = + {#1 'return :=} + 'skip$ + if$ + } + 'skip$ + if$ + %%%% returning original "s" and "t" + j 's := + f 't := + + return +} + +INTEGERS {bibitem.count} + +FUNCTION {print.count} +{ bibitem.count #1 + 'bibitem.count := + newline$ + "%%% " + bibitem.count int.to.str$ * write$ +} + + +FUNCTION {output.bibitem} +{ print.count + newline$ + "\bibitem[\protect\citeauthoryear{" write$ + check.auth.edit.org write$ + "}{" write$ + check.year write$ + "}]{" write$ + cite$ write$ + "}" write$ + newline$ + "" before.all 'output.state := +} + + + + +FUNCTION {string.to.integer} +{ 't := + t text.length$ 'k := + #1 'char.num := + { t char.num #1 substring$ 's := + s is.num + s "." = + or + char.num k = not + and + } + { char.num #1 + 'char.num := } + while$ + char.num #1 - 'char.num := + t #1 char.num substring$ +} + + +FUNCTION {find.integer} +{ 't := + #0 'int := + { int not + t empty$ not + and + } + { t #1 #1 substring$ 's := + s is.num + {#1 'int :=} + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + int +} + +function{title.lowerwords}{ +"a,an,and,of,the,for,in,to,over,from,on,or,so,than,that,this,as,but,with,by,at,down,up,upon,al,ale,aus,aux,d'Analyse,d'Analystes,d'Architecture,d'Etudes,d'Histoire,da,dans,de,degli,dei,del," +"dell',dell'Accademia,dell'Istituto,dell'Universita,della,delle,dem,der,des,detta,di,die,din,dlia,do,du,e,eXpress,ed,ego,el,em,en,et,fur,i,iz,l'Academie,l'Age,l'Antiquite," * +"l'Approximation,l'Ecole,l'Histoire,l'I.S.U.P.,l'INSA,l'IREM,l'Indirizzo,l'Institut,l'Institute,l'UFR,l'Union,l'Universite,la,las,les,na,nella,per,po,si,sue,sur,ta,tes,und,van,voor,zu,zum,zur" * +} + +FUNCTION {upercase.first.letters}{ + 't := + "" 's := + #1 'int := + #1 'count := + list.string 'v := + "" 'b := + title.lowerwords 'list.string := + + t text.length$ 'slen := + + {count slen = not } + {t int #1 substring$ " " = + { + int #1 - 'int := + t #1 int substring$ 'b := + + % if word not in title.lowerwords - uppercase first letter + b is.in.list not + { b "l" change.case$ b = + { b "u" change.case$ "t" change.case$ 'b := } + 'skip$ + if$ + } + 'skip$ + if$ + + int #1 + 'int := + + s b " " * * 's := + int #1 + 'int := + t int global.max$ substring$ 't := + #0 'int := + } + 'skip$ + if$ + int #1 + 'int := + count #1 + 'count := +% "count=" count int.to.str$ * " slen=" * slen int.to.str$ * top$ + } + while$ + v 'list.string := + % last word is "t" and need to check it too + s t + t "l" change.case$ t = + { "u" change.case$ "t" change.case$ } + 'skip$ + if$ + * +} + + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + "article" type$ = + type$ "techreport" = + type$ "inbook" = + type$ "inproceedings" = + type$ "incollection" = + type$ "phdthesis" = + type$ "mastersthesis" = + or or or or or or + {"t" change.case$} + { type$ "unpublished" = + type$ "misc" = + or + 'skip$ + 'upercase.first.letters + if$ + } + if$ + } + if$ +} + + +FUNCTION {note.presented} +{ note #1 #9 substring$ "presented" = + note #1 #9 substring$ "Presented" = + or +} + +FUNCTION {n.filter} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "," = + t #1 #1 substring$ "\" = + t #1 #1 substring$ "~" = + or or + { "" * + t #2 global.max$ substring$ 't := + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {byear} +{ duplicate$ empty$ + { pop$ "" } + { 't := + t text.length$ 'sk := + #5 sk = + { t #1 #4 substring$ 's := + t #5 #1 substring$ 'longest.label := + longest.label is.num not + {s "year" make.tag + "nameyear" is.in.list + {longest.label * } + 'skip$ + if$ + } + {t "year" make.tag } + if$ + } + { t "year" make.tag + "nameyear" is.in.list + {extra.label *} + 'skip$ + if$ + } + if$ + } + if$ +} + +FUNCTION {format.date} +{ year empty$ + { "" } + { year byear } + if$ +} + +FUNCTION {parens} +{ "(" swap$ * ")" * } + +FUNCTION {format.date.parens} +{ year empty$ + { "" } + { year byear parens } + if$ +} + +FUNCTION {noparens} +{ " " swap$ * "" * } + +FUNCTION {format.softmiscdate} +{ year empty$ + { "" } + { year byear parens } + if$ +} + +FUNCTION {format.month}{ + month empty$ + {""} + {month sort.format.month "confdate" make.tag} + if$ +} + +FUNCTION {formatpatent.date} +{ year empty$ + 'skip$ + { month empty$ + { year } + {format.month " " * year *} + if$ + } + if$ +} + +FUNCTION {month.year.date} +{ year empty$ + {""} + { month empty$ + {year byear} + { format.month " " * year byear * } + if$ + type$ "inproceedings" = + 'skip$ + {"(" swap$ * ")" * } + if$ + } + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} +FUNCTION {format.volume} +{ volume empty$ + { "book" type$ = + {number empty$ + {""} + {"vol. " number "seriesno" make.tag *} + if$ + } + {""} + if$ + } + {"vol. " volume "seriesno" make.tag *} + if$ +} +FUNCTION {format.volume2} +{ volume empty$ + {""} + {"vol. " volume "seriesno" make.tag *} + if$ +} + +FUNCTION {format.art.vol} +{ + volume empty$ + {""} + {volume n.filter "volume" make.tag} + if$ + number empty$ + 'skip$ + { "(" number "issue" make.tag * ")" * * } + if$ +} + +FUNCTION {format.series} +{ series empty$ + 'skip$ + {series "sertitle" make.tag} + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { "" 'v := + "" 'l := + "" 'f := + edition "l" change.case$ 's := + "1" s = + "first" s = + or + { + "1" 'v := + "st" 'l := + } + { + "2" s = + "second" s = + or + { + "2" 'v := + "nd" 'l := + } + { + "3" s = + "third" s = + or + { + "3" 'v := + "rd" 'l := + } + { + "4" s = + "fourth" s = + or + { + "4" 'v := + "th" 'l := + } + { + "5" s = + "fifth" s = + or + { + "5" 'v := + "th" 'l := + } + { + "6" s = + "sixth" s = + or + { + "6" 'v := + "th" 'l := + } + { + "7" s = + "seventh" s = + or + { + "7" 'v := + "th" 'l := + } + { + "8" s = + "eighth" s = + or + { + "8" 'v := + "th" 'l := + } + { + "9" s = + "nineth" s = + or + { + "9" 'v := + "th" 'l := + } + { + edition "t" change.case$ 'f := + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + #0 bother = + { f "" = + { v l * 'f :=} + 'skip$ + if$ + } + { f "" = + { "\bedition{" v * "}" * l * 'f :=} + { "\bedition{" f * "}" * 'f :=} + if$ + } + if$ + f " edn." * + } + if$ +} +FUNCTION {format.isbn} +{ isbn empty$ + { "" } + { isbn "isbn" make.tag} + if$ +} + +INTEGERS {default.info} + + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + "" 'l := + + {t empty$ not} + { t #1 #1 substring$ 's := + + s is.num not + { "" l = not + {t find.integer + {#1 'multiresult := } + {#0 'multiresult := } + if$ + "" 't := + } + { + t #2 global.max$ substring$ 't := + } + if$ + } + { l s * 'l := + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + multiresult +} +FUNCTION {clearpage} +{ 't := + "" 's := + "" 'l := + + { t empty$ not } + { + t #1 #1 substring$ 's := + s is.num not + 'skip$ + { l s * 'l := } + if$ + t #2 global.max$ substring$ 't := + } + while$ + l + +} +FUNCTION {do.pages} +{'t := + "" 'j := + "" 'v := + {t empty$ not} + { t #1 #1 substring$ 's := + s is.num not + s "," = not + and + { "" j = + { + t #2 global.max$ substring$ 't := + } + {t find.integer + { t clearpage 'v := } + 'skip$ + if$ + "" 't := + } + if$ + } + { j s * 'j := + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + j clearpage 'j := + j "fpage" make.tag + "cnd" is.in.list + 'skip$ + {"--" * v "lpage" make.tag *} + if$ +} + + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + {type$ "article" = + {""} + {"cnd" is.in.list + {"p. "} + {"pp. "} + if$ + } + if$ + pages do.pages * + } + {type$ "article" = + {""} + {"p. "} + if$ + pages clearpage "fpage" make.tag * + } + + if$ + } + if$ +} + +FUNCTION {replace.tilde} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "~" = + { { t #1 #1 substring$ "~" = } + { "\texttildelow " * + t #2 global.max$ substring$ 't := + } + while$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + + +FUNCTION {format.url} +{ url empty$ + 'skip$ + { type$ "article" = + 'skip$ + { #0 bother = + { "\url{" } + { "\burl{" } + if$ + url replace.tilde * "}" * + output + } + if$ + + urldate empty$ + 'skip$ + { "Accessed " urldate * output } + if$ + } + if$ +} + + +FUNCTION {publisher.month.pages}{ + publisher empty$ series empty$ and + { address empty$ + 'skip$ + 'new.sentence + if$ + format.pub.address + + pages empty$ + 'skip$ + {insert.comma} + if$ + format.pages output + + } + { + pages empty$ + 'skip$ + {insert.comma} + if$ + format.pages output + publisher empty$ + 'skip$ + {new.sentence} + if$ + format.pub.address + } + if$ +} + +function{process.doi}{ + doi 't := + "" 'b := + #1 'int := +% "doi =" t * top$ + + t text.length$ 'slen := + + {int slen = not } + {t int #3 substring$ "10." = + { + t int #1 - #1 substring$ 'b := + b "" = + {"a" 'b :=} % if b is empty need to set a letter + 'skip$ + if$ + + b is.num not + { + t int slen int - #1 + substring$ 't := + slen #1 - 'int := + } + 'skip$ + if$ + + } + 'skip$ + if$ + int #1 + 'int := + } + while$ + t +} + +FUNCTION {format.doi} +{ doi empty$ + {""} + { + "nodoi" is.in.list + {""} + %%{"doi:\doiurl{" process.doi * "}" * } + {"\doiurl{" process.doi * "} " * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + {#1 bother = + "cnd" is.in.list not + and + { editor empty$ + 'skip$ + { "In: " output write$ format.editors } + if$ + } + 'skip$ + if$ + } + { editor empty$ + { "In: " booktitle upercase.first.letters "btitle" make.tag * output} + { "In: " output write$ format.editors "" %%% pushing empty string to the empty stack + booktitle upercase.first.letters "btitle" make.tag output + } + if$ + } + + if$ +} + +FUNCTION {format.in.ed} +{ title empty$ + 'skip$ + { editor empty$ + { title "btitle" make.tag output} + { author empty$ + { format.editors + stupid.colon + %format.date output + title "btitle" make.tag output + } + { "In: " output write$ format.editors "" %%% pushing empty string to the empty stack + title "btitle" make.tag output + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {patent.number} +{ number empty$ + 'skip$ + { number } + if$ +} +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.inpres} +{ "l" change.case$ 't := + "in press: " #10 + "in press. " #10 + "in press " #9 t chop.word + chop.word + chop.word + #1 global.max$ substring$ +} + +FUNCTION {bcomment.note} +{ note empty$ + 'skip$ + {note format.inpres "comment" make.tag output} + 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 empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.chapter.and.note} +{ note empty$ chapter empty$ organization empty$ and and + 'skip$ + { chapter empty$ + "notnumber" last.label = + or + {organization empty$ + { note "comment" make.tag output } + { note empty$ + { organization "comment" make.tag output } + { organization ". " * note * "comment" make.tag output } + if$ + } + if$ + } + { note empty$ + { "Chap. " chapter * "comment" make.tag output} + { type empty$ + { "Chap. " } + { type "t" change.case$ "Section" = + { "Sect. " } + { "Chap. " } + if$ + } + if$ + chapter * ". " * note * "comment" make.tag output + } + if$ + } + if$ + } + if$ +} + +FUNCTION {item.end} +{ chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + { new.sentence + format.doi output + } + 'skip$ + if$ + + type$ "unpublished" = + type$ "misc" = + or + { note empty$ + 'skip$ + {note.presented + 'skip$ + {new.sentence note output} + if$ + } + if$ + format.date.parens output + } + { new.sentence + type$ "proceedings" = + { author empty$ editor empty$ and + 'bcomment.note + 'format.chapter.and.note + if$ + } + 'format.chapter.and.note + if$ + } + if$ + list.string 'v := + default.list 'list.string := + + type$ ".isbn" * is.in.list + "cnd" is.in.list + or + { + new.sentence +% format.isbn output + } + 'skip$ + if$ + new.sentence + %% commented by SPi as we are using format.eprint %% + %% and also to avoide eprint being printed twice - Start %% + %%eprint empty$ + %% 'skip$ + %% {"\arxivurl{" eprint * "}" * output} + %%if$ + %% End %% + chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + 'skip$ + { new.sentence + format.doi output + } + if$ + new.sentence + format.url + v 'list.string := + fin.entry +} + +FUNCTION {article.item.end} +{ chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + { new.sentence +% format.doi output + } + 'skip$ + if$ + + type$ "unpublished" = + type$ "misc" = + or + { note empty$ + 'skip$ + {note.presented + 'skip$ + {new.sentence note output} + if$ + } + if$ + format.date.parens output + } + { new.sentence + type$ "proceedings" = + { author empty$ editor empty$ and + 'bcomment.note + 'format.chapter.and.note + if$ + } + 'format.chapter.and.note + if$ + } + if$ + list.string 'v := + default.list 'list.string := + + type$ ".isbn" * is.in.list + "cnd" is.in.list + or + { + new.sentence +% format.isbn output + } + 'skip$ + if$ + new.sentence + %% commented by SPi as we are using format.eprint %% + %% and also to avoide eprint being printed twice - Start %% + %%eprint empty$ + %% 'skip$ + %% {"\arxivurl{" eprint * "}" * output} + %%if$ + %% End %% + chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + 'skip$ + { new.sentence +%% format.doi output + } + if$ + new.sentence + format.url + v 'list.string := + fin.entry +} + + +FUNCTION {insert.element} +{ #0 bother = + { element "{botherref}" * write$ newline$} + { + type$ "article" = + {element "{barticle}" * write$ newline$} + 'skip$ + if$ + type$ "book" = + type$ "proceedings" = + type$ "manual" = + type$ "booklet" = + or or or + {element "{bbook}" * write$ newline$} + 'skip$ + if$ + + type$ "inbook" = + { "notnumber" last.label = + {element "{bchapter}" * write$ newline$} + {element "{bbook}" * write$ newline$} + if$ + } + 'skip$ + if$ + + type$ "incollection" = + type$ "inproceedings" = + type$ "conference" = + or or + {element "{bchapter}" * write$ newline$} + 'skip$ + if$ + } + if$ +} + +FUNCTION {end.element} +{ "\end" 'element := + item.end + insert.element + "\endbibitem" write$ newline$ +} + +FUNCTION {article.end.element} +{ "\end" 'element := + article.item.end + insert.element + "\endbibitem" write$ newline$ +} + + +FUNCTION {begin.element} +{ "\begin" 'element := + insert.element +} +function {set.options}{ + options empty$ + 'skip$ + {options 'list.string :=} + if$ +} + +FUNCTION {settings} +{} + +FUNCTION {article} +{ output.bibitem + author empty$ + institution empty$ + editor empty$ + and and + journal empty$ + or + year empty$ + or + % above tagging rule means: + % nead: (volume & (pages or number) ) or (doi [without volume, pages and number]) + volume empty$ not + pages empty$ not bnumber empty$ not or + and + + volume empty$ pages empty$ bnumber empty$ and and + doi empty$ not and + or + not + or + {#0 'bother :=} + {#1 'bother :=} + if$ + begin.element + author empty$ + { editor empty$ + 'skip$ + {format.editors stupid.colon} + if$ + } + { format.authors stupid.colon} + if$ + "cnd" is.in.list + { + journal empty$ + {format.title "atitle" make.tag "title" output.check} + {journal "jtitle" make.tag output} + if$ + } + { + format.title "atitle" make.tag "title" output.check + journal empty$ + 'skip$ + {new.sentence journal "jtitle" make.tag output} + if$ + } + if$ + format.art.vol output + pages empty$ + 'skip$ + {insert.comma} + if$ + format.pages output + format.date.parens output + format.doi output + format.eprint output + format.primaryClass output + article.end.element +} + + +FUNCTION {patent} +{ output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + add.period$ + patent.number output + insert.comma + formatpatent.date output + end.element +} + +FUNCTION { other } { patent } + +FUNCTION {book} +{ output.bibitem + author empty$ + institution empty$ + organization empty$ + editor empty$ + and and and + title empty$ + year empty$ + or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + begin.element + author empty$ + { editor empty$ + 'skip$ + {format.editors stupid.colon} + if$ + } + { format.authors stupid.colon} + if$ + format.title "btitle" make.tag "title" output.check + series empty$ + { + format.volume output + insert.comma + format.edition output + } + { edition empty$ + 'skip$ + 'insert.comma + if$ + format.edition output + new.sentence + format.series output + insert.comma + format.volume output + } + if$ + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {booklet} +{output.bibitem + author empty$ + title empty$ + year empty$ + howpublished empty$ + or or or + {#0 'bother :=} + {#1 'bother :=} + if$ + + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "btitle" make.tag "title" output.check + address empty$ publisher empty$ howpublished empty$ and and + 'skip$ + 'new.sentence + if$ + format.pub.address + format.date.parens output + end.element +} + +FUNCTION {misc} +{output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "btitle" make.tag "title" output.check + address empty$ publisher empty$ howpublished empty$ and and + 'skip$ + 'new.sentence + if$ + format.pub.address + end.element +} + +FUNCTION {softmisc} +{output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors} + if$ + stupid.colon + format.title "btitle" make.tag "title" output.check + insert.comma + version output + insert.comma + %%address empty$ publisher empty$ howpublished empty$ and and + %%'skip$ + %% 'new.sentence + %%if$ + format.pub.address + format.softmiscdate output + insert.comma + format.softmisc.eprint output + end.element +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + institution empty$ + organization empty$ + editor empty$ + and and and + title empty$ + year empty$ + or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + + chapter empty$ + { "" 'last.label :=} + { chapter string.to.integer empty$ author empty$ not and + { "notnumber" 'last.label :=} + { "" 'last.label :=} + if$ + } + if$ + + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + "notnumber" last.label = + { chapter "ctitle" make.tag output + add.period$ + } + 'skip$ + if$ + format.in.ed + series empty$ + { + insert.comma + format.volume output + insert.comma + format.edition output + new.sentence + } + { + insert.comma + format.edition output + new.sentence + format.series output + volume empty$ + 'skip$ + 'insert.comma + if$ + format.volume output + } + if$ + publisher.month.pages + publisher empty$ address empty$ edition empty$ series empty$ pages empty$ volume empty$ and and and and and + 'insert.comma + 'skip$ + if$ + format.date.parens output + end.element +} +FUNCTION {incollection} +{ output.bibitem + author empty$ + institution empty$ + and + booktitle empty$ + title empty$ + year empty$ + or or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + + "cnd" is.in.list + { + booktitle empty$ title empty$ not and + { + format.title "ctitle" make.tag "title" output.check + new.sentence + } + 'skip$ + if$ + } + { + format.title "ctitle" make.tag "title" output.check + title empty$ + 'skip$ + {new.sentence} + if$ + } + if$ + format.in.ed.booktitle + series empty$ + { + format.volume output + insert.comma + format.edition output + } + { + edition empty$ + 'skip$ + { insert.comma + format.edition output + } + if$ + new.sentence + format.series output + insert.comma + format.volume output + } + if$ + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {inproceedings} +{ output.bibitem + author empty$ + institution empty$ + and + title empty$ + year empty$ + or or + {#0 'bother :=} + {#1 'bother :=} + if$ + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + + "cnd" is.in.list + { + booktitle empty$ title empty$ not and + { + format.title "ctitle" make.tag "title" output.check + new.sentence + } + 'skip$ + if$ + } + { + format.title "ctitle" make.tag "title" output.check + title empty$ booktitle empty$ not and + 'skip$ + {new.sentence} + if$ + } + if$ + + format.in.ed.booktitle + series empty$ + 'skip$ + {new.sentence format.series output} + if$ + volume empty$ address empty$ publisher empty$ and and + 'skip$ + 'insert.comma + if$ + format.volume output + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + organization empty$ + title empty$ + year empty$ + address empty$ + or or or or + {#0 'bother :=} + {#1 'bother :=} + if$ + begin.element + + author empty$ + { organization empty$ + 'skip$ + { organization "publisher" make.tag output.nonnull + stupid.colon% add.period$ + } + if$ + } + { format.authors stupid.colon} + if$ + title empty$ + 'skip$ + {format.title "btitle" make.tag output} + if$ + edition empty$ + {new.sentence} + {insert.comma} + if$ + format.edition output + edition empty$ + 'skip$ + {new.sentence} + if$ + author empty$ organization empty$ + or + 'skip$ + { organization "publisher" make.tag output.nonnull + insert.comma + } + if$ + address empty$ + 'skip$ + {address "location" make.tag output} + if$ + format.date.parens output + end.element +} + + +FUNCTION {phdthesis} +{output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + new.sentence + type$ "mastersthesis" = + {"Master's thesis" format.thesis.type output.nonnull} + {"PhD thesis" format.thesis.type output.nonnull} + if$ + school empty$ + 'skip$ + 'insert.comma + if$ + school "school" output.check + address empty$ + 'skip$ + 'insert.comma + if$ + address output + month.year.date output + end.element +} +FUNCTION {mastersthesis}{phdthesis} + + +FUNCTION {proceedings} +{ output.bibitem + author empty$ + institution empty$ + organization empty$ + editor empty$ + and and and + title empty$ + year empty$ + or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + + begin.element + author empty$ + { editor empty$ + {organization "institutionaled" make.tag "organization" output.check } + { format.editors } + if$ + } + { format.authors } + if$ + stupid.colon + format.title "btitle" make.tag output + series empty$ + 'skip$ + {new.sentence format.series output} + if$ + volume empty$ + 'skip$ + 'insert.comma + if$ + format.volume output + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {techreport} +{ output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + new.sentence + format.tr.number output.nonnull + institution empty$ + 'skip$ + 'insert.comma + if$ + institution "institution" output.check + address empty$ + 'skip$ + 'insert.comma + if$ + address output + month.year.date output + end.element +} + +FUNCTION {unpublished} +{ output.bibitem + #0 'bother := + + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + note empty$ + 'skip$ + { note.presented + {note output} + 'skip$ + if$ + } + if$ + end.element +} + +FUNCTION {default.type} { unpublished } + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +%%%%% setting default options +FUNCTION {set.default.opt} +{"alpha" 'list.string :=} + +EXECUTE {set.default.opt} + +FUNCTION {assign.opt}{ + % First need to set options + "settings" type$ = + { options empty$ + 'skip$ + {options 'list.string :=} + if$ + } + 'skip$ + if$ +} + +ITERATE {assign.opt} +EXECUTE {initialize.et.al.char.used} + +FUNCTION {alpha.format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "+" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "+" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {standard.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 {format.lab.names}{ + "alpha" is.in.list + 'alpha.format.lab.names + 'standard.format.lab.names + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "zzz" } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { "zzz" } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { "zzz" } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + 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 + + "alpha" is.in.list + { + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'label := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.label := + } + { + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := + label 'sort.label := + } + if$ +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * + "alpha" is.in.list + 'skip$ + {numnames int.to.str$ * " " *} + if$ + } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = + t "others" = + and + { "et al" * } + { t sortify * } + if$ + #3 numnames < + "alpha" is.in.list not + and + {#0 'namesleft := + " zzz " * + } + { + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + if$ + } + 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$ + "zzz" + } + { 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$ + "z" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "z" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "z" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + {author empty$ + 'editor.organization.sort + 'author.organization.sort + if$ + } + { type$ "proceedings" = + type$ "incollection" = + or + {author empty$ + 'editor.organization.sort + 'author.organization.sort + if$ + } + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ 'sort.label := + sort.label * + #1 entry.max$ substring$ 'sort.key$ := + + "settings" type$ = + {"aaa"} + {"unsort" is.in.list + {"bb"} + {"alpha" is.in.list + {sort.key$} + {sort.label} + if$ + } + if$ + } + if$ + 'sort.key$ := +} + + +ITERATE {presort} + +SORT + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'j := + #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} +{ j "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'j := + label extra.label * 'label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {write.preambule} +{ "%% BioMed_Central_Bib_Style_v1.01" write$ newline$ newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * write$ newline$ + "% BibTex style file: bmc-mathphys.bst (version 2.1), 2014-07-24" write$ newline$ + "\ifx \bisbn \undefined \def \bisbn #1{ISBN #1}\fi" write$ newline$ + "\ifx \binits \undefined \def \binits#1{#1}\fi" write$ newline$ + "\ifx \bauthor \undefined \def \bauthor#1{#1}\fi" write$ newline$ + "\ifx \batitle \undefined \def \batitle#1{#1}\fi" write$ newline$ + "\ifx \bjtitle \undefined \def \bjtitle#1{#1}\fi" write$ newline$ + "\ifx \bvolume \undefined \def \bvolume#1{\textbf{#1}}\fi" write$ newline$ + "\ifx \byear \undefined \def \byear#1{#1}\fi" write$ newline$ + "\ifx \bissue \undefined \def \bissue#1{#1}\fi" write$ newline$ + "\ifx \bfpage \undefined \def \bfpage#1{#1}\fi" write$ newline$ + "\ifx \blpage \undefined \def \blpage #1{#1}\fi" write$ newline$ + "\ifx \burl \undefined \def \burl#1{\textsf{#1}}\fi" write$ newline$ + %%"\ifx \doiurl \undefined \def \doiurl#1{\textsf{#1}}\fi" write$ newline$ + "\ifx \doiurl \undefined \def \doiurl#1{\url{https://doi.org/#1}}\fi" write$ newline$ + "\ifx \betal \undefined \def \betal{\textit{et al.}}\fi" write$ newline$ + "\ifx \binstitute \undefined \def \binstitute#1{#1}\fi" write$ newline$ + "\ifx \binstitutionaled \undefined \def \binstitutionaled#1{#1}\fi" write$ newline$ + "\ifx \bctitle \undefined \def \bctitle#1{#1}\fi" write$ newline$ + "\ifx \beditor \undefined \def \beditor#1{#1}\fi" write$ newline$ + "\ifx \bpublisher \undefined \def \bpublisher#1{#1}\fi" write$ newline$ + "\ifx \bbtitle \undefined \def \bbtitle#1{#1}\fi" write$ newline$ + "\ifx \bedition \undefined \def \bedition#1{#1}\fi" write$ newline$ + "\ifx \bseriesno \undefined \def \bseriesno#1{#1}\fi" write$ newline$ + "\ifx \blocation \undefined \def \blocation#1{#1}\fi" write$ newline$ + "\ifx \bsertitle \undefined \def \bsertitle#1{#1}\fi" write$ newline$ + "\ifx \bsnm \undefined \def \bsnm#1{#1}\fi" write$ newline$ + "\ifx \bsuffix \undefined \def \bsuffix#1{#1}\fi" write$ newline$ + "\ifx \bparticle \undefined \def \bparticle#1{#1}\fi" write$ newline$ + "\ifx \barticle \undefined \def \barticle#1{#1}\fi" write$ newline$ + "\bibcommenthead" write$ newline$ +} + + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + write.preambule + "\ifx \bconfdate \undefined \def \bconfdate #1{#1}\fi" write$ newline$ + "\ifx \botherref \undefined \def \botherref #1{#1}\fi" write$ newline$ + "\ifx \url \undefined \def \url#1{\textsf{#1}}\fi" write$ newline$ + "\ifx \bchapter \undefined \def \bchapter#1{#1}\fi" write$ newline$ + "\ifx \bbook \undefined \def \bbook#1{#1}\fi" write$ newline$ + "\ifx \bcomment \undefined \def \bcomment#1{#1}\fi" write$ newline$ + "\ifx \oauthor \undefined \def \oauthor#1{#1}\fi" write$ newline$ + "\ifx \citeauthoryear \undefined \def \citeauthoryear#1{#1}\fi" write$ newline$ + "\ifx \endbibitem \undefined \def \endbibitem {}\fi" write$ newline$ + "\ifx \bconflocation \undefined \def \bconflocation#1{#1}\fi" write$ newline$ + "\ifx \arxivurl \undefined \def \arxivurl#1{\textsf{#1}}\fi" write$ newline$ + "\csname PreBibitemsHook\endcsname" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + + +%% XML output - done for each entry referenced in the BibTeX database +INTEGERS {i ll li j.int global.counter} +STRINGS {lr lp lt ls } + +FUNCTION {replace} +{ + 'lr := % replace string + 'lp := % pattern + 'lt := % text to search + "" 'ls := % result string + lp text.length$ 'll := % length of the search pattern + { lt empty$ not } + { lt #1 ll substring$ lp = + { ls lr * 'ls := + lt ll #1 + global.max$ substring$ 'lt := } + { ls lt #1 #1 substring$ * 'ls := + lt #2 global.max$ substring$ 'lt := } + if$ + } + while$ + ls +} + +FUNCTION {strip.letters} +{ + "" 's := + duplicate$ missing$ + 'pop$ + { + 't := + { t "" = not } + { % ascii '0' = 48, '9' = 57 + t #1 #1 substring$ chr.to.int$ 'i := + i #47 > i #58 < and + { s t #1 #1 substring$ * 's := } + 'skip$ + if$ + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + s +} +FUNCTION {output.xml} +{ duplicate$ "" = + 'pop$ + { " " swap$ * write$ newline$ } + if$ +} + +%% + % markup.xml + % + % Takes 2 args text & tag {"the text " "tag"} + % Returns 1 string {"the text <\tag>"} +%% +FUNCTION {markup.xml} +{ + "" 'v := % result + 't := % tag + duplicate$ missing$ + 'pop$ + { 'v := } + if$ + v "" = + 'skip$ + { "<" t * ">" * v * "" * 'v := } + if$ + v +} + +%% Takes 2 args - tag, string +FUNCTION{markup.xml.title} +{ pop$ % tag + duplicate$ missing$ + 'pop$ + { + 's := % string + s "\&" "&" replace 's := + s "p" markup.xml 's := + s "title" markup.xml output.xml + } + if$ +} + + +%% + % markup.xml.pages + % + % Takes 1 arg (pages string) + % seperates into and if + % there is a - seperator. else no lpage. + % + % need to remove others +%% +FUNCTION{markup.xml.pages} +{ + "" 'v := % fpage + "" 's := % lpage + duplicate$ missing$ + 'pop$ + { + 't := + t " " "" replace 't := % remove all spaces. pgs must be - seperated + { t empty$ not } + { + t #1 #1 substring$ "-" = + { + t #2 global.max$ substring$ 's := + "" 't := % break while loop + }{ + v t #1 #1 substring$ * 'v := + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + } + if$ + v "fpage" markup.xml output.xml + s "lpage" markup.xml output.xml +} + + +%% + % markup.xml.names + % + % Takes 2 args + % tag, namefield (eg. author "au") + % splits fields into and + % writes info + % returns nothing +%% +FUNCTION {markup.xml.names} +{ + 't := % tag + "" 'v := + "" 's := + duplicate$ empty$ + { pop$ + organization missing$ + { institution "cnm" markup.xml + "au" markup.xml "aug" markup.xml output.xml } + { organization "cnm" markup.xml + "au" markup.xml "aug" markup.xml output.xml } + if$ } + { + " " write$ newline$ + 'temp.str := % names string + temp.str num.names$ 'j.int := % num of names + #1 'i := % init counter + { i #1 j.int + < } % while (i <= j.int) + { + " " write$ + + % Initial first names + % if first name all in capitals + % - assume is initial list of first names. + temp.str i "{ff{ }}" format.name$ + duplicate$ "u" change.case$ = + { temp.str i "{ff{ }}" format.name$ } + { temp.str i "{f{}}" format.name$ } + if$ + + % if last name but no first name use cnm; else snm + duplicate$ "" = + { temp.str i "{ll{ }}" format.name$ % last names space seperated. + "cnm" markup.xml write$ } + { temp.str i "{ll{ }}" format.name$ % last names space seperated. + "snm" markup.xml write$ } + if$ + + "fnm" markup.xml write$ + + "" write$ newline$ + i #1 + 'i := + } + while$ + " " write$ newline$ + } + if$ +} + + +%% + % markup.xml.pub + % + % Takes 4 args (school address publisher tag) + % prints concatenation + % returns nothing +%% +FUNCTION {markup.xml.pub} +{ + 't := % Tag + "" 'v := % Publisher + "" 'l := % Address + "" 'f := % School + "" 's := % Answer + duplicate$ missing$ 'pop$ { 'v := } if$ + duplicate$ missing$ 'pop$ { 'l := } if$ + duplicate$ missing$ 'pop$ { 'f := } if$ + "" f = not % school not empty + { f 's := } % return school as publisher + { % else + "" v = "" l = and % address and pub empty + 'skip$ + { + "" l = + { v 's := } % return pub + { "" v = + { l 's := } % return add + { l ": " * v * 's := } % return add : pub + if$ + } + if$ + } + if$ + } + if$ + s t markup.xml output.xml +} + +%% + % xml.phd + % + % Takes nothing + % Returns type (phd/msc) of empty string +%% +FUNCTION {xml.phd} +{ + "phdthesis" type$ = + "mastersthesis" type$ = or + { "phdthesis" type$ = + { "PhD thesis" } + { "Master's thesis" } + if$ + } + { type } % usually empty + if$ +} + +% markup.xml.edition +% +% edition is a numeric value. ie "2" +% if format 2nd 1st etc.. strip letters. +% +FUNCTION {markup.xml.edition} +{ pop$ pop$ %clear stack + edition strip.letters duplicate$ "" = + { pop$ edition } + 'skip$ + if$ + "edition" markup.xml output.xml +} + + +FUNCTION{begin.bmcxmlcomment}{ + newline$ + "\newcommand{\BMCxmlcomment}[1]{}" write$ newline$ + newline$ + "\BMCxmlcomment{" write$ newline$ + newline$ "" write$ newline$ +} + +FUNCTION{end.bmcxmlcomment}{ + newline$ + "" write$ newline$ + "} % end of \BMCxmlcomment" write$ newline$ +} + +FUNCTION {export.xml}{ + newline$ + global.counter #1 + 'global.counter := + "" * + write$ newline$ +% title "\&" "&" replace "title" markup.xml.title + title "title" markup.xml.title + author "aug" markup.xml.names % org. and inst. here + howpublished missing$ + { booktitle missing$ + { journal missing$ + { xml.phd } % Phd/Msc + {journal} + if$ + } {booktitle} + if$ + } { howpublished } + if$ "source" markup.xml output.xml + school + address + publisher "publisher" markup.xml.pub + editor "editor" markup.xml output.xml + edition "edition" markup.xml.edition + series "p" markup.xml + "title" markup.xml + "series" markup.xml output.xml + chapter "p" markup.xml + "title" markup.xml + "section" markup.xml output.xml + % month % ignore + year "pubdate" markup.xml output.xml + + note missing$ + { volume "volume" markup.xml output.xml + number "issue" markup.xml output.xml + pages markup.xml.pages + url "url" markup.xml output.xml } + { note "l" change.case$ "in press" = + { " " write$ newline$ } + { volume "volume" markup.xml output.xml + number "issue" markup.xml output.xml + pages markup.xml.pages + url "url" markup.xml output.xml + note "note" markup.xml output.xml + } + if$ + } + if$ + "" write$ newline$ +} + +%%EXECUTE {begin.bmcxmlcomment} +%%ITERATE {export.xml} +%%EXECUTE {end.bmcxmlcomment} + + + + diff --git a/_extensions/christopherkenny/nature/sn-mathphys-num.bst b/_extensions/christopherkenny/nature/sn-mathphys-num.bst new file mode 100644 index 0000000..236a058 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-mathphys-num.bst @@ -0,0 +1,3208 @@ +%% This is file `bmc-mathphys.bst' (created: 2011-12-27) +%% Compatible with bibtex version 0.99d. +%% +%% Please submit bugs or your comments to vtex@vtex.lt +%% Start subject with a "[BMC] bibtex: " + subject +%% +%% Sorting entries is done by name and year fields! +%% +%% You are free to use this style file as you see fit, provided +%% that you do not make changes to the file. +%% If you DO make changes, you are required to rename this file. +%% +%% It may be distributed under the terms of the LaTeX Project Public +%% License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +%% LIMITATIONS: +%% If you are getting error like +%% "Sorry---you've exceeded BibTeX's number of string global-variables" +%% that means you are using to old bibtex version. You should download latest version 0.99d. +%% (One of the binaries location is minimals.contextgarden.net/current/bin/common/) +%% +%% BibTeX programming: Linas Stonys, VTeX, Lithuania, lstonys@vtex.lt +% +% Changes: +% 2013-07-15 -- added XML output (taken from bmc_article.bst) v2.0 +% + +ENTRY + { address + author + booktitle + bnumber + chapter + doi + edition + editor + howpublished + institution + isbn + journal + key + keywords + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + url + info + options + urldate + eprint + archive + archivePrefix + primaryClass + eid + adsurl + adsnote + version + } + {} + { label extra.label sort.label short.list} + +INTEGERS { output.state before.all mid.sentence after.sentence + after.block after.authors between.elements bother + Nisbn Nmonth slen set.settings tmp month.printed} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := + #4 'after.authors := + #5 'between.elements := +} + +STRINGS { s t element} +STRINGS { longest.label last.label list.string default.list} +STRINGS { v l f j b temp.str} + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { " " * write$ newline$} + { output.state after.block = + { add.period$ write$ + newline$ + } + { + output.state after.authors = + { ": " * write$ + newline$ + } + { output.state between.elements = + { ", " * write$ newline$} + { output.state before.all = + 'write$ + { add.period$ " " * write$ newline$} + if$ + } + if$ + } + 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 {fin.entry} +{ write$ newline$ } + +FUNCTION {stupid.colon} +{ after.authors 'output.state := } + + +FUNCTION {insert.comma} +{ output.state before.all = + 'skip$ + { between.elements '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 {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {sort.format.month} +{ 't := + t #1 #2 substring$ "01" = + t #1 #1 substring$ "1" = + t #2 #2 substring$ "" = + and or + { "January" } + { t #1 #2 substring$ "02" = + t #1 #1 substring$ "2" = + t #2 #2 substring$ "" = + and or + { "February" } + { t #1 #2 substring$ "03" = + t #1 #1 substring$ "3" = + t #2 #2 substring$ "" = + and or + { "March" } + { t #1 #2 substring$ "04" = + t #1 #1 substring$ "4" = + or + { "April" } + { t #1 #2 substring$ "05" = + t #1 #1 substring$ "5" = + or + { "May" } + { t #1 #2 substring$ "06" = + t #1 #1 substring$ "6" = + or + { "June" } + { t #1 #2 substring$ "07" = + t #1 #1 substring$ "7" = + or + { "July" } + { t #1 #2 substring$ "08" = + t #1 #1 substring$ "8" = + or + { "August" } + { t #1 #2 substring$ "09" = + t #1 #1 substring$ "9" = + or + { "September" } + { t #1 #2 substring$ "10" = + { "October" } + { t #1 #2 substring$ "11" = + { "November" } + { t #1 #2 substring$ "12" = + { "December" } + { t } % No match + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + +} + +INTEGERS {sk} +FUNCTION {is.num} +{ chr.to.int$ + duplicate$ "0" chr.to.int$ < not + swap$ "9" chr.to.int$ > not and +} + +FUNCTION {make.tag} +{ 't := + duplicate$ empty$ + { pop$ "" } + { bother #0 = + { + t "volume" = + {"\textbf{" swap$ * "}" * } + 'skip$ + if$ + } + { "\b" t * "{" * swap$ * "}" * } + if$ + } + if$ +} + + + +FUNCTION {springer.publisher} +{publisher #1 #8 substring$ "Springer" = + { "Springer" } + { publisher } + if$ +} + +FUNCTION {format.adsurl} +{ + adsurl empty$ + { "" } + {" \href{" adsurl "}" *} + if$ +} + +FUNCTION {format.adsnote} +{ + adsnote empty$ + { "" } + { ". " * adsnote *} + if$ +} + + +FUNCTION {format.soft.title} +{ + title empty$ + { "" } + { title "," *} + if$ +} + +FUNCTION {format.softmisctitle} +{ title empty$ + { ""} + { version empty$ + { title ", " *} + { title ", " * version " " *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { "{[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.pub.address} +{ publisher empty$ + howpublished empty$ + and + { + address empty$ + 'skip$ + { volume empty$ + 'insert.comma + 'new.sentence + if$ + address + type$ "inproceedings" = + {"conflocation"} + {"location"} + if$ + make.tag output + } + if$ + } + { + address empty$ + { publisher empty$ + {howpublished} + {springer.publisher} + if$ + "publisher" make.tag + #1 bother = + {", \blocation{???}" * } + 'skip$ + if$ + output + } + { + publisher empty$ + {howpublished } + {springer.publisher } + if$ + "publisher" make.tag output + insert.comma + address "location" make.tag output + } + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {mk.tag} +{ 'temp.str := + duplicate$ empty$ + { pop$ "" } + { + b "nothing" = + 'skip$ + { "\b" temp.str * "{" * swap$ * "}" * } + if$ + } + if$ +} + +FUNCTION {space.after.dot} +{'j := + t 'f := + j 't := + s 'j := + "" 'l := + "" 's := + { t empty$ not } + { + t #1 #3 substring$ "{-}" = + { l " {q}. " * 'l := + t #4 global.max$ substring$ 't := + } + 'skip$ + if$ + + t #1 #1 substring$ 's := + l s * 'l := + s "." = + { + t #2 #1 substring$ " " = + 'skip$ + { + l " " * 'l := + t #2 #4 substring$ "{\,}" = + { t #5 global.max$ substring$ 't := } + 'skip$ + if$ + } + if$ + } + 'skip$ + if$ + t #2 global.max$ substring$ 't := + } + while$ + f 't := + j 's := + l +} + +FUNCTION {fix.inits}{ + 't := + "" 'element := + { t empty$ not } + { + t #1 #3 substring$ ".q." = + { element ".-" * 'element := + t #3 global.max$ substring$ 't := + } + {element t #1 #1 substring$ * 'element :=} + if$ + + t #2 global.max$ substring$ 't := + } + while$ + element +} + +FUNCTION {fix.snm}{ + 't := + "" 'element := + { t empty$ not } + { + t #1 #3 substring$ "{-}" = + {element "-" * 'element := + t #3 global.max$ substring$ 't := + } + {element t #1 #1 substring$ * 'element :=} + if$ + + t #2 global.max$ substring$ 't := + } + while$ + element +} + +FUNCTION {enbrace.dash}{ + 't := + "" 'element := + { t empty$ not } + { + t #1 #1 substring$ "-" = + {element "{-}" * 'element :=} + {element t #1 #1 substring$ * 'element :=} + if$ + t #2 global.max$ substring$ 't := + } + while$ + element +} + +FUNCTION {fix.name}{ + + enbrace.dash 's := + "" 'l := + "" 't := + + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { + s nameptr "{vv~}{ll}{, jj}" format.name$ + s nameptr "{, ff}" format.name$ space.after.dot * 'l := + #1 nameptr = + {l 't :=} + {t " and " * l * 't := } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + t +} + +FUNCTION {name.separator}{ + namesleft #1 > + {", " * } + 'skip$ + if$ +} + +FUNCTION {format.author.editor} +{ 'b := + + bother #1 = + b "nothing" = + or + 'skip$ + {"b" b * 'b :=} + if$ + + b "editor" = + b "beditor" = + b "nothing" = + or or + {editor 's :=} + {author 's :=} + if$ + + %% modifying name + s fix.name 's := + + "" 't := + + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + + s numnames "{ll}" format.name$ 'l := + l "others" = + l "{others}" = + l "et al." = + l "{et al.}" = + or or or + {#1 'tmp :=} + {#0 'tmp :=} + if$ + + { namesleft #0 > } + { s nameptr "{vv}" format.name$ "particle" mk.tag 'v := + s nameptr "{ll}" format.name$ fix.snm "snm" mk.tag 'l := + s nameptr "{f{.}.}" format.name$ fix.inits "inits" mk.tag 'f := + s nameptr "{jj}" format.name$ "suffix" mk.tag 'j := + + + namesleft #1 = + tmp #1 = + and + { b "bauthor" = + b "beditor" = + or + {"et al."} + {"\betal"} + if$ + #1 'tmp := + } + { + b "bauthor" = + b "beditor" = + or + {"\oauthor{"} + { + b "nothing" = + {""} + {"\b" b * "{" *} + if$ + } +%% if$ +%% +%% v empty$ +%% 'skip$ +%% {v * " " *} + if$ + + l empty$ + 'skip$ + { l *} + if$ + + f empty$ + 'skip$ + {", " * f *} + if$ + + j empty$ + 'skip$ + {" " * j *} + if$ + + b "nothing" = + {""} + {"}"} + if$ + + * "" 't := + } + if$ + + name.separator + write$ + + namesleft #1 > + b "nothing" = not + and + { namesleft #2 = + tmp #1 = + and + 'skip$ + 'newline$ + if$ + } + 'skip$ + if$ + + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.editors} +{ editor empty$ + 'skip$ + { + bother #0 = + { author empty$ + {"editor"} + {"nothing"} + if$ + } + {"editor"} + if$ + format.author.editor + editor num.names$ #1 > + { " (eds.)" } + { " (ed.)" } + if$ + write$ + } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + 'skip$ + {"author" format.author.editor} + if$ +} + +FUNCTION {cite.author.editor} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 = + { s #2 "{vv~}{ll}{ jj}{ f}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + 'skip$ + if$ + } + if$ +} + +FUNCTION {check.auth.edit.org} +{author empty$ + { + editor empty$ + { + organization empty$ + {""} + {organization} + if$ + } + {editor cite.author.editor} + if$ + } + {author cite.author.editor} + if$ +} + +FUNCTION {check.year} +{ year empty$ + {""} + {year extra.label *} + if$ +} + +INTEGERS { multiresult char.num k int} +INTEGERS {str.length count return save.num1 save.num2} +FUNCTION {is.in.list}{ + 'f := + %%%% saveing "s" and "t" + s 'j := + f 's := + t 'f := + list.string text.length$ 'str.length := + list.string 't := +% s text.length$ 'slen := + int 'save.num1 := + count 'save.num2 := + #1 'int := + #1 'count := + #0 'return := + + { count str.length = not + #0 str.length = not + and + } + { + count #1 + 'count := + t int #1 substring$ "," = + { + t #1 int substring$ s "," * = + { + #1 'return := + str.length 'count := + } + 'skip$ + if$ + + int #1 + 'int := + t int global.max$ substring$ 't := + #0 'int := + } + 'skip$ + if$ + int #1 + 'int := + } + while$ + + save.num1 'int := + save.num2 'count := + + #0 return = + { s t = + {#1 'return :=} + 'skip$ + if$ + } + 'skip$ + if$ + %%%% returning original "s" and "t" + j 's := + f 't := + + return +} + +INTEGERS {bibitem.count} + +FUNCTION {print.count} +{ bibitem.count #1 + 'bibitem.count := + newline$ + "%%% " + bibitem.count int.to.str$ * write$ +} + + +FUNCTION {output.bibitem} +{ print.count + newline$ + "\bibitem[\protect\citeauthoryear{" write$ + check.auth.edit.org write$ + "}{" write$ + check.year write$ + "}]{" write$ + cite$ write$ + "}" write$ + newline$ + "" before.all 'output.state := +} + + + + +FUNCTION {string.to.integer} +{ 't := + t text.length$ 'k := + #1 'char.num := + { t char.num #1 substring$ 's := + s is.num + s "." = + or + char.num k = not + and + } + { char.num #1 + 'char.num := } + while$ + char.num #1 - 'char.num := + t #1 char.num substring$ +} + + +FUNCTION {find.integer} +{ 't := + #0 'int := + { int not + t empty$ not + and + } + { t #1 #1 substring$ 's := + s is.num + {#1 'int :=} + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + int +} + +function{title.lowerwords}{ +"a,an,and,of,the,for,in,to,over,from,on,or,so,than,that,this,as,but,with,by,at,down,up,upon,al,ale,aus,aux,d'Analyse,d'Analystes,d'Architecture,d'Etudes,d'Histoire,da,dans,de,degli,dei,del," +"dell',dell'Accademia,dell'Istituto,dell'Universita,della,delle,dem,der,des,detta,di,die,din,dlia,do,du,e,eXpress,ed,ego,el,em,en,et,fur,i,iz,l'Academie,l'Age,l'Antiquite," * +"l'Approximation,l'Ecole,l'Histoire,l'I.S.U.P.,l'INSA,l'IREM,l'Indirizzo,l'Institut,l'Institute,l'UFR,l'Union,l'Universite,la,las,les,na,nella,per,po,si,sue,sur,ta,tes,und,van,voor,zu,zum,zur" * +} + +FUNCTION {upercase.first.letters}{ + 't := + "" 's := + #1 'int := + #1 'count := + list.string 'v := + "" 'b := + title.lowerwords 'list.string := + + t text.length$ 'slen := + + {count slen = not } + {t int #1 substring$ " " = + { + int #1 - 'int := + t #1 int substring$ 'b := + + % if word not in title.lowerwords - uppercase first letter + b is.in.list not + { b "l" change.case$ b = + { b "u" change.case$ "t" change.case$ 'b := } + 'skip$ + if$ + } + 'skip$ + if$ + + int #1 + 'int := + + s b " " * * 's := + int #1 + 'int := + t int global.max$ substring$ 't := + #0 'int := + } + 'skip$ + if$ + int #1 + 'int := + count #1 + 'count := +% "count=" count int.to.str$ * " slen=" * slen int.to.str$ * top$ + } + while$ + v 'list.string := + % last word is "t" and need to check it too + s t + t "l" change.case$ t = + { "u" change.case$ "t" change.case$ } + 'skip$ + if$ + * +} + + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + "article" type$ = + type$ "techreport" = + type$ "inbook" = + type$ "inproceedings" = + type$ "incollection" = + type$ "phdthesis" = + type$ "mastersthesis" = + or or or or or or + {"t" change.case$} + { type$ "unpublished" = + type$ "misc" = + or + 'skip$ + 'upercase.first.letters + if$ + } + if$ + } + if$ +} + + +FUNCTION {note.presented} +{ note #1 #9 substring$ "presented" = + note #1 #9 substring$ "Presented" = + or +} + +FUNCTION {n.filter} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "," = + t #1 #1 substring$ "\" = + t #1 #1 substring$ "~" = + or or + { "" * + t #2 global.max$ substring$ 't := + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {byear} +{ duplicate$ empty$ + { pop$ "" } + { 't := + t text.length$ 'sk := + #5 sk = + { t #1 #4 substring$ 's := + t #5 #1 substring$ 'longest.label := + longest.label is.num not + {s "year" make.tag + "nameyear" is.in.list + {longest.label * } + 'skip$ + if$ + } + {t "year" make.tag } + if$ + } + { t "year" make.tag + "nameyear" is.in.list + {extra.label *} + 'skip$ + if$ + } + if$ + } + if$ +} + +FUNCTION {format.date} +{ year empty$ + { "" } + { year byear } + if$ +} + +FUNCTION {parens} +{ "(" swap$ * ")" * } + +FUNCTION {format.date.parens} +{ year empty$ + { "" } + { year byear parens } + if$ +} + +FUNCTION {noparens} +{ " " swap$ * "" * } + +FUNCTION {format.softmiscdate} +{ year empty$ + { "" } + { year byear parens } + if$ +} + +FUNCTION {format.month}{ + month empty$ + {""} + {month sort.format.month "confdate" make.tag} + if$ +} + +FUNCTION {formatpatent.date} +{ year empty$ + 'skip$ + { month empty$ + { year } + {format.month " " * year *} + if$ + } + if$ +} + +FUNCTION {month.year.date} +{ year empty$ + {""} + { month empty$ + {year byear} + { format.month " " * year byear * } + if$ + type$ "inproceedings" = + 'skip$ + {"(" swap$ * ")" * } + if$ + } + if$ +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} +FUNCTION {format.volume} +{ volume empty$ + { "book" type$ = + {number empty$ + {""} + {"vol. " number "seriesno" make.tag *} + if$ + } + {""} + if$ + } + {"vol. " volume "seriesno" make.tag *} + if$ +} +FUNCTION {format.volume2} +{ volume empty$ + {""} + {"vol. " volume "seriesno" make.tag *} + if$ +} + +FUNCTION {format.art.vol} +{ + volume empty$ + {""} + {volume n.filter "volume" make.tag} + if$ + number empty$ + 'skip$ + { "(" number "issue" make.tag * ")" * * } + if$ +} + +FUNCTION {format.series} +{ series empty$ + 'skip$ + {series "sertitle" make.tag} + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { "" 'v := + "" 'l := + "" 'f := + edition "l" change.case$ 's := + "1" s = + "first" s = + or + { + "1" 'v := + "st" 'l := + } + { + "2" s = + "second" s = + or + { + "2" 'v := + "nd" 'l := + } + { + "3" s = + "third" s = + or + { + "3" 'v := + "rd" 'l := + } + { + "4" s = + "fourth" s = + or + { + "4" 'v := + "th" 'l := + } + { + "5" s = + "fifth" s = + or + { + "5" 'v := + "th" 'l := + } + { + "6" s = + "sixth" s = + or + { + "6" 'v := + "th" 'l := + } + { + "7" s = + "seventh" s = + or + { + "7" 'v := + "th" 'l := + } + { + "8" s = + "eighth" s = + or + { + "8" 'v := + "th" 'l := + } + { + "9" s = + "nineth" s = + or + { + "9" 'v := + "th" 'l := + } + { + edition "t" change.case$ 'f := + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + #0 bother = + { f "" = + { v l * 'f :=} + 'skip$ + if$ + } + { f "" = + { "\bedition{" v * "}" * l * 'f :=} + { "\bedition{" f * "}" * 'f :=} + if$ + } + if$ + f " edn." * + } + if$ +} +FUNCTION {format.isbn} +{ isbn empty$ + { "" } + { isbn "isbn" make.tag} + if$ +} + +INTEGERS {default.info} + + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + "" 'l := + + {t empty$ not} + { t #1 #1 substring$ 's := + + s is.num not + { "" l = not + {t find.integer + {#1 'multiresult := } + {#0 'multiresult := } + if$ + "" 't := + } + { + t #2 global.max$ substring$ 't := + } + if$ + } + { l s * 'l := + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + multiresult +} +FUNCTION {clearpage} +{ 't := + "" 's := + "" 'l := + + { t empty$ not } + { + t #1 #1 substring$ 's := + s is.num not + 'skip$ + { l s * 'l := } + if$ + t #2 global.max$ substring$ 't := + } + while$ + l + +} +FUNCTION {do.pages} +{'t := + "" 'j := + "" 'v := + {t empty$ not} + { t #1 #1 substring$ 's := + s is.num not + s "," = not + and + { "" j = + { + t #2 global.max$ substring$ 't := + } + {t find.integer + { t clearpage 'v := } + 'skip$ + if$ + "" 't := + } + if$ + } + { j s * 'j := + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + j clearpage 'j := + j "fpage" make.tag + "cnd" is.in.list + 'skip$ + {"--" * v "lpage" make.tag *} + if$ +} + + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + {type$ "article" = + {""} + {"cnd" is.in.list + {"p. "} + {"pp. "} + if$ + } + if$ + pages do.pages * + } + {type$ "article" = + {""} + {"p. "} + if$ + pages clearpage "fpage" make.tag * + } + + if$ + } + if$ +} + +FUNCTION {replace.tilde} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "~" = + { { t #1 #1 substring$ "~" = } + { "\texttildelow " * + t #2 global.max$ substring$ 't := + } + while$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + + +FUNCTION {format.url} +{ url empty$ + 'skip$ + { type$ "article" = + 'skip$ + { #0 bother = + { "\url{" } + { "\burl{" } + if$ + url replace.tilde * "}" * + output + } + if$ + + urldate empty$ + 'skip$ + { "Accessed " urldate * output } + if$ + } + if$ +} + + +FUNCTION {publisher.month.pages}{ + publisher empty$ series empty$ and + { address empty$ + 'skip$ + 'new.sentence + if$ + format.pub.address + + pages empty$ + 'skip$ + {insert.comma} + if$ + format.pages output + + } + { + pages empty$ + 'skip$ + {insert.comma} + if$ + format.pages output + publisher empty$ + 'skip$ + {new.sentence} + if$ + format.pub.address + } + if$ +} + +function{process.doi}{ + doi 't := + "" 'b := + #1 'int := +% "doi =" t * top$ + + t text.length$ 'slen := + + {int slen = not } + {t int #3 substring$ "10." = + { + t int #1 - #1 substring$ 'b := + b "" = + {"a" 'b :=} % if b is empty need to set a letter + 'skip$ + if$ + + b is.num not + { + t int slen int - #1 + substring$ 't := + slen #1 - 'int := + } + 'skip$ + if$ + + } + 'skip$ + if$ + int #1 + 'int := + } + while$ + t +} + +FUNCTION {format.doi} +{ doi empty$ + {""} + { + "nodoi" is.in.list + {""} + %%{"doi:\doiurl{" process.doi * "}" * } + {"\doiurl{" process.doi * "} " * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + {#1 bother = + "cnd" is.in.list not + and + { editor empty$ + 'skip$ + { "In: " output write$ format.editors } + if$ + } + 'skip$ + if$ + } + { editor empty$ + { "In: " booktitle upercase.first.letters "btitle" make.tag * output} + { "In: " output write$ format.editors "" %%% pushing empty string to the empty stack + booktitle upercase.first.letters "btitle" make.tag output + } + if$ + } + + if$ +} + +FUNCTION {format.in.ed} +{ title empty$ + 'skip$ + { editor empty$ + { title "btitle" make.tag output} + { author empty$ + { format.editors + stupid.colon + %format.date output + title "btitle" make.tag output + } + { "In: " output write$ format.editors "" %%% pushing empty string to the empty stack + title "btitle" make.tag output + } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {patent.number} +{ number empty$ + 'skip$ + { number } + if$ +} +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.inpres} +{ "l" change.case$ 't := + "in press: " #10 + "in press. " #10 + "in press " #9 t chop.word + chop.word + chop.word + #1 global.max$ substring$ +} + +FUNCTION {bcomment.note} +{ note empty$ + 'skip$ + {note format.inpres "comment" make.tag output} + 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 empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.chapter.and.note} +{ note empty$ chapter empty$ organization empty$ and and + 'skip$ + { chapter empty$ + "notnumber" last.label = + or + {organization empty$ + { note "comment" make.tag output } + { note empty$ + { organization "comment" make.tag output } + { organization ". " * note * "comment" make.tag output } + if$ + } + if$ + } + { note empty$ + { "Chap. " chapter * "comment" make.tag output} + { type empty$ + { "Chap. " } + { type "t" change.case$ "Section" = + { "Sect. " } + { "Chap. " } + if$ + } + if$ + chapter * ". " * note * "comment" make.tag output + } + if$ + } + if$ + } + if$ +} + +FUNCTION {item.end} +{ chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + { new.sentence + format.doi output + } + 'skip$ + if$ + + type$ "unpublished" = + type$ "misc" = + or + { note empty$ + 'skip$ + {note.presented + 'skip$ + {new.sentence note output} + if$ + } + if$ + format.date.parens output + } + { new.sentence + type$ "proceedings" = + { author empty$ editor empty$ and + 'bcomment.note + 'format.chapter.and.note + if$ + } + 'format.chapter.and.note + if$ + } + if$ + list.string 'v := + default.list 'list.string := + + type$ ".isbn" * is.in.list + "cnd" is.in.list + or + { + new.sentence +% format.isbn output + } + 'skip$ + if$ + new.sentence + %% commented by SPi as we are using format.eprint %% + %% and also to avoide eprint being printed twice - Start %% + %%eprint empty$ + %% 'skip$ + %% {"\arxivurl{" eprint * "}" * output} + %%if$ + %% End %% + chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + 'skip$ + { new.sentence + format.doi output + } + if$ + new.sentence + format.url + v 'list.string := + fin.entry +} + +FUNCTION {article.item.end} +{ chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + { new.sentence +% format.doi output + } + 'skip$ + if$ + + type$ "unpublished" = + type$ "misc" = + or + { note empty$ + 'skip$ + {note.presented + 'skip$ + {new.sentence note output} + if$ + } + if$ + format.date.parens output + } + { new.sentence + type$ "proceedings" = + { author empty$ editor empty$ and + 'bcomment.note + 'format.chapter.and.note + if$ + } + 'format.chapter.and.note + if$ + } + if$ + list.string 'v := + default.list 'list.string := + + type$ ".isbn" * is.in.list + "cnd" is.in.list + or + { + new.sentence +% format.isbn output + } + 'skip$ + if$ + new.sentence + %% commented by SPi as we are using format.eprint %% + %% and also to avoide eprint being printed twice - Start %% + %%eprint empty$ + %% 'skip$ + %% {"\arxivurl{" eprint * "}" * output} + %%if$ + %% End %% + chapter empty$ + type$ "unpublished" = not + type$ "misc" = not + and and + 'skip$ + { new.sentence +%% format.doi output + } + if$ + new.sentence + format.url + v 'list.string := + fin.entry +} + + +FUNCTION {insert.element} +{ #0 bother = + { element "{botherref}" * write$ newline$} + { + type$ "article" = + {element "{barticle}" * write$ newline$} + 'skip$ + if$ + type$ "book" = + type$ "proceedings" = + type$ "manual" = + type$ "booklet" = + or or or + {element "{bbook}" * write$ newline$} + 'skip$ + if$ + + type$ "inbook" = + { "notnumber" last.label = + {element "{bchapter}" * write$ newline$} + {element "{bbook}" * write$ newline$} + if$ + } + 'skip$ + if$ + + type$ "incollection" = + type$ "inproceedings" = + type$ "conference" = + or or + {element "{bchapter}" * write$ newline$} + 'skip$ + if$ + } + if$ +} + +FUNCTION {end.element} +{ "\end" 'element := + item.end + insert.element + "\endbibitem" write$ newline$ +} + +FUNCTION {article.end.element} +{ "\end" 'element := + article.item.end + insert.element + "\endbibitem" write$ newline$ +} + + +FUNCTION {begin.element} +{ "\begin" 'element := + insert.element +} +function {set.options}{ + options empty$ + 'skip$ + {options 'list.string :=} + if$ +} + +FUNCTION {settings} +{} + +FUNCTION {article} +{ output.bibitem + author empty$ + institution empty$ + editor empty$ + and and + journal empty$ + or + year empty$ + or + % above tagging rule means: + % nead: (volume & (pages or number) ) or (doi [without volume, pages and number]) + volume empty$ not + pages empty$ not bnumber empty$ not or + and + + volume empty$ pages empty$ bnumber empty$ and and + doi empty$ not and + or + not + or + {#0 'bother :=} + {#1 'bother :=} + if$ + begin.element + author empty$ + { editor empty$ + 'skip$ + {format.editors stupid.colon} + if$ + } + { format.authors stupid.colon} + if$ + "cnd" is.in.list + { + journal empty$ + {format.title "atitle" make.tag "title" output.check} + {journal "jtitle" make.tag output} + if$ + } + { + format.title "atitle" make.tag "title" output.check + journal empty$ + 'skip$ + {new.sentence journal "jtitle" make.tag output} + if$ + } + if$ + format.art.vol output + pages empty$ + 'skip$ + {insert.comma} + if$ + format.pages output + format.date.parens output + format.doi output + format.eprint output + format.primaryClass output + article.end.element +} + + +FUNCTION {patent} +{ output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + add.period$ + patent.number output + insert.comma + formatpatent.date output + end.element +} + +FUNCTION { other } { patent } + +FUNCTION {book} +{ output.bibitem + author empty$ + institution empty$ + organization empty$ + editor empty$ + and and and + title empty$ + year empty$ + or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + begin.element + author empty$ + { editor empty$ + 'skip$ + {format.editors stupid.colon} + if$ + } + { format.authors stupid.colon} + if$ + format.title "btitle" make.tag "title" output.check + series empty$ + { + format.volume output + insert.comma + format.edition output + } + { edition empty$ + 'skip$ + 'insert.comma + if$ + format.edition output + new.sentence + format.series output + insert.comma + format.volume output + } + if$ + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {booklet} +{output.bibitem + author empty$ + title empty$ + year empty$ + howpublished empty$ + or or or + {#0 'bother :=} + {#1 'bother :=} + if$ + + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "btitle" make.tag "title" output.check + address empty$ publisher empty$ howpublished empty$ and and + 'skip$ + 'new.sentence + if$ + format.pub.address + format.date.parens output + end.element +} + +FUNCTION {misc} +{output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "btitle" make.tag "title" output.check + address empty$ publisher empty$ howpublished empty$ and and + 'skip$ + 'new.sentence + if$ + format.pub.address + end.element +} + +FUNCTION {softmisc} +{output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors} + if$ + stupid.colon + format.title "btitle" make.tag "title" output.check + insert.comma + version output + insert.comma + %%address empty$ publisher empty$ howpublished empty$ and and + %%'skip$ + %% 'new.sentence + %%if$ + format.pub.address + format.softmiscdate output + insert.comma + format.softmisc.eprint output + end.element +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + institution empty$ + organization empty$ + editor empty$ + and and and + title empty$ + year empty$ + or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + + chapter empty$ + { "" 'last.label :=} + { chapter string.to.integer empty$ author empty$ not and + { "notnumber" 'last.label :=} + { "" 'last.label :=} + if$ + } + if$ + + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + "notnumber" last.label = + { chapter "ctitle" make.tag output + add.period$ + } + 'skip$ + if$ + format.in.ed + series empty$ + { + insert.comma + format.volume output + insert.comma + format.edition output + new.sentence + } + { + insert.comma + format.edition output + new.sentence + format.series output + volume empty$ + 'skip$ + 'insert.comma + if$ + format.volume output + } + if$ + publisher.month.pages + publisher empty$ address empty$ edition empty$ series empty$ pages empty$ volume empty$ and and and and and + 'insert.comma + 'skip$ + if$ + format.date.parens output + end.element +} +FUNCTION {incollection} +{ output.bibitem + author empty$ + institution empty$ + and + booktitle empty$ + title empty$ + year empty$ + or or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + + "cnd" is.in.list + { + booktitle empty$ title empty$ not and + { + format.title "ctitle" make.tag "title" output.check + new.sentence + } + 'skip$ + if$ + } + { + format.title "ctitle" make.tag "title" output.check + title empty$ + 'skip$ + {new.sentence} + if$ + } + if$ + format.in.ed.booktitle + series empty$ + { + format.volume output + insert.comma + format.edition output + } + { + edition empty$ + 'skip$ + { insert.comma + format.edition output + } + if$ + new.sentence + format.series output + insert.comma + format.volume output + } + if$ + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {inproceedings} +{ output.bibitem + author empty$ + institution empty$ + and + title empty$ + year empty$ + or or + {#0 'bother :=} + {#1 'bother :=} + if$ + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + + "cnd" is.in.list + { + booktitle empty$ title empty$ not and + { + format.title "ctitle" make.tag "title" output.check + new.sentence + } + 'skip$ + if$ + } + { + format.title "ctitle" make.tag "title" output.check + title empty$ booktitle empty$ not and + 'skip$ + {new.sentence} + if$ + } + if$ + + format.in.ed.booktitle + series empty$ + 'skip$ + {new.sentence format.series output} + if$ + volume empty$ address empty$ publisher empty$ and and + 'skip$ + 'insert.comma + if$ + format.volume output + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + organization empty$ + title empty$ + year empty$ + address empty$ + or or or or + {#0 'bother :=} + {#1 'bother :=} + if$ + begin.element + + author empty$ + { organization empty$ + 'skip$ + { organization "publisher" make.tag output.nonnull + stupid.colon% add.period$ + } + if$ + } + { format.authors stupid.colon} + if$ + title empty$ + 'skip$ + {format.title "btitle" make.tag output} + if$ + edition empty$ + {new.sentence} + {insert.comma} + if$ + format.edition output + edition empty$ + 'skip$ + {new.sentence} + if$ + author empty$ organization empty$ + or + 'skip$ + { organization "publisher" make.tag output.nonnull + insert.comma + } + if$ + address empty$ + 'skip$ + {address "location" make.tag output} + if$ + format.date.parens output + end.element +} + + +FUNCTION {phdthesis} +{output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + new.sentence + type$ "mastersthesis" = + {"Master's thesis" format.thesis.type output.nonnull} + {"PhD thesis" format.thesis.type output.nonnull} + if$ + school empty$ + 'skip$ + 'insert.comma + if$ + school "school" output.check + address empty$ + 'skip$ + 'insert.comma + if$ + address output + month.year.date output + end.element +} +FUNCTION {mastersthesis}{phdthesis} + + +FUNCTION {proceedings} +{ output.bibitem + author empty$ + institution empty$ + organization empty$ + editor empty$ + and and and + title empty$ + year empty$ + or or + {#0 'bother :=} + { + publisher empty$ address empty$ not and + {#0 'bother :=} + {#1 'bother :=} + if$ + } + if$ + + begin.element + author empty$ + { editor empty$ + {organization "institutionaled" make.tag "organization" output.check } + { format.editors } + if$ + } + { format.authors } + if$ + stupid.colon + format.title "btitle" make.tag output + series empty$ + 'skip$ + {new.sentence format.series output} + if$ + volume empty$ + 'skip$ + 'insert.comma + if$ + format.volume output + publisher.month.pages + format.date.parens output + end.element +} + +FUNCTION {techreport} +{ output.bibitem + #0 'bother := + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + new.sentence + format.tr.number output.nonnull + institution empty$ + 'skip$ + 'insert.comma + if$ + institution "institution" output.check + address empty$ + 'skip$ + 'insert.comma + if$ + address output + month.year.date output + end.element +} + +FUNCTION {unpublished} +{ output.bibitem + #0 'bother := + + begin.element + author empty$ + 'skip$ + {format.authors stupid.colon} + if$ + format.title "title" output.check + note empty$ + 'skip$ + { note.presented + {note output} + 'skip$ + if$ + } + if$ + end.element +} + +FUNCTION {default.type} { unpublished } + +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"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { et.al.char.used } + +FUNCTION {initialize.et.al.char.used} +{ #0 'et.al.char.used := +} + +%%%%% setting default options +FUNCTION {set.default.opt} +{"unsort" 'list.string :=} + +EXECUTE {set.default.opt} + +FUNCTION {assign.opt}{ + % First need to set options + "settings" type$ = + { options empty$ + 'skip$ + {options 'list.string :=} + if$ + } + 'skip$ + if$ +} + +ITERATE {assign.opt} +EXECUTE {initialize.et.al.char.used} + +FUNCTION {alpha.format.lab.names} +{ 's := + s num.names$ 'numnames := + numnames #1 > + { numnames #4 > + { #3 'namesleft := } + { numnames 'namesleft := } + if$ + #1 'nameptr := + "" + { namesleft #0 > } + { nameptr numnames = + { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { "+" * + #1 'et.al.char.used := + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + } + { s nameptr "{v{}}{l{}}" format.name$ * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ + numnames #4 > + { "+" * + #1 'et.al.char.used := + } + 'skip$ + if$ + } + { s #1 "{v{}}{l{}}" format.name$ + duplicate$ text.length$ #2 < + { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {standard.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 {format.lab.names}{ + "alpha" is.in.list + 'alpha.format.lab.names + 'standard.format.lab.names + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { "zzz" } + { key #3 text.prefix$ } + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.key.organization.label} +{ author empty$ + { key empty$ + { organization empty$ + { "zzz" } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.organization.label} +{ editor empty$ + { key empty$ + { organization empty$ + { "zzz" } + { "The " #4 organization chop.word #3 text.prefix$ } + if$ + } + { key #3 text.prefix$ } + 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 + + "alpha" is.in.list + { + duplicate$ + year field.or.null purify$ #-1 #2 substring$ + * + 'label := + year field.or.null purify$ #-1 #4 substring$ + * + sortify 'sort.label := + } + { + "(" + * + year duplicate$ empty$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := + label 'sort.label := + } + if$ +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * + "alpha" is.in.list + 'skip$ + {numnames int.to.str$ * " " *} + if$ + } + 'skip$ + if$ + s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't := + nameptr numnames = + t "others" = + and + { "et al" * } + { t sortify * } + if$ + #3 numnames < + "alpha" is.in.list not + and + {#0 'namesleft := + " zzz " * + } + { + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + if$ + } + 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$ + "zzz" + } + { 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$ + "z" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.organization.sort} +{ author empty$ + { organization empty$ + { key empty$ + { "to sort, need author, organization, or key in " cite$ * warning$ + "z" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.organization.sort} +{ editor empty$ + { organization empty$ + { key empty$ + { "to sort, need editor, organization, or key in " cite$ * warning$ + "z" + } + { key sortify } + if$ + } + { "The " #4 organization chop.word sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + sort.label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + {author empty$ + 'editor.organization.sort + 'author.organization.sort + if$ + } + { type$ "proceedings" = + type$ "incollection" = + or + {author empty$ + 'editor.organization.sort + 'author.organization.sort + if$ + } + { type$ "manual" = + 'author.organization.sort + 'author.sort + if$ + } + if$ + } + if$ + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ 'sort.label := + sort.label * + #1 entry.max$ substring$ 'sort.key$ := + + "settings" type$ = + {"aaa"} + {"unsort" is.in.list + {"bb"} + {"alpha" is.in.list + {sort.key$} + {sort.label} + if$ + } + if$ + } + if$ + 'sort.key$ := +} + + +ITERATE {presort} + +SORT + +INTEGERS { longest.label.width last.extra.num number.label } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #0 int.to.chr$ 'last.label := + "" 'j := + #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} +{ j "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'j := + label extra.label * 'label := +} + +EXECUTE {initialize.longest.label} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {write.preambule} +{ "%% BioMed_Central_Bib_Style_v1.01" write$ newline$ newline$ + "\begin{thebibliography}{" number.label int.to.str$ * "}" * write$ newline$ + "% BibTex style file: bmc-mathphys.bst (version 2.1), 2014-07-24" write$ newline$ + "\ifx \bisbn \undefined \def \bisbn #1{ISBN #1}\fi" write$ newline$ + "\ifx \binits \undefined \def \binits#1{#1}\fi" write$ newline$ + "\ifx \bauthor \undefined \def \bauthor#1{#1}\fi" write$ newline$ + "\ifx \batitle \undefined \def \batitle#1{#1}\fi" write$ newline$ + "\ifx \bjtitle \undefined \def \bjtitle#1{#1}\fi" write$ newline$ + "\ifx \bvolume \undefined \def \bvolume#1{\textbf{#1}}\fi" write$ newline$ + "\ifx \byear \undefined \def \byear#1{#1}\fi" write$ newline$ + "\ifx \bissue \undefined \def \bissue#1{#1}\fi" write$ newline$ + "\ifx \bfpage \undefined \def \bfpage#1{#1}\fi" write$ newline$ + "\ifx \blpage \undefined \def \blpage #1{#1}\fi" write$ newline$ + "\ifx \burl \undefined \def \burl#1{\textsf{#1}}\fi" write$ newline$ + %%"\ifx \doiurl \undefined \def \doiurl#1{\textsf{#1}}\fi" write$ newline$ + "\ifx \doiurl \undefined \def \doiurl#1{\url{https://doi.org/#1}}\fi" write$ newline$ + "\ifx \betal \undefined \def \betal{\textit{et al.}}\fi" write$ newline$ + "\ifx \binstitute \undefined \def \binstitute#1{#1}\fi" write$ newline$ + "\ifx \binstitutionaled \undefined \def \binstitutionaled#1{#1}\fi" write$ newline$ + "\ifx \bctitle \undefined \def \bctitle#1{#1}\fi" write$ newline$ + "\ifx \beditor \undefined \def \beditor#1{#1}\fi" write$ newline$ + "\ifx \bpublisher \undefined \def \bpublisher#1{#1}\fi" write$ newline$ + "\ifx \bbtitle \undefined \def \bbtitle#1{#1}\fi" write$ newline$ + "\ifx \bedition \undefined \def \bedition#1{#1}\fi" write$ newline$ + "\ifx \bseriesno \undefined \def \bseriesno#1{#1}\fi" write$ newline$ + "\ifx \blocation \undefined \def \blocation#1{#1}\fi" write$ newline$ + "\ifx \bsertitle \undefined \def \bsertitle#1{#1}\fi" write$ newline$ + "\ifx \bsnm \undefined \def \bsnm#1{#1}\fi" write$ newline$ + "\ifx \bsuffix \undefined \def \bsuffix#1{#1}\fi" write$ newline$ + "\ifx \bparticle \undefined \def \bparticle#1{#1}\fi" write$ newline$ + "\ifx \barticle \undefined \def \barticle#1{#1}\fi" write$ newline$ + "\bibcommenthead" write$ newline$ +} + + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + write.preambule + "\ifx \bconfdate \undefined \def \bconfdate #1{#1}\fi" write$ newline$ + "\ifx \botherref \undefined \def \botherref #1{#1}\fi" write$ newline$ + "\ifx \url \undefined \def \url#1{\textsf{#1}}\fi" write$ newline$ + "\ifx \bchapter \undefined \def \bchapter#1{#1}\fi" write$ newline$ + "\ifx \bbook \undefined \def \bbook#1{#1}\fi" write$ newline$ + "\ifx \bcomment \undefined \def \bcomment#1{#1}\fi" write$ newline$ + "\ifx \oauthor \undefined \def \oauthor#1{#1}\fi" write$ newline$ + "\ifx \citeauthoryear \undefined \def \citeauthoryear#1{#1}\fi" write$ newline$ + "\ifx \endbibitem \undefined \def \endbibitem {}\fi" write$ newline$ + "\ifx \bconflocation \undefined \def \bconflocation#1{#1}\fi" write$ newline$ + "\ifx \arxivurl \undefined \def \arxivurl#1{\textsf{#1}}\fi" write$ newline$ + "\csname PreBibitemsHook\endcsname" write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} + + +%% XML output - done for each entry referenced in the BibTeX database +INTEGERS {i ll li j.int global.counter} +STRINGS {lr lp lt ls } + +FUNCTION {replace} +{ + 'lr := % replace string + 'lp := % pattern + 'lt := % text to search + "" 'ls := % result string + lp text.length$ 'll := % length of the search pattern + { lt empty$ not } + { lt #1 ll substring$ lp = + { ls lr * 'ls := + lt ll #1 + global.max$ substring$ 'lt := } + { ls lt #1 #1 substring$ * 'ls := + lt #2 global.max$ substring$ 'lt := } + if$ + } + while$ + ls +} + +FUNCTION {strip.letters} +{ + "" 's := + duplicate$ missing$ + 'pop$ + { + 't := + { t "" = not } + { % ascii '0' = 48, '9' = 57 + t #1 #1 substring$ chr.to.int$ 'i := + i #47 > i #58 < and + { s t #1 #1 substring$ * 's := } + 'skip$ + if$ + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + s +} +FUNCTION {output.xml} +{ duplicate$ "" = + 'pop$ + { " " swap$ * write$ newline$ } + if$ +} + +%% + % markup.xml + % + % Takes 2 args text & tag {"the text " "tag"} + % Returns 1 string {"the text <\tag>"} +%% +FUNCTION {markup.xml} +{ + "" 'v := % result + 't := % tag + duplicate$ missing$ + 'pop$ + { 'v := } + if$ + v "" = + 'skip$ + { "<" t * ">" * v * "" * 'v := } + if$ + v +} + +%% Takes 2 args - tag, string +FUNCTION{markup.xml.title} +{ pop$ % tag + duplicate$ missing$ + 'pop$ + { + 's := % string + s "\&" "&" replace 's := + s "p" markup.xml 's := + s "title" markup.xml output.xml + } + if$ +} + + +%% + % markup.xml.pages + % + % Takes 1 arg (pages string) + % seperates into and if + % there is a - seperator. else no lpage. + % + % need to remove others +%% +FUNCTION{markup.xml.pages} +{ + "" 'v := % fpage + "" 's := % lpage + duplicate$ missing$ + 'pop$ + { + 't := + t " " "" replace 't := % remove all spaces. pgs must be - seperated + { t empty$ not } + { + t #1 #1 substring$ "-" = + { + t #2 global.max$ substring$ 's := + "" 't := % break while loop + }{ + v t #1 #1 substring$ * 'v := + t #2 global.max$ substring$ 't := + } + if$ + } + while$ + } + if$ + v "fpage" markup.xml output.xml + s "lpage" markup.xml output.xml +} + + +%% + % markup.xml.names + % + % Takes 2 args + % tag, namefield (eg. author "au") + % splits fields into and + % writes info + % returns nothing +%% +FUNCTION {markup.xml.names} +{ + 't := % tag + "" 'v := + "" 's := + duplicate$ empty$ + { pop$ + organization missing$ + { institution "cnm" markup.xml + "au" markup.xml "aug" markup.xml output.xml } + { organization "cnm" markup.xml + "au" markup.xml "aug" markup.xml output.xml } + if$ } + { + " " write$ newline$ + 'temp.str := % names string + temp.str num.names$ 'j.int := % num of names + #1 'i := % init counter + { i #1 j.int + < } % while (i <= j.int) + { + " " write$ + + % Initial first names + % if first name all in capitals + % - assume is initial list of first names. + temp.str i "{ff{ }}" format.name$ + duplicate$ "u" change.case$ = + { temp.str i "{ff{ }}" format.name$ } + { temp.str i "{f{}}" format.name$ } + if$ + + % if last name but no first name use cnm; else snm + duplicate$ "" = + { temp.str i "{ll{ }}" format.name$ % last names space seperated. + "cnm" markup.xml write$ } + { temp.str i "{ll{ }}" format.name$ % last names space seperated. + "snm" markup.xml write$ } + if$ + + "fnm" markup.xml write$ + + "" write$ newline$ + i #1 + 'i := + } + while$ + " " write$ newline$ + } + if$ +} + + +%% + % markup.xml.pub + % + % Takes 4 args (school address publisher tag) + % prints concatenation + % returns nothing +%% +FUNCTION {markup.xml.pub} +{ + 't := % Tag + "" 'v := % Publisher + "" 'l := % Address + "" 'f := % School + "" 's := % Answer + duplicate$ missing$ 'pop$ { 'v := } if$ + duplicate$ missing$ 'pop$ { 'l := } if$ + duplicate$ missing$ 'pop$ { 'f := } if$ + "" f = not % school not empty + { f 's := } % return school as publisher + { % else + "" v = "" l = and % address and pub empty + 'skip$ + { + "" l = + { v 's := } % return pub + { "" v = + { l 's := } % return add + { l ": " * v * 's := } % return add : pub + if$ + } + if$ + } + if$ + } + if$ + s t markup.xml output.xml +} + +%% + % xml.phd + % + % Takes nothing + % Returns type (phd/msc) of empty string +%% +FUNCTION {xml.phd} +{ + "phdthesis" type$ = + "mastersthesis" type$ = or + { "phdthesis" type$ = + { "PhD thesis" } + { "Master's thesis" } + if$ + } + { type } % usually empty + if$ +} + +% markup.xml.edition +% +% edition is a numeric value. ie "2" +% if format 2nd 1st etc.. strip letters. +% +FUNCTION {markup.xml.edition} +{ pop$ pop$ %clear stack + edition strip.letters duplicate$ "" = + { pop$ edition } + 'skip$ + if$ + "edition" markup.xml output.xml +} + + +FUNCTION{begin.bmcxmlcomment}{ + newline$ + "\newcommand{\BMCxmlcomment}[1]{}" write$ newline$ + newline$ + "\BMCxmlcomment{" write$ newline$ + newline$ "" write$ newline$ +} + +FUNCTION{end.bmcxmlcomment}{ + newline$ + "" write$ newline$ + "} % end of \BMCxmlcomment" write$ newline$ +} + +FUNCTION {export.xml}{ + newline$ + global.counter #1 + 'global.counter := + "" * + write$ newline$ +% title "\&" "&" replace "title" markup.xml.title + title "title" markup.xml.title + author "aug" markup.xml.names % org. and inst. here + howpublished missing$ + { booktitle missing$ + { journal missing$ + { xml.phd } % Phd/Msc + {journal} + if$ + } {booktitle} + if$ + } { howpublished } + if$ "source" markup.xml output.xml + school + address + publisher "publisher" markup.xml.pub + editor "editor" markup.xml output.xml + edition "edition" markup.xml.edition + series "p" markup.xml + "title" markup.xml + "series" markup.xml output.xml + chapter "p" markup.xml + "title" markup.xml + "section" markup.xml output.xml + % month % ignore + year "pubdate" markup.xml output.xml + + note missing$ + { volume "volume" markup.xml output.xml + number "issue" markup.xml output.xml + pages markup.xml.pages + url "url" markup.xml output.xml } + { note "l" change.case$ "in press" = + { " " write$ newline$ } + { volume "volume" markup.xml output.xml + number "issue" markup.xml output.xml + pages markup.xml.pages + url "url" markup.xml output.xml + note "note" markup.xml output.xml + } + if$ + } + if$ + "" write$ newline$ +} + +%%EXECUTE {begin.bmcxmlcomment} +%%ITERATE {export.xml} +%%EXECUTE {end.bmcxmlcomment} + + + + diff --git a/_extensions/christopherkenny/nature/sn-nature.bst b/_extensions/christopherkenny/nature/sn-nature.bst new file mode 100644 index 0000000..cae8f64 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-nature.bst @@ -0,0 +1,1710 @@ +%% +%% This is file `naturemag.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% merlin.mbs (with options: `head,seq-no,nm-rev,ed-rev,jnrlst,nmlm,x5,m1,yr-par,xmth,vol-bf,vnum-x,volp-com,num-xser,jnm-x,bkpg-x,pub-date,edparxc,ppx,ed,abr,xedn,jabr,amper,and-xcom,etal-it,eprint,url,url-blk,bibinfo,nfss,{}') +%% physjour.mbs (with options: `seq-no,nm-rev,ed-rev,jnrlst,nmlm,x5,m1,yr-par,xmth,vol-bf,vnum-x,volp-com,num-xser,jnm-x,bkpg-x,pub-date,edparxc,ppx,ed,abr,xedn,jabr,amper,and-xcom,etal-it,eprint,url,url-blk,bibinfo,nfss,{}') +%% geojour.mbs (with options: `seq-no,nm-rev,ed-rev,jnrlst,nmlm,x5,m1,yr-par,xmth,vol-bf,vnum-x,volp-com,num-xser,jnm-x,bkpg-x,pub-date,edparxc,ppx,ed,abr,xedn,jabr,amper,and-xcom,etal-it,eprint,url,url-blk,bibinfo,nfss,{}') +%% photjour.mbs (with options: `seq-no,nm-rev,ed-rev,jnrlst,nmlm,x5,m1,yr-par,xmth,vol-bf,vnum-x,volp-com,num-xser,jnm-x,bkpg-x,pub-date,edparxc,ppx,ed,abr,xedn,jabr,amper,and-xcom,etal-it,eprint,url,url-blk,bibinfo,nfss,{}') +%% merlin.mbs (with options: `tail,seq-no,nm-rev,ed-rev,jnrlst,nmlm,x5,m1,yr-par,xmth,vol-bf,vnum-x,volp-com,num-xser,jnm-x,bkpg-x,pub-date,edparxc,ppx,ed,abr,xedn,jabr,amper,and-xcom,etal-it,eprint,url,url-blk,bibinfo,nfss,{}') +%% ---------------------------------------- +%% *** Style for the journal Nature (created by Peter Czoschke) *** +%% +%% Copyright 1994-2002 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}[2002/10/21 4.05 (PWD, AO, DPC)] + % For use with BibTeX version 0.99a or later + %------------------------------------------------------------------- + % 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. + %--------------------------------------------------------------------- + +ENTRY + { address + archive + author + booktitle + chapter + edition + editor + eprint + howpublished + institution + journal + key + keywords + month + note + number + organization + pages + publisher + school + series + title + type + url + doi + volume + year + archivePrefix + primaryClass + eid + adsurl + adsnote + version + } + {} + { label } +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.in.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} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {in.output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.in.nonnull + 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 {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.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 {bolden} +{ duplicate$ empty$ + { pop$ "" } + { "\textbf{" swap$ * "}" * } + if$ +} +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.in.editors} +{ "eds " } + +FUNCTION {bbl.editors} +{ "eds" } + +FUNCTION {bbl.editor} +{ "ed." } + +FUNCTION {bbl.edby} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "edn" } + +FUNCTION {bbl.volume} +{ "Vol." } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "no." } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "" } + +FUNCTION {bbl.page} +{ "" } + +FUNCTION {bbl.chapter} +{ "Ch." } + +FUNCTION {bbl.techrep} +{ "Tech. Rep." } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +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."} + + %------------------------------------------------------------------- + % Begin module: + % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)] +MACRO {aa}{"Astron. \& Astrophys."} +MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."} +MACRO {aj} {"Astron. J."} +MACRO {aph} {"Acta Phys."} +MACRO {advp} {"Adv. Phys."} +MACRO {ajp} {"Amer. J. Phys."} +MACRO {ajm} {"Amer. J. Math."} +MACRO {amsci} {"Amer. Sci."} +MACRO {anofd} {"Ann. Fluid Dyn."} +MACRO {am} {"Ann. Math."} +MACRO {ap} {"Ann. Phys. (NY)"} +MACRO {adp} {"Ann. Phys. (Leipzig)"} +MACRO {ao} {"Appl. Opt."} +MACRO {apl} {"Appl. Phys. Lett."} +MACRO {app} {"Astroparticle Phys."} +MACRO {apj} {"Astrophys. J."} +MACRO {apjsup} {"Astrophys. J. Suppl."} +MACRO {apss} {"Astrophys. Space Sci."} +MACRO {araa} {"Ann. Rev. Astron. Astrophys."} +MACRO {baas} {"Bull. Amer. Astron. Soc."} +MACRO {baps} {"Bull. Amer. Phys. Soc."} +MACRO {cmp} {"Comm. Math. Phys."} +MACRO {cpam} {"Commun. Pure Appl. Math."} +MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"} +MACRO {cpc} {"Comp. Phys. Comm."} +MACRO {cqg} {"Class. Quant. Grav."} +MACRO {cra} {"C. R. Acad. Sci. A"} +MACRO {fed} {"Fusion Eng. \& Design"} +MACRO {ft} {"Fusion Tech."} +MACRO {grg} {"Gen. Relativ. Gravit."} +MACRO {ieeens} {"IEEE Trans. Nucl. Sci."} +MACRO {ieeeps} {"IEEE Trans. Plasma Sci."} +MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"} +MACRO {ip} {"Infrared Phys."} +MACRO {irp} {"Infrared Phys."} +MACRO {jap} {"J. Appl. Phys."} +MACRO {jasa} {"J. Acoust. Soc. America"} +MACRO {jcp} {"J. Comp. Phys."} +MACRO {jetp} {"Sov. Phys.--JETP"} +MACRO {jfe} {"J. Fusion Energy"} +MACRO {jfm} {"J. Fluid Mech."} +MACRO {jmp} {"J. Math. Phys."} +MACRO {jne} {"J. Nucl. Energy"} +MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."} +MACRO {jnm} {"J. Nucl. Mat."} +MACRO {jpc} {"J. Phys. Chem."} +MACRO {jpp} {"J. Plasma Phys."} +MACRO {jpsj} {"J. Phys. Soc. Japan"} +MACRO {jsi} {"J. Sci. Instrum."} +MACRO {jvst} {"J. Vac. Sci. \& Tech."} +MACRO {nat} {"Nature"} +MACRO {nature} {"Nature"} +MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"} +MACRO {nf} {"Nucl. Fusion"} +MACRO {nim} {"Nucl. Inst. \& Meth."} +MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."} +MACRO {np} {"Nucl. Phys."} +MACRO {npb} {"Nucl. Phys. B"} +MACRO {nt/f} {"Nucl. Tech./Fusion"} +MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"} +MACRO {inc} {"Nuovo Cimento"} +MACRO {nc} {"Nuovo Cimento"} +MACRO {pf} {"Phys. Fluids"} +MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."} +MACRO {pfb} {"Phys. Fluids B: Plasma Phys."} +MACRO {pl} {"Phys. Lett."} +MACRO {pla} {"Phys. Lett. A"} +MACRO {plb} {"Phys. Lett. B"} +MACRO {prep} {"Phys. Rep."} +MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"} +MACRO {pp} {"Phys. Plasmas"} +MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"} +MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"} +MACRO {prl} {"Phys. Rev. Lett."} +MACRO {pr} {"Phys. Rev."} +MACRO {physrev} {"Phys. Rev."} +MACRO {pra} {"Phys. Rev. A"} +MACRO {prb} {"Phys. Rev. B"} +MACRO {prc} {"Phys. Rev. C"} +MACRO {prd} {"Phys. Rev. D"} +MACRO {pre} {"Phys. Rev. E"} +MACRO {ps} {"Phys. Scripta"} +MACRO {procrsl} {"Proc. Roy. Soc. London"} +MACRO {rmp} {"Rev. Mod. Phys."} +MACRO {rsi} {"Rev. Sci. Inst."} +MACRO {science} {"Science"} +MACRO {sciam} {"Sci. Am."} +MACRO {sam} {"Stud. Appl. Math."} +MACRO {sjpp} {"Sov. J. Plasma Phys."} +MACRO {spd} {"Sov. Phys.--Doklady"} +MACRO {sptp} {"Sov. Phys.--Tech. Phys."} +MACRO {spu} {"Sov. Phys.--Uspeki"} +MACRO {st} {"Sky and Telesc."} + % End module: physjour.mbs + %------------------------------------------------------------------- + % Begin module: + % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)] +MACRO {aisr} {"Adv. Space Res."} +MACRO {ag} {"Ann. Geophys."} +MACRO {anigeo} {"Ann. Geofis."} +MACRO {angl} {"Ann. Glaciol."} +MACRO {andmet} {"Ann. d. Meteor."} +MACRO {andgeo} {"Ann. d. Geophys."} +MACRO {andphy} {"Ann. Phys.-Paris"} +MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."} +MACRO {atph} {"Atm\'osphera"} +MACRO {aao} {"Atmos. Ocean"} +MACRO {ass}{"Astrophys. Space Sci."} +MACRO {atenv} {"Atmos. Environ."} +MACRO {aujag} {"Aust. J. Agr. Res."} +MACRO {aumet} {"Aust. Meteorol. Mag."} +MACRO {blmet} {"Bound.-Lay. Meteorol."} +MACRO {bams} {"Bull. Amer. Meteorol. Soc."} +MACRO {cch} {"Clim. Change"} +MACRO {cdyn} {"Clim. Dynam."} +MACRO {cbul} {"Climatol. Bull."} +MACRO {cap} {"Contrib. Atmos. Phys."} +MACRO {dsr} {"Deep-Sea Res."} +MACRO {dhz} {"Dtsch. Hydrogr. Z."} +MACRO {dao} {"Dynam. Atmos. Oceans"} +MACRO {eco} {"Ecology"} +MACRO {empl}{"Earth, Moon and Planets"} +MACRO {envres} {"Environ. Res."} +MACRO {envst} {"Environ. Sci. Technol."} +MACRO {ecms} {"Estuarine Coastal Mar. Sci."} +MACRO {expa}{"Exper. Astron."} +MACRO {geoint} {"Geofis. Int."} +MACRO {geopub} {"Geofys. Publ."} +MACRO {geogeo} {"Geol. Geofiz."} +MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."} +MACRO {gfd} {"Geophys. Fluid Dyn."} +MACRO {geomag} {"Geophys. Mag."} +MACRO {georl} {"Geophys. Res. Lett."} +MACRO {grl} {"Geophys. Res. Lett."} +MACRO {ga} {"Geophysica"} +MACRO {gs} {"Geophysics"} +MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."} +MACRO {ijawp} {"Int. J. Air Water Pollut."} +MACRO {ijc} {"Int. J. Climatol."} +MACRO {ijrs} {"Int. J. Remote Sens."} +MACRO {jam} {"J. Appl. Meteorol."} +MACRO {jaot} {"J. Atmos. Ocean. Technol."} +MACRO {jatp} {"J. Atmos. Terr. Phys."} +MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."} +MACRO {jce} {"J. Climate"} +MACRO {jcam} {"J. Climate Appl. Meteor."} +MACRO {jcm} {"J. Climate Meteor."} +MACRO {jcy} {"J. Climatol."} +MACRO {jgr} {"J. Geophys. Res."} +MACRO {jga} {"J. Glaciol."} +MACRO {jh} {"J. Hydrol."} +MACRO {jmr} {"J. Mar. Res."} +MACRO {jmrj} {"J. Meteor. Res. Japan"} +MACRO {jm} {"J. Meteor."} +MACRO {jpo} {"J. Phys. Oceanogr."} +MACRO {jra} {"J. Rech. Atmos."} +MACRO {jaes} {"J. Aeronaut. Sci."} +MACRO {japca} {"J. Air Pollut. Control Assoc."} +MACRO {jas} {"J. Atmos. Sci."} +MACRO {jmts} {"J. Mar. Technol. Soc."} +MACRO {jmsj} {"J. Meteorol. Soc. Japan"} +MACRO {josj} {"J. Oceanogr. Soc. Japan"} +MACRO {jwm} {"J. Wea. Mod."} +MACRO {lao} {"Limnol. Oceanogr."} +MACRO {mwl} {"Mar. Wea. Log"} +MACRO {mau} {"Mausam"} +MACRO {meteor} {"``Meteor'' Forschungsergeb."} +MACRO {map} {"Meteorol. Atmos. Phys."} +MACRO {metmag} {"Meteor. Mag."} +MACRO {metmon} {"Meteor. Monogr."} +MACRO {metrun} {"Meteor. Rundsch."} +MACRO {metzeit} {"Meteor. Z."} +MACRO {metgid} {"Meteor. Gidrol."} +MACRO {mwr} {"Mon. Weather Rev."} +MACRO {nwd} {"Natl. Weather Dig."} +MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."} +MACRO {npg} {"Nonlin. Proc. Geophys."} +MACRO {om} {"Oceanogr. Meteorol."} +MACRO {ocac} {"Oceanol. Acta"} +MACRO {oceanus} {"Oceanus"} +MACRO {paleoc} {"Paleoceanography"} +MACRO {pce} {"Phys. Chem. Earth"} +MACRO {pmg} {"Pap. Meteor. Geophys."} +MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."} +MACRO {physzeit} {"Phys. Z."} +MACRO {pps} {"Planet. Space Sci."} +MACRO {pss} {"Planet. Space Sci."} +MACRO {pag} {"Pure Appl. Geophys."} +MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."} +MACRO {quatres} {"Quat. Res."} +MACRO {rsci} {"Radio Sci."} +MACRO {rse} {"Remote Sens. Environ."} +MACRO {rgeo} {"Rev. Geophys."} +MACRO {rgsp} {"Rev. Geophys. Space Phys."} +MACRO {rdgeo} {"Rev. Geofis."} +MACRO {revmeta} {"Rev. Meteorol."} +MACRO {sgp}{"Surveys in Geophys."} +MACRO {sp} {"Solar Phys."} +MACRO {ssr} {"Space Sci. Rev."} +MACRO {tellus} {"Tellus"} +MACRO {tac} {"Theor. Appl. Climatol."} +MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"} +MACRO {wrr} {"Water Resour. Res."} +MACRO {weather} {"Weather"} +MACRO {wafc} {"Weather Forecast."} +MACRO {ww} {"Weatherwise"} +MACRO {wmob} {"WMO Bull."} +MACRO {zeitmet} {"Z. Meteorol."} + % End module: geojour.mbs + %------------------------------------------------------------------- + % Begin module: + % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)] + +MACRO {appopt} {"Appl. Opt."} +MACRO {bell} {"Bell Syst. Tech. J."} +MACRO {ell} {"Electron. Lett."} +MACRO {jasp} {"J. Appl. Spectr."} +MACRO {jqe} {"IEEE J. Quantum Electron."} +MACRO {jlwt} {"J. Lightwave Technol."} +MACRO {jmo} {"J. Mod. Opt."} +MACRO {josa} {"J. Opt. Soc. America"} +MACRO {josaa} {"J. Opt. Soc. Amer.~A"} +MACRO {josab} {"J. Opt. Soc. Amer.~B"} +MACRO {jdp} {"J. Phys. (Paris)"} +MACRO {oc} {"Opt. Commun."} +MACRO {ol} {"Opt. Lett."} +MACRO {phtl} {"IEEE Photon. Technol. Lett."} +MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."} +MACRO {sse} {"Solid-State Electron."} +MACRO {sjot} {"Sov. J. Opt. Technol."} +MACRO {sjqe} {"Sov. J. Quantum Electron."} +MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."} +MACRO {stph} {"Sov. Phys.--Techn. Phys."} +MACRO {stphl} {"Sov. Techn. Phys. Lett."} +MACRO {vr} {"Vision Res."} +MACRO {zph} {"Z. f. Physik"} +MACRO {zphb} {"Z. f. Physik~B"} +MACRO {zphd} {"Z. f. Physik~D"} + +MACRO {CLEO} {"CLEO"} +MACRO {ASSL} {"Adv. Sol.-State Lasers"} +MACRO {OSA} {"OSA"} + % End module: photjour.mbs +%% Copyright 1994-2002 Patrick W Daly +MACRO {acmcs} {"ACM Comput. Surv."} + +MACRO {acta} {"Acta Inf."} + +MACRO {cacm} {"Commun. ACM"} + +MACRO {ibmjrd} {"IBM J. Res. Dev."} + +MACRO {ibmsj} {"IBM Syst.~J."} + +MACRO {ieeese} {"IEEE Trans. Software Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput. Aid. Des."} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Program."} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Graphic."} + +MACRO {toms} {"ACM Trans. Math. Software"} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} + +MACRO {tcs} {"Theor. Comput. Sci."} + +FUNCTION {bibinfo.check} +{ swap$ + duplicate$ missing$ + { + pop$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ pop$ + } + { swap$ + "\bibinfo{" swap$ * "}{" * swap$ * "}" * + } + if$ + } + if$ +} +FUNCTION {bibinfo.warn} +{ swap$ + duplicate$ missing$ + { + swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ + "" + } + { duplicate$ empty$ + { + swap$ "empty " swap$ * " in " * cite$ * warning$ + } + { swap$ + "\bibinfo{" swap$ * "}{" * swap$ * "}" * + } + if$ + } + if$ +} +FUNCTION {format.eprint} +{ eprint duplicate$ empty$ + 'skip$ + { "\eprint" + archive empty$ + 'skip$ + { "[" * archive * "]" * } + if$ + "{" * swap$ * "}" * + } + if$ +} +FUNCTION {format.url} +{ url empty$ + { "" } + { "\urlprefix\url{" url * "}" * } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { "\doi{" doi * "}" * } + if$ +} + +STRINGS { bibinfo} +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 'bibinfo := + duplicate$ empty$ 'skip$ { + 's := + "" 't := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}{, f.}{, jj}" + format.name$ + bibinfo bibinfo.check + 't := + nameptr #1 > + { + nameptr #1 + #1 + = + numnames #5 + > and + { "others" 't := + #1 'namesleft := } + 'skip$ + if$ + namesleft #1 > + { ", " * t * } + { + s nameptr "{ll}" format.name$ duplicate$ "others" = + { 't := } + { pop$ } + if$ + t "others" = + { + " " * bbl.etal emphasize * + } + { + "\&" + space.word * 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 +} +FUNCTION {get.bbl.editor} +{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ } + +FUNCTION {get.in.bbl.editor} +{ } + +FUNCTION {format.editors} +{ editor "editor" format.names duplicate$ empty$ 'skip$ + { + " " * + get.bbl.editor + "(" swap$ * ")" * + * + } + if$ +} + +FUNCTION {format.in.editors} +{ "" editor "editor" format.names duplicate$ empty$ 'skip$ + { swap$ "(eds" * + " " * swap$ * + swap$ " " * + swap$ * ")" * + } + 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.in.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + " in \textit{" swap$ * "}" * "title" bibinfo.check +} + +FUNCTION {format.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check +} + +FUNCTION {format.inpro.title} +{ title + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "title" bibinfo.check + emphasize} + +FUNCTION {format.version} +{ version + duplicate$ empty$ 'skip$ + { "t" change.case$ } + if$ + "version" bibinfo.check +} + +%FUNCTION {format.inpro.title} +%{ title +% duplicate$ empty$ 'skip$ +% { "t" change.case$ } +% if$ +% "title" bibinfo.check +% emphasize} + +FUNCTION {output.bibitem} +{ 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.date} +{ + "" + 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$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " (" swap$ * ")" * + } + if$ +} +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 + { + n.dashify + } + { + } + if$ + "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.number} + {number empty$ + 'skip$ + { "~(" number * ")" * * } + if$ + } +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + bolden +% format.number + 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 + emphasize +} +FUNCTION {format.in.ed.booktitle} +{ duplicate$ empty$ 'skip$ + { +editor "editor" format.names.ed duplicate$ empty$ 'pop$ + { +format.booktitle swap$ +"(" editor num.names$ #1 > 'bbl.in.editors 'bbl.editor if$ * swap$ ") " * + * swap$ + * } + if$ + } + 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.article.crossref} +{ + key duplicate$ empty$ + { pop$ + journal duplicate$ empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * warning$ } + { "journal" bibinfo.check emphasize word.in swap$ * } + if$ + } + { word.in swap$ * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + editor num.names$ duplicate$ + #2 > + { pop$ + "editor" bibinfo.check + " " * bbl.etal + emphasize + * + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + "editor" bibinfo.check + " " * bbl.etal + emphasize + * + } + { + " \& " + * editor #2 "{vv~}{ll}" format.name$ + "editor" bibinfo.check + * + } + if$ + } + if$ + } + if$ +} +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$ + 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$ + "" * + } + { series emphasize * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.incoll.inproc.crossref} +{ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { format.booktitle duplicate$ empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + } + { word.in swap$ * } + if$ + } + { word.in key * " " *} + if$ + } + { word.in format.crossref.editor * " " *} + if$ + " \cite{" * crossref * "}" * +} +FUNCTION {format.org.or.pub} +{ 't := + "" + year empty$ + { "empty year in " cite$ * warning$ } + 'skip$ + if$ + address empty$ t empty$ and + year empty$ and + 'skip$ + { + add.blank "(" * + t empty$ + { address "address" bibinfo.check * + } + { t * + address empty$ + 'skip$ + { ", " * address "address" bibinfo.check * } + if$ + } + if$ + year empty$ + 'skip$ + { t empty$ address empty$ and + 'skip$ + { ", " * } + if$ + year "year" bibinfo.check + * + } + 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.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { " {[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.soft.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ + "eprint" bibinfo.check +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + emphasize + "journal" output.check + add.blank + format.vol.num.pages output + format.date "year" output.check + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + format.url output + new.block + %% format.doi output + format.note output + %%format.eprint output + %% format.soft.eprint output + %% add.blank + %% format.primaryClass output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + add.blank + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + new.block + format.btitle "title" output.check + add.blank + 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 + format.date "year" output.check + } + if$ + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} +FUNCTION {booklet} +{ output.bibitem + format.authors output + new.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.date output + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + } + { 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 + format.publisher.address output + } + { + format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + format.date "year" output.check + } + if$ + format.edition output + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + new.block + format.in.title "title" output.check + add.blank + format.edition output +% new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + add.blank + 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.url output + new.block + format.note output + format.eprint output + fin.entry +} +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + new.block + format.editors output +add.blank + format.inpro.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 + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization "organization" bibinfo.check + duplicate$ empty$ 'pop$ + { output + address "address" bibinfo.check output + } + if$ + } + { format.authors output.nonnull } + if$ + new.block + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address new.block.checka + address "address" bibinfo.check output + } + 'skip$ + if$ + } + { + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + } + if$ + format.edition output + format.date output + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle + "title" output.check + new.block + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + howpublished new.block.checka + howpublished "howpublished" bibinfo.check output + format.date output + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry + empty.misc.check +} + +FUNCTION {softmisc} +{ output.bibitem + format.authors output + title howpublished new.block.checkb + format.title output + format.version output + howpublished new.block.checka + howpublished "howpublished" bibinfo.check output + format.date output + new.block + format.url output + new.block + format.note output + %%format.eprint output + format.softmisc.eprint output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + new.block + format.btitle + "title" output.check + new.block + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +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 + format.number.series output + editor empty$ + { publisher empty$ + 'skip$ + { + new.sentence + 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$ + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + new.block + format.title + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + new.block + format.url output + new.block + format.note output + format.eprint output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + new.block + format.title "title" output.check + format.date output + new.block + format.url output + new.block + format.note "note" output.check + format.eprint output + 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$ + "\expandafter\ifx\csname url\endcsname\relax" + write$ newline$ + %%" \def\url#1{\texttt{#1}}\fi" + " \def\url#1{\burl{#1}}\fi" + write$ newline$ + "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\providecommand{\eprint}[2][]{\url{#2}}" + write$ newline$ + "\providecommand{\doi}[1]{\url{https://doi.org/#1}}" + write$ newline$ + "\bibcommenthead" write$ newline$ +} +EXECUTE {begin.bib} +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 `nature.bst'. \ No newline at end of file diff --git a/_extensions/christopherkenny/nature/sn-vancouver.bst b/_extensions/christopherkenny/nature/sn-vancouver.bst new file mode 100644 index 0000000..5af9052 --- /dev/null +++ b/_extensions/christopherkenny/nature/sn-vancouver.bst @@ -0,0 +1,2033 @@ +%% +%% This `vancouver.bst' bibliographic style file (for LaTeX/BibTeX) is +%% 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 + keywords + month + note + number + organization + pages + part + publisher + school + series + title + type + volume + word + year + eprint % urlbst + doi % urlbst + url % urlbst + lastchecked % urlbst + updated % urlbst + archive + archivePrefix + primaryClass + eid + adsurl + adsnote + version + } + {} + { 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 + "" '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 {misc.add.colon} +{ + ": " * + } + +FUNCTION {misc.add.comma} +{ + ", " * + } + +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 {cite.author.editor} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 = + { s #2 "{vv~}{ll}{ jj}{ f}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + 'skip$ + if$ + } + if$ +} + +FUNCTION {check.auth.edit.org} +{author empty$ + { + editor empty$ + { + organization empty$ + {""} + {organization} + if$ + } + {editor cite.author.editor} + if$ + } + {author cite.author.editor} + if$ +} + +FUNCTION {check.year} +{ year empty$ + {""} + {year} + if$ +} + +FUNCTION {output.bibitem} +{ outside.brackets 'bracket.state := % urlbst + newline$ + "\bibitem[\protect\citeauthoryear{" write$ +check.auth.edit.org write$ +"}{" write$ check.year write$ "}]{" 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$ +} + +FUNCTION {format.ddoi} +{ doi "doi" bibinfo.check + duplicate$ empty$ 'skip$ + { + "\doi{" swap$ * "}" * + } + 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 + no.blank.or.punct + add.period$ misc.add.colon +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 {format.archive} +{ + archivePrefix empty$ + { "" } + { archivePrefix ":" *} + if$ +} + +FUNCTION {format.primaryClass} +{ + primaryClass empty$ + { "" } + { "{[" primaryClass * "]}" *} + if$ +} + +FUNCTION {format.soft.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://arxiv.org/abs/" eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +FUNCTION {format.softmisc.archive} +{ + archivePrefix empty$ + { "" } + { "" } + if$ +} + +FUNCTION {format.softmisc.eprint} +{ eprint empty$ + { ""} + { archive empty$ + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + {"{\href{https://ascl.net/" format.softmisc.archive * eprint * "}" * + "{{" * format.archive * eprint * "}}}" *} + if$ + } + if$ +} + +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 + format.ddoi output + new.block + format.soft.eprint output + format.primaryClass output + fin.entry +} + +FUNCTION {softmisc} +{ output.bibitem + format.authors "author" output.check + format.editors "author and editor" output.check + no.blank.or.punct + add.period$ misc.add.colon + format.title "title" output.check misc.add.comma + no.blank.or.punct + version output + 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 + format.date "year" output.check + output.web.refs % urlbst + new.block + format.softmisc.eprint output + fin.entry + empty.misc.check +} + +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$ + "\providecommand{\doi}[1]{\url{https://doi.org/#1}}" + write$ newline$ + "\bibcommenthead" 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'. + diff --git a/_extensions/kazuyanagimoto/academic/_extension.yml b/_extensions/kazuyanagimoto/academic/_extension.yml new file mode 100644 index 0000000..e9c72c5 --- /dev/null +++ b/_extensions/kazuyanagimoto/academic/_extension.yml @@ -0,0 +1,12 @@ +title: Quarto Academic Typst +author: Kazuharu Yanagimoto +version: 0.1.0 +quarto-required: ">=1.4.0" +contributes: + formats: + typst: + shortcodes: + - shortcodes.lua + template-partials: + - typst-template.typ + - typst-show.typ diff --git a/_extensions/kazuyanagimoto/academic/shortcodes.lua b/_extensions/kazuyanagimoto/academic/shortcodes.lua new file mode 100644 index 0000000..5c596cf --- /dev/null +++ b/_extensions/kazuyanagimoto/academic/shortcodes.lua @@ -0,0 +1,3 @@ +function appendix() + return pandoc.RawBlock('typst', '#show: appendix') +end \ No newline at end of file diff --git a/_extensions/kazuyanagimoto/academic/typst-show.typ b/_extensions/kazuyanagimoto/academic/typst-show.typ new file mode 100644 index 0000000..5db58ff --- /dev/null +++ b/_extensions/kazuyanagimoto/academic/typst-show.typ @@ -0,0 +1,88 @@ +#show: doc => article( +$if(title)$ + title: [$title$], +$endif$ +$if(subtitle)$ + subtitle: [$subtitle$], +$endif$ +$if(header)$ + header: [$header$], +$endif$ +$if(code-repo)$ + code-repo: [$code-repo$], +$endif$ +$if(by-author)$ + authors: ( +$for(by-author)$ +$if(it.name.literal)$ + ( name: [$it.name.literal$], + affiliation: [$for(it.affiliations)$$it.name$$sep$, $endfor$], + email: [$it.email$], + orcid: [$it.orcid$] + ), +$endif$ +$endfor$ + ), +$endif$ +$if(date)$ + date: [$date$], +$endif$ +$if(lang)$ + lang: "$lang$", +$endif$ +$if(region)$ + region: "$region$", +$endif$ +$if(abstract)$ + abstract: [$abstract$], +$endif$ +$if(keywords)$ + keywords: [$for(keywords)$$keywords$$sep$, $endfor$], +$endif$ +$if(custom-keywords)$ + custom-keywords: ( + $for(custom-keywords)$ + ( name: [$it.name$], + values: [$for(it.values)$$it$$sep$, $endfor$] + ), + $endfor$ + ), +$endif$ +$if(thanks)$ + thanks: [$thanks$], +$endif$ +$if(margin)$ + margin: ($for(margin/pairs)$$margin.key$: $margin.value$,$endfor$), +$endif$ +$if(papersize)$ + paper: "$papersize$", +$endif$ +$if(mainfont)$ + font: ("$mainfont$",), +$endif$ +$if(mainfontoptions)$ + $if(mainfontoptions.number-type)$ + number-type: "$mainfontoptions.number-type$", + $endif$ + $if(mainfontoptions.number-width)$ + number-width: "$mainfontoptions.number-width$", + $endif$ +$endif$ +$if(sansfont)$ + sansfont: ("$sansfont$",), +$endif$ +$if(mathfont)$ + mathfont: ("$mathfont$",), +$endif$ +$if(fontsize)$ + fontsize: $fontsize$, +$endif$ +$if(section-numbering)$ + sectionnumbering: "$section-numbering$", +$endif$ +$if(toc)$ + toc: $toc$, +$endif$ + cols: $if(columns)$$columns$$else$1$endif$, + doc, +) \ No newline at end of file diff --git a/_extensions/kazuyanagimoto/academic/typst-template.typ b/_extensions/kazuyanagimoto/academic/typst-template.typ new file mode 100644 index 0000000..73c72a7 --- /dev/null +++ b/_extensions/kazuyanagimoto/academic/typst-template.typ @@ -0,0 +1,197 @@ +#import "@preview/fontawesome:0.3.0": * + +#let color-link = rgb("#483d8b") + +#let article( + title: none, + subtitle: none, + header: none, + code-repo: none, + authors: none, + date: none, + abstract: none, + keywords: none, + custom-keywords: none, + thanks: none, + cols: 1, + margin: (x: 1.25in, y: 1.25in), + paper: "us-letter", + lang: "en", + region: "US", + font: (), + sansfont: (), + mathfont: (), + number-type: auto, + number-width: auto, + fontsize: 11pt, + sectionnumbering: none, + toc: false, + doc, +) = { + set page( + paper: paper, + margin: margin, + numbering: "1", + ) + set par(justify: true) + set text(lang: lang, + region: region, + font: font, + size: fontsize, + number-type: number-type, + number-width: number-width,) + show math.equation: set text(font: mathfont) + set heading(numbering: sectionnumbering) + + show heading: set text(font: sansfont, weight: "semibold") + + show figure.caption: it => [ + #set text(font: sansfont, size: 0.9em) + #if it.supplement == [Figure] { + set align(left) + text(weight: "semibold")[#it.supplement #it.counter.display(it.numbering): ] + it.body + } else { + text(weight: "semibold")[#it.supplement #it.counter.display(it.numbering): ] + it.body + } + + ] + + show ref: it => { + let eq = math.equation + let el = it.element + if el == none { + it + } else if el.func() == eq { + link(el.location())[ + #numbering(el.numbering, + ..counter(eq).at(el.location()) + ) + ] + + } else if el.func() == figure { + el.supplement.text + link(el.location())[ + #set text(fill: color-link) + #numbering(el.numbering,..el.counter.at(el.location())) + ] + } else { + it + } + } + + show link: set text(fill: color-link) + set bibliography(title: "References") + + if date != none { + align(left)[#block()[ + #text(weight: "semibold", font: sansfont, size: 0.8em)[ + #date + #if header != none { + h(3em) + text(weight: "regular")[#header] + } + ] + ]] + } + + if code-repo != none { + align(left)[#block()[ + #text(weight: "regular", font: sansfont, size: 0.8em)[ + #code-repo + ] + ]] + } + + if title != none { + align(left)[#block(spacing: 4em)[ + #text(weight: "semibold", size: 1.5em, font: sansfont)[ + #title + #if thanks != none { + footnote(numbering: "*", thanks) + }\ + #if subtitle != none { + text(weight: "regular", style: "italic", size: 0.8em)[#subtitle] + } + ] + ]] + } + + if authors != none { + let count = authors.len() + let ncols = calc.min(count, 3) + grid( + columns: (1fr,) * ncols, + row-gutter: 1.5em, + ..authors.map(author => + align(left)[ + #text(size: 1.2em, font: sansfont)[#author.name] + #if author.orcid != [] { + link("https://orcid.org/" + author.orcid.text)[ + #set text(size: 0.85em, fill: rgb("a6ce39")) + #fa-orcid() + ] + } \ + #text(size: 0.85em, font: sansfont)[#author.affiliation] \ + #text(size: 0.7em, font: sansfont, fill: color-link)[ + #link("mailto:" + author.email.children.map(email => email.text).join())[#author.email] + ] + ] + ) + ) + } + + if abstract != none { + block(inset: 2em)[ + #text(weight: "semibold", font: sansfont, size: 0.9em)[ABSTRACT] #h(0.5em) + #text(font: sansfont)[#abstract] + #if keywords != none { + text(weight: "semibold", font: sansfont, size: 0.9em)[\ Keywords:] + h(0.5em) + text(font: sansfont)[#keywords] + } + #if custom-keywords != none { + for it in custom-keywords { + text(weight: "semibold", font: sansfont, size: 0.9em)[\ #it.name:] + h(0.5em) + text(font: sansfont)[#it.values] + } + } + ] + } + + if toc { + block(above: 0em, below: 2em)[ + #outline( + title: auto, + depth: none + ); + ] + } + + if cols == 1 { + doc + } else { + columns(cols, doc) + } + +} + +#let appendix(content) = { + // Reset Numbering + set heading(numbering: "A.1.1") + counter(heading).update(0) + counter(figure.where(kind: "quarto-float-fig")).update(0) + counter(figure.where(kind: "quarto-float-tbl")).update(0) + + // Figure & Table Numbering + set figure(numbering: it => { + [A.#it] + }) + + // Appendix Start + pagebreak(weak: true) + text(size: 2em)[Appendix] + content +} \ No newline at end of file diff --git a/_extensions/quarto-journals/acs/_affiliation.tex b/_extensions/quarto-journals/acs/_affiliation.tex new file mode 100644 index 0000000..5bd4ff4 --- /dev/null +++ b/_extensions/quarto-journals/acs/_affiliation.tex @@ -0,0 +1 @@ +$if(it.department)$$it.department$,$endif$ $if(it.name)$$it.name$,$endif$ $if(it.city)$$it.city$,$endif$ $if(it.country)$$it.country$$endif$ \ No newline at end of file diff --git a/_extensions/quarto-journals/acs/_extension.yml b/_extensions/quarto-journals/acs/_extension.yml new file mode 100644 index 0000000..af9fa58 --- /dev/null +++ b/_extensions/quarto-journals/acs/_extension.yml @@ -0,0 +1,30 @@ +title: ACS Journal Format +author: Charles Teague +version: 0.9.2 +contributes: + formats: + common: + csl: american-chemical-society.csl + shortcodes: + - fancy-text + filters: + - latex-environment + environments: + - scheme + - chart + - graph + - tocentry + - acknowledgement + - suppinfo + commands: + - ce + html: default + pdf: + cite-method: natbib + biblio-config: false + format-resources: + - achemso.bst + template-partials: + - "doc-class.tex" + - "title.tex" + - "_affiliation.tex" diff --git a/_extensions/quarto-journals/acs/_extensions/quarto-ext/fancy-text/_extension.yml b/_extensions/quarto-journals/acs/_extensions/quarto-ext/fancy-text/_extension.yml new file mode 100644 index 0000000..813e238 --- /dev/null +++ b/_extensions/quarto-journals/acs/_extensions/quarto-ext/fancy-text/_extension.yml @@ -0,0 +1,7 @@ +title: Fancy Text +author: Posit Software, PBC +version: 1.1.1 +quarto-required: ">=1.2.198" +contributes: + shortcodes: + - fancy-text.lua diff --git a/_extensions/quarto-journals/acs/_extensions/quarto-ext/fancy-text/fancy-text.lua b/_extensions/quarto-journals/acs/_extensions/quarto-ext/fancy-text/fancy-text.lua new file mode 100644 index 0000000..0eec7d2 --- /dev/null +++ b/_extensions/quarto-journals/acs/_extensions/quarto-ext/fancy-text/fancy-text.lua @@ -0,0 +1,78 @@ +-- shortcode that provides a nicely formatted 'LaTeX' string +function latex() + if quarto.doc.is_format("pdf") then + return pandoc.RawBlock('tex', '{\\LaTeX}') + elseif quarto.doc.is_format("html") then + return pandoc.Math('InlineMath', "\\LaTeX") + else + return pandoc.Span('LaTeX') + end +end + +function tex() + if quarto.doc.is_format("pdf") then + return pandoc.RawBlock('tex', '{\\TeX}') + elseif quarto.doc.is_format("html") then + return pandoc.Math('InlineMath', "\\TeX") + else + return pandoc.Span('TeX') + end +end + +-- shortcode that provides a nicely formatted 'bibtex' string +function bibtex() + if quarto.doc.is_format("pdf") then + return pandoc.RawBlock('tex', '\\textsc{Bib}{\\TeX}') + elseif quarto.doc.is_format("html") then + return pandoc.RawBlock('html', 'BibTEX') + else + return pandoc.Span('BibTeX') + end +end + +function ldots() + if quarto.doc.is_format("pdf") then + return pandoc.RawBlock('tex', '\\ldots') + elseif quarto.doc.is_format("html") then + return pandoc.RawBlock('html', '…') + else + return "..." + end +end + +function vdots() + if quarto.doc.is_format("pdf") then + return pandoc.Math('InlineMath', "\\vdots") + elseif quarto.doc.is_format("html") then + return pandoc.RawBlock('html', '⋮') + else + return "..." + end +end + +function ddots() + if quarto.doc.is_format("pdf") then + return pandoc.Math('InlineMath', "\\ddots") + elseif quarto.doc.is_format("html") then + return pandoc.RawBlock('html', '⋱') + else + return "..." + end +end + +function pct() + local pct + if quarto.doc.is_format("pdf") then + return pandoc.Math('InlineMath', '\\%') + else + return pandoc.Str("%") + end +end + +function R2() + if quarto.doc.is_format("pdf") then + return pandoc.Math('InlineMath', "R^2") + else + return {pandoc.Str("R"), pandoc.Superscript("2")} + end +end \ No newline at end of file diff --git a/_extensions/quarto-journals/acs/_extensions/quarto-ext/latex-environment/_extension.yml b/_extensions/quarto-journals/acs/_extensions/quarto-ext/latex-environment/_extension.yml new file mode 100644 index 0000000..2f55b2f --- /dev/null +++ b/_extensions/quarto-journals/acs/_extensions/quarto-ext/latex-environment/_extension.yml @@ -0,0 +1,9 @@ +title: LaTeX Environment +author: Posit Software, PBC +version: 1.2.1 +quarto-required: ">=1.3" +contributes: + filters: + - latex-environment.lua + format: + pdf: default diff --git a/_extensions/quarto-journals/acs/_extensions/quarto-ext/latex-environment/latex-environment.lua b/_extensions/quarto-journals/acs/_extensions/quarto-ext/latex-environment/latex-environment.lua new file mode 100644 index 0000000..389a25f --- /dev/null +++ b/_extensions/quarto-journals/acs/_extensions/quarto-ext/latex-environment/latex-environment.lua @@ -0,0 +1,150 @@ +-- environment.lua +-- Copyright (C) 2020 by RStudio, PBC + +local classEnvironments = pandoc.MetaMap({}) +local classCommands = pandoc.MetaMap({}) + +-- helper that identifies arrays +local function tisarray(t) + local i = 0 + for _ in pairs(t) do + i = i + 1 + if t[i] == nil then return false end + end + return true +end + +-- reads the environments +local function readEnvironments(meta) + local env = meta['environments'] + if env ~= nil then + if tisarray(env) then + -- read an array of strings + for i, v in ipairs(env) do + local value = pandoc.utils.stringify(v) + classEnvironments[value] = value + end + else + -- read key value pairs + for k, v in pairs(env) do + local key = pandoc.utils.stringify(k) + local value = pandoc.utils.stringify(v) + classEnvironments[key] = value + end + end + end +end + +local function readCommands(meta) + local env = meta['commands'] + if env ~= nil then + if tisarray(env) then + -- read an array of strings + for i, v in ipairs(env) do + local value = pandoc.utils.stringify(v) + classCommands[value] = value + end + else + -- read key value pairs + for k, v in pairs(env) do + local key = pandoc.utils.stringify(k) + local value = pandoc.utils.stringify(v) + classCommands[key] = value + end + end + end +end + +local function readEnvsAndCommands(meta) + readEnvironments(meta) + readCommands(meta) +end + +-- use the environments from metadata to +-- emit a custom environment for latex +local function writeEnvironments(divEl) + if quarto.doc.is_format("latex") then + for k, v in pairs(classEnvironments) do + if divEl.attr.classes:includes(k) then + -- process this into a latex environment + local beginEnv = '\\begin' .. '{' .. v .. '}' + local endEnv = '\n\\end{' .. v .. '}' + + -- check if custom options or arguments are present + -- and add them to the environment accordingly + local opts = divEl.attr.attributes['options'] + if opts then + beginEnv = beginEnv .. '[' .. opts .. ']' + end + + local args = divEl.attr.attributes['arguments'] + if args then + beginEnv = beginEnv .. '{' .. args .. '}' + end + + -- if the first and last div blocks are paragraphs then we can + -- bring the environment begin/end closer to the content + if #divEl.content > 0 and divEl.content[1].t == "Para" and divEl.content[#divEl.content].t == "Para" then + table.insert(divEl.content[1].content, 1, pandoc.RawInline('tex', beginEnv .. "\n")) + table.insert(divEl.content[#divEl.content].content, pandoc.RawInline('tex', "\n" .. endEnv)) + else + table.insert(divEl.content, 1, pandoc.RawBlock('tex', beginEnv)) + table.insert(divEl.content, pandoc.RawBlock('tex', endEnv)) + end + return divEl + end + end + end +end + +local function buildCommandArgs(opts, format) + local function wrap(o) + return string.format(format, o) + end + local t = pandoc.List() + for str in string.gmatch(opts, "([^"..",".."]+)") do + t:insert(str) + end + return table.concat(t:map(wrap), "") +end + +-- use the environments from metadata to +-- emit a custom environment for latex +local function writeCommands(spanEl) + if quarto.doc.is_format("latex") then + for k, v in pairs(classCommands) do + if spanEl.attr.classes:includes(k) then + + -- resolve the begin command + local beginCommand = '\\' .. pandoc.utils.stringify(v) + local opts = spanEl.attr.attributes['options'] + local args = spanEl.attr.attributes['arguments'] + if opts then + beginCommand = beginCommand .. buildCommandArgs(opts, "[%s]") + end + if args then + beginCommand = beginCommand .. buildCommandArgs(args, "{%s}") + end + + local beginCommandRaw = pandoc.RawInline('latex', beginCommand .. '{') + + -- the end command + local endCommandRaw = pandoc.RawInline('latex', '}') + + -- attach the raw inlines to the span contents + local result = spanEl.content + table.insert(result, 1, beginCommandRaw) + table.insert(result, endCommandRaw) + + return result + end + end + end +end + +-- Run in two passes so we process metadata +-- and then process the divs +return { + { Meta = readEnvsAndCommands }, + { Div = writeEnvironments, Span = writeCommands } +} diff --git a/_extensions/quarto-journals/acs/achemso.bst b/_extensions/quarto-journals/acs/achemso.bst new file mode 100644 index 0000000..3713b0c --- /dev/null +++ b/_extensions/quarto-journals/acs/achemso.bst @@ -0,0 +1,1745 @@ +%% +%% This is file `achemso.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% achemso.dtx (with options: `bst') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from achemso.bst. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file achemso.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) + +ENTRY + { + address + author + booktitle + chapter + ctrl-article-title + ctrl-chapter-title + ctrl-doi + ctrl-etal-firstonly + ctrl-etal-number + ctrl-use-title + doi + edition + editor + howpublished + institution + journal + key + maintitle + note + number + organization + pages + publisher + school + series + title + type + url + version + volume + year + } + { } + { + label + short.names + } + + +FUNCTION { and } { + { } + { + pop$ + #0 + } + if$ +} + +FUNCTION { not } { + { #0 } + { #1 } + if$ +} + +FUNCTION { or } { + { + pop$ + #1 + } + { } + if$ +} + +FUNCTION { xor } { + { not } + { } + if$ +} + + +FUNCTION { chr.to.value.error } { + #48 + + int.to.chr$ + "'" swap$ * + "'" * + " is not a number: treated as zero." * + warning$ + #0 +} + +FUNCTION { chr.to.value } { + chr.to.int$ #48 - + duplicate$ + #0 < + { chr.to.value.error } + { + duplicate$ + #9 > + { chr.to.value.error } + { } + if$ + } + if$ +} + +STRINGS { + extract.input.str + extract.output.str +} + +FUNCTION { is.a.digit } { + duplicate$ + "" = + { + pop$ + #0 + } + { + chr.to.int$ + #48 - + duplicate$ + #0 < swap$ #9 > or not + } + if$ +} + +FUNCTION{ is.a.number } { + { + duplicate$ + #1 #1 substring$ + is.a.digit + } + { #2 global.max$ substring$ } + while$ + "" = +} + +FUNCTION { extract.number } { + duplicate$ + 'extract.input.str := + "" 'extract.output.str := + { extract.input.str empty$ not } + { + extract.input.str #1 #1 substring$ + extract.input.str #2 global.max$ substring$ 'extract.input.str := + duplicate$ + is.a.number + { extract.output.str swap$ * 'extract.output.str := } + { + pop$ + "" 'extract.input.str := + } + if$ + } + while$ + extract.output.str empty$ + { } + { + pop$ + extract.output.str + } + if$ +} + +FUNCTION { field.or.null } { + duplicate$ + empty$ + { + pop$ + "" + } + { } + if$ +} + +INTEGERS { + multiply.a.int + multiply.b.int +} + +FUNCTION { multiply } { + 'multiply.a.int := + 'multiply.b.int := + multiply.b.int #0 < + { + #-1 + #0 multiply.b.int - 'multiply.b.int := + } + { #1 } + if$ + #0 + { multiply.b.int #0 > } + { + multiply.a.int + + multiply.b.int #1 - 'multiply.b.int := + } + while$ + swap$ + { } + { #0 swap$ - } + if$ +} + +INTEGERS { str.conversion.int } + +FUNCTION { str.to.int.aux.ii } { + { + duplicate$ + empty$ not + } + { + swap$ + #10 multiply 'str.conversion.int := + duplicate$ + #1 #1 substring$ + chr.to.value + str.conversion.int + + swap$ + #2 global.max$ substring$ + } + while$ + pop$ +} + +FUNCTION { str.to.int.aux.i } { + duplicate$ + #1 #1 substring$ + "-" = + { + #1 swap$ + #2 global.max$ substring$ + } + { + #0 swap$ + } + if$ + #0 + swap$ + str.to.int.aux.ii + swap$ + { #0 swap$ - } + { } + if$ +} + +FUNCTION { str.to.int } { + duplicate$ + empty$ + { + pop$ + #0 + } + { str.to.int.aux.i } + if$ +} + +FUNCTION { tie.or.space.connect } { + duplicate$ + text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION { yes.no.to.bool } { + duplicate$ + empty$ + { + pop$ + #0 + } + { + "l" change.case$ + "yes" = + { #1 } + { #0 } + if$ + } + if$ +} + + +FUNCTION { bold } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\textbf{" swap$ * "}" * } + if$ +} + +FUNCTION { emph } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION { paren } { + duplicate$ + empty$ + { + pop$ + "" + } + { "(" swap$ * ")" * } + if$ +} + + +FUNCTION { add.comma } { ", " * } + +FUNCTION { add.colon } { ": " * } + +FUNCTION { add.period } { add.period$ " " * } + +FUNCTION { add.semicolon } { "; " * } + +FUNCTION { add.space } { " " * } + + +FUNCTION { bbl.and } { "and" } + +FUNCTION { bbl.chapter } { "Chapter" } + +FUNCTION { bbl.doi } { "DOI:" } + +FUNCTION { bbl.editor } { "Ed." } + +FUNCTION { bbl.editors } { "Eds." } + +FUNCTION { bbl.edition } { "ed." } + +FUNCTION { bbl.etal } { "\latin{et~al.}" } + +FUNCTION { bbl.in } { "In" } + +FUNCTION { bbl.inpress } { "in press" } + +FUNCTION { bbl.msc } { "M.Sc.\ thesis" } + +FUNCTION { bbl.page } { "p" } + +FUNCTION { bbl.pages } { "pp" } + +FUNCTION { bbl.phd } { "Ph.D.\ thesis" } + +FUNCTION { bbl.version } { "version" } + +FUNCTION { bbl.volume } { "Vol." } + + +STRINGS { pages.str } + +FUNCTION { hyphen.to.dash } { + 'pages.str := + "" + { pages.str empty$ not } + { + pages.str #1 #1 substring$ + "-" = + { + "--" * + { + pages.str #1 #1 substring$ + "-" = + } + { pages.str #2 global.max$ substring$ 'pages.str := } + while$ + } + { + pages.str #1 #1 substring$ + * + pages.str #2 global.max$ substring$ 'pages.str := + } + if$ + } + while$ +} + +INTEGERS { multiresult.bool } + +FUNCTION { multi.page.check } { + 'pages.str := + #0 'multiresult.bool := + { + multiresult.bool not + pages.str empty$ not + and + } + { + pages.str #1 #1 substring$ + duplicate$ + "-" = swap$ duplicate$ + "," = swap$ + "+" = + or or + { #1 'multiresult.bool := } + { pages.str #2 global.max$ substring$ 'pages.str := } + if$ + } + while$ + multiresult.bool +} + + +INTEGERS { + current.name.int + names.separate.comma + names.separate.semicolon + names.separate.comma.bool + remaining.names.int + total.names.int +} + +STRINGS { + current.name.str + names.str +} + +FUNCTION { full.format.names } { + 'names.str := + #1 'current.name.int := + names.str num.names$ 'remaining.names.int := + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll}" format.name$ + current.name.int #1 > + { + swap$ add.comma swap$ + remaining.names.int #1 > + { } + { + duplicate$ + "others" = + { bbl.etal } + { bbl.and } + if$ + add.space swap$ * + } + if$ + * + } + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := + } + while$ +} + +FUNCTION { full.author } { + author empty$ + { "" } + { author full.format.names } + if$ +} + +FUNCTION { full.author.editor } { + author empty$ + { + editor empty$ + { "" } + { editor full.format.names } + if$ + } + { author full.format.names } + if$ +} + +FUNCTION { full.editor } { + editor empty$ + { "" } + { editor full.format.names } + if$ +} + +FUNCTION { short.format.names } { + 'names.str := + names.str #1 "{vv~}{ll}" format.name$ + names.str num.names$ + duplicate$ + #2 > + { + pop$ + add.space bbl.etal * + } + { + #2 < + { } + { + names.str #2 "{ff }{vv }{ll}{ jj}" format.name$ + "others" = + { add.space bbl.etal * } + { + add.space + bbl.and add.space + * + names.str #2 "{vv~}{ll}" format.name$ + * + } + if$ + } + if$ + } + if$ +} + +FUNCTION { short.author.key } { + author empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.author.editor.key } { + author empty$ + { + editor empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { editor short.format.names } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.author.key.organization } { + author empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } + if$ + #3 text.prefix$ + } + if$ + } + { key } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.editor.key.organization } { + editor empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } + if$ + #3 text.prefix$ + } + if$ + } + { key } + if$ + } + { editor short.format.names } + if$ +} + +FUNCTION { calculate.full.names } { + type$ "book" = + type$ "inbook" = + or + { full.author.editor } + { + type$ "proceedings" = + { full.editor } + { full.author } + if$ + } + if$ +} + +FUNCTION { calculate.short.names } { + type$ "book" = + type$ "inbook" = + or + { short.author.editor.key } + { + type$ "proceedings" = + { short.editor.key.organization } + { + type$ "manual" = + { short.author.key.organization } + { short.author.key } + if$ + } + if$ + } + if$ + 'short.names := +} + +FUNCTION { calculate.names } { + calculate.short.names + short.names + year empty$ + { "()" } + { "(" year * ")" * } + if$ + * + 'label := +} + + +INTEGERS { entries.int } + +FUNCTION { initialize.count.entries } { + #0 'entries.int := +} + +FUNCTION { count.entries } { + entries.int #1 + 'entries.int := +} + + +FUNCTION { begin.bib } { + "achemso 2022-11-25 v3.13f" top$ + preamble$ empty$ + { } + { + preamble$ write$ + newline$ + } + if$ + "\providecommand{\latin}[1]{#1}" write$ + newline$ + "\makeatletter" write$ + newline$ + "\providecommand{\doi}" write$ + newline$ + " {\begingroup\let\do\@makeother\dospecials" write$ + newline$ + " \catcode`\{=1 \catcode`\}=2 \doi@aux}" write$ + newline$ + "\providecommand{\doi@aux}[1]{\endgroup\texttt{#1}}" write$ + newline$ + "\makeatother" write$ + newline$ + "\providecommand*\mcitethebibliography{\thebibliography}" write$ + newline$ + "\csname @ifundefined\endcsname{endmcitethebibliography}" write$ + " {\let\endmcitethebibliography\endthebibliography}{}" write$ + newline$ + "\begin{mcitethebibliography}{" + entries.int int.to.str$ * "}" * write$ + newline$ + "\providecommand*\natexlab[1]{#1}" write$ + newline$ + "\providecommand*\mciteSetBstSublistMode[1]{}" write$ + newline$ + "\providecommand*\mciteSetBstMaxWidthForm[2]{}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPuncttrue" write$ + newline$ + " {\def\EndOfBibitem{\unskip.}}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPunctfalse" write$ + newline$ + " {\let\EndOfBibitem\relax}" write$ + newline$ + "\providecommand*\mciteSetBstMidEndSepPunct[3]{}" write$ + newline$ + "\providecommand*\mciteSetBstSublistLabelBeginEnd[3]{}" write$ + newline$ + "\providecommand*\EndOfBibitem{}" write$ + newline$ + "\mciteSetBstSublistMode{f}" write$ + newline$ + "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" write$ + newline$ + "\mciteSetBstSublistLabelBeginEnd" write$ + newline$ + " {\mcitemaxwidthsubitemform\space}" write$ + newline$ + " {\relax}" write$ + newline$ + " {\relax}" write$ + newline$ +} + +FUNCTION { end.bib } { + newline$ + "\end{mcitethebibliography}" write$ + newline$ +} + + +INTEGERS { + ctrl.article.title.bool + ctrl.chapter.title.bool + ctrl.doi.bool + ctrl.etal.firstonly.bool + ctrl.etal.number.int +} + +FUNCTION { initialize.control.values } { + #1 'ctrl.article.title.bool := + #0 'ctrl.chapter.title.bool := + #0 'ctrl.doi.bool := + #1 'ctrl.etal.firstonly.bool := + #15 'ctrl.etal.number.int := +} + +FUNCTION { control } { + ctrl-article-title yes.no.to.bool 'ctrl.article.title.bool := + ctrl-chapter-title yes.no.to.bool 'ctrl.chapter.title.bool := + ctrl-doi yes.no.to.bool 'ctrl.doi.bool := + ctrl-etal-firstonly yes.no.to.bool 'ctrl.etal.firstonly.bool := + ctrl-etal-number str.to.int 'ctrl.etal.number.int := + ctrl-use-title empty$ + 'skip$ + { ctrl-use-title yes.no.to.bool 'ctrl.article.title.bool := } + if$ +} + + +INTEGERS { + next.punct.comma + next.punct.period + next.punct.semicolon + next.punct.space +} + +FUNCTION { initialize.tracker } { + #0 'next.punct.comma := + #1 'next.punct.period := + #2 'next.punct.semicolon := + #3 'next.punct.space := +} + +INTEGERS { next.punct.int } + +FUNCTION { output } { + swap$ + duplicate$ empty$ + { pop$ } + { + next.punct.int next.punct.space = + { add.space } + { + next.punct.int next.punct.comma = + { add.comma } + { + next.punct.int next.punct.semicolon = + { add.semicolon } + { add.period } + if$ + } + if$ + } + if$ + write$ + } + if$ + next.punct.comma 'next.punct.int := +} + + +FUNCTION { begin.bibitem } { + newline$ + "\bibitem" write$ + label + calculate.full.names + duplicate$ + short.names = + { pop$ } + { * } + if$ + "[" swap$ * "]" * write$ + "{" cite$ * "}" * write$ + newline$ + "" + next.punct.comma 'next.punct.int := +} + +INTEGERS { add.period.length.int } + +FUNCTION { would.add.period } { + duplicate$ + add.period$ + text.length$ 'add.period.length.int := + duplicate$ + text.length$ + add.period.length.int = + { #0 } + { #1 } + if$ +} + +FUNCTION { end.bibitem } { + would.add.period + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPuncttrue" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" + } + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPunctfalse" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{}{\mcitedefaultseppunct}\relax" + } + if$ + write$ + newline$ + "\EndOfBibitem" write$ +} + + +FUNCTION { initialize.name.separator } { + #1 'names.separate.comma := + #0 'names.separate.semicolon := +} + +FUNCTION { format.names.loop } { + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll}{,~f.}{,~jj}" format.name$ + duplicate$ + 'current.name.str := + current.name.int #1 > + { + duplicate$ + "others," = + { + pop$ + * + bbl.etal + add.space + remaining.names.int #1 - 'remaining.names.int := + } + { + swap$ + names.separate.comma.bool + { add.comma } + { add.semicolon } + if$ + swap$ + * + } + if$ + } + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := + } + while$ +} + +FUNCTION { format.names.all } { + total.names.int 'remaining.names.int := + format.names.loop +} + +FUNCTION { format.names.etal } { + ctrl.etal.firstonly.bool + { #1 'remaining.names.int := } + { ctrl.etal.number.int 'remaining.names.int := } + if$ + format.names.loop + current.name.str "others," = + { } + { + add.space + bbl.etal + add.space + * + } + if$ +} + +FUNCTION { format.names } { + 'names.separate.comma.bool := + 'names.str := + #1 'current.name.int := + names.str num.names$ 'total.names.int := + total.names.int ctrl.etal.number.int > + { + ctrl.etal.number.int #0 = + { format.names.all } + { format.names.etal } + if$ + } + { format.names.all } + if$ +} + + +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" } + +STRINGS { + ord.input.str + ord.output.str +} + +FUNCTION { make.ordinal } { + 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 { convert.to.ordinal } { + extract.number + "l" change.case$ 'ord.input.str := + ord.input.str "first" = ord.input.str "1" = or + { bbl.first 'ord.output.str := } + { + ord.input.str "second" = ord.input.str "2" = or + { bbl.second 'ord.output.str := } + { + ord.input.str "third" = ord.input.str "3" = or + { bbl.third 'ord.output.str := } + { + ord.input.str "fourth" = ord.input.str "4" = or + { bbl.fourth 'ord.output.str := } + { + ord.input.str "fifth" = ord.input.str "5" = or + { bbl.fifth 'ord.output.str := } + { + ord.input.str #1 #1 substring$ + is.a.number + { ord.input.str make.ordinal } + { ord.input.str } + if$ + 'ord.output.str := + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + ord.output.str +} + + +FUNCTION { format.address } { + address empty$ + { } + { + address + output + } + if$ +} + +FUNCTION { format.authors } { + author empty$ + { } + { + author names.separate.semicolon format.names + output + next.punct.space 'next.punct.int := + } + if$ +} + +FUNCTION { format.editors } { + editor empty$ + { } + { + editor names.separate.comma format.names + add.comma + editor num.names$ #1 > + { bbl.editors } + { bbl.editor } + if$ + * + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.authors.or.editors } { + author empty$ + { format.editors } + { format.authors } + if$ + next.punct.space 'next.punct.int := +} + +FUNCTION { format.chapter } { + chapter empty$ + { } + { + bbl.chapter add.space + chapter + * + output + } + if$ +} + +FUNCTION { format.doi } { + doi empty$ + 'skip$ + { + bbl.doi add.space + "\doi{" * doi * "}" * + output + } + if$ +} + +FUNCTION { format.edition } { + edition empty$ + { } + { + edition convert.to.ordinal + add.space bbl.edition * + output + } + if$ + next.punct.semicolon 'next.punct.int := +} + +FUNCTION { format.group.address } { + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.colon + address + * + } + if$ + output + } + if$ +} + +FUNCTION { format.howpublished } { + howpublished empty$ + { } + { + howpublished + output + } + if$ +} + +FUNCTION { format.journal } { + journal emph + output + next.punct.space 'next.punct.int := +} + +FUNCTION { format.journal.unpub } { + journal emph + output +} + +FUNCTION { format.note } { + note empty$ + { } + { + note + output + } + if$ +} + +FUNCTION { format.number.series } { + series empty$ + { } + { + series + number empty$ + { } + { + add.space + number * + } + if$ + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.organization } { + organization empty$ + { } + { + organization paren + output + next.punct.period 'next.punct.int := + } + if$ +} + +FUNCTION { format.organization.address } { + organization format.group.address +} + +FUNCTION { format.pages } { + pages empty$ + { } + { + pages multi.page.check + { + bbl.pages + pages hyphen.to.dash + } + { bbl.page pages } + if$ + tie.or.space.connect + output + } + if$ + ctrl.doi.bool + { format.doi } + 'skip$ + if$ +} + +FUNCTION { format.pages.article } { + pages empty$ + { } + { + pages hyphen.to.dash + output + } + if$ + ctrl.doi.bool + { format.doi } + 'skip$ + if$ +} + +FUNCTION { format.publisher.address } { + publisher format.group.address +} + +FUNCTION { format.school.address } { + school + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.comma + address + * + } + if$ + output + } + if$ +} + +FUNCTION { format.title } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ +} + +FUNCTION { format.title.article } { + ctrl.article.title.bool + { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ + } + { } + if$ +} + +FUNCTION { format.title.techreport } { + title empty$ + { } + { + title emph + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.title.booktitle } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ + booktitle empty$ + { } + { + booktitle + output + next.punct.period 'next.punct.int := + } + if$ +} + +STRINGS { + book.title + chapter.title +} + +FUNCTION { format.title.booktitle.book } { + "" 'chapter.title := + booktitle empty$ + { + "" 'chapter.title := + title 'book.title := + } + { + ctrl.chapter.title.bool + { + title empty$ + 'skip$ + { title 'chapter.title := } + if$ + } + 'skip$ + if$ + maintitle empty$ + { booktitle 'book.title := } + { maintitle add.period booktitle * 'book.title := } + if$ + } + if$ + chapter.title empty$ + { } + { + chapter.title + output + next.punct.period 'next.punct.int := + } + if$ + book.title emph + chapter.title empty$ + { + author empty$ + { } + { + editor empty$ + { } + { bbl.in add.space swap$ * } + if$ + } + if$ + } + { bbl.in add.space swap$ * } + if$ + output +} + +FUNCTION { format.type } { + type empty$ + { } + { + pop$ + type + } + if$ + output +} + +FUNCTION { format.type.number } { + type empty$ + { } + { + type + number empty$ + { } + { number tie.or.space.connect } + if$ + output + } + if$ +} + +FUNCTION { format.url } { + url empty$ + { } + { + "\url{" url * "}" * + output + } + if$ +} + +FUNCTION { format.year } { + year empty$ + { } + { + year + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.year.article } { + year empty$ + { } + { + year bold + output + } + if$ +} + +FUNCTION { format.version } { + version empty$ + { } + { + bbl.version add.space + version + * + output + } + if$ +} + +FUNCTION { format.volume.article } { + volume emph + output +} + +FUNCTION { format.volume } { + volume empty$ + { } + { + bbl.volume + volume + tie.or.space.connect + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + + +FUNCTION { article } { + begin.bibitem + format.authors + format.title.article + format.journal + format.year.article + format.volume.article + format.pages.article + format.note + end.bibitem +} + +FUNCTION { book } { + begin.bibitem + format.authors.or.editors + format.title.booktitle.book + format.edition + author empty$ + { } + { format.editors } + if$ + format.number.series + format.publisher.address + format.year + format.volume + format.chapter + format.pages + format.note + end.bibitem +} + +FUNCTION { inbook } { book } + +FUNCTION { booklet } { + begin.bibitem + format.authors + format.title + format.howpublished + format.address + format.year + format.note + end.bibitem +} + +FUNCTION { collection } { book } + +FUNCTION { incollection } { book } + +FUNCTION { inpress } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { + bbl.inpress + output + } + { + format.year.article + next.punct.comma 'next.punct.int := + format.doi + } + if$ + format.note + end.bibitem +} + +FUNCTION { inproceedings } { + begin.bibitem + format.authors + format.title.booktitle + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { manual } { + begin.bibitem + format.authors + format.title + format.version + format.organization.address + format.year + format.note + end.bibitem +} + +FUNCTION { mastersthesis } { + begin.bibitem + format.authors + format.title + bbl.msc format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { misc } { + begin.bibitem + format.authors + format.title + format.howpublished + format.year + format.url + format.note + end.bibitem +} + +FUNCTION { patent } { + begin.bibitem + format.authors + format.organization + format.title + format.type.number + format.year + format.note + end.bibitem +} + +FUNCTION { phdthesis } { + begin.bibitem + format.authors + format.title + bbl.phd format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { proceeding } { + begin.bibitem + format.title + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { techreport } { + begin.bibitem + format.authors.or.editors + format.title.techreport + format.type.number + format.organization.address + format.year + format.volume + format.pages + format.note + end.bibitem +} + +FUNCTION { unpublished } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { format.howpublished } + { + format.year + next.punct.comma 'next.punct.int := + format.doi + } + if$ + format.note + end.bibitem +} + +FUNCTION { default.type } { misc } + + +MACRO { jan } { "Jan." } +MACRO { feb } { "Feb." } +MACRO { mar } { "Mar." } +MACRO { apr } { "Apr." } +MACRO { may } { "May" } +MACRO { jun } { "June" } +MACRO { jul } { "July" } +MACRO { aug } { "Aug." } +MACRO { sep } { "Sept." } +MACRO { oct } { "Oct." } +MACRO { nov } { "Nov." } +MACRO { dec } { "Dec." } + +MACRO { acbcct } { "ACS Chem.\ Biol." } +MACRO { achre4 } { "Acc.\ Chem.\ Res." } +MACRO { acncdm } { "ACS Chem.\ Neurosci." } +MACRO { ancac3 } { "ACS Nano" } +MACRO { ancham } { "Anal.\ Chem." } +MACRO { bichaw } { "Biochemistry" } +MACRO { bcches } { "Bioconjugate Chem." } +MACRO { bomaf6 } { "Biomacromolecules" } +MACRO { bipret } { "Biotechnol.\ Prog." } +MACRO { crtoec } { "Chem.\ Res.\ Toxicol." } +MACRO { chreay } { "Chem.\ Rev." } +MACRO { cmatex } { "Chem.\ Mater." } +MACRO { cgdefu } { "Cryst.\ Growth Des." } +MACRO { enfuem } { "Energy Fuels" } +MACRO { esthag } { "Environ.\ Sci.\ Technol." } +MACRO { iechad } { "Ind.\ Eng.\ Chem.\ Res." } +MACRO { inoraj } { "Inorg.\ Chem." } +MACRO { jafcau } { "J.~Agric.\ Food Chem." } +MACRO { jceaax } { "J.~Chem.\ Eng.\ Data" } +MACRO { jceda8 } { "J.~Chem.\ Ed." } +MACRO { jcisd8 } { "J.~Chem.\ Inf.\ Model." } +MACRO { jctcce } { "J.~Chem.\ Theory Comput." } +MACRO { jcchff } { "J. Comb. Chem." } +MACRO { jmcmar } { "J. Med. Chem." } +MACRO { jnprdf } { "J. Nat. Prod." } +MACRO { joceah } { "J.~Org.\ Chem." } +MACRO { jpcafh } { "J.~Phys.\ Chem.~A" } +MACRO { jpcbfk } { "J.~Phys.\ Chem.~B" } +MACRO { jpccck } { "J.~Phys.\ Chem.~C" } +MACRO { jpclcd } { "J.~Phys.\ Chem.\ Lett." } +MACRO { jprobs } { "J.~Proteome Res." } +MACRO { jacsat } { "J.~Am.\ Chem.\ Soc." } +MACRO { langd5 } { "Langmuir" } +MACRO { mamobx } { "Macromolecules" } +MACRO { mpohbp } { "Mol.\ Pharm." } +MACRO { nalefd } { "Nano Lett." } +MACRO { orlef7 } { "Org.\ Lett." } +MACRO { oprdfk } { "Org.\ Proc.\ Res.\ Dev." } +MACRO { orgnd7 } { "Organometallics" } + + +READ + +EXECUTE { initialize.control.values } + +EXECUTE { initialize.count.entries } + +EXECUTE { initialize.name.separator } + +EXECUTE { initialize.tracker } + +ITERATE { calculate.names } + +ITERATE { count.entries } + +EXECUTE { begin.bib } + +ITERATE { call.type$ } + +EXECUTE { end.bib } +%% +%% Originally developed by Mats Dahlgren +%% Copyright (C) 1996-1998 by Mats Dahlgren +%% Copyright (C) 2008-2022 by +%% Joseph Wright +%% +%% Part of this bundle is derived from cite.sty, to which the +%% following license applies: +%% Copyright (C) 1989-2009 by Donald Arseneau +%% These macros may be freely transmitted, reproduced, or +%% modified provided that this notice is left intact. +%% +%% It may be distributed and/or modified under the conditions of +%% the LaTeX Project Public License (LPPL), either version 1.3c of +%% this license or (at your option) any later version. The latest +%% version of this license is in the file: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This work is "maintained" (as per LPPL maintenance status) by +%% Joseph Wright. +%% +%% This work consists of the files achemso.dtx, +%% achemso-demo.bib and +%% achemso-demo.tex, +%% and the derived files achemso.cls, +%% achemso.ins, +%% achemso.pdf, +%% achemso.sty, +%% natmove.sty and +%% a number of configuration files. +%% +%% +%% End of file `achemso.bst'. diff --git a/_extensions/quarto-journals/acs/american-chemical-society.csl b/_extensions/quarto-journals/acs/american-chemical-society.csl new file mode 100644 index 0000000..3e485ed --- /dev/null +++ b/_extensions/quarto-journals/acs/american-chemical-society.csl @@ -0,0 +1,252 @@ + + diff --git a/_extensions/quarto-journals/acs/biochem.bst b/_extensions/quarto-journals/acs/biochem.bst new file mode 100644 index 0000000..26f1495 --- /dev/null +++ b/_extensions/quarto-journals/acs/biochem.bst @@ -0,0 +1,1750 @@ +%% +%% This is file `biochem.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% achemso.dtx (with options: `bst,bio') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from biochem.bst. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file achemso.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) + +ENTRY + { + address + author + booktitle + chapter + ctrl-article-title + ctrl-chapter-title + ctrl-doi + ctrl-etal-firstonly + ctrl-etal-number + ctrl-use-title + doi + edition + editor + howpublished + institution + journal + key + maintitle + note + number + organization + pages + publisher + school + series + title + type + url + version + volume + year + } + { } + { + label + short.names + } + + +FUNCTION { and } { + { } + { + pop$ + #0 + } + if$ +} + +FUNCTION { not } { + { #0 } + { #1 } + if$ +} + +FUNCTION { or } { + { + pop$ + #1 + } + { } + if$ +} + +FUNCTION { xor } { + { not } + { } + if$ +} + + +FUNCTION { chr.to.value.error } { + #48 + + int.to.chr$ + "'" swap$ * + "'" * + " is not a number: treated as zero." * + warning$ + #0 +} + +FUNCTION { chr.to.value } { + chr.to.int$ #48 - + duplicate$ + #0 < + { chr.to.value.error } + { + duplicate$ + #9 > + { chr.to.value.error } + { } + if$ + } + if$ +} + +STRINGS { + extract.input.str + extract.output.str +} + +FUNCTION { is.a.digit } { + duplicate$ + "" = + { + pop$ + #0 + } + { + chr.to.int$ + #48 - + duplicate$ + #0 < swap$ #9 > or not + } + if$ +} + +FUNCTION{ is.a.number } { + { + duplicate$ + #1 #1 substring$ + is.a.digit + } + { #2 global.max$ substring$ } + while$ + "" = +} + +FUNCTION { extract.number } { + duplicate$ + 'extract.input.str := + "" 'extract.output.str := + { extract.input.str empty$ not } + { + extract.input.str #1 #1 substring$ + extract.input.str #2 global.max$ substring$ 'extract.input.str := + duplicate$ + is.a.number + { extract.output.str swap$ * 'extract.output.str := } + { + pop$ + "" 'extract.input.str := + } + if$ + } + while$ + extract.output.str empty$ + { } + { + pop$ + extract.output.str + } + if$ +} + +FUNCTION { field.or.null } { + duplicate$ + empty$ + { + pop$ + "" + } + { } + if$ +} + +INTEGERS { + multiply.a.int + multiply.b.int +} + +FUNCTION { multiply } { + 'multiply.a.int := + 'multiply.b.int := + multiply.b.int #0 < + { + #-1 + #0 multiply.b.int - 'multiply.b.int := + } + { #1 } + if$ + #0 + { multiply.b.int #0 > } + { + multiply.a.int + + multiply.b.int #1 - 'multiply.b.int := + } + while$ + swap$ + { } + { #0 swap$ - } + if$ +} + +INTEGERS { str.conversion.int } + +FUNCTION { str.to.int.aux.ii } { + { + duplicate$ + empty$ not + } + { + swap$ + #10 multiply 'str.conversion.int := + duplicate$ + #1 #1 substring$ + chr.to.value + str.conversion.int + + swap$ + #2 global.max$ substring$ + } + while$ + pop$ +} + +FUNCTION { str.to.int.aux.i } { + duplicate$ + #1 #1 substring$ + "-" = + { + #1 swap$ + #2 global.max$ substring$ + } + { + #0 swap$ + } + if$ + #0 + swap$ + str.to.int.aux.ii + swap$ + { #0 swap$ - } + { } + if$ +} + +FUNCTION { str.to.int } { + duplicate$ + empty$ + { + pop$ + #0 + } + { str.to.int.aux.i } + if$ +} + +FUNCTION { tie.or.space.connect } { + duplicate$ + text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION { yes.no.to.bool } { + duplicate$ + empty$ + { + pop$ + #0 + } + { + "l" change.case$ + "yes" = + { #1 } + { #0 } + if$ + } + if$ +} + + +FUNCTION { bold } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\textbf{" swap$ * "}" * } + if$ +} + +FUNCTION { emph } { + duplicate$ + empty$ + { + pop$ + "" + } + { "\emph{" swap$ * "}" * } + if$ +} + +FUNCTION { paren } { + duplicate$ + empty$ + { + pop$ + "" + } + { "(" swap$ * ")" * } + if$ +} + + +FUNCTION { add.comma } { ", " * } + +FUNCTION { add.colon } { ": " * } + +FUNCTION { add.period } { add.period$ " " * } + +FUNCTION { add.semicolon } { "; " * } + +FUNCTION { add.space } { " " * } + + +FUNCTION { bbl.and } { "and" } + +FUNCTION { bbl.chapter } { "Chapter" } + +FUNCTION { bbl.doi } { "DOI:" } + +FUNCTION { bbl.editor } { "Ed." } + +FUNCTION { bbl.editors } { "Eds." } + +FUNCTION { bbl.edition } { "ed." } + +FUNCTION { bbl.etal } { "\latin{et~al.}" } + +FUNCTION { bbl.in } { "In" } + +FUNCTION { bbl.inpress } { "in press" } + +FUNCTION { bbl.msc } { "M.Sc.\ thesis" } + +FUNCTION { bbl.page } { "p" } + +FUNCTION { bbl.pages } { "pp" } + +FUNCTION { bbl.phd } { "Ph.D.\ thesis" } + +FUNCTION { bbl.version } { "version" } + +FUNCTION { bbl.volume } { "Vol." } + + +STRINGS { pages.str } + +FUNCTION { hyphen.to.dash } { + 'pages.str := + "" + { pages.str empty$ not } + { + pages.str #1 #1 substring$ + "-" = + { + "--" * + { + pages.str #1 #1 substring$ + "-" = + } + { pages.str #2 global.max$ substring$ 'pages.str := } + while$ + } + { + pages.str #1 #1 substring$ + * + pages.str #2 global.max$ substring$ 'pages.str := + } + if$ + } + while$ +} + +INTEGERS { multiresult.bool } + +FUNCTION { multi.page.check } { + 'pages.str := + #0 'multiresult.bool := + { + multiresult.bool not + pages.str empty$ not + and + } + { + pages.str #1 #1 substring$ + duplicate$ + "-" = swap$ duplicate$ + "," = swap$ + "+" = + or or + { #1 'multiresult.bool := } + { pages.str #2 global.max$ substring$ 'pages.str := } + if$ + } + while$ + multiresult.bool +} + + +INTEGERS { + current.name.int + names.separate.comma + names.separate.semicolon + names.separate.comma.bool + remaining.names.int + total.names.int +} + +STRINGS { + current.name.str + names.str +} + +FUNCTION { full.format.names } { + 'names.str := + #1 'current.name.int := + names.str num.names$ 'remaining.names.int := + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll}" format.name$ + current.name.int #1 > + { + swap$ add.comma swap$ + remaining.names.int #1 > + { } + { + duplicate$ + "others" = + { bbl.etal } + { bbl.and } + if$ + add.space swap$ * + } + if$ + * + } + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := + } + while$ +} + +FUNCTION { full.author } { + author empty$ + { "" } + { author full.format.names } + if$ +} + +FUNCTION { full.author.editor } { + author empty$ + { + editor empty$ + { "" } + { editor full.format.names } + if$ + } + { author full.format.names } + if$ +} + +FUNCTION { full.editor } { + editor empty$ + { "" } + { editor full.format.names } + if$ +} + +FUNCTION { short.format.names } { + 'names.str := + names.str #1 "{vv~}{ll}" format.name$ + names.str num.names$ + duplicate$ + #2 > + { + pop$ + add.space bbl.etal * + } + { + #2 < + { } + { + names.str #2 "{ff }{vv }{ll}{ jj}" format.name$ + "others" = + { add.space bbl.etal * } + { + add.space + bbl.and add.space + * + names.str #2 "{vv~}{ll}" format.name$ + * + } + if$ + } + if$ + } + if$ +} + +FUNCTION { short.author.key } { + author empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.author.editor.key } { + author empty$ + { + editor empty$ + { + key empty$ + { cite$ #1 #3 substring$ } + { key } + if$ + } + { editor short.format.names } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.author.key.organization } { + author empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } + if$ + #3 text.prefix$ + } + if$ + } + { key } + if$ + } + { author short.format.names } + if$ +} + +FUNCTION { short.editor.key.organization } { + editor empty$ + { + key empty$ + { + organization empty$ + { cite$ #1 #3 substring$ } + { + organization #1 #4 substring$ + "The " = + { organization } + { organization #5 global.max$ substring$ } + if$ + #3 text.prefix$ + } + if$ + } + { key } + if$ + } + { editor short.format.names } + if$ +} + +FUNCTION { calculate.full.names } { + type$ "book" = + type$ "inbook" = + or + { full.author.editor } + { + type$ "proceedings" = + { full.editor } + { full.author } + if$ + } + if$ +} + +FUNCTION { calculate.short.names } { + type$ "book" = + type$ "inbook" = + or + { short.author.editor.key } + { + type$ "proceedings" = + { short.editor.key.organization } + { + type$ "manual" = + { short.author.key.organization } + { short.author.key } + if$ + } + if$ + } + if$ + 'short.names := +} + +FUNCTION { calculate.names } { + calculate.short.names + short.names + year empty$ + { "()" } + { "(" year * ")" * } + if$ + * + 'label := +} + + +INTEGERS { entries.int } + +FUNCTION { initialize.count.entries } { + #0 'entries.int := +} + +FUNCTION { count.entries } { + entries.int #1 + 'entries.int := +} + + +FUNCTION { begin.bib } { + "achemso 2022-11-25 v3.13f" top$ + preamble$ empty$ + { } + { + preamble$ write$ + newline$ + } + if$ + "\providecommand{\latin}[1]{#1}" write$ + newline$ + "\makeatletter" write$ + newline$ + "\providecommand{\doi}" write$ + newline$ + " {\begingroup\let\do\@makeother\dospecials" write$ + newline$ + " \catcode`\{=1 \catcode`\}=2 \doi@aux}" write$ + newline$ + "\providecommand{\doi@aux}[1]{\endgroup\texttt{#1}}" write$ + newline$ + "\makeatother" write$ + newline$ + "\providecommand*\mcitethebibliography{\thebibliography}" write$ + newline$ + "\csname @ifundefined\endcsname{endmcitethebibliography}" write$ + " {\let\endmcitethebibliography\endthebibliography}{}" write$ + newline$ + "\begin{mcitethebibliography}{" + entries.int int.to.str$ * "}" * write$ + newline$ + "\providecommand*\natexlab[1]{#1}" write$ + newline$ + "\providecommand*\mciteSetBstSublistMode[1]{}" write$ + newline$ + "\providecommand*\mciteSetBstMaxWidthForm[2]{}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPuncttrue" write$ + newline$ + " {\def\EndOfBibitem{\unskip.}}" write$ + newline$ + "\providecommand*\mciteBstWouldAddEndPunctfalse" write$ + newline$ + " {\let\EndOfBibitem\relax}" write$ + newline$ + "\providecommand*\mciteSetBstMidEndSepPunct[3]{}" write$ + newline$ + "\providecommand*\mciteSetBstSublistLabelBeginEnd[3]{}" write$ + newline$ + "\providecommand*\EndOfBibitem{}" write$ + newline$ + "\mciteSetBstSublistMode{f}" write$ + newline$ + "\mciteSetBstMaxWidthForm{subitem}{(\alph{mcitesubitemcount})}" write$ + newline$ + "\mciteSetBstSublistLabelBeginEnd" write$ + newline$ + " {\mcitemaxwidthsubitemform\space}" write$ + newline$ + " {\relax}" write$ + newline$ + " {\relax}" write$ + newline$ +} + +FUNCTION { end.bib } { + newline$ + "\end{mcitethebibliography}" write$ + newline$ +} + + +INTEGERS { + ctrl.article.title.bool + ctrl.chapter.title.bool + ctrl.doi.bool + ctrl.etal.firstonly.bool + ctrl.etal.number.int +} + +FUNCTION { initialize.control.values } { + #1 'ctrl.article.title.bool := + #0 'ctrl.chapter.title.bool := + #0 'ctrl.doi.bool := + #1 'ctrl.etal.firstonly.bool := + #15 'ctrl.etal.number.int := +} + +FUNCTION { control } { + ctrl-article-title yes.no.to.bool 'ctrl.article.title.bool := + ctrl-chapter-title yes.no.to.bool 'ctrl.chapter.title.bool := + ctrl-doi yes.no.to.bool 'ctrl.doi.bool := + ctrl-etal-firstonly yes.no.to.bool 'ctrl.etal.firstonly.bool := + ctrl-etal-number str.to.int 'ctrl.etal.number.int := + ctrl-use-title empty$ + 'skip$ + { ctrl-use-title yes.no.to.bool 'ctrl.article.title.bool := } + if$ +} + + +INTEGERS { + next.punct.comma + next.punct.period + next.punct.semicolon + next.punct.space +} + +FUNCTION { initialize.tracker } { + #0 'next.punct.comma := + #1 'next.punct.period := + #2 'next.punct.semicolon := + #3 'next.punct.space := +} + +INTEGERS { next.punct.int } + +FUNCTION { output } { + swap$ + duplicate$ empty$ + { pop$ } + { + next.punct.int next.punct.space = + { add.space } + { + next.punct.int next.punct.comma = + { add.comma } + { + next.punct.int next.punct.semicolon = + { add.semicolon } + { add.period } + if$ + } + if$ + } + if$ + write$ + } + if$ + next.punct.comma 'next.punct.int := +} + + +FUNCTION { begin.bibitem } { + newline$ + "\bibitem" write$ + label + calculate.full.names + duplicate$ + short.names = + { pop$ } + { * } + if$ + "[" swap$ * "]" * write$ + "{" cite$ * "}" * write$ + newline$ + "" + next.punct.comma 'next.punct.int := +} + +INTEGERS { add.period.length.int } + +FUNCTION { would.add.period } { + duplicate$ + add.period$ + text.length$ 'add.period.length.int := + duplicate$ + text.length$ + add.period.length.int = + { #0 } + { #1 } + if$ +} + +FUNCTION { end.bibitem } { + would.add.period + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPuncttrue" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{\mcitedefaultendpunct}{\mcitedefaultseppunct}\relax" + } + { + "\relax" * write$ + newline$ + "\mciteBstWouldAddEndPunctfalse" write$ + newline$ + "\mciteSetBstMidEndSepPunct{\mcitedefaultmidpunct}" write$ + newline$ + "{}{\mcitedefaultseppunct}\relax" + } + if$ + write$ + newline$ + "\EndOfBibitem" write$ +} + + +FUNCTION { initialize.name.separator } { + #1 'names.separate.comma := + #0 'names.separate.semicolon := +} + +FUNCTION { format.names.loop } { + { remaining.names.int #0 > } + { + names.str current.name.int "{vv~}{ll}{,~f.}{,~jj}" format.name$ + duplicate$ + 'current.name.str := + current.name.int #1 > + { + duplicate$ + "others," = + { + pop$ + * + bbl.etal + add.space + remaining.names.int #1 - 'remaining.names.int := + } + { + swap$ + names.separate.comma.bool + { add.comma } + { add.semicolon } + if$ + remaining.names.int #1 > + { } + { bbl.and add.space * } + if$ + swap$ + * + } + if$ + } + { } + if$ + remaining.names.int #1 - 'remaining.names.int := + current.name.int #1 + 'current.name.int := + } + while$ +} + +FUNCTION { format.names.all } { + total.names.int 'remaining.names.int := + format.names.loop +} + +FUNCTION { format.names.etal } { + ctrl.etal.firstonly.bool + { #1 'remaining.names.int := } + { ctrl.etal.number.int 'remaining.names.int := } + if$ + format.names.loop + current.name.str "others," = + { } + { + add.space + bbl.etal + add.space + * + } + if$ +} + +FUNCTION { format.names } { + 'names.separate.comma.bool := + 'names.str := + #1 'current.name.int := + names.str num.names$ 'total.names.int := + total.names.int ctrl.etal.number.int > + { + ctrl.etal.number.int #0 = + { format.names.all } + { format.names.etal } + if$ + } + { format.names.all } + if$ +} + + +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" } + +STRINGS { + ord.input.str + ord.output.str +} + +FUNCTION { make.ordinal } { + 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 { convert.to.ordinal } { + extract.number + "l" change.case$ 'ord.input.str := + ord.input.str "first" = ord.input.str "1" = or + { bbl.first 'ord.output.str := } + { + ord.input.str "second" = ord.input.str "2" = or + { bbl.second 'ord.output.str := } + { + ord.input.str "third" = ord.input.str "3" = or + { bbl.third 'ord.output.str := } + { + ord.input.str "fourth" = ord.input.str "4" = or + { bbl.fourth 'ord.output.str := } + { + ord.input.str "fifth" = ord.input.str "5" = or + { bbl.fifth 'ord.output.str := } + { + ord.input.str #1 #1 substring$ + is.a.number + { ord.input.str make.ordinal } + { ord.input.str } + if$ + 'ord.output.str := + } + if$ + } + if$ + } + if$ + } + if$ + } + if$ + ord.output.str +} + + +FUNCTION { format.address } { + address empty$ + { } + { + address + output + } + if$ +} + +FUNCTION { format.authors } { + author empty$ + { } + { + author names.separate.comma format.names + output + next.punct.space 'next.punct.int := + } + if$ +} + +FUNCTION { format.editors } { + editor empty$ + { } + { + editor names.separate.comma format.names + add.comma + editor num.names$ #1 > + { bbl.editors } + { bbl.editor } + if$ + * + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.authors.or.editors } { + author empty$ + { format.editors } + { format.authors } + if$ + next.punct.space 'next.punct.int := +} + +FUNCTION { format.chapter } { + chapter empty$ + { } + { + bbl.chapter add.space + chapter + * + output + } + if$ +} + +FUNCTION { format.doi } { + doi empty$ + 'skip$ + { + bbl.doi add.space + "\doi{" * doi * "}" * + output + } + if$ +} + +FUNCTION { format.edition } { + edition empty$ + { } + { + edition convert.to.ordinal + add.space bbl.edition * + output + } + if$ + next.punct.semicolon 'next.punct.int := +} + +FUNCTION { format.group.address } { + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.colon + address + * + } + if$ + output + } + if$ +} + +FUNCTION { format.howpublished } { + howpublished empty$ + { } + { + howpublished + output + } + if$ +} + +FUNCTION { format.journal } { + journal emph + output + next.punct.space 'next.punct.int := +} + +FUNCTION { format.journal.unpub } { + journal emph + output +} + +FUNCTION { format.note } { + note empty$ + { } + { + note + output + } + if$ +} + +FUNCTION { format.number.series } { + series empty$ + { } + { + series + number empty$ + { } + { + add.space + number * + } + if$ + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.organization } { + organization empty$ + { } + { + organization paren + output + next.punct.period 'next.punct.int := + } + if$ +} + +FUNCTION { format.organization.address } { + organization format.group.address +} + +FUNCTION { format.pages } { + pages empty$ + { } + { + pages multi.page.check + { + bbl.pages + pages hyphen.to.dash + } + { bbl.page pages } + if$ + tie.or.space.connect + output + } + if$ + ctrl.doi.bool + { format.doi } + 'skip$ + if$ +} + +FUNCTION { format.pages.article } { + pages empty$ + { } + { + pages hyphen.to.dash + output + } + if$ + ctrl.doi.bool + { format.doi } + 'skip$ + if$ +} + +FUNCTION { format.publisher.address } { + publisher format.group.address +} + +FUNCTION { format.school.address } { + school + duplicate$ + empty$ + { pop$ } + { + address empty$ + { } + { + add.comma + address + * + } + if$ + output + } + if$ +} + +FUNCTION { format.title } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ +} + +FUNCTION { format.title.article } { + ctrl.article.title.bool + { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ + } + { } + if$ +} + +FUNCTION { format.title.techreport } { + title empty$ + { } + { + title emph + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.title.booktitle } { + title empty$ + { } + { + title + output + next.punct.period 'next.punct.int := + } + if$ + booktitle empty$ + { } + { + booktitle + output + next.punct.period 'next.punct.int := + } + if$ +} + +STRINGS { + book.title + chapter.title +} + +FUNCTION { format.title.booktitle.book } { + "" 'chapter.title := + booktitle empty$ + { + "" 'chapter.title := + title 'book.title := + } + { + ctrl.chapter.title.bool + { + title empty$ + 'skip$ + { title 'chapter.title := } + if$ + } + 'skip$ + if$ + maintitle empty$ + { booktitle 'book.title := } + { maintitle add.period booktitle * 'book.title := } + if$ + } + if$ + chapter.title empty$ + { } + { + chapter.title + output + next.punct.period 'next.punct.int := + } + if$ + book.title emph + chapter.title empty$ + { + author empty$ + { } + { + editor empty$ + { } + { bbl.in add.space swap$ * } + if$ + } + if$ + } + { bbl.in add.space swap$ * } + if$ + output +} + +FUNCTION { format.type } { + type empty$ + { } + { + pop$ + type + } + if$ + output +} + +FUNCTION { format.type.number } { + type empty$ + { } + { + type + number empty$ + { } + { number tie.or.space.connect } + if$ + output + } + if$ +} + +FUNCTION { format.url } { + url empty$ + { } + { + "\url{" url * "}" * + output + } + if$ +} + +FUNCTION { format.year } { + year empty$ + { } + { + year + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + +FUNCTION { format.year.article } { + year empty$ + { } + { + year paren + output + next.punct.space 'next.punct.int := + } + if$ +} + +FUNCTION { format.version } { + version empty$ + { } + { + bbl.version add.space + version + * + output + } + if$ +} + +FUNCTION { format.volume.article } { + volume emph + output +} + +FUNCTION { format.volume } { + volume empty$ + { } + { + bbl.volume + volume + tie.or.space.connect + output + next.punct.semicolon 'next.punct.int := + } + if$ +} + + +FUNCTION { article } { + begin.bibitem + format.authors + format.year.article + format.title.article + format.journal + format.volume.article + format.pages.article + format.note + end.bibitem +} + +FUNCTION { book } { + begin.bibitem + format.authors.or.editors + format.title.booktitle.book + format.edition + author empty$ + { } + { format.editors } + if$ + format.number.series + format.publisher.address + format.year + format.volume + format.chapter + format.pages + format.note + end.bibitem +} + +FUNCTION { inbook } { book } + +FUNCTION { booklet } { + begin.bibitem + format.authors + format.title + format.howpublished + format.address + format.year + format.note + end.bibitem +} + +FUNCTION { collection } { book } + +FUNCTION { incollection } { book } + +FUNCTION { inpress } { + begin.bibitem + format.authors + format.year.article + format.journal.unpub + doi empty$ + { + bbl.inpress + output + } + { + next.punct.comma 'next.punct.int := + format.doi + } + if$ + format.note + end.bibitem +} + +FUNCTION { inproceedings } { + begin.bibitem + format.authors + format.title.booktitle + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { manual } { + begin.bibitem + format.authors + format.title + format.version + format.organization.address + format.year + format.note + end.bibitem +} + +FUNCTION { mastersthesis } { + begin.bibitem + format.authors + format.title + bbl.msc format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { misc } { + begin.bibitem + format.authors + format.title + format.howpublished + format.year + format.url + format.note + end.bibitem +} + +FUNCTION { patent } { + begin.bibitem + format.authors + format.organization + format.title + format.type.number + format.year + format.note + end.bibitem +} + +FUNCTION { phdthesis } { + begin.bibitem + format.authors + format.title + bbl.phd format.type + format.school.address + format.year + format.note + end.bibitem +} + +FUNCTION { proceeding } { + begin.bibitem + format.title + format.address + format.year + format.pages + format.note + end.bibitem +} + +FUNCTION { techreport } { + begin.bibitem + format.authors.or.editors + format.title.techreport + format.type.number + format.organization.address + format.year + format.volume + format.pages + format.note + end.bibitem +} + +FUNCTION { unpublished } { + begin.bibitem + format.authors + format.journal.unpub + doi empty$ + { format.howpublished } + { + format.year + next.punct.comma 'next.punct.int := + format.doi + } + if$ + format.note + end.bibitem +} + +FUNCTION { default.type } { misc } + + +MACRO { jan } { "Jan." } +MACRO { feb } { "Feb." } +MACRO { mar } { "Mar." } +MACRO { apr } { "Apr." } +MACRO { may } { "May" } +MACRO { jun } { "June" } +MACRO { jul } { "July" } +MACRO { aug } { "Aug." } +MACRO { sep } { "Sept." } +MACRO { oct } { "Oct." } +MACRO { nov } { "Nov." } +MACRO { dec } { "Dec." } + +MACRO { acbcct } { "ACS Chem.\ Biol." } +MACRO { achre4 } { "Acc.\ Chem.\ Res." } +MACRO { acncdm } { "ACS Chem.\ Neurosci." } +MACRO { ancac3 } { "ACS Nano" } +MACRO { ancham } { "Anal.\ Chem." } +MACRO { bichaw } { "Biochemistry" } +MACRO { bcches } { "Bioconjugate Chem." } +MACRO { bomaf6 } { "Biomacromolecules" } +MACRO { bipret } { "Biotechnol.\ Prog." } +MACRO { crtoec } { "Chem.\ Res.\ Toxicol." } +MACRO { chreay } { "Chem.\ Rev." } +MACRO { cmatex } { "Chem.\ Mater." } +MACRO { cgdefu } { "Cryst.\ Growth Des." } +MACRO { enfuem } { "Energy Fuels" } +MACRO { esthag } { "Environ.\ Sci.\ Technol." } +MACRO { iechad } { "Ind.\ Eng.\ Chem.\ Res." } +MACRO { inoraj } { "Inorg.\ Chem." } +MACRO { jafcau } { "J.~Agric.\ Food Chem." } +MACRO { jceaax } { "J.~Chem.\ Eng.\ Data" } +MACRO { jceda8 } { "J.~Chem.\ Ed." } +MACRO { jcisd8 } { "J.~Chem.\ Inf.\ Model." } +MACRO { jctcce } { "J.~Chem.\ Theory Comput." } +MACRO { jcchff } { "J. Comb. Chem." } +MACRO { jmcmar } { "J. Med. Chem." } +MACRO { jnprdf } { "J. Nat. Prod." } +MACRO { joceah } { "J.~Org.\ Chem." } +MACRO { jpcafh } { "J.~Phys.\ Chem.~A" } +MACRO { jpcbfk } { "J.~Phys.\ Chem.~B" } +MACRO { jpccck } { "J.~Phys.\ Chem.~C" } +MACRO { jpclcd } { "J.~Phys.\ Chem.\ Lett." } +MACRO { jprobs } { "J.~Proteome Res." } +MACRO { jacsat } { "J.~Am.\ Chem.\ Soc." } +MACRO { langd5 } { "Langmuir" } +MACRO { mamobx } { "Macromolecules" } +MACRO { mpohbp } { "Mol.\ Pharm." } +MACRO { nalefd } { "Nano Lett." } +MACRO { orlef7 } { "Org.\ Lett." } +MACRO { oprdfk } { "Org.\ Proc.\ Res.\ Dev." } +MACRO { orgnd7 } { "Organometallics" } + + +READ + +EXECUTE { initialize.control.values } + +EXECUTE { initialize.count.entries } + +EXECUTE { initialize.name.separator } + +EXECUTE { initialize.tracker } + +ITERATE { calculate.names } + +ITERATE { count.entries } + +EXECUTE { begin.bib } + +ITERATE { call.type$ } + +EXECUTE { end.bib } +%% +%% Originally developed by Mats Dahlgren +%% Copyright (C) 1996-1998 by Mats Dahlgren +%% Copyright (C) 2008-2022 by +%% Joseph Wright +%% +%% Part of this bundle is derived from cite.sty, to which the +%% following license applies: +%% Copyright (C) 1989-2009 by Donald Arseneau +%% These macros may be freely transmitted, reproduced, or +%% modified provided that this notice is left intact. +%% +%% It may be distributed and/or modified under the conditions of +%% the LaTeX Project Public License (LPPL), either version 1.3c of +%% this license or (at your option) any later version. The latest +%% version of this license is in the file: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% This work is "maintained" (as per LPPL maintenance status) by +%% Joseph Wright. +%% +%% This work consists of the files achemso.dtx, +%% achemso-demo.bib and +%% achemso-demo.tex, +%% and the derived files achemso.cls, +%% achemso.ins, +%% achemso.pdf, +%% achemso.sty, +%% natmove.sty and +%% a number of configuration files. +%% +%% +%% End of file `biochem.bst'. diff --git a/_extensions/quarto-journals/acs/doc-class.tex b/_extensions/quarto-journals/acs/doc-class.tex new file mode 100644 index 0000000..988de81 --- /dev/null +++ b/_extensions/quarto-journals/acs/doc-class.tex @@ -0,0 +1,5 @@ +\documentclass[journal=$journal.id$,manuscript=$journal.type$$if(journal.layout)$,layout=$journal.layout$$endif$$if(journal.hide-email)$,email=false$endif$]{achemso} +\usepackage[version=3]{mhchem} +\newcommand*\mycommand[1]{\texttt{\emph{#1}}} + + diff --git a/_extensions/quarto-journals/acs/title.tex b/_extensions/quarto-journals/acs/title.tex new file mode 100644 index 0000000..5ebf2c2 --- /dev/null +++ b/_extensions/quarto-journals/acs/title.tex @@ -0,0 +1,40 @@ +$for(by-author)$ +\author{$by-author.name.literal$} +$if(by-author.affiliations)$ +$if(by-author.affiliations/first)$ +$for(by-author.affiliations/first)$ +\affiliation{$_affiliation.tex()$} +$endfor$ +$if(by-author.affiliations/rest/first)$ +$for(by-author.affiliations/rest/first)$ +\affiliation{$_affiliation.tex()$} +$endfor$ +$endif$ +$endif$ +$endif$ + +$if(by-author.note.text)$ +\altaffiliation{$by-author.note.text$} +$endif$ + +$if(by-author.email)$ +\email{$by-author.email$} +$endif$ +$if(by-author.phone)$ +\phone{$by-author.phone$} +$endif$ +$if(by-author.fax)$ +\fax{$by-author.fax$} +$endif$ +$endfor$ + +$if(abbr)$ +\abbreviations{$journal.abbreviations$} +$endif$ + +$if(keywords)$ +\keywords{$keywords$} +$endif$ + +\title[$title-short$]{$title$} +\makeatletter \ No newline at end of file