diff --git a/.gitignore b/.gitignore index 075b254..a1678d6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /.quarto/ +site_libs/ +*.html.md diff --git a/AC/index.qmd b/AC/index.qmd index fa60bfe..d58fab9 100644 --- a/AC/index.qmd +++ b/AC/index.qmd @@ -1,8 +1,9 @@ --- -subtitle: "主要成果" +subtitle: "文章成果" +lang: "zh" --- -# 论文 +# 项目 # 专利 diff --git a/MS/CL.qmd b/MS/CL.qmd new file mode 100644 index 0000000..371374e --- /dev/null +++ b/MS/CL.qmd @@ -0,0 +1,33 @@ +--- +format: + html: + css: _extensions/inst/css/style.css + pdf: + latex_engine: xelatex + keep-tex: false + keep-md: false + template: _extensions/inst/tex/cv.tex +date: today +author: "Min Yang" +affliction: State Key Laboratory of Environmental Aquatic Chemistry, Research Center for Eco-Environmental Sciences, Chinese Academy of Sciences +from_email: "yangmin@rcees.ac.cn" +from_phone: "+86 (10) 62843038" +from_institution_logo: "_extensions/inst/img/rceeslonglogo.png" +from_sign: "_extensions/inst/img/signmy.png" +from_position: "Vice Director, Professor" +from_professional_title: "Ph.D." +from_institution: "Chinese Academy of Sciences" +from_department: "Research Center for Eco-Environmental Sciences" +from_address: "P.O. Box 2871, Beijing" +to_professional_title: "" +to_name: "Editor-in-Chief" +to_journal: "Water Research" +opening_greeting: "Dear Editor," +closing_greeting: "Yours Sincerely," +--- + +Thank you for your consideration our manuscript (`{{< meta submitid >}}`) in publishing in {{< meta submitjournal >}}, and we also thank the reviewers for their kind and valuable comments. + +We have carefully revised the manuscripte according to each comment from the reviewers. As requested, revision note with point to point responses and actions, change tracking manuscript and revised manuscript have been prepared and included in the revision submission. + +We believe that the paper has been greatly improved. Looking forward to your further instruction regarding its publication. diff --git a/MS/GA.qmd b/MS/GA.qmd new file mode 100644 index 0000000..b1e3e13 --- /dev/null +++ b/MS/GA.qmd @@ -0,0 +1,22 @@ +--- +format: + docx: + reference-doc: _extensions/inst/word/MS.docx + filters: + - author-info-blocks + elsevier-html: + filters: + - author-info-blocks + css: _extensions/inst/css/style.css + elsevier-pdf: + header-includes: + - \setmainfont{Calibri} + - \usepackage[normalem]{ulem} + - \usepackage[doublespacing]{setspace} +--- + +# Graphical Abstract {-} + + + + diff --git a/MS/HL.qmd b/MS/HL.qmd new file mode 100644 index 0000000..9c55ae0 --- /dev/null +++ b/MS/HL.qmd @@ -0,0 +1,24 @@ +--- +format: + elsevier-html: + filters: + - author-info-blocks + css: _extensions/inst/css/style.css + docx: + reference-doc: _extensions/inst/word/MS.docx + filters: + - author-info-blocks + elsevier-pdf: + header-includes: + - \setmainfont{Calibri} + - \usepackage[normalem]{ulem} + - \usepackage[doublespacing]{setspace} +--- + +# Highlights {-} + +- A comprehensive model was contructed to evaluate the risk of odor occurrences +- Turbidity distribution determine underwater light and MIB-producing *Planktothrix* +- Increasing flowrate leading high turbidity that can control *Planktothrix* and MIB +- Odor control based on flow regulation in source water is "green" and fundamental + diff --git a/MS/MS.pdf.md b/MS/MS.pdf.md new file mode 100644 index 0000000..3bbcaec --- /dev/null +++ b/MS/MS.pdf.md @@ -0,0 +1,101 @@ +--- +msname: MS +smname: SM +abstract: ABSTRACT +keywords: + - KEYWORD1 + - KEYWORD2 + - KEYWORD3 +# date: last-modified +bibliography: [../BB/Ref.bib, ../BB/localRef.bib] +# csl: https://www.zotero.org/styles/elsevier-harvard +csl: _extensions/inst/tex/elsevier-harvard.csl +format: + elsevier-html: + css: _extensions/inst/css/style.css + keep-md: true + filters: + - author-info-blocks + epub: default + docx: + reference-doc: _extensions/inst/word/MS.docx + filters: + - author-info-blocks + elsevier-pdf: + keep-tex: true + keep-md: true + include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex" + latex-clean: false + header-includes: + # - \usepackage{threeparttable} + # - \usepackage{fontspec} + # - \usepackage{endfloat} + - \setmainfont{Calibri} + # - \usepackage[UTF8, scheme=plain]{ctex} + # - \usepackage{float} + - \usepackage[normalem]{ulem} + - \usepackage[doublespacing]{setspace} + - \usepackage{lineno} + - \linenumbers + journal: + formatting: preprint # preprint | review | doublebind + model: 1p + cite-style: authoryear + # graphical-abstract: "![](./figures/GA3.pdf)" + # highlights: + # - A comprehensive model was contructed to evaluate the risk of odor occurrences + # - Turbidity distribution determine underwater light and MIB-producing *Planktothrix* + # - Increasing flowrate increases turbidity that can control *Planktothrix* and MIB + # - Odor control based on flow regulation in source water is "green" and fundamental +filters: + - latex-environment +commands: [clab] +--- + + + + + + +::: {.content-visible when-format="html"} +# Color tip {.unnumbered} + +- [Something should be deleted]{.del} +- [Something bad]{.bad} +- [Something good]{.good} +- [Something todo]{.todo} +- [Something should be added]{.add} +- [I am a comment]{.com} +::: + + + + + + + + + + + + + + +# Introduction + +Blabla. [Bla blaBla blaBla blaBla blaBla bla Bla bla.]{.clab options=r1q0101} + +# Materials and methods + +# Results + +# Discussion + +# 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} + diff --git a/MS/MS.qmd b/MS/MS.qmd new file mode 100644 index 0000000..e8e9271 --- /dev/null +++ b/MS/MS.qmd @@ -0,0 +1,104 @@ +--- +msname: MS +smname: SM +abstract: ABSTRACT +keywords: + - KEYWORD1 + - KEYWORD2 + - KEYWORD3 +# date: last-modified +bibliography: [../BB/Ref.bib, ../BB/localRef.bib] +# csl: https://www.zotero.org/styles/elsevier-harvard +csl: _extensions/inst/tex/elsevier-harvard.csl +format: + elsevier-html: + css: _extensions/inst/css/style.css + keep-md: true + filters: + - author-info-blocks + epub: default + docx: + reference-doc: _extensions/inst/word/MS.docx + filters: + - author-info-blocks + elsevier-pdf: + keep-tex: true + keep-md: true + include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex" + latex-clean: false + header-includes: + # - \usepackage{threeparttable} + # - \usepackage{fontspec} + # - \usepackage{endfloat} + - \setmainfont{Calibri} + # - \usepackage[UTF8, scheme=plain]{ctex} + # - \usepackage{float} + - \usepackage[normalem]{ulem} + - \usepackage[doublespacing]{setspace} + - \usepackage{lineno} + - \linenumbers + journal: + formatting: preprint # preprint | review | doublebind + model: 1p + cite-style: authoryear + # graphical-abstract: "![](./figures/GA3.pdf)" + # highlights: + # - A comprehensive model was contructed to evaluate the risk of odor occurrences + # - Turbidity distribution determine underwater light and MIB-producing *Planktothrix* + # - Increasing flowrate increases turbidity that can control *Planktothrix* and MIB + # - Odor control based on flow regulation in source water is "green" and fundamental +filters: + - latex-environment +commands: [clab] +--- + +::: {.content-visible when-format="html"} +# Color tip {.unnumbered} + +- [Something should be deleted]{.del} +- [Something bad]{.bad} +- [Something good]{.good} +- [Something todo]{.todo} +- [Something should be added]{.add} +- [I am a comment]{.com} +::: + + +```{r} +#| label: setup +#| include: false +#| cache: false +lang <- "en" +RM <- "F" # global rendermode, L: load pdata; F: fast load pdf # nolint +isRendering <- isTRUE(getOption("knitr.in.progress")) +require(tidyverse) +require(drwateR) +require(rmdify) +rmdify::rmd_init() +require(dateR) +require(uniteR) +require(langeR) +require(patchwork) +require(lubridate) +``` + + + +# Introduction + +Blabla. [Bla blaBla blaBla blaBla blaBla bla Bla bla.]{.clab options=r1q0101} + +# Materials and methods + +# Results + +# Discussion + +# 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} + diff --git a/MS/MS.tex b/MS/MS.tex new file mode 100644 index 0000000..cd1d0ba --- /dev/null +++ b/MS/MS.tex @@ -0,0 +1,284 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +% +\documentclass[ + authoryear, + preprint, + 1p]{elsarticle} + +\usepackage{amsmath,amssymb} +\usepackage{iftex} +\ifPDFTeX + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +\usepackage{lmodern} +\ifPDFTeX\else + % xetex/luatex font selection +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{xcolor} +\setlength{\emergencystretch}{3em} % prevent overfull lines +\setcounter{secnumdepth}{5} +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi + + +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}\usepackage{longtable,booktabs,array} +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +\usepackage{enumitem} +\usepackage{fontspec} +\usepackage{float} +\usepackage[normalem]{ulem} +\usepackage{hyperref} +\usepackage{nameref} %needed by zref-xr +\usepackage{zref-xr,zref-hyperref,zref-user} +\usepackage{xr-hyper} + + +\usepackage{adjustbox} +% \usepackage{xcolor} +\usepackage{mdframed} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + linecolor=gray!30, + backgroundcolor=gray!5, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=0pt, + innerbottommargin=0pt + ]{refquote} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + backgroundcolor=red!3!white, + linecolor=red!30!white, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=10pt, + innerbottommargin=10pt + ]{question} +% setup hyperlink for page and line number +\def\msname{MS} +\def\smname{SM} +\setenumerate{labelsep=*, leftmargin=1.0pc} +%\zexternaldocument*{ManuscriptNew\veraa} +\zexternaldocument*{\msname} +\zexternaldocument*{\smname} +\newcommand{\hlabel}[1]{\label{#1}\hypertarget{#1}{ + \linelabel{line:#1}}} +%\externaldocument[si-]{\smname\veraa}[\smname\veraa.pdf] +\makeatletter +\newcommand{\clab}[2][]{ + \protected@write\@auxout{\let\clab\@secondoftwo}{ + \string\newlabel{r:#1}{{#2}{}}}% + \hlabel{#1}#2\hlabel{#1end}} +\makeatother +\newcommand{\zhypera}[1]{\href[pdfnewwindow]{\msname.pdf\##1}{\\[1ex]\textbf{Page \zpageref{#1}, Line +\zref{line:#1}--\zref{line:#1end}:}\\}} +\newcommand{\cref}[1]{\begin{refquote}\zhypera{#1}{\zref{r:#1}}\\[-0.5ex]\end{refquote}} +% \newenvironment{ra}[1][\unskip]{\par \noindent \\[-1ex] \textbf{Response/Action:}\par\bf}{\ \\} +\renewenvironment{quote}{\begin{question}}{\end{question}} +% \renewenvironment{verbatim}{\begin{ra}}{\end{ra}} + +\setmainfont{Calibri} +\usepackage[normalem]{ulem} +\usepackage[doublespacing]{setspace} +\usepackage{lineno} +\linenumbers +\makeatletter +\@ifpackageloaded{caption}{}{\usepackage{caption}} +\AtBeginDocument{% +\ifdefined\contentsname + \renewcommand*\contentsname{Table of contents} +\else + \newcommand\contentsname{Table of contents} +\fi +\ifdefined\listfigurename + \renewcommand*\listfigurename{List of Figures} +\else + \newcommand\listfigurename{List of Figures} +\fi +\ifdefined\listtablename + \renewcommand*\listtablename{List of Tables} +\else + \newcommand\listtablename{List of Tables} +\fi +\ifdefined\figurename + \renewcommand*\figurename{Fig.} +\else + \newcommand\figurename{Fig.} +\fi +\ifdefined\tablename + \renewcommand*\tablename{Table} +\else + \newcommand\tablename{Table} +\fi +} +\@ifpackageloaded{float}{}{\usepackage{float}} +\floatstyle{ruled} +\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]} +\floatname{codelisting}{Listing} +\newcommand*\listoflistings{\listof{codelisting}{List of Listings}} +\makeatother +\makeatletter +\makeatother +\makeatletter +\@ifpackageloaded{caption}{}{\usepackage{caption}} +\@ifpackageloaded{subcaption}{}{\usepackage{subcaption}} +\makeatother +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +\babelprovide[main,import]{english} +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +\usepackage[]{natbib} +\bibliographystyle{elsarticle-harv} +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} % disable monospaced font for URLs +\hypersetup{ + pdftitle={MANUSCRIPT TITLE}, + pdfauthor={Ming Su; Min Yang}, + pdflang={en}, + pdfkeywords={KEYWORD1, KEYWORD2, KEYWORD3}, + colorlinks=true, + linkcolor={blue}, + filecolor={Maroon}, + citecolor={Blue}, + urlcolor={Blue}, + pdfcreator={LaTeX via pandoc}} + +\setlength{\parindent}{6pt} +\begin{document} +\begin{frontmatter} +\title{MANUSCRIPT TITLE } + +\author[1,2]{Ming Su% +% +} + \ead{mingsu@rcees.ac.cn} +\author[1,2]{Min Yang% +\corref{cor1}% +} + \ead{yangmin@rcees.ac.cn} + +\affiliation[1]{organization={State Key Laboratory of Environmental +Aquatic Chemistry, Research Center for Eco-Environmental Sciences, +Chinese Academy of Sciences},addressline={P.O. Box +2871},city={Beijing},postcode={100085}} +\affiliation[2]{organization={University of Chinese Academy of +Sciences},city={Beijing},postcode={100049}} + +\cortext[cor1]{Corresponding author} + + + +\begin{abstract} +ABSTRACT +\end{abstract} + + + + + +\begin{keyword} + KEYWORD1 \sep KEYWORD2 \sep + KEYWORD3 +\end{keyword} +\end{frontmatter} +\section{Introduction}\label{introduction} + +Blabla. \clab[r1q0101]{Bla blaBla blaBla blaBla blaBla bla Bla bla.} + +\section{Materials and methods}\label{materials-and-methods} + +\section{Results}\label{results} + +\section{Discussion}\label{discussion} + +\section{Conclusions}\label{conclusions} + +\section*{Acknowledgements}\label{acknowledgements} +\addcontentsline{toc}{section}{Acknowledgements} + +This work was financially supported by the National Natural Science +Foundation of China (52030002, 51878649), and Youth Innovation Promotion +Association CAS. + + +\renewcommand\refname{References} + \bibliography{../BB/Ref.bib,../BB/localRef.bib} + + +\end{document} diff --git a/MS/RN.qmd b/MS/RN.qmd new file mode 100644 index 0000000..fc0555a --- /dev/null +++ b/MS/RN.qmd @@ -0,0 +1,80 @@ +--- +subtitle: "Revision Note" +msname: MS +smname: SM +# date: last-modified +bibliography: [../BB/Ref.bib, ../BB/localRef.bib] +csl: _extensions/inst/tex/elsevier-harvard.csl +format: + elsevier-html: + filters: + - author-info-blocks + css: _extensions/inst/css/style.css + docx: + reference-doc: _extensions/inst/word/MS.docx + filters: + - author-info-blocks + elsevier-pdf: + number-sections: true + classoption: [nopreprintline] + include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex" + latex-clean: true + header-includes: + # - \usepackage{threeparttable} + # - \usepackage{fontspec} + # - \usepackage{endfloat} + - \setmainfont{Calibri} + - \usepackage[UTF8, scheme=plain]{ctex} + # - \usepackage{float} + - \usepackage[normalem]{ulem} + - \usepackage[doublespacing]{setspace} + - \renewcommand{\thetable}{R\arabic{table}} + - \renewcommand{\thefigure}{R\arabic{figure}} + - \renewcommand{\theequation}{R\arabic{equation}} + - \renewcommand{\figurename}{Figure} + - \renewcommand{\tablename}{Table} + journal: + name: {{< meta submitjournal >}} + formatting: preprint # preprint | review | doublebind + model: 1p + cite-style: authoryear +--- + +```{r} +#| include: false +#| cache: false +lang <- "en" +RM <- "F" # global rendermode, L: load pdata; F: fast load pdf +isrendering = isTRUE(getOption('knitr.in.progress')) +require(lubridate) +require(tidyverse) +require(patchwork) +require(drwateR) +require(dwfun) +require(rmdify) +rmdify::rmd_init() +require(langeR) +require(dateR) +require(uniteR) +require(readxl) +Palette <- c("#515ee8", "#62e856", "#e86056", "#e8de51", "#0072B2", "#D551C0", "#CC79A7","#56E9AC") +``` + +# Response to Editor + +> 0. I very much regret to have to tell you that publication in our journal is not recommended. An explanation for this decision is given in the attached review reports (and on https://www.editorialmanager.com/wr/). I hope that the comments contained therein will be of use to you. + +**Response/Action:** + +Thank you. + +# Reviewer #1: + +> 0. COMMENT 1 + +**Response/Action:** + +Thank you very much for your revision. We made changes as shown below. + +`r cref("r1q0101")` + diff --git a/MS/SM.qmd b/MS/SM.qmd new file mode 100644 index 0000000..5d36d36 --- /dev/null +++ b/MS/SM.qmd @@ -0,0 +1,69 @@ +--- +msname: MS +smname: SM +bibliography: [../BB/Ref.bib, ../BB/localRef.bib] +csl: _extensions/inst/tex/elsevier-harvard.csl +format: + elsevier-html: + filters: + - author-info-blocks + css: _extensions/inst/css/style.css + docx: + reference-doc: _extensions/inst/word/MS.docx + filters: + - author-info-blocks + elsevier-pdf: + classoption: [nopreprintline] + revision: true + keep-tex: true + latex-clean: false + include-in-header: "./_extensions/quarto-journals/elsevier/partials/revision.tex" + header-includes: + # - \usepackage{threeparttable} + # - \usepackage{fontspec} + # - \usepackage[nomarkers]{endfloat} + - \usepackage[normalem]{ulem} + - \renewcommand{\thetable}{S\arabic{table}} + - \renewcommand{\thefigure}{S\arabic{figure}} + - \renewcommand{\theequation}{S\arabic{equation}} + - \setmainfont{Calibri} + # - \usepackage[UTF8, scheme=plain]{ctex} + # - \usepackage{float} + - \usepackage[normalem]{ulem} + - \usepackage[doublespacing]{setspace} + - \usepackage{lineno} + - \linenumbers +filters: + - latex-environment +commands: [clab] +--- + + +```{r} +#| label: setup +#| include: false +#| cache: false +options(tinytex.clean = FALSE) +lang <- "en" +RM <- "F" # global rendermode, L: load pdata; F: fast load pdf +isRendering <- isTRUE(getOption('knitr.in.progress')) +require(lubridate) +require(tidyverse) +require(patchwork) +require(drwateR) +require(dwfun) +require(rmdify) +rmdify::rmd_init() +require(langeR) +require(dateR) +require(uniteR) +``` + +# Supplementary Material {-} + +Figures and/or tables are provided below as the supplementary evidences to the main text. + + +\pagebreak + + diff --git a/MS/SM.tex b/MS/SM.tex new file mode 100644 index 0000000..82e3240 --- /dev/null +++ b/MS/SM.tex @@ -0,0 +1,266 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +% +\documentclass[ + nopreprintline, + number]{elsarticle} + +\usepackage{amsmath,amssymb} +\usepackage{iftex} +\ifPDFTeX + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +\usepackage{lmodern} +\ifPDFTeX\else + % xetex/luatex font selection +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{xcolor} +\setlength{\emergencystretch}{3em} % prevent overfull lines +\setcounter{secnumdepth}{5} +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi + + +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}\usepackage{longtable,booktabs,array} +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +\usepackage{enumitem} +\usepackage{fontspec} +\usepackage{float} +\usepackage[normalem]{ulem} +\usepackage{hyperref} +\usepackage{nameref} %needed by zref-xr +\usepackage{zref-xr,zref-hyperref,zref-user} +\usepackage{xr-hyper} + + +\usepackage{adjustbox} +% \usepackage{xcolor} +\usepackage{mdframed} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + linecolor=gray!30, + backgroundcolor=gray!5, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=0pt, + innerbottommargin=0pt + ]{refquote} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + backgroundcolor=red!3!white, + linecolor=red!30!white, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=10pt, + innerbottommargin=10pt + ]{question} +% setup hyperlink for page and line number +\def\msname{MS} +\def\smname{SM} +\setenumerate{labelsep=*, leftmargin=1.0pc} +%\zexternaldocument*{ManuscriptNew\veraa} +\zexternaldocument*{\msname} +\zexternaldocument*{\smname} +\newcommand{\hlabel}[1]{\label{#1}\hypertarget{#1}{ + \linelabel{line:#1}}} +%\externaldocument[si-]{\smname\veraa}[\smname\veraa.pdf] +\makeatletter +\newcommand{\clab}[2][]{ + \protected@write\@auxout{\let\clab\@secondoftwo}{ + \string\newlabel{r:#1}{{#2}{}}}% + \hlabel{#1}#2\hlabel{#1end}} +\makeatother +\newcommand{\zhypera}[1]{\href[pdfnewwindow]{\msname.pdf\##1}{\\[1ex]\textbf{Page \zpageref{#1}, Line +\zref{line:#1}--\zref{line:#1end}:}\\}} +\newcommand{\cref}[1]{\begin{refquote}\zhypera{#1}{\zref{r:#1}}\\[-0.5ex]\end{refquote}} +% \newenvironment{ra}[1][\unskip]{\par \noindent \\[-1ex] \textbf{Response/Action:}\par\bf}{\ \\} +\renewenvironment{quote}{\begin{question}}{\end{question}} +% \renewenvironment{verbatim}{\begin{ra}}{\end{ra}} + +\usepackage[normalem]{ulem} +\renewcommand{\thetable}{S\arabic{table}} +\renewcommand{\thefigure}{S\arabic{figure}} +\renewcommand{\theequation}{S\arabic{equation}} +\setmainfont{Calibri} +\usepackage[doublespacing]{setspace} +\usepackage{lineno} +\linenumbers +\makeatletter +\@ifpackageloaded{caption}{}{\usepackage{caption}} +\AtBeginDocument{% +\ifdefined\contentsname + \renewcommand*\contentsname{Table of contents} +\else + \newcommand\contentsname{Table of contents} +\fi +\ifdefined\listfigurename + \renewcommand*\listfigurename{List of Figures} +\else + \newcommand\listfigurename{List of Figures} +\fi +\ifdefined\listtablename + \renewcommand*\listtablename{List of Tables} +\else + \newcommand\listtablename{List of Tables} +\fi +\ifdefined\figurename + \renewcommand*\figurename{Fig.} +\else + \newcommand\figurename{Fig.} +\fi +\ifdefined\tablename + \renewcommand*\tablename{Table} +\else + \newcommand\tablename{Table} +\fi +} +\@ifpackageloaded{float}{}{\usepackage{float}} +\floatstyle{ruled} +\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]} +\floatname{codelisting}{Listing} +\newcommand*\listoflistings{\listof{codelisting}{List of Listings}} +\makeatother +\makeatletter +\makeatother +\makeatletter +\@ifpackageloaded{caption}{}{\usepackage{caption}} +\@ifpackageloaded{subcaption}{}{\usepackage{subcaption}} +\makeatother +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +\babelprovide[main,import]{english} +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +\usepackage[]{natbib} +\bibliographystyle{elsarticle-num} +\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} % disable monospaced font for URLs +\hypersetup{ + pdftitle={MANUSCRIPT TITLE}, + pdfauthor={Ming Su; Min Yang}, + pdflang={en}, + colorlinks=true, + linkcolor={blue}, + filecolor={Maroon}, + citecolor={Blue}, + urlcolor={Blue}, + pdfcreator={LaTeX via pandoc}} + +\setlength{\parindent}{6pt} +\begin{document} +\begin{frontmatter} +\title{MANUSCRIPT TITLE } + +\author[1,2]{Ming Su% +% +} + \ead{mingsu@rcees.ac.cn} +\author[1,2]{Min Yang% +\corref{cor1}% +} + \ead{yangmin@rcees.ac.cn} + +\affiliation[1]{organization={State Key Laboratory of Environmental +Aquatic Chemistry, Research Center for Eco-Environmental Sciences, +Chinese Academy of Sciences},addressline={P.O. Box +2871},city={Beijing},postcode={100085}} +\affiliation[2]{organization={University of Chinese Academy of +Sciences},city={Beijing},postcode={100049}} + +\cortext[cor1]{Corresponding author} + + + + + + + + +\end{frontmatter} +\section*{Supplementary Material}\label{supplementary-material} +\addcontentsline{toc}{section}{Supplementary Material} + +Figures and/or tables are provided below as the supplementary evidences +to the main text. + +\pagebreak + + + \bibliography{../BB/Ref.bib,../BB/localRef.bib} + + +\end{document} diff --git a/MS/_extensions b/MS/_extensions new file mode 120000 index 0000000..41f7586 --- /dev/null +++ b/MS/_extensions @@ -0,0 +1 @@ +../_extensions \ No newline at end of file diff --git a/MS/elsarticle-harv.bst b/MS/elsarticle-harv.bst new file mode 100755 index 0000000..3bf1acb --- /dev/null +++ b/MS/elsarticle-harv.bst @@ -0,0 +1,1598 @@ +%% +%% This is file `elsarticle-harv.bst' (Version 2.1), +%% +%% Copyright 2009-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% --------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% $Id: elsarticle-harv.bst 194 2020-11-23 11:29:27Z rishi $ +%% +%% $URL: https://lenova.river-valley.com/svn/elsarticle/trunk/elsarticle-harv.bst $ +%% + +ENTRY + { address + archive + author + booktitle + chapter + collaboration + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + url + doi + eprint + pubmed + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +STRINGS { urlprefix doiprefix eprintprefix pubmedprefix } + +FUNCTION {init.web.variables} +{ + "\URLprefix " 'urlprefix := + "\DOIprefix" 'doiprefix := + "\ArXivprefix " 'eprintprefix := + "\Pubmedprefix " 'pubmedprefix := +} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.comma} +{ ", " * write$} + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ". " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { ", " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output.commanull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { ", " * write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {output.book.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.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.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\textit{" 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} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "ed." } + +FUNCTION {bbl.volume} +{ "volume" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "number" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.techrep} +{ "Technical Report" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM 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$ + pop$ + } + if$ + } + 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}{, jj}{, f{.}.}" + 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.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names + duplicate$ empty$ 'skip$ + { collaboration "collaboration" bibinfo.check + duplicate$ empty$ 'skip$ + { " (" swap$ * ")" * } + if$ + * + } + if$ +} + +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 + capitalize + "(" 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 * + } + { + 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 {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in %capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + ", " 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$ + { 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.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.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + 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 + capitalize + "(" 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.check format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {print.url} + {url duplicate$ empty$ + { pop$ "" } + { new.sentence + urlprefix "\url{" * swap$ * "}" * + } + if$ + } + +FUNCTION {print.doi} + {doi duplicate$ empty$ + { pop$ "" } + { new.sentence + doiprefix "\doi{" * swap$ * "}" * + } + if$ + } + +FUNCTION {print.eprint} + {eprint duplicate$ empty$ + { pop$ "" } + { new.sentence + duplicate$ "\href{http://arxiv.org/abs/" swap$ * "}{{\tt arXiv:" * swap$ * "}}" * } + if$ + } + +FUNCTION {print.pubmed} + {pubmed duplicate$ empty$ + { pop$ "" } + { new.sentence + pubmedprefix "\Pubmed{" * swap$ * "}" * + } + if$ + } + +FUNCTION {webpage} +{ "%Type = Webpage" write$ + output.bibitem + format.authors "author" output.check + author format.key output + author empty$ + { + format.title "title" output.check + new.block + format.date "year" output.check + date.block + } + { + format.date "year" output.check + date.block + format.title "title" output.check + new.block +} + if$ + print.url output + fin.entry +} + + +FUNCTION {article} +{ "%Type = Article" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + format.journal.pages + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {book} +{ "%Type = Book" write$ + 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 + new.block + format.number.series output + format.edition output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {booklet} +{ "%Type = Booklet" write$ + output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {inbook} +{ "%Type = Inbook" write$ + 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 + format.edition output + crossref missing$ + { + format.publisher.address output + format.bvolume 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 + } + if$ + format.pages "pages" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {incollection} +{ "%Type = Incollection" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.book.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.book.check + format.edition output + format.publisher.address output + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {inproceedings} +{ "%Type = Inproceedings" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.book.check + new.sentence + 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.bvolume output +% format.number.series output +% format.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.pages "pages" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ "%Type = Manual" write$ + output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.edition output + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ "%Type = Masterthesis" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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 + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {misc} +{ "%Type = Misc" write$ + output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.block + howpublished "howpublished" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {phdthesis} +{ "%Type = Phdthesis" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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 + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ "%Type = Proceedings" write$ + 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 + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {techreport} +{ "%Type = Techreport" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ "%Type = Unpublished" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note "note" output.check + 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$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { 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$ * "}}" * } + { "" 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$ + "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\href}[2]{#2}" + write$ newline$ + "\providecommand{\path}[1]{#1}" + write$ newline$ + "\providecommand{\DOIprefix}{doi:}" + write$ newline$ + "\providecommand{\ArXivprefix}{arXiv:}" + write$ newline$ + "\providecommand{\URLprefix}{URL: }" + write$ newline$ + "\providecommand{\Pubmedprefix}{pmid:}" + write$ newline$ + "\providecommand{\doi}[1]{\href{http://dx.doi.org/#1}{\path{#1}}}" + write$ newline$ + "\providecommand{\Pubmed}[1]{\href{pmid:#1}{\path{#1}}}" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\ifx\xfnm\relax \def\xfnm[#1]{\unskip,\space#1}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +EXECUTE {init.web.variables} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `elsarticle-harv.bst'. +%% +%% Change log: +%% ----------- +%% 22.04.2011 +%% +%% 10.08.2012 +%% a. doi, url, eprint, pmid added +%% b. Bibtype `webpage' defined +%% +%% 30.08.2012 +%% a. collaboration added. +%% + + diff --git a/MS/elsarticle-num.bst b/MS/elsarticle-num.bst new file mode 100755 index 0000000..14499bf --- /dev/null +++ b/MS/elsarticle-num.bst @@ -0,0 +1,1509 @@ +%% +%% This is file `elsarticle-num.bst' (Version 2.1), +%% +%% Copyright 2007-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% --------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% +%% $Id: elsarticle-num.bst 194 2020-11-23 11:29:27Z rishi $ +%% +%% $URL: https://lenova.river-valley.com/svn/elsarticle/trunk/elsarticle-num.bst $ +%% +%% ---------------------------------------- + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + eprint % urlbst + doi % urlbst + url % urlbst + lastchecked % urlbst + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl openinlinelink closeinlinelink } % urlbst... +INTEGERS { hrefform inlinelinks makeinlinelink addeprints adddoiresolver } +FUNCTION {init.urlbst.variables} +{ + "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 + "https://doi.org/" 'doiurl := % prefix to make URL from DOI + "doi:" 'doiprefix := % text prefix printed before DOI ref + #1 'addeprints := % 0=no eprints; 1=include eprints + #1 'adddoiresolver := % 0=no DOI resolver; 1=include it + #2 'hrefform := % 0=no crossrefs; 1=hypertex xrefs; 2=hyperref refs + #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles + % the following are internal state variables, not config constants + #0 'makeinlinelink := % state variable managed by setup.inlinelink + "" 'openinlinelink := % ditto + "" 'closeinlinelink := % ditto +} +INTEGERS { + bracket.state + outside.brackets + open.brackets + within.brackets + close.brackets +} +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 := +} + +STRINGS { s t } + +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 +} + +FUNCTION {setup.inlinelink} +{ makeinlinelink + { hrefform #1 = % hypertex + { "\special {html: }{" * 'openinlinelink := + "\special {html:}" 'closeinlinelink := + } + { hrefform #2 = % hyperref + { "\href{" url * "}{" * 'openinlinelink := + "}" 'closeinlinelink := + } + 'skip$ + if$ % hrefform #2 = + } + if$ % hrefform #1 = + #0 'makeinlinelink := + } + 'skip$ + if$ % makeinlinelink +} +FUNCTION {add.inlinelink} +{ openinlinelink empty$ + 'skip$ + { openinlinelink swap$ * closeinlinelink * + "" 'openinlinelink := + } + if$ +} +FUNCTION {output.nonnull} +{ % Save the thing we've been asked to output + 's := + % If the bracket-state is close.brackets, then add a close-bracket to + % what is currently at the top of the stack, and set bracket.state + % to outside.brackets + bracket.state close.brackets = + { "]" * + outside.brackets 'bracket.state := + } + 'skip$ + if$ + bracket.state outside.brackets = + { % We're outside all brackets -- this is the normal situation. + % Write out what's currently at the top of the stack, using the + % original output.nonnull function. + s + add.inlinelink + output.nonnull.original % invoke the original output.nonnull + } + { % Still in brackets. Add open-bracket or (continuation) comma, add the + % new text (in s) to the top of the stack, and move to the close-brackets + % state, ready for next time (unless inbrackets resets it). If we come + % into this branch, then output.state is carefully undisturbed. + bracket.state open.brackets = + { " [" * } + { ", " * } % bracket.state will be within.brackets + if$ + s * + close.brackets 'bracket.state := + } + if$ +} + +FUNCTION {inbrackets} +{ bracket.state close.brackets = + { within.brackets 'bracket.state := } % reset the state: not open nor closed + { open.brackets 'bracket.state := } + if$ +} + +FUNCTION {format.lastchecked} +{ lastchecked empty$ + { "" } + { inbrackets "cited " lastchecked * } + if$ +} + +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.original} +{ 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} +{ + add.blank +} + +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} +{ skip$ } + +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} +{ "Edition" } + +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} +{ "Ch." } + +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. Softw. Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Programming"} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Gr."} + +MACRO {toms} {"ACM Trans. Math. Softw."} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} + +MACRO {tcs} {"Theoretical Comput. Sci."} + +FUNCTION {write.url} +{ url empty$ + { skip$ } + { "\newline\urlprefix\url{" url * "}" * write$ newline$ } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f.~}{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + "," * + 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$ +} +FUNCTION {format.names.ed} +{ format.names } +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { " (" * bbl.editors * ")" * } + { " (" * bbl.editor * ")" * } + if$ + } + if$ +} + +FUNCTION {format.in.editors} +{ editor empty$ + { "" } + { editor format.names.ed + editor num.names$ #1 > + { " (" * bbl.editors * ")" * } + { " (" * bbl.editor * ")" * } + if$ + } + 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$ * + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ + } + if$ +} + +FUNCTION {output.bibitem.original} +{ 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 + ":" * + " " * } + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " (" swap$ * ")" * + } + if$ +} + +FUNCTION{format.year} +{ year duplicate$ empty$ + { "empty year in " cite$ * warning$ pop$ "" } + { "(" swap$ * ")" * } + if$ +} + +FUNCTION {format.btitle} +{ title +} + +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$ + { "" } + { bbl.volume volume tie.or.space.connect + series empty$ + 'skip$ + { bbl.of space.word * 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 = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { bbl.in space.word * series * } + 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} +{ 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 empty$ + { "" } + { output.state mid.sentence = + { convert.edition "l" change.case$ " " * bbl.edition * } + { convert.edition "t" change.case$ " " * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.pages pages n.dashify tie.or.space.connect } + { bbl.page pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.journal.pages} +{ pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { + " " * + format.year * " " * + pages n.dashify * + } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ + % volume field.or.null + " " + volume empty$ + { pop$ "" } + { volume * } + if$ + number empty$ + 'skip$ + { + "~(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { word.in booktitle * } + { word.in format.in.editors * ", " * + booktitle * } + 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 empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ + key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { word.in journal emphasize * } + if$ + } + { word.in key * " " *} + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ + " " * bbl.etal * + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$ + * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + word.in + } + { bbl.volume volume tie.or.space.connect + 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$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { word.in booktitle * } + 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$ + { + t empty$ + { address empty$ + 'skip$ + { address * } + if$ + } + { t * + address empty$ + 'skip$ + { ", " * address * } + if$ + } + if$ + year empty$ + 'skip$ + { t empty$ address empty$ and + 'skip$ + { ", " * } + if$ + year * + } + if$ + } + if$ +} + +FUNCTION {format.publisher.address} +{ publisher empty$ + { "empty publisher in " cite$ * warning$ + "" + } + { publisher } + if$ + format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization empty$ + { "" } + { organization } + if$ + format.org.or.pub +} + +FUNCTION {make.href.null} +{ + pop$ +} +FUNCTION {make.href.hypertex} +{ + "\special {html: }" * swap$ * + "\special {html:}" * +} +FUNCTION {make.href.hyperref} +{ + "\href {" swap$ * "} {\path{" * swap$ * "}}" * +} +FUNCTION {make.href} +{ hrefform #2 = + 'make.href.hyperref % hrefform = 2 + { hrefform #1 = + 'make.href.hypertex % hrefform = 1 + 'make.href.null % hrefform = 0 (or anything else) + if$ + } + if$ +} + +FUNCTION {format.url} +{ inlinelinks #1 = url empty$ or + { "" } + { hrefform #1 = + { % special case -- add HyperTeX specials + urlintro "\url{" url * "}" * url make.href.hypertex * } + { urlintro "\url{" * url * "}" * } + if$ + } + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { "" } + { eprintprefix eprint * eprinturl eprint * make.href } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { doiprefix doi * doiurl doi * make.href } + if$ +} + +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$ +} + +FUNCTION {output.bibitem} +{ outside.brackets 'bracket.state := + output.bibitem.original + inlinelinks url empty$ not and + { #1 'makeinlinelink := } + { #0 'makeinlinelink := } + if$ +} + +FUNCTION {fin.entry} +{ output.web.refs % urlbst + makeinlinelink % ooops, it appears we didn't have a title for inlinelink + { setup.inlinelink % add some artificial link text here, as a fallback + "[link]" output.nonnull } + 'skip$ + if$ + bracket.state close.brackets = % urlbst + { "]" * } + 'skip$ + if$ + fin.entry.original +} + +FUNCTION {webpage} +{ output.bibitem + author empty$ + { editor empty$ + 'skip$ % author and editor both optional + { format.editors output.nonnull } + if$ + } + { editor empty$ + { format.authors output.nonnull } + { "can't use both author and editor fields in " cite$ * warning$ } + if$ + } + if$ + new.block + title empty$ 'skip$ 'setup.inlinelink if$ + format.title "title" output.check + inbrackets "online" output + new.block + year empty$ + 'skip$ + { format.date "year" output.check } + if$ + % We don't need to output the URL details ('lastchecked' and 'url'), + % because fin.entry does that for us, using output.web.refs. The only + % reason we would want to put them here is if we were to decide that + % they should go in front of the rather miscellaneous information in 'note'. + new.block + note output + fin.entry +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + crossref missing$ + { journal + "journal" output.check + % add.blank + before.all 'output.state := + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.journal.pages + format.note output + pages empty$ + { format.date "year" output.check } + 'skip$ + if$ + fin.entry + write.url +} + +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$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + crossref missing$ + { format.edition output + format.bvolume output + format.number.series output + format.publisher.address output + } + { + format.book.crossref output.nonnull + } + if$ + format.note output + fin.entry + write.url +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + howpublished output + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +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$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + crossref missing$ + { + format.edition output + format.bvolume output + format.number.series output + format.publisher.address output + format.chapter.pages "chapter and pages" output.check + } + { + format.chapter.pages "chapter and pages" output.check + format.book.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.note output + fin.entry + write.url +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.edition output + format.bvolume output + format.number.series output + format.publisher.address output + format.chapter.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + format.note output + fin.entry + write.url +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.edition output + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.note output + fin.entry + write.url +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address output + } + 'skip$ + if$ + } + { + organization output + address output + } + if$ + format.edition output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title output + howpublished output + format.note output + format.date "year" output.check + fin.entry + write.url + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + bbl.phdthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + format.bvolume output + format.number.series output + editor empty$ + { publisher empty$ + 'skip$ + { + format.publisher.address output + } + if$ + } + { publisher empty$ + { + format.organization.address output } + { + organization output + format.publisher.address output + } + if$ + } + if$ + format.note output + fin.entry + write.url +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + format.tr.number output.nonnull + institution "institution" output.check + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + format.note "note" output.check + format.date "year" output.check + fin.entry + write.url +} + +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" + write$ newline$ + "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" + write$ newline$ + "\expandafter\ifx\csname href\endcsname\relax" + write$ newline$ + " \def\href#1#2{#2} \def\path#1{#1}\fi" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.urlbst.variables} +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 `elsarticle-num.bst'. + + diff --git a/MS/elsarticle.cls b/MS/elsarticle.cls new file mode 100755 index 0000000..02ff3a7 --- /dev/null +++ b/MS/elsarticle.cls @@ -0,0 +1,1382 @@ +%% +%% This is file `elsarticle.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% elsarticle.dtx (with options: `class') +%% +%% Copyright 2007-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% The list of all files belonging to the 'Elsarticle Bundle' is +%% given in the file `manifest.txt'. +%% +%% +%% +%% + \def\RCSfile{elsarticle}% + \def\RCSversion{3.3}% + \def\RCSdate{2020/11/20}% + \def\@shortjnl{\relax} + \def\@journal{Elsevier Ltd} + \def\@company{Elsevier Ltd} + \def\@issn{000-0000} + \def\@shortjid{elsarticle} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{\@shortjid}[\RCSdate, \RCSversion: \@journal] +\def\ABD{\AtBeginDocument} +\newif\ifpreprint \preprintfalse +\newif\ifnonatbib \nonatbibfalse +\newif\iflongmktitle \longmktitlefalse +\newif\ifnopreprintline \nopreprintlinefalse +\newif\ifdoubleblind \doubleblindfalse + +\newif\ifuseexplthreefunctions \useexplthreefunctionsfalse + +\IfFileExists{expl3.sty}{% + \global\useexplthreefunctionstrue% + \RequirePackage{expl3}}{} +\ifuseexplthreefunctions\relax% +\IfFileExists{xparse.sty}{\RequirePackage{xparse}}{} +\IfFileExists{etoolbox.sty}{\RequirePackage{etoolbox}}{} +\fi + +\def\@blstr{1} +\newdimen\@bls +\@bls=\baselineskip + +\def\@finalWarning{% + *****************************************************\MessageBreak + This document is typeset in the CRC style which\MessageBreak + is not suitable for submission.\MessageBreak + \MessageBreak + Please typeset again using 'preprint' option\MessageBreak + for creating PDF suitable for submission.\MessageBreak + ******************************************************\MessageBreak +} + +\DeclareOption{preprint}{\global\preprinttrue + \gdef\@blstr{1}\xdef\jtype{0}% + \AtBeginDocument{\@twosidefalse\@mparswitchfalse}} +\DeclareOption{nopreprintline}{\global\nopreprintlinetrue} +\DeclareOption{final}{\gdef\@blstr{1}\global\preprintfalse} +\DeclareOption{review}{\global\preprinttrue\gdef\@blstr{1.5}} +\DeclareOption{authoryear}{\xdef\@biboptions{round,authoryear}} +\DeclareOption{number}{\xdef\@biboptions{numbers}} +\DeclareOption{numbers}{\xdef\@biboptions{numbers}} +\DeclareOption{nonatbib}{\global\nonatbibtrue} +\DeclareOption{longtitle}{\global\longmktitletrue} +\DeclareOption{5p}{\xdef\jtype{5}\global\preprintfalse + \ExecuteOptions{twocolumn}} + \def\jtype{0} +\DeclareOption{3p}{\xdef\jtype{3}\global\preprintfalse} +\DeclareOption{1p}{\xdef\jtype{1}\global\preprintfalse + \AtBeginDocument{\@twocolumnfalse}} +\DeclareOption{times}{\IfFileExists{txfonts.sty}% + {\AtEndOfClass{\RequirePackage{txfonts}% + \gdef\ttdefault{cmtt}% + \let\iint\relax + \let\iiint\relax + \let\iiiint\relax + \let\idotsint\relax + \let\openbox\relax}}{\AtEndOfClass{\RequirePackage{times}}}} + +\DeclareOption{endfloat}{\IfFileExists{endfloat.sty} + {\AtEndOfClass{\RequirePackage[markers]{endfloat}}}{}} +\DeclareOption{endfloats}{\IfFileExists{endfloat.sty} + {\AtEndOfClass{\RequirePackage[markers]{endfloat}}}{}} +\DeclareOption{numafflabel} + {\AtBeginDocument{\def\theaffn{\arabic{affn}}}} %*% +\DeclareOption{lefttitle} + {\AtBeginDocument{\def\elsarticletitlealign{flushleft}}} %*% +\DeclareOption{centertitle} + {\AtBeginDocument{\def\elsarticletitlealign{center}}} %*% +\DeclareOption{reversenotenum} + {\AtBeginDocument{\def\theaffn{\arabic{affn}} + \def\thefnote{\alph{fnote}}}} +\DeclareOption{doubleblind}{\doubleblindtrue} + +\ExecuteOptions{a4paper,10pt,oneside,onecolumn,number,preprint,centertitle} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions +\LoadClass{article} +\RequirePackage{graphicx} +\let\comma\@empty +\let\tnotesep\@empty +\let\@title\@empty + +\def\useelstitle{} + +\def\title#1{\g@addto@macro\@title{#1% + \global\let\tnoteref\@gobble}% + \g@addto@macro\useelstitle{#1}} + +\def\elsLabel#1{\@bsphack\protected@write\@auxout{}% + {\string\Newlabel{#1}{\@currentlabel}}\@esphack} +\def\Newlabel#1#2{\expandafter\xdef\csname X@#1\endcsname{#2}} + +\def\elsRef#1{\@ifundefined{X@#1}{0}{\csname X@#1\endcsname}} + +\let\@tnotemark\@empty + +\ifdoubleblind + \def\tnotemark[#1]{} +\else + \def\tnotemark[#1]{\@for\mytmark:=#1\do{% + \expandafter\ifcase\elsRef{\mytmark}\or$^{\star}$\or + $^{,\star\star}$\fi + }% +} +\fi + +\def\tnoteref#1{\tnotemark[{#1}]} +\let\@tnotes\@empty +\newcounter{tnote} +\def\tnotetext[#1]#2{\g@addto@macro\@tnotes{% + \stepcounter{tnote}\elsLabel{#1}% + \def\thefootnote{\ifcase\c@tnote\or$\star$\or$\star\star$\fi}% + \footnotetext{#2}}} + +\let\@nonumnotes\@empty +\def\nonumnote#1{\g@addto@macro\@nonumnotes{% + \let\thefootnote\relax\footnotetext{#1}}} + +\newcounter{fnote} +\def\thefnote{\arabic{fnote}} +\def\fnmark[#1]{\let\comma\@empty + \def\@fnmark{\@for\@@fnmark:=#1\do{% + \edef\fnotenum{\@ifundefined{X@\@@fnmark}{1}{\elsRef{\@@fnmark}}}% + \unskip\comma\fnotenum\let\comma,}}% +} + +\def\fnref#1{\fnmark[#1]} + +\let\@fnotes\@empty\let\@fnmark\@empty +\def\fntext[#1]#2{\g@addto@macro\@fnotes{% + \refstepcounter{fnote}\elsLabel{#1}% + \def\thefootnote{\c@fnote}% + \global\setcounter{footnote}{\c@fnote}% + \footnotetext{#2}}} + +\def\cormark[#1]{\edef\cnotenum{\elsRef{#1}}% + \unskip\textsuperscript{\sep\ifcase\cnotenum\or + $\ast$\or$\ast\ast$\fi\hspace{-1pt}}\let\sep=,} + +\let\@cormark\@empty +\let\@cornotes\@empty +\newcounter{cnote} +\def\cortext[#1]#2{\g@addto@macro\@cornotes{% + \refstepcounter{cnote}\elsLabel{#1}% + \def\thefootnote{\ifcase\thecnote\or$\ast$\or + $\ast\ast$\fi}% + \footnotetext{#2}}} + +\let\@corref\@empty +\def\corref#1{\edef\cnotenum{\elsRef{#1}}% + \edef\@corref{\ifcase\cnotenum\or + $\ast$\or$\ast\ast$\fi\hskip-1pt}} + +\def\resetTitleCounters{\c@cnote=0 + \c@fnote=0 \c@tnote=0 \c@footnote=0} + +\let\eadsep\@empty +\def\@elseads{} +\let\@elsuads\@empty +\let\@cormark\@empty +\def\hashchar{\expandafter\@gobble\string\~} +\def\underscorechar{\expandafter\@gobble\string\_} +\def\lbracechar{\expandafter\@gobble\string\{} +\def\rbracechar{\expandafter\@gobble\string\}} + +\gdef\ead{\@ifnextchar[{\@uad}{\@ead}} +\gdef\@ead#1{\bgroup + \def\_{\underscorechar}% + \def\{{\lbracechar}% + \def~{\hashchar}% + \def\}{\rbracechar}% + \edef\tmp{\the\@eadauthor}% + \immediate\write\@auxout{\string\emailauthor + {#1}{\expandafter\strip@prefix\meaning\tmp}}% + \egroup +} +\newcounter{ead} +\gdef\emailauthor#1#2{\stepcounter{ead}% + \g@addto@macro\@elseads{\raggedright% + \let\corref\@gobble\def\@@tmp{#1}% + \eadsep{\ttfamily\expandafter\strip@prefix\meaning\@@tmp} + (#2)\def\eadsep{\unskip,\space}}% +} +\gdef\@uad[#1]#2{\bgroup + \def~{\hashchar}% + \def\_{\underscorechar}% + \def~{\hashchar}% + \def\}{\rbracechar}% + \edef\tmp{\the\@eadauthor} + \immediate\write\@auxout{\string\urlauthor + {#2}{\expandafter\strip@prefix\meaning\tmp}}% + \egroup +} +\gdef\urlauthor#1#2{\g@addto@macro\@elsuads{\let\corref\@gobble% + \def\@@tmp{#1}\raggedright\eadsep + {\ttfamily\expandafter\strip@prefix\meaning\@@tmp}\space(#2)% + \def\eadsep{\unskip,\space}}% +} + +\def\elsauthors{} +\def\useauthors{} +\def\elsprelimauthors{} + +\def\pprinttitle{} +\let\authorsep\@empty +\let\prelimauthorsep\@empty +\let\sep\@empty +\newcounter{author} +\def\author{\@ifnextchar[{\@@author}{\@author}} + +\newtoks\@eadauthor +\def\@@author[#1]#2{% + \g@addto@macro\elsprelimauthors{% + \prelimauthorsep#2% + \def\prelimauthorsep{\unskip,\space}}% + \g@addto@macro\elsauthors{% + \def\baselinestretch{1}% + \authorsep#2\unskip\textsuperscript{%#1% + \@for\@@affmark:=#1\do{% + \edef\affnum{\@ifundefined{X@\@@affmark}{1}{\elsRef{\@@affmark}}}% + \unskip\sep\affnum\let\sep=,}% + \ifx\@fnmark\@empty\else\unskip\sep\@fnmark\let\sep=,\fi + \ifx\@corref\@empty\else\unskip\sep\@corref\let\sep=,\fi + }% + \def\authorsep{\unskip,\space}% + \global\let\sep\@empty\global\let\@corref\@empty + \global\let\@fnmark\@empty}% + \@eadauthor={#2}% + \g@addto@macro\useauthors{#2; }% +} + +\def\@author#1{% + \g@addto@macro\elsprelimauthors{% + \prelimauthorsep#1% + \def\prelimauthorsep{\unskip,\space}}% + \g@addto@macro\elsauthors{\normalsize% + \def\baselinestretch{1}% + \upshape\authorsep#1\unskip\textsuperscript{% + \ifx\@fnmark\@empty\else\unskip\sep\@fnmark\let\sep=,\fi + \ifx\@corref\@empty\else\unskip\sep\@corref\let\sep=,\fi + }% + \def\authorsep{\unskip,\space}% + \global\let\@fnmark\@empty + \global\let\@corref\@empty \global\let\sep\@empty}% + \@eadauthor={#1}% + \g@addto@macro\useauthors{#1; }% +} + +\AtBeginDocument{% + \@ifpackageloaded{hyperref}{% + \expandafter\gdef\csname Hy@title\endcsname{\useelstitle}% + \expandafter\gdef\csname Hy@author\endcsname{\useauthors}% + }{} +} + +\def\elsaddress{} +\def\addsep{\par\vskip6pt} + +\def\@alph#1{% + \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or + l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or + y\or z% + \or aa\or ab\or ac\or ad\or ae\or af\or ag\or ah\or ai\or aj\or + ak\or al\or am\or an\or ao\or ap\or aq\or ar\or as\or at\or au\or + av\or aw\or ax\or ay\or az% + \or ba\or bb\or bc\or bd\or be\or bf\or bg\or bh\or bi\or bj\or + bk\or bl\or bm\or bn\or bo\or bp\or bq\or br\or bs\or bt\or bu\or + bv\or bw\or bx\or by\or bz% + \or ca\or cb\or cc\or cd\or ce\or cf\or cg\or ch\or ci\or cj\or + ck\or cl\or cm\or cn\or co\or cp\or cq\or cr\or cs\or ct\or cu\or + cv\or cw\or cx\or cy\or cz% + \or da\or db\or dc\or dd\or de\or df\or dg\or dh\or di\or dj\or + dk\or dl\or dm\or dn\or do\or dp\or dq\or dr\or ds\or dt\or du\or + dv\or dw\or dx\or dy\or dz% + \or ea\or eb\or ec\or ed\or ee\or ef\or eg\or eh\or ei\or ej\or + ek\or el\or em\or en\or eo\or ep\or eq\or er\or es\or et\or eu\or + ev\or ew\or ex\or ey\or ez% + \or fa\or fb\or fc\or fd\or fe\or ff\or fg\or fh\or fi\or fj\or + fk\or fl\or fm\or fn\or fo\or fp\or fq\or fr\or fs\or ft\or fu\or + fv\or fw\or fx\or fy\or fz% + \or ga\or gb\or gc\or gd\or ge\or gf\or gg\or gh\or gi\or gj\or + gk\or gl\or gm\or gn\or go\or gp\or gq\or gr\or gs\or gt\or gu\or + gv\or gw\or gx\or gy\or gz% + \else\@ctrerr\fi} + +\newcounter{affn} +\renewcommand\theaffn{\alph{affn}} + +\ifuseexplthreefunctions\relax% + \ExplSyntaxOn + \def\ca_affitem_postskip{\mbox{~}\unskip\ignorespaces} + %%Author Address + \DeclareDocumentCommand \ca_organization { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_postal_code { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_aff_city { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_address_line { O{,}m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_state { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_country { O{ } m } + { + % #2 #1 + \csgappto { ca_affiliation_values } { #2 #1 } + } + + \DeclareDocumentCommand \ca_stm_organization { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_postal_code { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_aff_city { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_aff_address_line { O{,}m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_state { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_country { O{ } m } + { + #2 #1 + } + + \keys_define:nn { stm / affiliation } + { + op .tl_set_x:N = \l_organization_punc_tl, + oraganizationsep .tl_set_x:N = \l_organization_punc_tl, + ap .tl_set_x:N = \l_address_line_punc_tl, + addresslinesep .tl_set_x:N = \l_address_line_punc_tl, + cp .tl_set_x:N = \l_city_punc_tl, + citysep .tl_set_x:N = \l_city_punc_tl, + pp .tl_set_x:N = \l_postal_code_punc_tl, + postcodesep .tl_set_x:N = \l_postal_code_punc_tl, + sp .tl_set_x:N = \l_state_punc_tl, + statesep .tl_set_x:N = \l_state_punc_tl, + o .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + organization .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + a .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + addressline .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + c .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + city .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + p .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + postcode .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + s .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + state .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + orp .tl_set_x:N = \l_organization_punc_tl, + adp .tl_set_x:N = \l_address_line_punc_tl, + cip .tl_set_x:N = \l_city_punc_tl, + pcp .tl_set_x:N = \l_postal_code_punc_tl, + stp .tl_set_x:N = \l_state_punc_tl, + cyp .tl_set_x:N = \l_country_punc_tl, + or .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + ad .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + ci .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + pc .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + st .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + cy .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + country .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + unknown .code:n = { + \ifstrempty { #1 } { + \csxappto { ca_affiliation_values } + { {\l_keys_key_tl}~ } + } { + \csxappto { ca_affiliation_values } + { {#1}~ } + } + } + } + + \cs_set:Npn \__reset_affiliation: + { + \tl_gset:Nn \l_organization_punc_tl { , } + \tl_gset:Nn \l_address_line_punc_tl { , } + \tl_gset:Nn \l_city_punc_tl { , } + \tl_gset:Nn \l_postal_code_punc_tl { , } + \tl_gset:Nn \l_state_punc_tl { , } + \tl_gset:Nn \l_country_punc_tl { } + } + + \DeclareDocumentCommand\affiliation{ o m }{ + \__reset_affiliation: + \csgdef { ca_affiliation_values } { } + \IfNoValueTF { #2 } + { } + { + \keys_set:nn { stm / affiliation } { #2 } + } + \csgappto{elsaddress}{ + \def\baselinestretch{1}% + \refstepcounter{affn} + \xdef\@currentlabel{\theaffn} + \IfNoValueTF { #1 } + { } + { \elsLabel{#1} } + \textsuperscript{\theaffn}} + \csxappto{elsaddress}{ + \csuse { ca_affiliation_values } + \par + } + } + \ExplSyntaxOff + \else% + \def\caaffitempostskip{\space} + + \DeclareRobustCommand\caorganization[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\capostalcode[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\caaffcity[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\caaddressline[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\castate[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\cacountry[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\castmorganization[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmpostalcode[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmaffcity[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmaddressline[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmstate[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmcountry[2][,]{% + #2#1\caaffitempostskip% + } + + \define@key{affiliation}{op}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{orp}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{organizationsep}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{ap}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{adp}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{addresslinesep}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{cp}{\xdef\@citypunc{#1}} + \define@key{affiliation}{cip}{\xdef\@citypunc{#1}} + \define@key{affiliation}{cyp}{\xdef\@countrypunc{#1}} + \define@key{affiliation}{citysep}{\xdef\@citypunc{#1}} + \define@key{affiliation}{pp}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{pop}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{postcodesep}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{sp}{\xdef\@statepunc{#1}} + \define@key{affiliation}{stp}{\xdef\@statepunc{#1}} + \define@key{affiliation}{statesep}{\xdef\@statepunc{#1}} + \define@key{affiliation}{countrysep}{\xdef\@countrypunc{#1}} + + \define@key{affiliation}{organization}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{addressline}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{city}{% + \caaffcity[\@citypunc]{#1}} + \define@key{affiliation}{postcode}{% + \capostalcode[\@postcodepunc]{#1}} + \define@key{affiliation}{state}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{or}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{ad}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{ci}{% + \caaffcity[\@citypunc]{#1}} + \define@key{affiliation}{po}{% + \capostalcode[\@postcodepunc]{#1}} + \define@key{affiliation}{st}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{o}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{a}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{c}{% + \cacity[\@citypunc]{#1}} + \define@key{affiliation}{p}{% + \capostcode[\@postcodepunc]{#1}} + \define@key{affiliation}{s}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{cy}{% + \cacountry[\@countrypunc]{#1}} + \define@key{affiliation}{country}{% + \cacountry[\@countrypunc]{#1}} + + \gdef\@resetaffiliation{% + \gdef\@organizationpunc{,}% + \gdef\@addresslinepunc{,}% + \gdef\@citypunc{,}% + \gdef\@statepunc{,}% + \gdef\@postcodepunc{,}% + \gdef\@countrypunc{}% + } + + \def\affiliation{\@ifnextchar[{\@@affiliation}{\@affiliation}} + + \newcommand*{\newstmrobustcmd}{} + \protected\def\newstmrobustcmd{\@star@or@long\stmetb@new@command} + + \def\stmetb@new@command#1{\@testopt{\stmetb@newcommand#1}0} + + \def\stmetb@newcommand#1[#2]{% + \@ifnextchar[%] + {\stmetb@xargdef#1[#2]} + {\ifx\l@ngrel@x\relax + \let\l@ngrel@x\protected + \else + \protected\def\l@ngrel@x{\protected\long}% + \fi + \@argdef#1[#2]}} + + \long\def\stmetb@xargdef#1[#2][#3]#4{% + \@ifdefinable#1{% + \expandafter\protected + \expandafter\def + \expandafter#1% + \expandafter{% + \expandafter\@testopt + \csname\string#1\endcsname{#3}}% + \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}} + % + \newcommand{\ifstmundef}[1]{% + \ifdefined#1% + \ifx#1\relax + \expandafter\expandafter + \expandafter\@firstoftwo + \else + \expandafter\expandafter + \expandafter\@secondoftwo + \fi + \else + \expandafter\@firstoftwo + \fi} + \newcommand{\stmexpandonce}[1]{% + \unexpanded\expandafter{#1}} + \newstmrobustcmd{\gstmappto}[2]{% + \ifundef{#1} + {\xdef#1{\unexpanded{#2}}} + {\xdef#1{\stmexpandonce#1\unexpanded{#2}}}} + \newstmrobustcmd{\xstmappto}[2]{% + \ifstmundef{#1} + {\xdef#1{#2}} + {\xdef#1{\stmexpandonce#1#2}}} + + \long\def\@@affiliation[#1]#2{% + \@resetaffiliation% + \gdef\caaffiliationvalues{}% + \elsLabel{#1}% + \setkeys{affiliation}{#2}% + \g@addto@macro\elsaddress{% + \def\baselinestretch{1}% + \refstepcounter{affn}% + \xdef\@currentlabel{\theaffn}% + \elsLabel{#1}% + \textsuperscript{\theaffn}} + \xstmappto\elsaddress{\caaffiliationvalues\par}} + + \long\def\@affiliation#1{% + \@resetaffiliation% + \gdef\caaffiliationvalues{}% + \setkeys{affiliation}{#1}% + \g@addto@macro\elsauthors{% + \def\baselinestretch{1}}% + \xstmappto\elsaddress{\caaffiliationvalues\par}} +\fi + +\def\address{\@ifnextchar[{\@@address}{\@address}} + +\long\def\@@address[#1]#2{\g@addto@macro\elsaddress{% + \def\baselinestretch{1}% + \refstepcounter{affn} + \xdef\@currentlabel{\theaffn} + \elsLabel{#1}% + \textsuperscript{\theaffn}#2\par}} + +\long\def\@address#1{\g@addto@macro\elsauthors{% + \def\baselinestretch{1}% + \addsep\footnotesize\itshape#1\def\addsep{\par\vskip6pt}% + \def\authorsep{\par\vskip8pt}}} + +\newbox\absbox +\let\@elsarticleabstitle\@empty %*% +\def\abstracttitle#1{\gdef\@elsarticleabstitle{#1}} %*% +\abstracttitle{Abstract} %*% +\renewenvironment{abstract}{\global\setbox\absbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip\textbf{\@elsarticleabstitle} %*% + \par\medskip\noindent\unskip\ignorespaces} + {\egroup} + +\newbox\elsarticlehighlightsbox +\newbox\elsarticlegrabsbox +\def\@elsarticlehighlightstitle{Highlights} +\def\@elsarticlegrabstitle{Graphical Abstract} +\newif\ifelsprelimpagegrabs\global\elsprelimpagegrabsfalse +\newif\ifelsprelimpagehl\global\elsprelimpagehlfalse +\def\elsarticleprelims{% + \ifelsprelimpagegrabs\relax% + \thispagestyle{empty}% + \unvbox\elsarticlegrabsbox% + \pagebreak\clearpage% + \fi% + \ifelsprelimpagehl\relax% + \thispagestyle{empty} + \unvbox\elsarticlehighlightsbox% + \pagebreak\clearpage% + \setcounter{page}{1}% + \fi% +} +\newenvironment{highlights}{% + \global\elsprelimpagehltrue% + \global\setbox\elsarticlehighlightsbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip{\Large\@elsarticlehighlightstitle}%*% + \par\vskip12pt\noindent\unskip\ignorespaces\textbf{\@title}% + \ifx\elsprelimauthors\@empty\relax\else% + \par\vskip6pt\noindent\unskip\ignorespaces\elsprelimauthors% + \fi% + \par\medskip\noindent\unskip\ignorespaces + \begin{itemize} + } + {\end{itemize} + \egroup} +\newenvironment{graphicalabstract}{% + \global\elsprelimpagegrabstrue% + \global\setbox\elsarticlegrabsbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip{\Large\@elsarticlegrabstitle}%*% + \par\vskip12pt\noindent\unskip\ignorespaces\textbf{\@title}% + \ifx\elsprelimauthors\@empty\relax\else% + \par\vskip6pt\noindent\unskip\ignorespaces\elsprelimauthors% + \fi% + \par\medskip\noindent\unskip\ignorespaces} + {\egroup} + +\newbox\keybox +\let\@elsarticlekwdtitle\@empty %*% +\def\keywordtitle#1{\gdef\@elsarticlekwdtitle{#1}} %*% +\def\keywordtitlesep#1{\gdef\@elsarticlekeywordtitlesep{#1}} %*% +\keywordtitle{Keywords} %*% +\keywordtitlesep{:\ } +\def\keyword{% + \def\sep{\unskip, }% + \def\MSC{\@ifnextchar[{\@MSC}{\@MSC[2000]}} + \def\@MSC[##1]{\par\leavevmode\hbox {\it ##1~MSC:\space}}% + \def\PACS{\par\leavevmode\hbox {\it PACS:\space}}% + \def\JEL{\par\leavevmode\hbox {\it JEL:\space}}% + \global\setbox\keybox=\vbox\bgroup\hsize=\textwidth + \normalsize\normalfont\def\baselinestretch{1} + \parskip\z@ + \noindent\textit{\@elsarticlekwdtitle\@elsarticlekeywordtitlesep} + \raggedright % Keywords are not justified. + \ignorespaces} +\def\endkeyword{\par \egroup} + +\newdimen\Columnwidth +\Columnwidth=\columnwidth + +\def\printFirstPageNotes{% + \iflongmktitle + \let\columnwidth=\textwidth + \fi +\ifdoubleblind +\else + \ifx\@tnotes\@empty\else\@tnotes\fi + \ifx\@nonumnotes\@empty\else\@nonumnotes\fi + \ifx\@cornotes\@empty\else\@cornotes\fi + \ifx\@elseads\@empty\relax\else + \let\thefootnote\relax + \footnotetext{\ifnum\theead=1\relax + \textit{Email address:\space}\else + \textit{Email addresses:\space}\fi + \@elseads}\fi + \ifx\@elsuads\@empty\relax\else + \let\thefootnote\relax + \footnotetext{\textit{URL:\space}% + \@elsuads}\fi +\fi + \ifx\@fnotes\@empty\else\@fnotes\fi + \iflongmktitle\if@twocolumn + \let\columnwidth=\Columnwidth\fi\fi +} + +%% Pushing text to begin on newpage %*% +\def\newpage@after@title{title} +\def\newpage@after@subtitle{subtitle} +\def\newpage@after@author{author} +\def\newpage@after@abstract{abstract} +\def\newpageafter#1% + {\gdef\@elsarticlenewpageafter{#1}} + +\long\def\pprintMaketitle{\clearpage + \iflongmktitle\if@twocolumn\let\columnwidth=\textwidth\fi\fi + \resetTitleCounters + \def\baselinestretch{1}% + \printFirstPageNotes + \begin{\elsarticletitlealign}% + \thispagestyle{pprintTitle}% + \def\baselinestretch{1}% + \Large\@title\par\vskip18pt% + \ifx\@elsarticlenewpageafter\newpage@after@title% %*% + \newpage + \fi% + \ifdoubleblind + \vspace*{2pc} + \else + \normalsize\elsauthors\par\vskip10pt + \footnotesize\itshape\elsaddress\par\vskip36pt + \fi + \ifx\@elsarticlenewpageafter\newpage@after@author% %*% + \newpage + \fi% + \hrule\vskip12pt + \ifvoid\absbox\else\unvbox\absbox\par\vskip10pt\fi + \ifvoid\keybox\else\unvbox\keybox\par\vskip10pt\fi + \ifvoid\absbox\else\hrule\vskip12pt\fi + \ifx\@elsarticlenewpageafter\newpage@after@abstract% %*% + \newpage + \fi% + \end{\elsarticletitlealign}% + \gdef\thefootnote{\arabic{footnote}}% + } + +\def\printWarning{% + \mbox{}\par\vfill\par\bgroup + \fboxsep12pt\fboxrule1pt + \hspace*{.18\textwidth} + \fcolorbox{gray50}{gray10}{\box\warnbox} + \egroup\par\vfill\thispagestyle{empty} + \setcounter{page}{0} + \clearpage} + +\long\def\finalMaketitle{% + \resetTitleCounters + \def\baselinestretch{1}% + \MaketitleBox + \thispagestyle{pprintTitle}% + \gdef\thefootnote{\arabic{footnote}}% + } + +\long\def\MaketitleBox{% + \resetTitleCounters + \def\baselinestretch{1}% + \begin{\elsarticletitlealign}% + \def\baselinestretch{1}% + \Large\@title\par\vskip18pt + \ifdoubleblind + \vspace*{2pc} + \else + \normalsize\elsauthors\par\vskip10pt + \footnotesize\itshape\elsaddress\par\vskip36pt + \fi + \hrule\vskip12pt + \ifvoid\absbox\else\unvbox\absbox\par\vskip10pt\fi + \ifvoid\keybox\else\unvbox\keybox\par\vskip10pt\fi + \ifvoid\absbox\else\hrule\vskip12pt\fi + \end{\elsarticletitlealign}% +} + +\def\FNtext#1{\par\bgroup\footnotesize#1\egroup} +\newdimen\space@left +\def\alarm#1{\typeout{******************************}% + \typeout{#1}% + \typeout{******************************}% +} + +\def\titlespancalculator#1#2#3#4{% + % break count + \@tempcnta=#4\relax% + % pagebreakcount increment + \advance\@tempcnta by 1\relax% + % title page height + \@tempdima=#1\relax% + % Page height - title page notes height (only for first break) + % Page height - textheight (for remaining breaks) + % Page height - title page notes height + \@tempdimb=#2\relax% + % Remaining title page height + \advance\@tempdima -\the\@tempdimb% + % Checks if remaining title page + % height less than textheight + \ifdim\the\@tempdima>#3\relax% + \titlespancalculator% + {\the\@tempdima}{#3}{#3}{\the\@tempcnta}%Break again + \else% + % Save break count and exit. + \xdef\savetitlepagespan{\the\@tempcnta}% + \fi% +}% + +\long\def\myfor#1#2#3{% + \@tempcnta=#1\relax% + \ifnum#1<#2\relax% + \advance\@tempcnta by 1\relax% + #3% + \myfor{\the\@tempcnta}{#2}{#3}% + \fi} + +\long\def\getSpaceLeft{%\global\@twocolumnfalse% + \global\setbox0=\vbox{\hsize=\textwidth\MaketitleBox}% + \global\setbox1=\vbox{\hsize=\textwidth + \let\footnotetext\FNtext + \printFirstPageNotes}% + \xdef\noteheight{\the\ht1}% + \xdef\titleheight{\the\ht0}% + \@tempdima=\vsize + \advance\@tempdima-\noteheight + \advance\@tempdima-1\baselineskip + \xdef\savefpageheight{\the\@tempdima}% + \setbox2=\vbox{\titlespancalculator{\titleheight}% + {\savefpageheight}{\textheight}{0}}% +} + + \skip\footins=24pt + +\newbox\els@boxa +\newbox\els@boxb + +\ifpreprint + \def\maketitle{\elsarticleprelims\pprintMaketitle} + \else + \ifnum\jtype=1 + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \box\els@boxb} + \else% + \fi% + \box0% + \else + \finalMaketitle\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \else + \ifnum\jtype=5 + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \twocolumn[\box\els@boxb]} + \else% + \fi% + \twocolumn[\box0]%\printFirstPageNotes + \else + \twocolumn[\finalMaketitle]\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}} + \else + \if@twocolumn + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \twocolumn[\box\els@boxb]} + \else% + \fi% + \twocolumn[\box0]% + \else + \twocolumn[\finalMaketitle]\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \else + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \box\els@boxb} + \else% + \fi% + \box0% + \else + \elsarticleprelims% + \finalMaketitle\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \fi + \fi + \fi +\fi + +\let\@elsarticlemyfooter\@empty +\let\@elsarticlemyfooteralign\@empty +\def\@elsarticlemyfooteralignleft{L} +\def\@elsarticlemyfooteralignright{R} +\def\@elsarticlemyfooteraligncenter{C} + +\def\myfooter[#1]#2 %*% + {\gdef\@elsarticlemyfooteralign{#1} + \gdef\@elsarticlemyfooter{#2}} + +\def\myfooterfont#1{\gdef\@myfooterfont{#1}} +\myfooterfont{\footnotesize\itshape} +\def\ps@pprintTitle{% + \let\@oddhead\@empty + \let\@evenhead\@empty + \def\@oddfoot + {\hbox to \textwidth% + {\ifnopreprintline\relax\else + \@myfooterfont% + \ifx\@elsarticlemyfooteralign\@elsarticlemyfooteraligncenter% + \hfil\@elsarticlemyfooter\hfil% + \else% + \ifx\@elsarticlemyfooteralign\@elsarticlemyfooteralignleft% + \@elsarticlemyfooter\hfill{}% + \else% + \ifx\@elsarticlemyfooteralign\@elsarticlemyfooteralignright% + {}\hfill\@elsarticlemyfooter% + \else% + % Preprint submitted to \ifx\@journal\@empty% + % Elsevier% + \ifx\@journal\@empty\else + Preprint submitted to + \@journal\hfill\@date\fi\fi% + \fi% + \fi% + \fi% + } + }% + \let\@evenfoot\@oddfoot} +\def\@seccntDot{.} +\def\@seccntformat#1{\csname the#1\endcsname\@seccntDot\hskip 0.5em} + +\renewcommand\section{\@startsection {section}{1}{\z@}% + {18\p@ \@plus 6\p@ \@minus 3\p@}% + {9\p@ \@plus 6\p@ \@minus 3\p@}% + {\normalsize\bfseries\boldmath}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {12\p@ \@plus 6\p@ \@minus 3\p@}% + {3\p@ \@plus 6\p@ \@minus 3\p@}% + {\normalfont\normalsize\itshape}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {12\p@ \@plus 6\p@ \@minus 3\p@}% + {\p@}% + {\normalfont\normalsize\itshape}} + +\def\paragraph{\secdef{\els@aparagraph}{\els@bparagraph}} +\def\els@aparagraph[#1]#2{\elsparagraph[#1]{#2.}} +\def\els@bparagraph#1{\elsparagraph*{#1.}} + +\newcommand\elsparagraph{\@startsection{paragraph}{4}{0\z@}% + {10\p@ \@plus 6\p@ \@minus 3\p@}% + {-6\p@}% + {\normalfont\itshape}} +\newdimen\leftMargin +\leftMargin=2em +\newtoks\@enLab %\newtoks\@enfont +\def\@enQmark{?} +\def\@enLabel#1#2{% + \edef\@enThe{\noexpand#1{\@enumctr}}% + \@enLab\expandafter{\the\@enLab\csname the\@enumctr\endcsname}% + \@enloop} +\def\@enSpace{\afterassignment\@enSp@ce\let\@tempa= } +\def\@enSp@ce{\@enLab\expandafter{\the\@enLab\space}\@enloop} +\def\@enGroup#1{\@enLab\expandafter{\the\@enLab{#1}}\@enloop} +\def\@enOther#1{\@enLab\expandafter{\the\@enLab#1}\@enloop} +\def\@enloop{\futurelet\@entemp\@enloop@} +\def\@enloop@{% + \ifx A\@entemp \def\@tempa{\@enLabel\Alph }\else + \ifx a\@entemp \def\@tempa{\@enLabel\alph }\else + \ifx i\@entemp \def\@tempa{\@enLabel\roman }\else + \ifx I\@entemp \def\@tempa{\@enLabel\Roman }\else + \ifx 1\@entemp \def\@tempa{\@enLabel\arabic}\else + \ifx \@sptoken\@entemp \let\@tempa\@enSpace \else + \ifx \bgroup\@entemp \let\@tempa\@enGroup \else + \ifx \@enum@\@entemp \let\@tempa\@gobble \else + \let\@tempa\@enOther + \fi\fi\fi\fi\fi\fi\fi\fi + \@tempa} +\newlength{\@sep} \newlength{\@@sep} +\setlength{\@sep}{.5\baselineskip plus.2\baselineskip + minus.2\baselineskip} +\setlength{\@@sep}{.1\baselineskip plus.01\baselineskip + minus.05\baselineskip} +\providecommand{\sfbc}{\rmfamily\upshape} +\providecommand{\sfn}{\rmfamily\upshape} +\def\@enfont{\ifnum \@enumdepth >1\let\@nxt\sfn \else\let\@nxt\sfbc \fi\@nxt} +\def\enumerate{% + \ifnum \@enumdepth >3 \@toodeep\else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}\fi + \@ifnextchar[{\@@enum@}{\@enum@}} +\def\@@enum@[#1]{% + \@enLab{}\let\@enThe\@enQmark + \@enloop#1\@enum@ + \ifx\@enThe\@enQmark\@warning{The counter will not be printed.% + ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi + \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}% + \expandafter\let\csname the\@enumctr\endcsname\@enThe + \csname c@\@enumctr\endcsname7 + \expandafter\settowidth + \csname leftmargin\romannumeral\@enumdepth\endcsname + {\the\@enLab\hskip\labelsep}% + \@enum@} +\def\@enum@{\list{{\@enfont\csname label\@enumctr\endcsname}}% + {\usecounter{\@enumctr}\def\makelabel##1{\hss\llap{##1}}% + \ifnum \@enumdepth>1\setlength{\topsep}{\@@sep}\else + \setlength{\topsep}{\@sep}\fi + \ifnum \@enumdepth>1\setlength{\itemsep}{0pt plus1pt minus1pt}% + \else \setlength{\itemsep}{\@@sep}\fi + %\setlength\leftmargin{\leftMargin}%%%{1.8em} + \setlength{\parsep}{0pt plus1pt minus1pt}% + \setlength{\parskip}{0pt plus1pt minus1pt} + }} + +\def\endenumerate{\par\ifnum \@enumdepth >1\addvspace{\@@sep}\else + \addvspace{\@sep}\fi \endlist} + +\def\sitem{\@noitemargtrue\@item[\@itemlabel *]} + +\def\itemize{\@ifnextchar[{\@Itemize}{\@Itemize[]}} + +\def\@Itemize[#1]{\def\next{#1}% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \ifx\next\@empty\else\expandafter\def\csname + labelitem\romannumeral\the\@itemdepth\endcsname{#1}\fi% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \expandafter\list\csname\@itemitem\endcsname + {\def\makelabel##1{\hss\llap{##1}}}% + \fi} +\def\newdefinition#1{% + \@ifnextchar[{\@odfn{#1}}{\@ndfn{#1}}}%] +\def\@ndfn#1#2{% + \@ifnextchar[{\@xndfn{#1}{#2}}{\@yndfn{#1}{#2}}} +\def\@xndfn#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@dfncountersep + \@dfncounter{#1}}% + \global\@namedef{#1}{\@dfn{#1}{#2}}% + \global\@namedef{end#1}{\@enddefinition}}} +\def\@yndfn#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@dfncounter{#1}}% + \global\@namedef{#1}{\@dfn{#1}{#2}}% + \global\@namedef{end#1}{\@enddefinition}}} +\def\@odfn#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}} + \global\@namedef{#1}{\@dfn{#2}{#3}}% + \global\@namedef{end#1}{\@enddefinition}}}} +\def\@dfn#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@ydfn{#1}{#2}}{\@xdfn{#1}{#2}}} +\def\@xdfn#1#2{% + \@begindefinition{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@ydfn#1#2[#3]{% + \@opargbegindefinition{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +\def\@dfncounter#1{\noexpand\arabic{#1}} +\def\@dfncountersep{.} +\def\@begindefinition#1#2{\trivlist + \item[\hskip\labelsep{\bfseries #1\ #2.}]\upshape} +\def\@opargbegindefinition#1#2#3{\trivlist + \item[\hskip\labelsep{\bfseries #1\ #2\ (#3).}]\upshape} +\def\@enddefinition{\endtrivlist} + +\def\@begintheorem#1#2{\trivlist + \let\baselinestretch\@blstr + \item[\hskip \labelsep{\bfseries #1\ #2.}]\itshape} +\def\@opargbegintheorem#1#2#3{\trivlist + \let\baselinestretch\@blstr + \item[\hskip \labelsep{\bfseries #1\ #2\ (#3).}]\itshape} + +\def\newproof#1{% + \@ifnextchar[{\@oprf{#1}}{\@nprf{#1}}} +\def\@nprf#1#2{% + \@ifnextchar[{\@xnprf{#1}{#2}}{\@ynprf{#1}{#2}}} +\def\@xnprf#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@prfcountersep + \@prfcounter{#1}}% + \global\@namedef{#1}{\@prf{#1}{#2}}% + \global\@namedef{end#1}{\@endproof}}} +\def\@ynprf#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@prfcounter{#1}}% + \global\@namedef{#1}{\@prf{#1}{#2}}% + \global\@namedef{end#1}{\@endproof}}} +\def\@oprf#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}}% + \global\@namedef{#1}{\@prf{#2}{#3}}% + \global\@namedef{end#1}{\@endproof}}}} +\def\@prf#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@yprf{#1}{#2}}{\@xprf{#1}{#2}}} +\def\@xprf#1#2{% + \@beginproof{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@yprf#1#2[#3]{% + \@opargbeginproof{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +\def\@prfcounter#1{\noexpand\arabic{#1}} +\def\@prfcountersep{.} +\def\@beginproof#1#2{\trivlist\let\baselinestretch\@blstr + \item[\hskip \labelsep{\scshape #1.}]\rmfamily} +\def\@opargbeginproof#1#2#3{\trivlist\let\baselinestretch\@blstr + \item[\hskip \labelsep{\scshape #1\ (#3).}]\rmfamily} +\def\@endproof{\endtrivlist} +\newcommand*{\qed}{\hbox{}\hfill$\Box$} + +\@ifundefined{@biboptions}{\xdef\@biboptions{numbers}}{} +\InputIfFileExists{\jobname.spl}{}{} +\ifnonatbib\relax\else + \RequirePackage[\@biboptions]{natbib} +\fi +\newwrite\splwrite +\immediate\openout\splwrite=\jobname.spl +\def\biboptions#1{\def\next{#1}\immediate\write\splwrite{% + \string\g@addto@macro\string\@biboptions{% + ,\expandafter\strip@prefix\meaning\next}}} + +\let\baselinestretch=\@blstr +\ifnum\jtype=1 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=562pt, + textwidth=384pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=12pt, + footnotesep=24pt plus 2pt minus 12pt, + } + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \if@twocolumn\global\@twocolumnfalse\fi +\else\ifnum\jtype=3 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=622pt, + textwidth=468pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=18pt, + footnotesep=24pt plus 2pt minus 12pt, + columnsep=2pc + } + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \if@twocolumn\input{fleqn.clo}\fi +\else\ifnum\jtype=5 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=682pt, + textwidth=522pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=18pt, + footnotesep=24pt plus 2pt minus 12pt, + columnsep=18pt + }% + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \input{fleqn.clo} + \global\@twocolumntrue +%% +%% End of option '5p' +%% +\fi\fi\fi +\def\journal#1{\gdef\@journal{#1}} + \let\@journal\@empty +\newenvironment{frontmatter}{}{\maketitle} + +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip\footnotesize + \sbox\@tempboxa{#1: #2}% + \ifdim \wd\@tempboxa >\hsize + #1: #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\AtBeginDocument{\@ifpackageloaded{hyperref} + {\def\@linkcolor{blue} + \def\@anchorcolor{blue} + \def\@citecolor{blue} + \def\@filecolor{blue} + \def\@urlcolor{blue} + \def\@menucolor{blue} + \def\@pagecolor{blue} +\begingroup + \@makeother\`% + \@makeother\=% + \edef\x{% + \edef\noexpand\x{% + \endgroup + \noexpand\toks@{% + \catcode 96=\noexpand\the\catcode`\noexpand\`\relax + \catcode 61=\noexpand\the\catcode`\noexpand\=\relax + }% + }% + \noexpand\x + }% +\x +\@makeother\` +\@makeother\= +}{}} +%% +\def\appendixname{Appendix } +\renewcommand\appendix{\par + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{equation}{0} + \gdef\thefigure{\@Alph\c@section.\arabic{figure}}% + \gdef\thetable{\@Alph\c@section.\arabic{table}}% + \gdef\thesection{\appendixname~\@Alph\c@section}% + \@addtoreset{equation}{section}% + \gdef\theequation{\@Alph\c@section.\arabic{equation}}% + \addtocontents{toc}{\string\let\string\numberline\string\tmptocnumberline}{}{} +} + +%%%% \numberline width calculation for appendix. +\newdimen\appnamewidth +\def\tmptocnumberline#1{% + \setbox0=\hbox{\appendixname} + \appnamewidth=\wd0 + \addtolength\appnamewidth{2.5pc} + \hb@xt@\appnamewidth{#1\hfill} +} + +%% Added for work with amsrefs.sty + +\@ifpackageloaded{amsrefs}% + {} + {%\let\bibsection\relax% + \AtBeginDocument{\def\cites@b#1#2,#3{% + \begingroup[% + \toks@{\InnerCite{#2}#1}% + \ifx\@empty#3\@xp\@gobble\fi + \cites@c#3% +}}} +%% +%% Added for avoiding clash with cleveref.sty +\@ifpackageloaded{cleveref}% + {} + {\def\tnotetext[#1]#2{\g@addto@macro\@tnotes{% + \refstepcounter{tnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thetnote}} + \def\thefootnote{\ifcase\c@tnote\or$\star$\or$\star\star$\fi}% + \footnotetext{#2}}} +%%% + \def\fntext[#1]#2{\g@addto@macro\@fnotes{% + \refstepcounter{fnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thefnote}} + \def\thefootnote{\thefnote}% + \global\setcounter{footnote}{\c@fnote}% + \footnotetext{#2}}} +%%% + \def\cortext[#1]#2{\g@addto@macro\@cornotes{% + \refstepcounter{cnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thecnote}} + \def\thefootnote{\ifcase\c@cnote\or$\ast$\or + $\ast\ast$\fi}% + \footnotetext{#2}}} +} + +\def\textmarker#1#2{\textcolor{#1}{#2}}%*% +\endinput +%% +%% End of file `elsarticle.cls'. diff --git a/MS/index.qmd b/MS/index.qmd new file mode 100644 index 0000000..a763704 --- /dev/null +++ b/MS/index.qmd @@ -0,0 +1,25 @@ +--- +subtitle: Graphical abstract +format: html +--- + +```{r} +#| label: fig-GA3 +#| fig-cap: "Graphical abstract" +#| out-width: "100%" +#| echo: false +#| message: false +# dwfun::ggsavep("./figures/GA3.pdf", loadit = TRUE) +``` + + +# README + +Below are the typical links. + +- [Cover Letter](CL.html) +- [Highlights](HL.html) +- [Manuscript](MS.html) +- [Supplementary Material](SM.html) +- [Revision Note](RN.html) +- [Author Credits](AC.html) diff --git a/PP/1-申请书/index.html.md b/PP/1-申请书/index.html.md deleted file mode 100644 index 8174d2b..0000000 --- a/PP/1-申请书/index.html.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -subtitle: "申请书" -author: "中国科学院生态环境研究中心" -lang: zh -date: today -csl: _extensions/inst/china-national-standard-gb-t-7714-2015-numeric.csl -format: - html: - theme: cosmo - keep-md: true - css: _extensions/inst/style.css - code-link: true - epub: default - pdf: - pdf-engine: xelatex - keep-tex: false - toc-title: 目录 - classoption: - - 12pt - - lang=cn - - chinesefont=founder # founder|ctexfont|nofont - - scheme=chinese - - color=blue # blue|green| - - titlestyle=hang - # - twoside - header-includes: - - \usepackage{ctex} - - \linespread{1.5} - docx: - toc: false - highlight-style: github - reference-doc: _extensions/inst/repcn.docx ---- - - - - - - -::: {.content-visible when-format="html"} -# Color tip {.unnumbered} - -- [Something should be deleted]{.del} -- [Something bad]{.bad} -- [Something good]{.good} -- [Something todo]{.todo} -- [Something should be added]{.add} -- [I am a comment]{.com} -::: - - - - - - - - - - - - -# 摘要 - -# 项目背景与国内外现状介绍 - -# 研究内容与目标 - -# 研究方案 - -# 预期目标 - -# 年度计划 - -# 经费预算 - - -# 参考文献{-} diff --git a/PP/1-申请书/index.qmd b/PP/1-申请书/index.qmd deleted file mode 100644 index 3abc419..0000000 --- a/PP/1-申请书/index.qmd +++ /dev/null @@ -1,82 +0,0 @@ ---- -subtitle: "申请书" -author: "中国科学院生态环境研究中心" -lang: zh -date: today -csl: _extensions/inst/china-national-standard-gb-t-7714-2015-numeric.csl -format: - html: - theme: cosmo - keep-md: true - css: _extensions/inst/style.css - code-link: true - epub: default - pdf: - pdf-engine: xelatex - keep-tex: false - toc-title: 目录 - classoption: - - 12pt - - lang=cn - - chinesefont=founder # founder|ctexfont|nofont - - scheme=chinese - - color=blue # blue|green| - - titlestyle=hang - # - twoside - header-includes: - - \usepackage{ctex} - - \linespread{1.5} - docx: - toc: false - highlight-style: github - reference-doc: _extensions/inst/repcn.docx ---- - -::: {.content-visible when-format="html"} -# Color tip {.unnumbered} - -- [Something should be deleted]{.del} -- [Something bad]{.bad} -- [Something good]{.good} -- [Something todo]{.todo} -- [Something should be added]{.add} -- [I am a comment]{.com} -::: - - -```{r} -#| label: setup -#| include: false -#| cache: false -lang <- "cn" -RM <- "F" # global rendermode, L: load pdata; F: fast load pdf -isRendering <- !isTRUE(getOption('knitr.in.progress')) -require(lubridate) -require(tidyverse) -require(patchwork) -require(drwateR) -require(rmdify) -rmdify::rmd_init() -require(langeR) -require(dateR) -require(uniteR) -require(limvis) -require(sf) -``` - -# 摘要 - -# 项目背景与国内外现状介绍 - -# 研究内容与目标 - -# 研究方案 - -# 预期目标 - -# 年度计划 - -# 经费预算 - - -# 参考文献{-} diff --git a/PP/index.qmd b/PP/index.qmd deleted file mode 100644 index d71ae46..0000000 --- a/PP/index.qmd +++ /dev/null @@ -1,20 +0,0 @@ ---- -subtitle: "申请书" ---- - -```{r} -#| include: false - -require(drwateR) -require(rmdify) -rmdify::rmd_init() -``` - -```{r} -#| output: asis -dir(".", pattern = "[_-]") |> -purrr::map(~paste0("## [", .x, "](", .x, "/index.qmd)\n\n")) |> - unlist() |> - cat() - -``` diff --git a/PP/1-申请书/_extensions b/RP/20231231_XX项目报告/_extensions similarity index 100% rename from PP/1-申请书/_extensions rename to RP/20231231_XX项目报告/_extensions diff --git a/RP/20231231_项目中期汇报/index.qmd b/RP/20231231_XX项目报告/index.qmd similarity index 88% rename from RP/20231231_项目中期汇报/index.qmd rename to RP/20231231_XX项目报告/index.qmd index 7844960..3a96c8f 100644 --- a/RP/20231231_项目中期汇报/index.qmd +++ b/RP/20231231_XX项目报告/index.qmd @@ -2,12 +2,12 @@ author: "中国科学院生态环境研究中心" lang: zh date: today -csl: _extensions/inst/china-national-standard-gb-t-7714-2015-numeric.csl +csl: _extensions/inst/tex/china-national-standard-gb-t-7714-2015-numeric.csl format: html: theme: cosmo keep-md: true - css: _extensions/inst/style.css + css: _extensions/inst/css/style.css code-link: true epub: default pdf: @@ -28,7 +28,7 @@ format: docx: toc: false highlight-style: github - reference-doc: _extensions/inst/repcn.docx + reference-doc: _extensions/inst/word/repcn.docx --- ::: {.content-visible when-format="html"} diff --git a/RP/20231231_项目中期汇报/_extensions b/RP/20231231_项目中期汇报/_extensions deleted file mode 120000 index 74119e3..0000000 --- a/RP/20231231_项目中期汇报/_extensions +++ /dev/null @@ -1 +0,0 @@ -../../_extensions \ No newline at end of file diff --git a/RP/20231231_项目中期汇报/index.html.md b/RP/20231231_项目中期汇报/index.html.md deleted file mode 100644 index e1ee25a..0000000 --- a/RP/20231231_项目中期汇报/index.html.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -author: "中国科学院生态环境研究中心" -lang: zh -date: today -csl: _extensions/inst/china-national-standard-gb-t-7714-2015-numeric.csl -format: - html: - theme: cosmo - keep-md: true - css: _extensions/inst/style.css - code-link: true - epub: default - pdf: - pdf-engine: xelatex - keep-tex: false - toc-title: 目录 - classoption: - - 12pt - - lang=cn - - chinesefont=founder # founder|ctexfont|nofont - - scheme=chinese - - color=blue # blue|green| - - titlestyle=hang - # - twoside - header-includes: - - \usepackage{ctex} - - \linespread{1.5} - docx: - toc: false - highlight-style: github - reference-doc: _extensions/inst/repcn.docx ---- - - - - - - -::: {.content-visible when-format="html"} -# Color tip {.unnumbered} - -- [Something should be deleted]{.del} -- [Something bad]{.bad} -- [Something good]{.good} -- [Something todo]{.todo} -- [Something should be added]{.add} -- [I am a comment]{.com} -::: - - - - - - - - - - - - -# 摘要 - -# 项目背景与国内外现状介绍 - -# 主要进展1 - -# 主要进展2 - -# 结论与下一步计划 - - -# 参考文献{-} diff --git a/RP/index.qmd b/RP/index.qmd index 7aa8390..790d01f 100644 --- a/RP/index.qmd +++ b/RP/index.qmd @@ -1,5 +1,6 @@ --- subtitle: "研究报告" +lang: "zh" --- ```{r} @@ -12,9 +13,19 @@ rmdify::rmd_init() ```{r} #| output: asis -dir(".", pattern = "[_-]") |> -purrr::map(~paste0("## [", .x, "](", .x, "/index.qmd)\n\n")) |> - unlist() |> + +data.frame(fd = dir(".", pattern = "[-_]")) |> + dplyr::mutate(fn = purrr::map_chr(fd, ~ file.path(.x, dir(.x, + pattern = "index.qmd|index.doc|index.pdf|index.ppt")))) |> + dplyr::transmute(htmlstr = purrr::map_chr(fn, ~ paste0("## [", .x, "](", .x, ")\n\n", + ifelse(!grepl("qmd$", .x), "", + paste0("\n\n"))))) |> + dplyr::pull(htmlstr) |> + paste(collapse = "") |> cat() ``` diff --git a/SD/20230101_powerpointfile/index.pptx b/SD/20230101_powerpointfile/index.pptx new file mode 100644 index 0000000..f94557d Binary files /dev/null and b/SD/20230101_powerpointfile/index.pptx differ diff --git a/SD/20230101_文章讨论/index.qmd b/SD/20230101_文章讨论/index.qmd new file mode 100644 index 0000000..7ab6171 --- /dev/null +++ b/SD/20230101_文章讨论/index.qmd @@ -0,0 +1,5 @@ +--- +title: "文章讨论" +format: revealjs +--- + diff --git a/SD/20230101_项目启动/index.qmd b/SD/20230101_项目启动/index.qmd deleted file mode 100644 index 790db4b..0000000 --- a/SD/20230101_项目启动/index.qmd +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: "项目启动汇报" -format: revealjs ---- - -# 项目背景 - -# 科学问题 - -# 主要进展 - -# 小结与计划 diff --git a/SD/index.qmd b/SD/index.qmd index ab0ef40..974a3f3 100644 --- a/SD/index.qmd +++ b/SD/index.qmd @@ -2,6 +2,28 @@ subtitle: "演示材料" --- -## [项目启动汇报](./20230101_项目启动/index.qmd) - + +```{r} +#| include: false +require(drwateR) +require(rmdify) +rmdify::rmd_init() +``` + +```{r} +#| output: asis +data.frame(fd = dir(".", pattern = "[-_]")) |> + dplyr::mutate(fn = purrr::map_chr(fd, ~ file.path(.x, dir(.x, + pattern = "index.qmd|index.doc|index.pdf|index.ppt")))) |> + dplyr::transmute(htmlstr = purrr::map_chr(fn, ~ paste0("## [", .x, "](", .x, ")\n\n", + ifelse(!grepl("qmd$", .x), "", + paste0("\n\n"))))) |> + dplyr::pull(htmlstr) |> + paste(collapse = "") |> + cat() +``` diff --git a/TC/index.qmd b/TC/index.qmd new file mode 100644 index 0000000..974a3f3 --- /dev/null +++ b/TC/index.qmd @@ -0,0 +1,29 @@ +--- +subtitle: "演示材料" +--- + + + +```{r} +#| include: false +require(drwateR) +require(rmdify) +rmdify::rmd_init() +``` + +```{r} +#| output: asis +data.frame(fd = dir(".", pattern = "[-_]")) |> + dplyr::mutate(fn = purrr::map_chr(fd, ~ file.path(.x, dir(.x, + pattern = "index.qmd|index.doc|index.pdf|index.ppt")))) |> + dplyr::transmute(htmlstr = purrr::map_chr(fn, ~ paste0("## [", .x, "](", .x, ")\n\n", + ifelse(!grepl("qmd$", .x), "", + paste0("\n\n"))))) |> + dplyr::pull(htmlstr) |> + paste(collapse = "") |> + cat() +``` diff --git a/_extensions/inst/style.css b/_extensions/inst/css/style.css similarity index 100% rename from _extensions/inst/style.css rename to _extensions/inst/css/style.css diff --git a/_extensions/inst/img/rceeslogo.png b/_extensions/inst/img/rceeslogo.png new file mode 100644 index 0000000..f8cf1d5 Binary files /dev/null and b/_extensions/inst/img/rceeslogo.png differ diff --git a/_extensions/inst/img/rceeslonglogo.png b/_extensions/inst/img/rceeslonglogo.png new file mode 100644 index 0000000..5460fde Binary files /dev/null and b/_extensions/inst/img/rceeslonglogo.png differ diff --git a/_extensions/inst/img/signms.png b/_extensions/inst/img/signms.png new file mode 100644 index 0000000..ed103bc Binary files /dev/null and b/_extensions/inst/img/signms.png differ diff --git a/_extensions/inst/img/signmy.png b/_extensions/inst/img/signmy.png new file mode 100644 index 0000000..1d57677 Binary files /dev/null and b/_extensions/inst/img/signmy.png differ diff --git a/_extensions/inst/tex/american-chemical-society.csl b/_extensions/inst/tex/american-chemical-society.csl new file mode 100644 index 0000000..01f8c49 --- /dev/null +++ b/_extensions/inst/tex/american-chemical-society.csl @@ -0,0 +1,280 @@ + + diff --git a/_extensions/inst/china-national-standard-gb-t-7714-2015-numeric.csl b/_extensions/inst/tex/china-national-standard-gb-t-7714-2015-numeric.csl similarity index 100% rename from _extensions/inst/china-national-standard-gb-t-7714-2015-numeric.csl rename to _extensions/inst/tex/china-national-standard-gb-t-7714-2015-numeric.csl diff --git a/_extensions/inst/tex/cv.tex b/_extensions/inst/tex/cv.tex new file mode 100644 index 0000000..d35a19a --- /dev/null +++ b/_extensions/inst/tex/cv.tex @@ -0,0 +1,240 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Academic Letter LaTeX and RMarkdown Structure % +% Author: Pedro Henrique Pereira Braga % +% % +% License: % +% CC BY-NC-SA 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/) % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Set the font size (11pt, for now) and paper size (e.g. letterpaper, a4paper) +\documentclass[11pt, letterpaper]{letter} + +%---------------------------------------------------------------------- +% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS +%---------------------------------------------------------------------- + +\usepackage{graphicx} % Required for including pictures +\usepackage{fancyhdr} % Allows the use of fancy headers and footers + +\usepackage{microtype} % For typography improvement + +\usepackage{url} % Allows the use of hyperlinks +\urlstyle{same} % Allows hyperlink fonts to be the same as the mainfont +\usepackage[hidelinks]{hyperref} % Allows the use of hyperlinks and +% removes the blue boxes around the link + +\pagestyle{empty} % Removes headers and footers + +\usepackage{setspace} % Allows the use of double spacing in the letter body + +\setlength\parindent{1cm} % Paragraph indentation + +% Create a new command for the horizontal rule in the document which allows +% thickness specification +\makeatletter + \def\@texttop{} % force the address to start above +\renewcommand*{\opening}[1]{\ifx\@empty\fromaddress + \thispagestyle{firstpage}% + {\raggedleft\@date\par}% + \else % home address + \thispagestyle{empty}% + {\raggedleft\begin{tabular}{l@{}}\ignorespaces + \fromaddress \\*[2\parskip]% + \@date \end{tabular}\par}% + \fi + %\vspace{2\parskip}% <-- Removed + %{\raggedright \toname \\ \toaddress \par}% <-- Removed + %\vspace{2\parskip}% <-- Removed + #1\par\nobreak} +\let\ps@empty\ps@plain +\let\ps@firstpage\ps@plain +\makeatother + +%-------------------------------------------------------------------------- +% FONTS +%-------------------------------------------------------------------------- + +\usepackage[T1]{fontenc} % Output font encoding for international characters +% \usepackage[utf8]{inputenc} % Required for inputting international characters +\usepackage[quiet]{fontspec} % Allows the use of fontspec +\setmainfont{Calibri} +% \usepackage{txfonts} % Allows the use of Lato fonts + + +%---------------------------------------------------------------------------- +% DOCUMENT MARGINS +%---------------------------------------------------------------------------- + +\usepackage{geometry} % Required for adjusting page dimensions + +\geometry{ + headheight = 0.7in, % Header height + top=1.5in, % Top margin + bottom=1.5cm, % Bottom margin + left=3cm, % Left margin + right=3cm, % Right margin + % showframe, % Uncomment to show how the type block is set on the page +} + +%----------------------------------------------------------------------------- +% AUTHOR AND RECIPIENTS NEW COMMANDS AND DETAILS STRUCTURE +%----------------------------------------------------------------------------- + +\newcommand{\authordetails}[1]{\renewcommand{\authordetails}{#1}} +\newcommand{\recipientdetails}[1]{\renewcommand{\recipientdetails}{#1}} + +%----------------------------------------------------------------------------- +% HEADER STRUCTURE +%----------------------------------------------------------------------------- + +\address{ + % Include the author's details on the right side of the page under the line + \raggedleft{ + \footnotesize{ % Use a smaller font size + $author$\\ % Author name + \authordetails\\ + \hspace{1mm} + } + } + \vspace{-0.05\textheight} % Move the date and letter content up +} + +%------------------------------------------------------------------------------ +% COMPOSE THE ENTIRE HEADER +%------------------------------------------------------------------------------ + +\renewcommand{\opening}[1]{ + {\fromaddress + \vspace{0.05\textheight}\\ % Print the sender's address here and add some whitespace to allow the printing of the date + \raggedleft{$date$} % Include the date, aligned to the right + \par % par + } + {\raggedright + \toname\\ + \toaddress + \par} % Print the recipient's name and adress + \vspace{0.25cm} % White vertical space after recipient's address + \noindent #1 % Following this, insert the opening info +} + +%------------------------------------------------------------------------------ +% SIGNATURE STRUCTURE +%------------------------------------------------------------------------------ +% The signature is a combination of the author's name, title and institution +\signature{$author$, on behalf of all authors\\ + Email: $from_email$} + +% I will later combine the option of inserting a signature within it + +\renewcommand{\closing}[1]{ + \vspace{2.5mm} % Some whitespace after the letter content and before the signature + \noindent % Stop paragraph indentation + % \hspace*{\longindentation} % Move the signature right to the value of \longindentation + \parbox{\indentedwidth}{ + \raggedright + #1 % Print the signature text + % \vskip 1.65cm % Whitespace between the closing text and author's name for a physical signature + \\\includegraphics[height=0.6in, keepaspectratio=true]{$from_sign$}\\ + \fromsig % Prints the value of \signature{}, i.e. author name and title + } +} + +%------------------------------------------------------------------------------- +% AUTHOR'S INFORMATION +%------------------------------------------------------------------------------- + +\authordetails{ + $from_position$\\ + $from_department$\\ % Sender's department/institution + $from_institution$\\ + $from_address$ % Sender's address + % $from_city$, $from_state_province$\\ % Sender's city, state or province, + % $from_postalcode$\\ % postal code + % $from_country$ +} + +%------------------------------------------------------------------------------ +% RECIPIENT'S INFORMATION +%------------------------------------------------------------------------------ + +\recipientdetails{ +$to_professional_title$ $to_name$\\ + $if(to_journal)$ +\textit{$to_journal$} +$endif$ +} + +%------------------------------------------------------------------------------ +% HEADER CONTENTS +%------------------------------------------------------------------------------ + +\fancypagestyle{firstpage}{ + \fancyhf{} + \fancyhead[L]{ + \includegraphics[height=0.6in, keepaspectratio=true]{$from_institution_logo$} + } + \fancyhead[R]{$author$\\ + \footnotesize{ + $from_email$\\ % Sender's email address + % $from_personal_website$ \\ % Sender's URL + $from_phone$ % Sender's phone number + } + } + } + +\fancypagestyle{plain}{ + \fancyhf{} + \fancyhead[L]{ + \includegraphics[height=0.6in, keepaspectratio=true]{$from_institution_logo$} + } + \fancyhead[R]{$author$\\ + \footnotesize{ + $from_email$\\ % Sender's email address + % $from_personal_website$ \\ % Sender's URL + $from_phone$ % Sender's phone number + } + } + } + +\fancypagestyle{empty}{ + \fancyhf{} + \fancyhead[L]{ + \includegraphics[height=0.6in, keepaspectratio=true]{$from_institution_logo$} + } + \fancyhead[R]{$author$\\ + \footnotesize{ + $from_email$\\ % Sender's email address + % $from_personal_website$ \\ % Sender's URL + $from_phone$ % Sender's phone number + } + } + } + +%------------------------------------------------------------------------------ +\pagestyle{plain} + +\begin{document} + +%------------------------------------------------------------------------------ +% TO ADDRESS +%------------------------------------------------------------------------------ + +\begin{letter}{\recipientdetails} + +%------------------------------------------------------------------------------ +% LETTER CONTENT +%------------------------------------------------------------------------------ + +\opening{$opening_greeting$} +% \begin{doublespacing} + +$body$ + +% \end{doublespacing} +\closing{$closing_greeting$} + +%------------------------------------------------------------------------------ + +\end{letter} +\end{document} diff --git a/_extensions/inst/tex/els.tex b/_extensions/inst/tex/els.tex new file mode 100644 index 0000000..33d123d --- /dev/null +++ b/_extensions/inst/tex/els.tex @@ -0,0 +1,426 @@ +$-- Keeping in template layout for backward compatibility +\documentclass[$if(layout)$$layout$$else$$for(classoption)$$classoption$$sep$,$endfor$$endif$]{elsarticle} %review=doublespace preprint=single 5p=2 column +%%% Begin My package additions %%%%%%%%%%%%%%%%%%% +\usepackage[hyphens]{url} +$if(journal)$ +\journal{$journal$} % Sets Journal name +$endif$ +\usepackage{lineno} % add +$if(linenumbers)$ +\linenumbers % turns line numbering on +$endif$ +\usepackage{graphicx} +\usepackage{xstring} +\usepackage[table]{xcolor} +%%%%%%%%%%%%%%%% end my additions to header +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[utf8]{inputenc} + $if(euro)$ + \usepackage{eurosym} + $endif$ +\else % if luatex or xelatex + \usepackage{fontspec} + \ifxetex + \usepackage{xltxtra,xunicode} + \fi + \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} + \newcommand{\euro}{€} + $if(mainfont)$ + \setmainfont{$mainfont$} + $endif$ + $if(sansfont)$ + \setsansfont{$sansfont$} + $endif$ + $if(monofont)$ + \setmonofont{$monofont$} + $endif$ + $if(mathfont)$ + \setmathfont{$mathfont$} + $endif$ +\fi +% use microtype if available +\IfFileExists{microtype.sty}{\usepackage{microtype}}{} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(natbib)$ +\usepackage{natbib} +\setcitestyle{$natbiboptions$} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(graphics)$ +\usepackage{graphicx} +$endif$ +\ifxetex + \usepackage[setpagesize=false, % page size defined by xetex + unicode=false, % unicode breaks when used with xetex + xetex]{hyperref} +\else + \usepackage[unicode=true]{hyperref} +\fi +\hypersetup{breaklinks=true, + bookmarks=true, + pdfauthor={$author-meta$}, + pdftitle={$title-meta$}, + colorlinks=$if(colorlinks)$true$else$false$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, + linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, + pdfborder={0 0 0}} +\urlstyle{same} % don't use monospace font for urls +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(lang)$ +\ifxetex + \usepackage{polyglossia} + \setmainlanguage{$mainlang$} +\else + \usepackage[$lang$]{babel} +\fi +$endif$ +% Pandoc toggle for numbering sections (defaults to be off) +$if(numbersections)$ +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(highlighting-macros)$ +% Pandoc syntax highlighting +$highlighting-macros$ +$endif$ +% tightlist command for lists without linebreak +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(tables)$ +% From pandoc table feature +\usepackage{longtable,booktabs,array} +$if(multirow)$ +\usepackage{multirow} +$endif$ +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$if(csl-refs)$ +% Pandoc citation processing +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newlength{\cslentryspacingunit} % times entry-spacing +\setlength{\cslentryspacingunit}{\parskip} +% for Pandoc 2.8 to 2.10.1 +\newenvironment{cslreferences}% + {$if(csl-hanging-indent)$\setlength{\parindent}{0pt}% + \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}% + {\par} +% For Pandoc 2.11+ +\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing +{% don't indent paragraphs + \setlength{\parindent}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \let\oldpar\par + \def\par{\hangindent=\cslhangindent\oldpar} + \fi + % set entry spacing + \setlength{\parskip}{#2\cslentryspacingunit} + }% +{} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{#1\hfill\break} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ + +\usepackage{xifthen} +% set special color for EST +\ifthenelse{\equal{$journal$}{Environmental Science \& Technology}} +{\definecolor{seccol}{RGB}{56, 95, 66}} +{\definecolor{seccol}{RGB}{0, 0, 0}} + +$if(uppersections)$ +\usepackage{titlesec} +\titleformat{\section} +{\color{seccol}\large\bfseries\MakeUppercase}{\thesection}{1em}{} +$endif$ +$if(sectiononnewpage)$ +\AddToHook{cmd/section/before}{\clearpage} +$endif$ + +\usepackage{enumitem} +\usepackage{fontspec} +\usepackage{float} +\setmainfont{Helvetica} +\usepackage[normalem]{ulem} +\usepackage{hyperref} +\usepackage{nameref} %needed by zref-xr +\usepackage{zref-xr,zref-hyperref,zref-user} +\usepackage{xr-hyper} + +% force to use \zref +$if(msname)$ +\def\msname{$msname$} +\zexternaldocument*{\msname} +\renewcommand{\ref}{\zref} +$endif$ +$if(smname)$ +\def\smname{$smname$} +\zexternaldocument*{\smname} +$endif$ + +\zxrsetup{toltxlabel=true} +{\catcode`\#=12 \gdef\hashchar{#1}} +\makeatletter +\newcommand\hzref[1]{\edef\next{% + \noexpand\href{% + \zref@extractdefault{#1}{url}{}% + \zref@ifrefcontainsprop{#1}{anchor}{% + \hashchar\zref@extract{#1}{anchor}}{}}% + {\noexpand\zref{#1}}}\next} +\makeatother + + + +$if(revision)$ +% \usepackage{xcolor} +\usepackage{adjustbox} +\usepackage{mdframed} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + linecolor=gray!30, + backgroundcolor=gray!5, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=0pt, + innerbottommargin=0pt + ]{refquote} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + backgroundcolor=red!3!white, + linecolor=red!30!white, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=10pt, + innerbottommargin=10pt + ]{question} +\setenumerate{labelsep=*, leftmargin=1.0pc} +% setup hyperlink for page and line number +\def\msname{$if(msname)$$msname$$else$MS$endif$} +\def\smname{$if(smname)$$smname$$else$SM$endif$} +\setenumerate{labelsep=*, leftmargin=1.0pc} +%\zexternaldocument*{ManuscriptNew\veraa} +\zexternaldocument*{\msname} +\zexternaldocument*{\smname} +\newcommand{\hlabel}[1]{\label{#1}\hypertarget{#1}{ + \linelabel{line:#1}}} +%\externaldocument[si-]{\smname\veraa}[\smname\veraa.pdf] +\makeatletter + \newcommand{\clab}[2]{% + \protected@write\@auxout{\let\clab\@secondoftwo}{ + \string\newlabel{r:#1}{{#2}{}}}% + \hlabel{#1}#2\hlabel{#1end}} +\makeatother +\newcommand{\zhypera}[1]{\href[pdfnewwindow]{\msname.pdf\##1}{\\[1ex]\textbf{Page \zpageref{#1}, Line +\zref{line:#1}--\zref{line:#1end}:}\\}} +\newcommand{\cref}[1]{\begin{refquote}\zhypera{#1}{\zref{r:#1}}\\[-0.5ex]\end{refquote}} +% \newenvironment{ra}[1][\unskip]{\par \noindent \\[-1ex] \textbf{Response/Action:}\par\bf}{\ \\} +\renewenvironment{quote}{\begin{question}}{\end{question}} +% \renewenvironment{verbatim}{\begin{ra}}{\end{ra}} +$endif$ + +% def default corresponding authors and equal contributing authors variables +\def\hascorr{0} +\def\haseqc{0} +% check if corresponding author(s) and equal contributing authors are available +$for(author)$$if(author.correspondence)$\def\hascorr{1}$endif$$if(author.equalcontribution)$\def\haseqc{1}$endif$ $endfor$ + +\newcommand{\getcorrauthinfo}{ + \subsection{Corresponding Author(s)} + \def\a{} \def\b{} \def\c{} + \hspace{-2.2em} + $for(author)$ + $if(author.correspondence)$ + \textbf{$author.name$:} + \vspace{-1em} + \begin{enumerate}[labelindent=-12pt,label=\arabic*.,itemindent=0em,leftmargin=!, itemsep = -10pt] + $for(author.institute)$ \def\a{$author.institute$} + $for(institute)$ \def\b{$institute.id$} \def\c{$institute.name$} + \ifx \a\b \item \c; \fi + $endfor$ + $endfor$ + $if(author.email)$\item email: $author.email$;$endif$ + $if(author.orcid)$\item orcid: $author.orcid$;$endif$ + $if(author.tel)$\item Tel: $author.tel$;$endif$ + $if(author.fax)$\item Fax: $author.fax$$endif$ + \end{enumerate} + $endif$ + $endfor$ +} + +\newcommand{\getotherauthinfo}{ + \subsection{Author(s)} + \def\a{} \def\b{} \def\c{} + \hspace{-2.2em} + $for(author)$ + $if(author.correspondence)$ + $else$ + \textbf{$author.name$:} + \vspace{-1em} + \begin{enumerate}[labelindent=-12pt,label=\arabic*.,itemindent=0em,leftmargin=!, itemsep = -10pt] + $for(author.institute)$ \def\a{$author.institute$} $for(institute)$ \def\b{$institute.id$} \def\c{$institute.name$} + \ifx \a\b \item \c; \fi + $endfor$ + $endfor$ + $if(author.email)$\item email: $author.email$;$endif$ + $if(author.orcid)$\item orcid: $author.orcid$;$endif$ + $if(author.tel)$\item Tel: $author.tel$;$endif$ + $if(author.fax)$\item Fax: $author.fax$$endif$ + \end{enumerate} + $endif$ + $endfor$ +} + +$preamble$ + +% remove the two line around Abstract +$if(abstract)$ +$else$ +\makeatletter +\renewcommand{\MaketitleBox}{% + \resetTitleCounters + \def\baselinestretch{1}% + \begin{center} + \def\baselinestretch{1}% + \large \@title \par + \vskip 18pt + \normalsize\elsauthors \par + \vskip 30pt + \footnotesize \itshape \elsaddress \par + \end{center} + \vskip 12pt +} +\makeatother +$endif$ + +\begin{document} +$for(include-before)$ +$include-before$ +$endfor$ +\begin{frontmatter} + + \title{$title$$if(subtitle)$\\\Large{$subtitle$}$endif$} + $for(author)$\author$if(authorwithinstitute)$[$for(author.institute)$$author.institute$$sep$,$endfor$]$endif${$author.name$$if(author.correspondence)$\corref{corrauth}$endif$$if(author.equalcontribution)$\corref{eqcon}$endif$ $if(author.footnote)$\fnref{$author.footnote$}$endif$}$if(author.email)$\ead{$author.email$}$endif$$endfor$ + $if(authorwithinstitute)$ $for(institute)$ \address[$institute.id$]{$institute.name$} $endfor$ $endif$ + % generate corresponding authors. + % \StrBehind is from xstring package + \ifnum \hascorr=1 + \def\corrauths{ + $for(author)$$if(author.correspondence)$and $author.name$ ($author.email$) $endif$$endfor$} + \cortext[corrauth]{Corresponding to \StrBehind*{\corrauths}{and }.} + \fi + + % generate equal contributing authors. + \ifnum \haseqc=1 + \def\eqa{$for(author)$$if(author.equalcontribution)$and $author.name$ $endif$$endfor$} + \cortext[eqcon]{\StrBehind*{\eqa}{and } are equally contributed to this work.} + \fi + + $for(footnote)$ + \fntext[$footnote.id$]{$footnote.text$} + $endfor$ + + $if(abstract)$ + \begin{abstract} + $abstract$ + \end{abstract} + $if(keywords)$ + \begin{keyword} + $for(keywords/allbutlast)$$keywords$ \sep $endfor$ + $for(keywords/last)$$keywords$$endfor$ + \end{keyword} + $endif$ + $endif$ +\end{frontmatter} + +$body$ + +$if(authorwithinstitute)$ +$else$ +\section{Author Information} + +\getcorrauthinfo{} + +\getotherauthinfo{} + +$endif$ + + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$bibliography$} +$endif$ +$endif$ + +$for(include-after)$ +$include-after$ +$endfor$ +\end{document} diff --git a/_extensions/inst/tex/elsevier-harvard.csl b/_extensions/inst/tex/elsevier-harvard.csl new file mode 100644 index 0000000..5d88c51 --- /dev/null +++ b/_extensions/inst/tex/elsevier-harvard.csl @@ -0,0 +1,239 @@ + + diff --git a/_extensions/inst/tex/supp.cls b/_extensions/inst/tex/supp.cls new file mode 100644 index 0000000..c7c1e9e --- /dev/null +++ b/_extensions/inst/tex/supp.cls @@ -0,0 +1,1359 @@ +%% +%% This is file `supp.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% supp.dtx (with options: `class') +%% +%% Copyright 2007-2020 Elsevier Ltd +%% +%% This file is part of the 'supp Bundle'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% The list of all files belonging to the 'supp Bundle' is +%% given in the file `manifest.txt'. +%% +%% +%% +%% + \def\RCSfile{supp}% + \def\RCSversion{3.3}% + \def\RCSdate{2020/11/20}% + \def\@shortjnl{\relax} + \def\@journal{Elsevier Ltd} + \def\@company{Elsevier Ltd} + \def\@issn{000-0000} + \def\@shortjid{supp} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{\@shortjid}[\RCSdate, \RCSversion: \@journal] +\def\ABD{\AtBeginDocument} +\newif\ifpreprint \preprintfalse +\newif\ifnonatbib \nonatbibfalse +\newif\iflongmktitle \longmktitlefalse +\newif\ifnopreprintline \nopreprintlinefalse +\newif\ifdoubleblind \doubleblindfalse + +\newif\ifuseexplthreefunctions \useexplthreefunctionsfalse + +\IfFileExists{expl3.sty}{% + \global\useexplthreefunctionstrue% + \RequirePackage{expl3}}{} +\ifuseexplthreefunctions\relax% +\IfFileExists{xparse.sty}{\RequirePackage{xparse}}{} +\IfFileExists{etoolbox.sty}{\RequirePackage{etoolbox}}{} +\fi + +\def\@blstr{1} +\newdimen\@bls +\@bls=\baselineskip + +\def\@finalWarning{% + *****************************************************\MessageBreak + This document is typeset in the CRC style which\MessageBreak + is not suitable for submission.\MessageBreak + \MessageBreak + Please typeset again using 'preprint' option\MessageBreak + for creating PDF suitable for submission.\MessageBreak + ******************************************************\MessageBreak +} + +\DeclareOption{preprint}{\global\preprinttrue + \gdef\@blstr{1}\xdef\jtype{0}% + \AtBeginDocument{\@twosidefalse\@mparswitchfalse}} +\DeclareOption{nopreprintline}{\global\nopreprintlinetrue} +\DeclareOption{final}{\gdef\@blstr{1}\global\preprintfalse} +\DeclareOption{review}{\global\preprinttrue\gdef\@blstr{1.5}} +\DeclareOption{authoryear}{\xdef\@biboptions{round,authoryear}} +\DeclareOption{number}{\xdef\@biboptions{numbers}} +\DeclareOption{numbers}{\xdef\@biboptions{numbers}} +\DeclareOption{nonatbib}{\global\nonatbibtrue} +\DeclareOption{longtitle}{\global\longmktitletrue} +\DeclareOption{5p}{\xdef\jtype{5}\global\preprintfalse + \ExecuteOptions{twocolumn}} + \def\jtype{0} +\DeclareOption{3p}{\xdef\jtype{3}\global\preprintfalse} +\DeclareOption{1p}{\xdef\jtype{1}\global\preprintfalse + \AtBeginDocument{\@twocolumnfalse}} +\DeclareOption{times}{\IfFileExists{txfonts.sty}% + {\AtEndOfClass{\RequirePackage{txfonts}% + \gdef\ttdefault{cmtt}% + \let\iint\relax + \let\iiint\relax + \let\iiiint\relax + \let\idotsint\relax + \let\openbox\relax}}{\AtEndOfClass{\RequirePackage{times}}}} + +\DeclareOption{endfloat}{\IfFileExists{endfloat.sty} + {\AtEndOfClass{\RequirePackage[markers]{endfloat}}}{}} +\DeclareOption{endfloats}{\IfFileExists{endfloat.sty} + {\AtEndOfClass{\RequirePackage[markers]{endfloat}}}{}} +\DeclareOption{numafflabel} + {\AtBeginDocument{\def\theaffn{\arabic{affn}}}} %*% +\DeclareOption{lefttitle} + {\AtBeginDocument{\def\supptitlealign{flushleft}}} %*% +\DeclareOption{centertitle} + {\AtBeginDocument{\def\supptitlealign{center}}} %*% +\DeclareOption{reversenotenum} + {\AtBeginDocument{\def\theaffn{\arabic{affn}} + \def\thefnote{\alph{fnote}}}} +\DeclareOption{doubleblind}{\doubleblindtrue} + +\ExecuteOptions{a4paper,10pt,oneside,onecolumn,number,preprint,centertitle} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions +\LoadClass{article} +\RequirePackage{graphicx} +\let\comma\@empty +\let\tnotesep\@empty +\let\@title\@empty + +\def\useelstitle{} + +\def\title#1{\g@addto@macro\@title{#1% + \global\let\tnoteref\@gobble}% + \g@addto@macro\useelstitle{#1}} + +\def\elsLabel#1{\@bsphack\protected@write\@auxout{}% + {\string\Newlabel{#1}{\@currentlabel}}\@esphack} +\def\Newlabel#1#2{\expandafter\xdef\csname X@#1\endcsname{#2}} + +\def\elsRef#1{\@ifundefined{X@#1}{0}{\csname X@#1\endcsname}} + +\let\@tnotemark\@empty + +\ifdoubleblind + \def\tnotemark[#1]{} +\else + \def\tnotemark[#1]{\@for\mytmark:=#1\do{% + \expandafter\ifcase\elsRef{\mytmark}\or$^{\star}$\or + $^{,\star\star}$\fi + }% +} +\fi + +\def\tnoteref#1{\tnotemark[{#1}]} +\let\@tnotes\@empty +\newcounter{tnote} +\def\tnotetext[#1]#2{\g@addto@macro\@tnotes{% + \stepcounter{tnote}\elsLabel{#1}% + \def\thefootnote{\ifcase\c@tnote\or$\star$\or$\star\star$\fi}% + \footnotetext{#2}}} + +\let\@nonumnotes\@empty +\def\nonumnote#1{\g@addto@macro\@nonumnotes{% + \let\thefootnote\relax\footnotetext{#1}}} + +\newcounter{fnote} +\def\thefnote{\arabic{fnote}} +\def\fnmark[#1]{\let\comma\@empty + \def\@fnmark{\@for\@@fnmark:=#1\do{% + \edef\fnotenum{\@ifundefined{X@\@@fnmark}{1}{\elsRef{\@@fnmark}}}% + \unskip\comma\fnotenum\let\comma,}}% +} + +\def\fnref#1{\fnmark[#1]} + +\let\@fnotes\@empty\let\@fnmark\@empty +\def\fntext[#1]#2{\g@addto@macro\@fnotes{% + \refstepcounter{fnote}\elsLabel{#1}% + \def\thefootnote{\c@fnote}% + \global\setcounter{footnote}{\c@fnote}% + \footnotetext{#2}}} + +\def\cormark[#1]{\edef\cnotenum{\elsRef{#1}}% + \unskip\textsuperscript{\sep\ifcase\cnotenum\or + $\ast$\or$\ast\ast$\fi\hspace{-1pt}}\let\sep=,} + +\let\@cormark\@empty +\let\@cornotes\@empty +\newcounter{cnote} +\def\cortext[#1]#2{\g@addto@macro\@cornotes{% + \refstepcounter{cnote}\elsLabel{#1}% + \def\thefootnote{\ifcase\thecnote\or$\ast$\or + $\ast\ast$\fi}% + \footnotetext{#2}}} + +\let\@corref\@empty +\def\corref#1{\edef\cnotenum{\elsRef{#1}}% + \edef\@corref{\ifcase\cnotenum\or + $\ast$\or$\ast\ast$\fi\hskip-1pt}} + +\def\resetTitleCounters{\c@cnote=0 + \c@fnote=0 \c@tnote=0 \c@footnote=0} + +\let\eadsep\@empty +\def\@elseads{} +\let\@elsuads\@empty +\let\@cormark\@empty +\def\hashchar{\expandafter\@gobble\string\~} +\def\underscorechar{\expandafter\@gobble\string\_} +\def\lbracechar{\expandafter\@gobble\string\{} +\def\rbracechar{\expandafter\@gobble\string\}} + +\gdef\ead{\@ifnextchar[{\@uad}{\@ead}} +\gdef\@ead#1{\bgroup + \def\_{\underscorechar}% + \def\{{\lbracechar}% + \def~{\hashchar}% + \def\}{\rbracechar}% + \edef\tmp{\the\@eadauthor}% + \immediate\write\@auxout{\string\emailauthor + {#1}{\expandafter\strip@prefix\meaning\tmp}}% + \egroup +} +\newcounter{ead} +\gdef\emailauthor#1#2{\stepcounter{ead}% + \g@addto@macro\@elseads{\raggedright% + \let\corref\@gobble\def\@@tmp{#1}% + \eadsep{\ttfamily\expandafter\strip@prefix\meaning\@@tmp} + (#2)\def\eadsep{\unskip,\space}}% +} +\gdef\@uad[#1]#2{\bgroup + \def~{\hashchar}% + \def\_{\underscorechar}% + \def~{\hashchar}% + \def\}{\rbracechar}% + \edef\tmp{\the\@eadauthor} + \immediate\write\@auxout{\string\urlauthor + {#2}{\expandafter\strip@prefix\meaning\tmp}}% + \egroup +} +\gdef\urlauthor#1#2{\g@addto@macro\@elsuads{\let\corref\@gobble% + \def\@@tmp{#1}\raggedright\eadsep + {\ttfamily\expandafter\strip@prefix\meaning\@@tmp}\space(#2)% + \def\eadsep{\unskip,\space}}% +} + +\def\elsauthors{} +\def\useauthors{} +\def\elsprelimauthors{} + +\def\pprinttitle{} +\let\authorsep\@empty +\let\prelimauthorsep\@empty +\let\sep\@empty +\newcounter{author} +\def\author{\@ifnextchar[{\@@author}{\@author}} + +\newtoks\@eadauthor +\def\@@author[#1]#2{% + \g@addto@macro\elsprelimauthors{% + \prelimauthorsep#2% + \def\prelimauthorsep{\unskip,\space}}% + \g@addto@macro\elsauthors{% + \def\baselinestretch{1}% + \authorsep#2\unskip\textsuperscript{%#1% + \@for\@@affmark:=#1\do{% + \edef\affnum{\@ifundefined{X@\@@affmark}{1}{\elsRef{\@@affmark}}}% + \unskip\sep\affnum\let\sep=,}% + \ifx\@fnmark\@empty\else\unskip\sep\@fnmark\let\sep=,\fi + \ifx\@corref\@empty\else\unskip\sep\@corref\let\sep=,\fi + }% + \def\authorsep{\unskip,\space}% + \global\let\sep\@empty\global\let\@corref\@empty + \global\let\@fnmark\@empty}% + \@eadauthor={#2}% + \g@addto@macro\useauthors{#2; }% +} + +\def\@author#1{% + \g@addto@macro\elsprelimauthors{% + \prelimauthorsep#1% + \def\prelimauthorsep{\unskip,\space}}% + \g@addto@macro\elsauthors{\normalsize% + \def\baselinestretch{1}% + \upshape\authorsep#1\unskip\textsuperscript{% + \ifx\@fnmark\@empty\else\unskip\sep\@fnmark\let\sep=,\fi + \ifx\@corref\@empty\else\unskip\sep\@corref\let\sep=,\fi + }% + \def\authorsep{\unskip,\space}% + \global\let\@fnmark\@empty + \global\let\@corref\@empty \global\let\sep\@empty}% + \@eadauthor={#1}% + \g@addto@macro\useauthors{#1; }% +} + +\AtBeginDocument{% + \@ifpackageloaded{hyperref}{% + \expandafter\gdef\csname Hy@title\endcsname{\useelstitle}% + \expandafter\gdef\csname Hy@author\endcsname{\useauthors}% + }{} +} + +\def\elsaddress{} +\def\addsep{\par\vskip6pt} + +\def\@alph#1{% + \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or + l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or + y\or z% + \or aa\or ab\or ac\or ad\or ae\or af\or ag\or ah\or ai\or aj\or + ak\or al\or am\or an\or ao\or ap\or aq\or ar\or as\or at\or au\or + av\or aw\or ax\or ay\or az% + \or ba\or bb\or bc\or bd\or be\or bf\or bg\or bh\or bi\or bj\or + bk\or bl\or bm\or bn\or bo\or bp\or bq\or br\or bs\or bt\or bu\or + bv\or bw\or bx\or by\or bz% + \or ca\or cb\or cc\or cd\or ce\or cf\or cg\or ch\or ci\or cj\or + ck\or cl\or cm\or cn\or co\or cp\or cq\or cr\or cs\or ct\or cu\or + cv\or cw\or cx\or cy\or cz% + \or da\or db\or dc\or dd\or de\or df\or dg\or dh\or di\or dj\or + dk\or dl\or dm\or dn\or do\or dp\or dq\or dr\or ds\or dt\or du\or + dv\or dw\or dx\or dy\or dz% + \or ea\or eb\or ec\or ed\or ee\or ef\or eg\or eh\or ei\or ej\or + ek\or el\or em\or en\or eo\or ep\or eq\or er\or es\or et\or eu\or + ev\or ew\or ex\or ey\or ez% + \or fa\or fb\or fc\or fd\or fe\or ff\or fg\or fh\or fi\or fj\or + fk\or fl\or fm\or fn\or fo\or fp\or fq\or fr\or fs\or ft\or fu\or + fv\or fw\or fx\or fy\or fz% + \or ga\or gb\or gc\or gd\or ge\or gf\or gg\or gh\or gi\or gj\or + gk\or gl\or gm\or gn\or go\or gp\or gq\or gr\or gs\or gt\or gu\or + gv\or gw\or gx\or gy\or gz% + \else\@ctrerr\fi} + +\newcounter{affn} +\renewcommand\theaffn{\alph{affn}} + +\ifuseexplthreefunctions\relax% + \ExplSyntaxOn + \def\ca_affitem_postskip{\mbox{~}\unskip\ignorespaces} + %%Author Address + \DeclareDocumentCommand \ca_organization { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_postal_code { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_aff_city { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_address_line { O{,}m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_state { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_country { O{ } m } + { + % #2 #1 + \csgappto { ca_affiliation_values } { #2 #1 } + } + + \DeclareDocumentCommand \ca_stm_organization { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_postal_code { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_aff_city { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_aff_address_line { O{,}m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_state { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_country { O{ } m } + { + #2 #1 + } + + \keys_define:nn { stm / affiliation } + { + op .tl_set_x:N = \l_organization_punc_tl, + oraganizationsep .tl_set_x:N = \l_organization_punc_tl, + ap .tl_set_x:N = \l_address_line_punc_tl, + addresslinesep .tl_set_x:N = \l_address_line_punc_tl, + cp .tl_set_x:N = \l_city_punc_tl, + citysep .tl_set_x:N = \l_city_punc_tl, + pp .tl_set_x:N = \l_postal_code_punc_tl, + postcodesep .tl_set_x:N = \l_postal_code_punc_tl, + sp .tl_set_x:N = \l_state_punc_tl, + statesep .tl_set_x:N = \l_state_punc_tl, + o .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + organization .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + a .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + addressline .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + c .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + city .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + p .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + postcode .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + s .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + state .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + orp .tl_set_x:N = \l_organization_punc_tl, + adp .tl_set_x:N = \l_address_line_punc_tl, + cip .tl_set_x:N = \l_city_punc_tl, + pcp .tl_set_x:N = \l_postal_code_punc_tl, + stp .tl_set_x:N = \l_state_punc_tl, + cyp .tl_set_x:N = \l_country_punc_tl, + or .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + ad .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + ci .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + pc .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + st .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + cy .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + country .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + unknown .code:n = { + \ifstrempty { #1 } { + \csxappto { ca_affiliation_values } + { {\l_keys_key_tl}~ } + } { + \csxappto { ca_affiliation_values } + { {#1}~ } + } + } + } + + \cs_set:Npn \__reset_affiliation: + { + \tl_gset:Nn \l_organization_punc_tl { , } + \tl_gset:Nn \l_address_line_punc_tl { , } + \tl_gset:Nn \l_city_punc_tl { , } + \tl_gset:Nn \l_postal_code_punc_tl { , } + \tl_gset:Nn \l_state_punc_tl { , } + \tl_gset:Nn \l_country_punc_tl { } + } + + \DeclareDocumentCommand\affiliation{ o m }{ + \__reset_affiliation: + \csgdef { ca_affiliation_values } { } + \IfNoValueTF { #2 } + { } + { + \keys_set:nn { stm / affiliation } { #2 } + } + \csgappto{elsaddress}{ + \def\baselinestretch{1}% + \refstepcounter{affn} + \xdef\@currentlabel{\theaffn} + \IfNoValueTF { #1 } + { } + { \elsLabel{#1} } + \textsuperscript{\theaffn}} + \csxappto{elsaddress}{ + \csuse { ca_affiliation_values } + \par + } + } + \ExplSyntaxOff + \else% + \def\caaffitempostskip{\space} + + \DeclareRobustCommand\caorganization[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\capostalcode[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\caaffcity[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\caaddressline[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\castate[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\cacountry[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\castmorganization[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmpostalcode[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmaffcity[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmaddressline[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmstate[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmcountry[2][,]{% + #2#1\caaffitempostskip% + } + + \define@key{affiliation}{op}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{orp}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{organizationsep}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{ap}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{adp}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{addresslinesep}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{cp}{\xdef\@citypunc{#1}} + \define@key{affiliation}{cip}{\xdef\@citypunc{#1}} + \define@key{affiliation}{cyp}{\xdef\@countrypunc{#1}} + \define@key{affiliation}{citysep}{\xdef\@citypunc{#1}} + \define@key{affiliation}{pp}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{pop}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{postcodesep}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{sp}{\xdef\@statepunc{#1}} + \define@key{affiliation}{stp}{\xdef\@statepunc{#1}} + \define@key{affiliation}{statesep}{\xdef\@statepunc{#1}} + \define@key{affiliation}{countrysep}{\xdef\@countrypunc{#1}} + + \define@key{affiliation}{organization}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{addressline}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{city}{% + \caaffcity[\@citypunc]{#1}} + \define@key{affiliation}{postcode}{% + \capostalcode[\@postcodepunc]{#1}} + \define@key{affiliation}{state}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{or}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{ad}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{ci}{% + \caaffcity[\@citypunc]{#1}} + \define@key{affiliation}{po}{% + \capostalcode[\@postcodepunc]{#1}} + \define@key{affiliation}{st}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{o}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{a}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{c}{% + \cacity[\@citypunc]{#1}} + \define@key{affiliation}{p}{% + \capostcode[\@postcodepunc]{#1}} + \define@key{affiliation}{s}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{cy}{% + \cacountry[\@countrypunc]{#1}} + \define@key{affiliation}{country}{% + \cacountry[\@countrypunc]{#1}} + + \gdef\@resetaffiliation{% + \gdef\@organizationpunc{,}% + \gdef\@addresslinepunc{,}% + \gdef\@citypunc{,}% + \gdef\@statepunc{,}% + \gdef\@postcodepunc{,}% + \gdef\@countrypunc{}% + } + + \def\affiliation{\@ifnextchar[{\@@affiliation}{\@affiliation}} + + \newcommand*{\newstmrobustcmd}{} + \protected\def\newstmrobustcmd{\@star@or@long\stmetb@new@command} + + \def\stmetb@new@command#1{\@testopt{\stmetb@newcommand#1}0} + + \def\stmetb@newcommand#1[#2]{% + \@ifnextchar[%] + {\stmetb@xargdef#1[#2]} + {\ifx\l@ngrel@x\relax + \let\l@ngrel@x\protected + \else + \protected\def\l@ngrel@x{\protected\long}% + \fi + \@argdef#1[#2]}} + + \long\def\stmetb@xargdef#1[#2][#3]#4{% + \@ifdefinable#1{% + \expandafter\protected + \expandafter\def + \expandafter#1% + \expandafter{% + \expandafter\@testopt + \csname\string#1\endcsname{#3}}% + \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}} + % + \newcommand{\ifstmundef}[1]{% + \ifdefined#1% + \ifx#1\relax + \expandafter\expandafter + \expandafter\@firstoftwo + \else + \expandafter\expandafter + \expandafter\@secondoftwo + \fi + \else + \expandafter\@firstoftwo + \fi} + \newcommand{\stmexpandonce}[1]{% + \unexpanded\expandafter{#1}} + \newstmrobustcmd{\gstmappto}[2]{% + \ifundef{#1} + {\xdef#1{\unexpanded{#2}}} + {\xdef#1{\stmexpandonce#1\unexpanded{#2}}}} + \newstmrobustcmd{\xstmappto}[2]{% + \ifstmundef{#1} + {\xdef#1{#2}} + {\xdef#1{\stmexpandonce#1#2}}} + + \long\def\@@affiliation[#1]#2{% + \@resetaffiliation% + \gdef\caaffiliationvalues{}% + \elsLabel{#1}% + \setkeys{affiliation}{#2}% + \g@addto@macro\elsaddress{% + \def\baselinestretch{1}% + \refstepcounter{affn}% + \xdef\@currentlabel{\theaffn}% + \elsLabel{#1}% + \textsuperscript{\theaffn}} + \xstmappto\elsaddress{\caaffiliationvalues\par}} + + \long\def\@affiliation#1{% + \@resetaffiliation% + \gdef\caaffiliationvalues{}% + \setkeys{affiliation}{#1}% + \g@addto@macro\elsauthors{% + \def\baselinestretch{1}}% + \xstmappto\elsaddress{\caaffiliationvalues\par}} +\fi + +\def\address{\@ifnextchar[{\@@address}{\@address}} + +\long\def\@@address[#1]#2{\g@addto@macro\elsaddress{% + \def\baselinestretch{1}% + \refstepcounter{affn} + \xdef\@currentlabel{\theaffn} + \elsLabel{#1}% + \textsuperscript{\theaffn}#2\par}} + +\long\def\@address#1{\g@addto@macro\elsauthors{% + \def\baselinestretch{1}% + \addsep\footnotesize\itshape#1\def\addsep{\par\vskip6pt}% + \def\authorsep{\par\vskip8pt}}} + +\newbox\absbox +\renewenvironment{abstract}{\global\setbox\absbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip\textbf{\@suppabstitle} %*% + \par\medskip\noindent\unskip\ignorespaces} + {\egroup} + +\newbox\supphighlightsbox +\newbox\suppgrabsbox +\def\@supphighlightstitle{Highlights} +\def\@suppgrabstitle{Graphical Abstract} +\newif\ifelsprelimpagegrabs\global\elsprelimpagegrabsfalse +\newif\ifelsprelimpagehl\global\elsprelimpagehlfalse +\def\suppprelims{% + \ifelsprelimpagegrabs\relax% + \thispagestyle{empty}% + \unvbox\suppgrabsbox% + \pagebreak\clearpage% + \fi% + \ifelsprelimpagehl\relax% + \thispagestyle{empty} + \unvbox\supphighlightsbox% + \pagebreak\clearpage% + \setcounter{page}{1}% + \fi% +} +\newenvironment{highlights}{% + \global\elsprelimpagehltrue% + \global\setbox\supphighlightsbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip{\Large\@supphighlightstitle}%*% + \par\vskip12pt\noindent\unskip\ignorespaces\textbf{\@title}% + \ifx\elsprelimauthors\@empty\relax\else% + \par\vskip6pt\noindent\unskip\ignorespaces\elsprelimauthors% + \fi% + \par\medskip\noindent\unskip\ignorespaces + \begin{itemize} + } + {\end{itemize} + \egroup} +\newenvironment{graphicalabstract}{% + \global\elsprelimpagegrabstrue% + \global\setbox\suppgrabsbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip{\Large\@suppgrabstitle}%*% + \par\vskip12pt\noindent\unskip\ignorespaces\textbf{\@title}% + \ifx\elsprelimauthors\@empty\relax\else% + \par\vskip6pt\noindent\unskip\ignorespaces\elsprelimauthors% + \fi% + \par\medskip\noindent\unskip\ignorespaces} + {\egroup} + +\newbox\keybox +\let\@suppkwdtitle\@empty %*% +\def\keywordtitle#1{\gdef\@suppkwdtitle{#1}} %*% +\def\keywordtitlesep#1{\gdef\@suppkeywordtitlesep{#1}} %*% +\keywordtitle{Keywords} %*% +\keywordtitlesep{:\ } +\def\keyword{% + \def\sep{\unskip, }% + \def\MSC{\@ifnextchar[{\@MSC}{\@MSC[2000]}} + \def\@MSC[##1]{\par\leavevmode\hbox {\it ##1~MSC:\space}}% + \def\PACS{\par\leavevmode\hbox {\it PACS:\space}}% + \def\JEL{\par\leavevmode\hbox {\it JEL:\space}}% + \global\setbox\keybox=\vbox\bgroup\hsize=\textwidth + \normalsize\normalfont\def\baselinestretch{1} + \parskip\z@ + \noindent\textit{\@suppkwdtitle\@elsarticlekeywordtitlesep} + \raggedright % Keywords are not justified. + \ignorespaces} +\def\endkeyword{\par \egroup} + +\newdimen\Columnwidth +\Columnwidth=\columnwidth + +\def\printFirstPageNotes{% + \iflongmktitle + \let\columnwidth=\textwidth + \fi +\ifdoubleblind +\else + \ifx\@tnotes\@empty\else\@tnotes\fi + \ifx\@nonumnotes\@empty\else\@nonumnotes\fi + \ifx\@cornotes\@empty\else\@cornotes\fi + \ifx\@elseads\@empty\relax\else + \let\thefootnote\relax + \footnotetext{\ifnum\theead=1\relax + \textit{Email address:\space}\else + \textit{Email addresses:\space}\fi + \@elseads}\fi + \ifx\@elsuads\@empty\relax\else + \let\thefootnote\relax + \footnotetext{\textit{URL:\space}% + \@elsuads}\fi +\fi + \ifx\@fnotes\@empty\else\@fnotes\fi + \iflongmktitle\if@twocolumn + \let\columnwidth=\Columnwidth\fi\fi +} + +%% Pushing text to begin on newpage %*% +\def\newpage@after@title{title} +\def\newpage@after@author{author} +\def\newpage@after@abstract{abstract} +\def\newpageafter#1% + {\gdef\@suppnewpageafter{#1}} + +\long\def\pprintMaketitle{\clearpage + \iflongmktitle\if@twocolumn\let\columnwidth=\textwidth\fi\fi + \resetTitleCounters + \def\baselinestretch{1}% + \printFirstPageNotes + \begin{\supptitlealign}% + \thispagestyle{pprintTitle}% + \def\baselinestretch{1}% + \Large\@title\par\vskip18pt% + \ifx\@suppnewpageafter\newpage@after@title% %*% + \newpage + \fi% + \ifdoubleblind + \vspace*{2pc} + \else + \normalsize\elsauthors\par\vskip10pt + \footnotesize\itshape\elsaddress\par\vskip36pt + \fi + \ifx\@suppnewpageafter\newpage@after@author% %*% + \newpage + \fi% + \hrule\vskip12pt + \ifvoid\absbox\else\unvbox\absbox\par\vskip10pt\fi + \ifvoid\keybox\else\unvbox\keybox\par\vskip10pt\fi + \hrule\vskip12pt + \ifx\@suppnewpageafter\newpage@after@abstract% %*% + \newpage + \fi% + \end{\supptitlealign}% + \gdef\thefootnote{\arabic{footnote}}% + } + +\def\printWarning{% + \mbox{}\par\vfill\par\bgroup + \fboxsep12pt\fboxrule1pt + \hspace*{.18\textwidth} + \fcolorbox{gray50}{gray10}{\box\warnbox} + \egroup\par\vfill\thispagestyle{empty} + \setcounter{page}{0} + \clearpage} + +\long\def\finalMaketitle{% + \resetTitleCounters + \def\baselinestretch{1}% + \MaketitleBox + \thispagestyle{pprintTitle}% + \gdef\thefootnote{\arabic{footnote}}% + } + +\long\def\MaketitleBox{% + \resetTitleCounters + \def\baselinestretch{1}% + \begin{\supptitlealign}% + \def\baselinestretch{1}% + \Large\@title\par\vskip18pt + \ifdoubleblind + \vspace*{2pc} + \else + \normalsize\elsauthors\par\vskip10pt + \footnotesize\itshape\elsaddress\par\vskip36pt + \fi + \hrule\vskip12pt + \ifvoid\absbox\else\unvbox\absbox\par\vskip10pt\fi + \ifvoid\keybox\else\unvbox\keybox\par\vskip10pt\fi + \hrule\vskip12pt + \end{\supptitlealign}% +} + +\def\FNtext#1{\par\bgroup\footnotesize#1\egroup} +\newdimen\space@left +\def\alarm#1{\typeout{******************************}% + \typeout{#1}% + \typeout{******************************}% +} + +\def\titlespancalculator#1#2#3#4{% + % break count + \@tempcnta=#4\relax% + % pagebreakcount increment + \advance\@tempcnta by 1\relax% + % title page height + \@tempdima=#1\relax% + % Page height - title page notes height (only for first break) + % Page height - textheight (for remaining breaks) + % Page height - title page notes height + \@tempdimb=#2\relax% + % Remaining title page height + \advance\@tempdima -\the\@tempdimb% + % Checks if remaining title page + % height less than textheight + \ifdim\the\@tempdima>#3\relax% + \titlespancalculator% + {\the\@tempdima}{#3}{#3}{\the\@tempcnta}%Break again + \else% + % Save break count and exit. + \xdef\savetitlepagespan{\the\@tempcnta}% + \fi% +}% + +\long\def\myfor#1#2#3{% + \@tempcnta=#1\relax% + \ifnum#1<#2\relax% + \advance\@tempcnta by 1\relax% + #3% + \myfor{\the\@tempcnta}{#2}{#3}% + \fi} + +\long\def\getSpaceLeft{%\global\@twocolumnfalse% + \global\setbox0=\vbox{\hsize=\textwidth\MaketitleBox}% + \global\setbox1=\vbox{\hsize=\textwidth + \let\footnotetext\FNtext + \printFirstPageNotes}% + \xdef\noteheight{\the\ht1}% + \xdef\titleheight{\the\ht0}% + \@tempdima=\vsize + \advance\@tempdima-\noteheight + \advance\@tempdima-1\baselineskip + \xdef\savefpageheight{\the\@tempdima}% + \setbox2=\vbox{\titlespancalculator{\titleheight}% + {\savefpageheight}{\textheight}{0}}% +} + + \skip\footins=24pt + +\newbox\els@boxa +\newbox\els@boxb + +\ifpreprint + \def\maketitle{\suppprelims\pprintMaketitle} + \else + \ifnum\jtype=1 + \def\maketitle{% + \suppprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \box\els@boxb} + \else% + \fi% + \box0% + \else + \finalMaketitle\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \else + \ifnum\jtype=5 + \def\maketitle{% + \suppprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \twocolumn[\box\els@boxb]} + \else% + \fi% + \twocolumn[\box0]%\printFirstPageNotes + \else + \twocolumn[\finalMaketitle]\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}} + \else + \if@twocolumn + \def\maketitle{% + \suppprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \twocolumn[\box\els@boxb]} + \else% + \fi% + \twocolumn[\box0]% + \else + \twocolumn[\finalMaketitle]\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \else + \def\maketitle{% + \suppprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \box\els@boxb} + \else% + \fi% + \box0% + \else + \suppprelims% + \finalMaketitle\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \fi + \fi + \fi +\fi + +\let\@suppmyfooter\@empty +\let\@suppmyfooteralign\@empty +\def\@suppmyfooteralignleft{L} +\def\@suppmyfooteralignright{R} +\def\@suppmyfooteraligncenter{C} + +\def\myfooter[#1]#2 %*% + {\gdef\@suppmyfooteralign{#1} + \gdef\@suppmyfooter{#2}} + +\def\myfooterfont#1{\gdef\@myfooterfont{#1}} +\myfooterfont{\footnotesize\itshape} +\def\ps@pprintTitle{% + \let\@oddhead\@empty + \let\@evenhead\@empty + \def\@oddfoot{\footnotesize\itshape + \ifx\@journal\@empty + \else\@journal\fi\hfill}% + \let\@evenfoot\@oddfoot} + +\def\@seccntDot{.} +\def\@seccntformat#1{\csname the#1\endcsname\@seccntDot\hskip 0.5em} + +\renewcommand\section{\@startsection {section}{1}{\z@}% + {18\p@ \@plus 6\p@ \@minus 3\p@}% + {9\p@ \@plus 6\p@ \@minus 3\p@}% + {\normalsize\bfseries\boldmath}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {12\p@ \@plus 6\p@ \@minus 3\p@}% + {3\p@ \@plus 6\p@ \@minus 3\p@}% + {\normalfont\normalsize\itshape}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {12\p@ \@plus 6\p@ \@minus 3\p@}% + {\p@}% + {\normalfont\normalsize\itshape}} + +\def\paragraph{\secdef{\els@aparagraph}{\els@bparagraph}} +\def\els@aparagraph[#1]#2{\elsparagraph[#1]{#2.}} +\def\els@bparagraph#1{\elsparagraph*{#1.}} + +\newcommand\elsparagraph{\@startsection{paragraph}{4}{0\z@}% + {10\p@ \@plus 6\p@ \@minus 3\p@}% + {-6\p@}% + {\normalfont\itshape}} +\newdimen\leftMargin +\leftMargin=2em +\newtoks\@enLab %\newtoks\@enfont +\def\@enQmark{?} +\def\@enLabel#1#2{% + \edef\@enThe{\noexpand#1{\@enumctr}}% + \@enLab\expandafter{\the\@enLab\csname the\@enumctr\endcsname}% + \@enloop} +\def\@enSpace{\afterassignment\@enSp@ce\let\@tempa= } +\def\@enSp@ce{\@enLab\expandafter{\the\@enLab\space}\@enloop} +\def\@enGroup#1{\@enLab\expandafter{\the\@enLab{#1}}\@enloop} +\def\@enOther#1{\@enLab\expandafter{\the\@enLab#1}\@enloop} +\def\@enloop{\futurelet\@entemp\@enloop@} +\def\@enloop@{% + \ifx A\@entemp \def\@tempa{\@enLabel\Alph }\else + \ifx a\@entemp \def\@tempa{\@enLabel\alph }\else + \ifx i\@entemp \def\@tempa{\@enLabel\roman }\else + \ifx I\@entemp \def\@tempa{\@enLabel\Roman }\else + \ifx 1\@entemp \def\@tempa{\@enLabel\arabic}\else + \ifx \@sptoken\@entemp \let\@tempa\@enSpace \else + \ifx \bgroup\@entemp \let\@tempa\@enGroup \else + \ifx \@enum@\@entemp \let\@tempa\@gobble \else + \let\@tempa\@enOther + \fi\fi\fi\fi\fi\fi\fi\fi + \@tempa} +\newlength{\@sep} \newlength{\@@sep} +\setlength{\@sep}{.5\baselineskip plus.2\baselineskip + minus.2\baselineskip} +\setlength{\@@sep}{.1\baselineskip plus.01\baselineskip + minus.05\baselineskip} +\providecommand{\sfbc}{\rmfamily\upshape} +\providecommand{\sfn}{\rmfamily\upshape} +\def\@enfont{\ifnum \@enumdepth >1\let\@nxt\sfn \else\let\@nxt\sfbc \fi\@nxt} +\def\enumerate{% + \ifnum \@enumdepth >3 \@toodeep\else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}\fi + \@ifnextchar[{\@@enum@}{\@enum@}} +\def\@@enum@[#1]{% + \@enLab{}\let\@enThe\@enQmark + \@enloop#1\@enum@ + \ifx\@enThe\@enQmark\@warning{The counter will not be printed.% + ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi + \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}% + \expandafter\let\csname the\@enumctr\endcsname\@enThe + \csname c@\@enumctr\endcsname7 + \expandafter\settowidth + \csname leftmargin\romannumeral\@enumdepth\endcsname + {\the\@enLab\hskip\labelsep}% + \@enum@} +\def\@enum@{\list{{\@enfont\csname label\@enumctr\endcsname}}% + {\usecounter{\@enumctr}\def\makelabel##1{\hss\llap{##1}}% + \ifnum \@enumdepth>1\setlength{\topsep}{\@@sep}\else + \setlength{\topsep}{\@sep}\fi + \ifnum \@enumdepth>1\setlength{\itemsep}{0pt plus1pt minus1pt}% + \else \setlength{\itemsep}{\@@sep}\fi + %\setlength\leftmargin{\leftMargin}%%%{1.8em} + \setlength{\parsep}{0pt plus1pt minus1pt}% + \setlength{\parskip}{0pt plus1pt minus1pt} + }} + +\def\endenumerate{\par\ifnum \@enumdepth >1\addvspace{\@@sep}\else + \addvspace{\@sep}\fi \endlist} + +\def\sitem{\@noitemargtrue\@item[\@itemlabel *]} + +\def\itemize{\@ifnextchar[{\@Itemize}{\@Itemize[]}} + +\def\@Itemize[#1]{\def\next{#1}% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \ifx\next\@empty\else\expandafter\def\csname + labelitem\romannumeral\the\@itemdepth\endcsname{#1}\fi% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \expandafter\list\csname\@itemitem\endcsname + {\def\makelabel##1{\hss\llap{##1}}}% + \fi} +\def\newdefinition#1{% + \@ifnextchar[{\@odfn{#1}}{\@ndfn{#1}}}%] +\def\@ndfn#1#2{% + \@ifnextchar[{\@xndfn{#1}{#2}}{\@yndfn{#1}{#2}}} +\def\@xndfn#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@dfncountersep + \@dfncounter{#1}}% + \global\@namedef{#1}{\@dfn{#1}{#2}}% + \global\@namedef{end#1}{\@enddefinition}}} +\def\@yndfn#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@dfncounter{#1}}% + \global\@namedef{#1}{\@dfn{#1}{#2}}% + \global\@namedef{end#1}{\@enddefinition}}} +\def\@odfn#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}} + \global\@namedef{#1}{\@dfn{#2}{#3}}% + \global\@namedef{end#1}{\@enddefinition}}}} +\def\@dfn#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@ydfn{#1}{#2}}{\@xdfn{#1}{#2}}} +\def\@xdfn#1#2{% + \@begindefinition{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@ydfn#1#2[#3]{% + \@opargbegindefinition{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +\def\@dfncounter#1{\noexpand\arabic{#1}} +\def\@dfncountersep{.} +\def\@begindefinition#1#2{\trivlist + \item[\hskip\labelsep{\bfseries #1\ #2.}]\upshape} +\def\@opargbegindefinition#1#2#3{\trivlist + \item[\hskip\labelsep{\bfseries #1\ #2\ (#3).}]\upshape} +\def\@enddefinition{\endtrivlist} + +\def\@begintheorem#1#2{\trivlist + \let\baselinestretch\@blstr + \item[\hskip \labelsep{\bfseries #1\ #2.}]\itshape} +\def\@opargbegintheorem#1#2#3{\trivlist + \let\baselinestretch\@blstr + \item[\hskip \labelsep{\bfseries #1\ #2\ (#3).}]\itshape} + +\def\newproof#1{% + \@ifnextchar[{\@oprf{#1}}{\@nprf{#1}}} +\def\@nprf#1#2{% + \@ifnextchar[{\@xnprf{#1}{#2}}{\@ynprf{#1}{#2}}} +\def\@xnprf#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@prfcountersep + \@prfcounter{#1}}% + \global\@namedef{#1}{\@prf{#1}{#2}}% + \global\@namedef{end#1}{\@endproof}}} +\def\@ynprf#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@prfcounter{#1}}% + \global\@namedef{#1}{\@prf{#1}{#2}}% + \global\@namedef{end#1}{\@endproof}}} +\def\@oprf#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}}% + \global\@namedef{#1}{\@prf{#2}{#3}}% + \global\@namedef{end#1}{\@endproof}}}} +\def\@prf#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@yprf{#1}{#2}}{\@xprf{#1}{#2}}} +\def\@xprf#1#2{% + \@beginproof{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@yprf#1#2[#3]{% + \@opargbeginproof{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +\def\@prfcounter#1{\noexpand\arabic{#1}} +\def\@prfcountersep{.} +\def\@beginproof#1#2{\trivlist\let\baselinestretch\@blstr + \item[\hskip \labelsep{\scshape #1.}]\rmfamily} +\def\@opargbeginproof#1#2#3{\trivlist\let\baselinestretch\@blstr + \item[\hskip \labelsep{\scshape #1\ (#3).}]\rmfamily} +\def\@endproof{\endtrivlist} +\newcommand*{\qed}{\hbox{}\hfill$\Box$} + +\@ifundefined{@biboptions}{\xdef\@biboptions{numbers}}{} +\InputIfFileExists{\jobname.spl}{}{} +\ifnonatbib\relax\else + \RequirePackage[\@biboptions]{natbib} +\fi +\newwrite\splwrite +\immediate\openout\splwrite=\jobname.spl +\def\biboptions#1{\def\next{#1}\immediate\write\splwrite{% + \string\g@addto@macro\string\@biboptions{% + ,\expandafter\strip@prefix\meaning\next}}} + +\let\baselinestretch=\@blstr +\ifnum\jtype=1 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=562pt, + textwidth=384pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=12pt, + footnotesep=24pt plus 2pt minus 12pt, + } + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \if@twocolumn\global\@twocolumnfalse\fi +\else\ifnum\jtype=3 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=622pt, + textwidth=468pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=18pt, + footnotesep=24pt plus 2pt minus 12pt, + columnsep=2pc + } + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \if@twocolumn\input{fleqn.clo}\fi +\else\ifnum\jtype=5 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=682pt, + textwidth=522pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=18pt, + footnotesep=24pt plus 2pt minus 12pt, + columnsep=18pt + }% + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \input{fleqn.clo} + \global\@twocolumntrue +%% +%% End of option '5p' +%% +\fi\fi\fi +\def\journal#1{\gdef\@journal{#1}} + \let\@journal\@empty +\newenvironment{frontmatter}{}{\maketitle} + +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip\footnotesize + \sbox\@tempboxa{#1: #2}% + \ifdim \wd\@tempboxa >\hsize + #1: #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\AtBeginDocument{\@ifpackageloaded{hyperref} + {\def\@linkcolor{blue} + \def\@anchorcolor{blue} + \def\@citecolor{blue} + \def\@filecolor{blue} + \def\@urlcolor{blue} + \def\@menucolor{blue} + \def\@pagecolor{blue} +\begingroup + \@makeother\`% + \@makeother\=% + \edef\x{% + \edef\noexpand\x{% + \endgroup + \noexpand\toks@{% + \catcode 96=\noexpand\the\catcode`\noexpand\`\relax + \catcode 61=\noexpand\the\catcode`\noexpand\=\relax + }% + }% + \noexpand\x + }% +\x +\@makeother\` +\@makeother\= +}{}} +%% +\def\appendixname{Appendix } +\renewcommand\appendix{\par + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{equation}{0} + \gdef\thefigure{\@Alph\c@section.\arabic{figure}}% + \gdef\thetable{\@Alph\c@section.\arabic{table}}% + \gdef\thesection{\appendixname~\@Alph\c@section}% + \@addtoreset{equation}{section}% + \gdef\theequation{\@Alph\c@section.\arabic{equation}}% + \addtocontents{toc}{\string\let\string\numberline\string\tmptocnumberline}{}{} +} + +%%%% \numberline width calculation for appendix. +\newdimen\appnamewidth +\def\tmptocnumberline#1{% + \setbox0=\hbox{\appendixname} + \appnamewidth=\wd0 + \addtolength\appnamewidth{2.5pc} + \hb@xt@\appnamewidth{#1\hfill} +} + +%% Added for work with amsrefs.sty + +\@ifpackageloaded{amsrefs}% + {} + {%\let\bibsection\relax% + \AtBeginDocument{\def\cites@b#1#2,#3{% + \begingroup[% + \toks@{\InnerCite{#2}#1}% + \ifx\@empty#3\@xp\@gobble\fi + \cites@c#3% +}}} +%% +%% Added for avoiding clash with cleveref.sty +\@ifpackageloaded{cleveref}% + {} + {\def\tnotetext[#1]#2{\g@addto@macro\@tnotes{% + \refstepcounter{tnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thetnote}} + \def\thefootnote{\ifcase\c@tnote\or$\star$\or$\star\star$\fi}% + \footnotetext{#2}}} +%%% + \def\fntext[#1]#2{\g@addto@macro\@fnotes{% + \refstepcounter{fnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thefnote}} + \def\thefootnote{\thefnote}% + \global\setcounter{footnote}{\c@fnote}% + \footnotetext{#2}}} +%%% + \def\cortext[#1]#2{\g@addto@macro\@cornotes{% + \refstepcounter{cnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thecnote}} + \def\thefootnote{\ifcase\c@cnote\or$\ast$\or + $\ast\ast$\fi}% + \footnotetext{#2}}} +} + +\def\textmarker#1#2{\textcolor{#1}{#2}}%*% +\endinput +%% +%% End of file `supp.cls'. diff --git a/_extensions/inst/tex/supp.tex b/_extensions/inst/tex/supp.tex new file mode 100644 index 0000000..5ceb998 --- /dev/null +++ b/_extensions/inst/tex/supp.tex @@ -0,0 +1,432 @@ +$-- Keeping in template layout for backward compatibility +\documentclass[$if(layout)$$layout$$else$$for(classoption)$$classoption$$sep$,$endfor$$endif$]{_extensions/inst/tex/supp} %review=doublespace preprint=single 5p=2 column +%%% Begin My package additions %%%%%%%%%%%%%%%%%%% +\usepackage[hyphens]{url} +$if(journal)$ +\journal{$journal$} % Sets Journal name +$endif$ +\usepackage{lineno} % add +$if(linenumbers)$ +\linenumbers % turns line numbering on +$endif$ +\usepackage{graphicx} +\usepackage{xstring} +\usepackage{xcolor} +%%%%%%%%%%%%%%%% end my additions to header +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[utf8]{inputenc} + $if(euro)$ + \usepackage{eurosym} + $endif$ +\else % if luatex or xelatex + \usepackage{fontspec} + \ifxetex + \usepackage{xltxtra,xunicode} + \fi + \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} + \newcommand{\euro}{€} + $if(mainfont)$ + \setmainfont{$mainfont$} + $endif$ + $if(sansfont)$ + \setsansfont{$sansfont$} + $endif$ + $if(monofont)$ + \setmonofont{$monofont$} + $endif$ + $if(mathfont)$ + \setmathfont{$mathfont$} + $endif$ +\fi +% use microtype if available +\IfFileExists{microtype.sty}{\usepackage{microtype}}{} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(natbib)$ +\usepackage{natbib} +\setcitestyle{$natbiboptions$} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(graphics)$ +\usepackage{graphicx} +$endif$ +\ifxetex + \usepackage[setpagesize=false, % page size defined by xetex + unicode=false, % unicode breaks when used with xetex + xetex]{hyperref} +\else + \usepackage[unicode=true]{hyperref} +\fi +\hypersetup{breaklinks=true, + bookmarks=true, + pdfauthor={$author-meta$}, + pdftitle={$title-meta$}, + colorlinks=$if(colorlinks)$true$else$false$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$, + linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$, + pdfborder={0 0 0}} +\urlstyle{same} % don't use monospace font for urls +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(lang)$ +\ifxetex + \usepackage{polyglossia} + \setmainlanguage{$mainlang$} +\else + \usepackage[$lang$]{babel} +\fi +$endif$ +% Pandoc toggle for numbering sections (defaults to be off) +$if(numbersections)$ +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(highlighting-macros)$ +% Pandoc syntax highlighting +$highlighting-macros$ +$endif$ +% tightlist command for lists without linebreak +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(tables)$ +% From pandoc table feature +\usepackage{longtable,booktabs,array} +$if(multirow)$ +\usepackage{multirow} +$endif$ +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$if(csl-refs)$ +% Pandoc citation processing +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newlength{\cslentryspacingunit} % times entry-spacing +\setlength{\cslentryspacingunit}{\parskip} +% for Pandoc 2.8 to 2.10.1 +\newenvironment{cslreferences}% + {$if(csl-hanging-indent)$\setlength{\parindent}{0pt}% + \everypar{\setlength{\hangindent}{\cslhangindent}}\ignorespaces$endif$}% + {\par} +% For Pandoc 2.11+ +\newenvironment{CSLReferences}[2] % #1 hanging-ident, #2 entry spacing +{% don't indent paragraphs + \setlength{\parindent}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \let\oldpar\par + \def\par{\hangindent=\cslhangindent\oldpar} + \fi + % set entry spacing + \setlength{\parskip}{#2\cslentryspacingunit} + }% +{} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{#1\hfill\break} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{#1}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{#1}\break} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ + + +\usepackage{xifthen} +% set special color for EST +\ifthenelse{\equal{$journal$}{Environmental Science \& Technology}} +{\definecolor{seccol}{RGB}{56, 95, 66}} +{\definecolor{seccol}{RGB}{0, 0, 0}} + +$if(uppersections)$ +\usepackage{titlesec} +\titleformat{\section} +{\color{seccol}\large\bfseries\MakeUppercase}{\thesection}{1em}{} +$endif$ +$if(sectiononnewpage)$ +\AddToHook{cmd/section/before}{\clearpage} +$endif$ + +\usepackage{enumitem} +\usepackage{fontspec} +\usepackage{float} +\setmainfont{Helvetica} +\usepackage[normalem]{ulem} +\usepackage{hyperref} +\usepackage{nameref} %needed by zref-xr +\usepackage{zref-xr,zref-hyperref,zref-user} +\usepackage{xr-hyper} + +% force to use \zref +$if(msname)$ +\def\msname{$msname$} +\zexternaldocument*{\msname} +\renewcommand{\ref}{\zref} +$endif$ +$if(smname)$ +\def\smname{$smname$} +\zexternaldocument*{\smname} +$endif$ + +\zxrsetup{toltxlabel=true} +{\catcode`\#=12 \gdef\hashchar{#1}} +\makeatletter +\newcommand\hzref[1]{\edef\next{% + \noexpand\href{% + \zref@extractdefault{#1}{url}{}% + \zref@ifrefcontainsprop{#1}{anchor}{% + \hashchar\zref@extract{#1}{anchor}}{}}% + {\noexpand\zref{#1}}}\next} +\makeatother + + + +$if(revision)$ +% \usepackage{xcolor} +\usepackage{adjustbox} +\usepackage{mdframed} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + linecolor=gray!30, + backgroundcolor=gray!5, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=0pt, + innerbottommargin=0pt + ]{refquote} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + backgroundcolor=red!3!white, + linecolor=red!30!white, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=10pt, + innerbottommargin=10pt + ]{question} +\setenumerate{labelsep=*, leftmargin=1.0pc} +% setup hyperlink for page and line number +\def\msname{$if(msname)$$msname$$else$MS$endif$} +\def\smname{$if(smname)$$smname$$else$SM$endif$} +\setenumerate{labelsep=*, leftmargin=1.0pc} +%\zexternaldocument*{ManuscriptNew\veraa} +\zexternaldocument*{\msname} +\zexternaldocument*{\smname} +\newcommand{\hlabel}[1]{\label{#1}\hypertarget{#1}{ + \linelabel{line:#1}}} +%\externaldocument[si-]{\smname\veraa}[\smname\veraa.pdf] +\makeatletter + \newcommand{\clab}[2]{% + \protected@write\@auxout{\let\clab\@secondoftwo}{ + \string\newlabel{r:#1}{{#2}{}}}% + \hlabel{#1}#2\hlabel{#1end}} +\makeatother +\newcommand{\zhypera}[1]{\href[pdfnewwindow]{\msname.pdf\##1}{\\[1ex]\textbf{Page \zpageref{#1}, Line +\zref{line:#1}--\zref{line:#1end}:}\\}} +\newcommand{\cref}[1]{\begin{refquote}\zhypera{#1}{\zref{r:#1}}\\[-0.5ex]\end{refquote}} +% \newenvironment{ra}[1][\unskip]{\par \noindent \\[-1ex] \textbf{Response/Action:}\par\bf}{\ \\} +\renewenvironment{quote}{\begin{question}}{\end{question}} +% \renewenvironment{verbatim}{\begin{ra}}{\end{ra}} +$endif$ + + +% def default corresponding authors and equal contributing authors variables +\def\hascorr{0} +\def\haseqc{0} +% check if corresponding author(s) and equal contributing authors are available +$for(author)$$if(author.correspondence)$\def\hascorr{1}$endif$$if(author.equalcontribution)$\def\haseqc{1}$endif$ $endfor$ + +\newcommand{\getcorrauthinfo}{ + \subsection{Corresponding Author(s)} + \def\a{} \def\b{} \def\c{} + \hspace{-2.2em} + $for(author)$ + $if(author.correspondence)$ + \textbf{$author.name$:} + \vspace{-1em} + \begin{enumerate}[labelindent=-12pt,label=\arabic*.,itemindent=0em,leftmargin=!, itemsep = -10pt] + $for(author.institute)$ \def\a{$author.institute$} + $for(institute)$ \def\b{$institute.id$} \def\c{$institute.name$} + \ifx \a\b \item \c; \fi + $endfor$ + $endfor$ + $if(author.email)$\item email: $author.email$;$endif$ + $if(author.orcid)$\item orcid: $author.orcid$;$endif$ + $if(author.tel)$\item Tel: $author.tel$;$endif$ + $if(author.fax)$\item Fax: $author.fax$$endif$ + \end{enumerate} + $endif$ + $endfor$ +} + +\newcommand{\getotherauthinfo}{ + \subsection{Author(s)} + \def\a{} \def\b{} \def\c{} + \hspace{-2.2em} + $for(author)$ + $if(author.correspondence)$ + $else$ + \textbf{$author.name$:} + \vspace{-1em} + \begin{enumerate}[labelindent=-12pt,label=\arabic*.,itemindent=0em,leftmargin=!, itemsep = -10pt] + $for(author.institute)$ \def\a{$author.institute$} $for(institute)$ \def\b{$institute.id$} \def\c{$institute.name$} + \ifx \a\b \item \c; \fi + $endfor$ + $endfor$ + $if(author.email)$\item email: $author.email$;$endif$ + $if(author.orcid)$\item orcid: $author.orcid$;$endif$ + $if(author.tel)$\item Tel: $author.tel$;$endif$ + $if(author.fax)$\item Fax: $author.fax$$endif$ + \end{enumerate} + $endif$ + $endfor$ +} + +$preamble$ + +% remove the two line around Abstract +$if(abstract)$ +$else$ +\makeatletter +\renewcommand{\MaketitleBox}{% + \resetTitleCounters + \def\baselinestretch{1}% + \begin{center} + \def\baselinestretch{1}% + \large \@title \par + \vskip 18pt + \normalsize\elsauthors \par + \vskip 30pt + \footnotesize \itshape \elsaddress \par + \end{center} + \vskip 12pt +} +\makeatother +$endif$ + +\begin{document} +$for(include-before)$ +$include-before$ +$endfor$ +\begin{frontmatter} + + \title{$title$$if(subtitle)$\\\Large{$subtitle$}$endif$} + $for(author)$\author$if(authorwithinstitute)$[$for(author.institute)$$author.institute$$sep$,$endfor$]$endif${$author.name$$if(author.correspondence)$\corref{corrauth}$endif$$if(author.equalcontribution)$\corref{eqcon}$endif$ $if(author.footnote)$\fnref{$author.footnote$}$endif$}$if(author.email)$\ead{$author.email$}$endif$$endfor$ + $if(authorwithinstitute)$ $for(institute)$ \address[$institute.id$]{$institute.name$} $endfor$ $endif$ + % generate corresponding authors. + % \StrBehind is from xstring package + \ifnum \hascorr=1 + \def\corrauths{ + $for(author)$$if(author.correspondence)$and $author.name$ ($author.email$) $endif$$endfor$} + \cortext[corrauth]{Corresponding to \StrBehind*{\corrauths}{and }.} + \fi + + % generate equal contributing authors. + \ifnum \haseqc=1 + \def\eqa{$for(author)$$if(author.equalcontribution)$and $author.name$ $endif$$endfor$} + \cortext[eqcon]{\StrBehind*{\eqa}{and } are equally contributed to this work.} + \fi + + $for(footnote)$ + \fntext[$footnote.id$]{$footnote.text$} + $endfor$ + + $if(abstract)$ + \begin{abstract} + $abstract$ + \end{abstract} + $if(keywords)$ + \begin{keyword} + $for(keywords/allbutlast)$$keywords$ \sep $endfor$ + $for(keywords/last)$$keywords$$endfor$ + \end{keyword} + $endif$ + $endif$ +\end{frontmatter} + +$body$ + +$if(authorwithinstitute)$ +$else$ +\section{Author Information} + +\getcorrauthinfo{} + +\getotherauthinfo{} + +\section{Notes} + +The authors declare no competing financial interest. + +$endif$ + + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$bibliography$} +$endif$ +$endif$ + +$for(include-after)$ +$include-after$ +$endfor$ +\end{document} diff --git a/_extensions/inst/tex/the-isme-j.csl b/_extensions/inst/tex/the-isme-j.csl new file mode 100644 index 0000000..730aefc --- /dev/null +++ b/_extensions/inst/tex/the-isme-j.csl @@ -0,0 +1,181 @@ + + diff --git a/_extensions/inst/word/MS.docx b/_extensions/inst/word/MS.docx new file mode 100644 index 0000000..5b9ad12 Binary files /dev/null and b/_extensions/inst/word/MS.docx differ diff --git a/_extensions/inst/word/RN.docx b/_extensions/inst/word/RN.docx new file mode 100644 index 0000000..a74403c Binary files /dev/null and b/_extensions/inst/word/RN.docx differ diff --git a/_extensions/inst/word/cv.docx b/_extensions/inst/word/cv.docx new file mode 100644 index 0000000..3727b07 Binary files /dev/null and b/_extensions/inst/word/cv.docx differ diff --git a/_extensions/inst/word/manu.docx b/_extensions/inst/word/manu.docx new file mode 100644 index 0000000..fedaf1e Binary files /dev/null and b/_extensions/inst/word/manu.docx differ diff --git a/_extensions/inst/repcn.docx b/_extensions/inst/word/repcn.docx similarity index 100% rename from _extensions/inst/repcn.docx rename to _extensions/inst/word/repcn.docx diff --git a/_extensions/pandoc-ext/abstract-section/_extension.yaml b/_extensions/pandoc-ext/abstract-section/_extension.yaml new file mode 100755 index 0000000..fa8a10f --- /dev/null +++ b/_extensions/pandoc-ext/abstract-section/_extension.yaml @@ -0,0 +1,6 @@ +name: abstract-section +author: Albert Krewinkel +version: 1.0.0 +contributes: + filters: + - abstract-section.lua diff --git a/_extensions/pandoc-ext/abstract-section/abstract-section.lua b/_extensions/pandoc-ext/abstract-section/abstract-section.lua new file mode 100755 index 0000000..f61c8e0 --- /dev/null +++ b/_extensions/pandoc-ext/abstract-section/abstract-section.lua @@ -0,0 +1,59 @@ +--[[ +abstract-to-meta – move an "abstract" section into document metadata + +Copyright: © 2017–2021 Albert Krewinkel +License: MIT – see LICENSE file for details +]] +local abstract = {} + +--- Extract abstract from a list of blocks. +function abstract_from_blocklist (blocks) + local body_blocks = {} + local looking_at_abstract = false + + for _, block in ipairs(blocks) do + if block.t == 'Header' and block.level == 1 then + if block.identifier == 'abstract' then + looking_at_abstract = true + else + looking_at_abstract = false + body_blocks[#body_blocks + 1] = block + end + elseif looking_at_abstract then + if block.t == 'HorizontalRule' then + looking_at_abstract = false + else + abstract[#abstract + 1] = block + end + else + body_blocks[#body_blocks + 1] = block + end + end + + return body_blocks +end + +if PANDOC_VERSION >= {2,9,2} then + -- Check all block lists with pandoc 2.9.2 or later + return {{ + Blocks = abstract_from_blocklist, + Meta = function (meta) + if not meta.abstract and #abstract > 0 then + meta.abstract = pandoc.MetaBlocks(abstract) + end + return meta + end + }} +else + -- otherwise, just check the top-level block-list + return {{ + Pandoc = function (doc) + local meta = doc.meta + local other_blocks = abstract_from_blocklist(doc.blocks) + if not meta.abstract and #abstract > 0 then + meta.abstract = pandoc.MetaBlocks(abstract) + end + return pandoc.Pandoc(other_blocks, meta) + end, + }} +end diff --git a/_extensions/pandoc-ext/author-info-blocks/_extension.yaml b/_extensions/pandoc-ext/author-info-blocks/_extension.yaml new file mode 100755 index 0000000..7eb8425 --- /dev/null +++ b/_extensions/pandoc-ext/author-info-blocks/_extension.yaml @@ -0,0 +1,6 @@ +name: author-info-blocks +author: Albert Krewinkel +version: 1.0.0 +contributes: + filters: + - author-info-blocks.lua diff --git a/_extensions/pandoc-ext/author-info-blocks/author-info-blocks.lua b/_extensions/pandoc-ext/author-info-blocks/author-info-blocks.lua new file mode 100755 index 0000000..fb269ef --- /dev/null +++ b/_extensions/pandoc-ext/author-info-blocks/author-info-blocks.lua @@ -0,0 +1,179 @@ +local List = require("pandoc.List") +local utils = require("pandoc.utils") +local stringify = utils.stringify +local byAuthor +local byAffiliation +local Authors = {} +local Affiliations = {} + +local authorHoriz + +local Corresponding = nil +local function make_correspondance(name, email) + correspondance = List:new({ + pandoc.Str("* Corresponding Author: "), + pandoc.Str(name), + pandoc.Str(" ("), + pandoc.Link(email, "mailto:" .. email), + pandoc.Str(")"), + }) + Corresponding = List:new({ pandoc.Para(correspondance) }) +end + +local equalCont +local function make_equal_contributor() + eq_statement = pandoc.Str("† These authors contributed equally to this work.") + equalCont = List:new({ pandoc.Para(eq_statement) }) +end + +local function create_author_list(byAuthor) + local authors = {} + for i, author in ipairs(byAuthor) do + local sups = {} + + for j, aff in ipairs(author.affiliations) do + table.insert(sups, aff.number) + end + sups_str = table.concat(sups, ",") + + local name = stringify(author.name.literal) + + if author.attributes ~= nil then + if author.attributes["equal-contributor"] ~= nil and author.attributes["equal-contributor"] then + sups_str = sups_str .. ",†" + make_equal_contributor() + end + if author.attributes.corresponding ~= nil and author.attributes.corresponding then + local email = stringify(author.email) + sups_str = sups_str .. ",*" + make_correspondance(name, email) + end + end + + local authorEntry = List:new({ + pandoc.Str(name), + pandoc.Superscript(pandoc.Str(sups_str)), + }) + + if authorHoriz and i < #byAuthor then + authorEntry:extend({ pandoc.Str(", ") }) + end + + table.insert(authors, pandoc.Span(authorEntry)) + end + + if authorHoriz then + Authors = { pandoc.Para(authors) } + else + Authors = authors + end +end + +local function create_affiliation_list(byAffiliation) + for i, aff in ipairs(byAffiliation) do + local full_aff = pandoc.List({}) + if aff.name then + full_aff:insert(stringify(aff.name)) + end + + if aff.address then + full_aff:insert(stringify(aff.address)) + end + + if aff.city then + full_aff:insert(stringify(aff.city)) + end + + if aff["postal-code"] then + full_aff:insert(stringify(aff["postal-code"])) + end + + if aff.region then + full_aff:insert(stringify(aff.region)) + end + + if aff.country then + full_aff:insert(stringify(aff.country)) + end + + local entry = table.concat(full_aff, ", ") + entry = aff.number .. ". " .. entry .. "." + table.insert(Affiliations, pandoc.Para(pandoc.Str(entry))) + end +end + +local Abstract = nil +local function create_abstract(ab) + Abstract = {} + table.insert(Abstract, pandoc.Header(1, "Abstract")) + table.insert(Abstract, pandoc.Para(ab)) +end + +local Keywords = nil +local function create_keyword_list(kw) + Keywords = {} + -- quarto.log.output(kw) + local kws = pandoc.List({}) + for i, keyword in ipairs(kw) do + kws:insert(stringify(keyword)) + end + local kwentry = table.concat(kws, "; ") + kwentry = "Keywords: " .. kwentry .. "." + table.insert(Keywords, pandoc.Para(pandoc.Str(kwentry))) +end + +local function remove_author_meta(meta) + meta.author = nil + meta.authors = nil + meta.affiliations = nil + meta["by-author"] = nil + meta["by-affiliation"] = nil + meta["abstract"] = nil + return meta +end + +return { + { + Meta = function(meta) + byAuthor = meta["by-author"] + byAffiliation = meta["by-affiliation"] + if meta["author-horizontal"] ~= nil then + authorHoriz = meta["author-horizontal"] + else + authorHoriz = true + end + create_author_list(byAuthor) + create_affiliation_list(byAffiliation) + if meta["abstract"] ~= nil then + create_abstract(meta["abstract"]) + end + if meta["keywords"] ~= nil then + create_keyword_list(meta["keywords"]) + end + return meta + end, + }, + { + Pandoc = function(doc) + local meta = doc.meta + local body = List:new({}) + body:extend(Authors) + body:extend(Affiliations) + if equalCont ~= nil then + body:extend(equalCont) + end + if Corresponding ~= nil then + body:extend(Corresponding) + end + if Abstract then + body:extend(Abstract) + end + if Keywords then + body:extend(Keywords) + end + body:extend(doc.blocks) + meta = remove_author_meta(meta) + return pandoc.Pandoc(body, meta) + end, + }, +} diff --git a/_extensions/pandoc-ext/scholarly-metadata/_extension.yaml b/_extensions/pandoc-ext/scholarly-metadata/_extension.yaml new file mode 100755 index 0000000..3fd0902 --- /dev/null +++ b/_extensions/pandoc-ext/scholarly-metadata/_extension.yaml @@ -0,0 +1,6 @@ +name: scholarly-metadata +author: Albert Krewinkel +version: 1.0.0 +contributes: + filters: + - scholarly-metadata.lua diff --git a/_extensions/pandoc-ext/scholarly-metadata/scholarly-metadata.lua b/_extensions/pandoc-ext/scholarly-metadata/scholarly-metadata.lua new file mode 100755 index 0000000..9706fe0 --- /dev/null +++ b/_extensions/pandoc-ext/scholarly-metadata/scholarly-metadata.lua @@ -0,0 +1,197 @@ +--[[ +ScholarlyMeta – normalize author/affiliation meta variables + +Copyright (c) 2017-2021 Albert Krewinkel, Robert Winkler + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. +]] +local List = require("pandoc.List") + +--- Returns the type of a metadata value. +-- +-- @param v a metadata value +-- @treturn string one of `Blocks`, `Inlines`, `List`, `Map`, `string`, `boolean` +local function metatype(v) + if PANDOC_VERSION <= "2.16.2" then + local metatag = type(v) == "table" and v.t and v.t:gsub("^Meta", "") + return metatag and metatag ~= "Map" and metatag or type(v) + end + return pandoc.utils.type(v) +end + +local type = pandoc.utils.type or metatype + +-- Split a string at commas. +local function comma_separated_values(str) + local acc = List:new({}) + for substr in str:gmatch("([^,]*)") do + acc[#acc + 1] = substr:gsub("^%s*", ""):gsub("%s*$", "") -- trim + end + return acc +end + +--- Ensure the return value is a list. +local function ensure_list(val) + if type(val) == "List" then + return val + elseif type(val) == "Inlines" then + -- check if this is really a comma-separated list + local csv = comma_separated_values(pandoc.utils.stringify(val)) + if #csv >= 2 then + return csv + end + return List:new({ val }) + elseif type(val) == "table" and #val > 0 then + return List:new(val) + else + -- Anything else, use as a singleton (or empty list if val == nil). + return List:new({ val }) + end +end + +--- Returns a function which checks whether an object has the given ID. +local function has_id(id) + return function(x) + return x.id == id + end +end + +--- Copy all key-value pairs of the first table into the second iff there is no +-- such key yet in the second table. +-- @returns the second argument +function add_missing_entries(a, b) + for k, v in pairs(a) do + b[k] = b[k] or v + end + return b +end + +--- Create an object with a name. The name is either taken directly from the +-- `name` field, or from the *only* field name (i.e., key) if the object is a +-- dictionary with just one entry. If neither exists, the name is left unset +-- (`nil`). +function to_named_object(obj) + local named = {} + if type(obj) == "Inlines" then + -- Treat inlines as the name + named.name = obj + named.id = pandoc.utils.stringify(obj) + elseif type(obj) ~= "table" then + -- if the object isn't a table, just use its value as a name. + named.name = pandoc.MetaInlines({ pandoc.Str(tostring(obj)) }) + named.id = tostring(obj) + elseif obj.name ~= nil then + -- object has name attribute → just create a copy of the object + add_missing_entries(obj, named) + named.id = pandoc.utils.stringify(named.id or named.name) + elseif next(obj) and next(obj, next(obj)) == nil then + -- Single-entry table. The entry's key is taken as the name, the value + -- contains the attributes. + key, attribs = next(obj) + if type(attribs) == "string" or type(attribs) == "Inlines" then + named.name = attribs + else + add_missing_entries(attribs, named) + named.name = named.name or pandoc.MetaInlines({ pandoc.Str(tostring(key)) }) + end + named.id = named.id and pandoc.utils.stringify(named.id) or key + else + -- this is not a named object adhering to the usual conventions. + error("not a named object: " .. tostring(obj)) + end + return named +end + +--- Resolve affiliations placeholders to full named objects +local function resolve_affiliations(affiliations, known_affiliations) + local unresolved_affiliations + if affiliations == nil then + unresolved_affiliations = {} + elseif type(affiliations) == "string" or type(affiliations) == "number" then + unresolved_affiliations = { affiliations } + else + unresolved_affiliations = affiliations + end + + local result = List:new({}) + for i, inst in ipairs(unresolved_affiliations) do + result[i] = known_affiliations[tonumber(inst)] + or known_affiliations:find_if(has_id(pandoc.utils.stringify(inst))) + or to_named_object(inst) + end + return result +end + +--- Insert a named object into a list; if an object of the same name exists +-- already, add all properties only present in the new object to the existing +-- item. +function merge_on_id(list, namedObj) + local elem, idx = list:find_if(has_id(namedObj.id)) + local res = elem and add_missing_entries(namedObj, elem) or namedObj + local obj_idx = idx or (#list + 1) + -- return res, obj_idx + list[obj_idx] = res + return res, #list +end + +--- Flatten a list of lists. +local function flatten(lists) + local result = List:new({}) + for _, lst in ipairs(lists) do + result:extend(lst) + end + return result +end + +--- Canonicalize authors and affiliations +local function canonicalize(raw_author, raw_affiliations) + local affiliations = ensure_list(raw_affiliations):map(to_named_object) + local authors = ensure_list(raw_author):map(to_named_object) + + for _, author in ipairs(authors) do + author.affiliations = resolve_affiliations(ensure_list(author.affiliations), affiliations) + end + + -- Merge affiliations defined in author objects with those defined in the + -- top-level list. + local author_insts = flatten(authors:map(function(x) + return x.affiliations + end)) + for _, inst in ipairs(author_insts) do + merge_on_id(affiliations, inst) + end + + -- Add list indices to affiliations for numbering and reference purposes + for idx, inst in ipairs(affiliations) do + inst.index = pandoc.MetaInlines({ pandoc.Str(tostring(idx)) }) + end + + -- replace affiliations with their indices + local to_index = function(inst) + return tostring(select(2, affiliations:find_if(has_id(inst.id)))) + end + for _, author in ipairs(authors) do + author.affiliations = pandoc.MetaList(author.affiliations:map(to_index)) + end + + return authors, affiliations +end + +return { + { + Meta = function(meta) + meta.author, meta.affiliations = canonicalize(meta.author, meta.affiliations) + return meta + end, + }, +} diff --git a/_extensions/quarto-ext/latex-environment/_extension.yml b/_extensions/quarto-ext/latex-environment/_extension.yml new file mode 100755 index 0000000..1ff1a96 --- /dev/null +++ b/_extensions/quarto-ext/latex-environment/_extension.yml @@ -0,0 +1,9 @@ +title: LaTeX Environment +author: RStudio, PBC +version: 1.1.0 +quarto-required: ">=1.2.198" +contributes: + filters: + - latex-environment.lua + format: + pdf: default diff --git a/_extensions/quarto-ext/latex-environment/latex-environment.lua b/_extensions/quarto-ext/latex-environment/latex-environment.lua new file mode 100755 index 0000000..5829013 --- /dev/null +++ b/_extensions/quarto-ext/latex-environment/latex-environment.lua @@ -0,0 +1,133 @@ +-- 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[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 + +-- 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.RawInline('latex', '\\' .. pandoc.utils.stringify(v) .. '{') + local opts = spanEl.attr.attributes['options'] + if opts then + beginCommand = pandoc.RawInline('latex', '\\' .. pandoc.utils.stringify(v) .. '[' .. opts .. ']{') + end + + -- the end command + local endCommand = pandoc.RawInline('latex', '}') + + -- attach the raw inlines to the span contents + local result = spanEl.content + table.insert(result, 1, beginCommand) + table.insert(result, endCommand) + + 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/elsevier/_extension.yml b/_extensions/quarto-journals/elsevier/_extension.yml new file mode 100755 index 0000000..d5cad70 --- /dev/null +++ b/_extensions/quarto-journals/elsevier/_extension.yml @@ -0,0 +1,19 @@ +title: Elsevier Journal Format +author: Charles Teague +version: 0.2.0 +quarto-required: ">=1.2.198" +contributes: + formats: + common: + date-format: full + filters: + - elsevier.lua + pdf: + documentclass: elsarticle + template-partials: ["partials/before-body.tex", "partials/title.tex"] + format-resources: + - elsarticle.cls + cite-method: natbib + number-sections: true + html: + theme: styles/elsevier.scss diff --git a/_extensions/quarto-journals/elsevier/bib/elsarticle-harv.bst b/_extensions/quarto-journals/elsevier/bib/elsarticle-harv.bst new file mode 100755 index 0000000..3bf1acb --- /dev/null +++ b/_extensions/quarto-journals/elsevier/bib/elsarticle-harv.bst @@ -0,0 +1,1598 @@ +%% +%% This is file `elsarticle-harv.bst' (Version 2.1), +%% +%% Copyright 2009-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% --------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% $Id: elsarticle-harv.bst 194 2020-11-23 11:29:27Z rishi $ +%% +%% $URL: https://lenova.river-valley.com/svn/elsarticle/trunk/elsarticle-harv.bst $ +%% + +ENTRY + { address + archive + author + booktitle + chapter + collaboration + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + url + doi + eprint + pubmed + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +STRINGS { urlprefix doiprefix eprintprefix pubmedprefix } + +FUNCTION {init.web.variables} +{ + "\URLprefix " 'urlprefix := + "\DOIprefix" 'doiprefix := + "\ArXivprefix " 'eprintprefix := + "\Pubmedprefix " 'pubmedprefix := +} + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} +STRINGS { s t} +FUNCTION {output.comma} +{ ", " * write$} + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ". " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { ", " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output.commanull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { ", " * write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} +FUNCTION {output.book.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.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.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\textit{" 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} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "ed." } + +FUNCTION {bbl.volume} +{ "volume" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "number" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.techrep} +{ "Technical Report" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM 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$ + pop$ + } + if$ + } + 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}{, jj}{, f{.}.}" + 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.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author "author" format.names + duplicate$ empty$ 'skip$ + { collaboration "collaboration" bibinfo.check + duplicate$ empty$ 'skip$ + { " (" swap$ * ")" * } + if$ + * + } + if$ +} + +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 + capitalize + "(" 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 * + } + { + 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 {n.dashify} +{ + 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ bbl.in %capitalize + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + } + 'skip$ + if$ + extra.label * + before.all 'output.state := + ", " 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$ + { 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.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.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + 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 + capitalize + "(" 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.check format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {print.url} + {url duplicate$ empty$ + { pop$ "" } + { new.sentence + urlprefix "\url{" * swap$ * "}" * + } + if$ + } + +FUNCTION {print.doi} + {doi duplicate$ empty$ + { pop$ "" } + { new.sentence + doiprefix "\doi{" * swap$ * "}" * + } + if$ + } + +FUNCTION {print.eprint} + {eprint duplicate$ empty$ + { pop$ "" } + { new.sentence + duplicate$ "\href{http://arxiv.org/abs/" swap$ * "}{{\tt arXiv:" * swap$ * "}}" * } + if$ + } + +FUNCTION {print.pubmed} + {pubmed duplicate$ empty$ + { pop$ "" } + { new.sentence + pubmedprefix "\Pubmed{" * swap$ * "}" * + } + if$ + } + +FUNCTION {webpage} +{ "%Type = Webpage" write$ + output.bibitem + format.authors "author" output.check + author format.key output + author empty$ + { + format.title "title" output.check + new.block + format.date "year" output.check + date.block + } + { + format.date "year" output.check + date.block + format.title "title" output.check + new.block +} + if$ + print.url output + fin.entry +} + + +FUNCTION {article} +{ "%Type = Article" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + format.journal.pages + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {book} +{ "%Type = Book" write$ + 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 + new.block + format.number.series output + format.edition output + new.sentence + format.publisher.address output + } + { + new.block + format.book.crossref output.nonnull + } + if$ + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {booklet} +{ "%Type = Booklet" write$ + output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {inbook} +{ "%Type = Inbook" write$ + 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 + format.edition output + crossref missing$ + { + format.publisher.address output + format.bvolume 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 + } + if$ + format.pages "pages" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {incollection} +{ "%Type = Incollection" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.book.check + new.sentence + crossref missing$ + { format.in.ed.booktitle "booktitle" output.book.check + format.edition output + format.publisher.address output + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {inproceedings} +{ "%Type = Inproceedings" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.book.check + new.sentence + 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.bvolume output +% format.number.series output +% format.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + format.pages "pages" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ "%Type = Manual" write$ + output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.btitle "title" output.check + format.edition output + organization address new.block.checkb + organization "organization" bibinfo.check output + address "address" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ "%Type = Masterthesis" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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 + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {misc} +{ "%Type = Misc" write$ + output.bibitem + format.authors output + author format.key output + format.date "year" output.check + date.block + format.title output + new.block + howpublished "howpublished" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {phdthesis} +{ "%Type = Phdthesis" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.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 + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ "%Type = Proceedings" write$ + 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 + new.sentence + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {techreport} +{ "%Type = Techreport" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.btitle + "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ "%Type = Unpublished" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + date.block + format.title "title" output.check + new.block + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note "note" output.check + 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$ + short.list key field.or.null = or + { pop$ "" } + 'skip$ + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { 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$ * "}}" * } + { "" 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$ + "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\href}[2]{#2}" + write$ newline$ + "\providecommand{\path}[1]{#1}" + write$ newline$ + "\providecommand{\DOIprefix}{doi:}" + write$ newline$ + "\providecommand{\ArXivprefix}{arXiv:}" + write$ newline$ + "\providecommand{\URLprefix}{URL: }" + write$ newline$ + "\providecommand{\Pubmedprefix}{pmid:}" + write$ newline$ + "\providecommand{\doi}[1]{\href{http://dx.doi.org/#1}{\path{#1}}}" + write$ newline$ + "\providecommand{\Pubmed}[1]{\href{pmid:#1}{\path{#1}}}" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\ifx\xfnm\relax \def\xfnm[#1]{\unskip,\space#1}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +EXECUTE {init.web.variables} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `elsarticle-harv.bst'. +%% +%% Change log: +%% ----------- +%% 22.04.2011 +%% +%% 10.08.2012 +%% a. doi, url, eprint, pmid added +%% b. Bibtype `webpage' defined +%% +%% 30.08.2012 +%% a. collaboration added. +%% + + diff --git a/_extensions/quarto-journals/elsevier/bib/elsarticle-num-names.bst b/_extensions/quarto-journals/elsevier/bib/elsarticle-num-names.bst new file mode 100755 index 0000000..562466a --- /dev/null +++ b/_extensions/quarto-journals/elsevier/bib/elsarticle-num-names.bst @@ -0,0 +1,1535 @@ +%% +%% This is file `elsarticle-num-names.bst' (Version 2.1), +%% +%% Copyright 2009-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% --------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% $Id: elsarticle-num-names.bst 194 2020-11-23 11:29:27Z rishi $ +%% +%% $URL: https://lenova.river-valley.com/svn/elsarticle/trunk/elsarticle-num-names.bst $ +%% +%% + +ENTRY + { address + author + booktitle + chapter + collaboration + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + url + doi + eprint + pubmed + } + {} + { label extra.label sort.label short.list } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +STRINGS { urlprefix doiprefix eprintprefix pubmedprefix } + +FUNCTION {init.web.variables} +{ + "\URLprefix " 'urlprefix := + "\DOIprefix" 'doiprefix := + "\ArXivprefix " 'eprintprefix := + "\Pubmedprefix " 'pubmedprefix := +} + +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$ + { ", " * 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} +{ 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} +{ + skip$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "\textit{" 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} +{ "edited by" } + +FUNCTION {bbl.edition} +{ "ed." } + +FUNCTION {bbl.volume} +{ "volume" } + +FUNCTION {bbl.of} +{ "of" } + +FUNCTION {bbl.number} +{ "number" } + +FUNCTION {bbl.nr} +{ "no." } + +FUNCTION {bbl.in} +{ "in" } + +FUNCTION {bbl.pages} +{ "pp." } + +FUNCTION {bbl.page} +{ "p." } + +FUNCTION {bbl.chapter} +{ "chapter" } + +FUNCTION {bbl.techrep} +{ "Technical Report" } + +FUNCTION {bbl.mthesis} +{ "Master's thesis" } + +FUNCTION {bbl.phdthesis} +{ "Ph.D. thesis" } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM 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$ + pop$ + } + if$ + } + 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.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +%FUNCTION {format.authors} +%{ author "author" format.names +%} + +FUNCTION {format.authors} +{ author "author" format.names + duplicate$ empty$ 'skip$ + { collaboration "collaboration" bibinfo.check + duplicate$ empty$ 'skip$ + { " (" swap$ * ")" * } + if$ + * + } + if$ +} + +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 + capitalize + "(" 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 {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 + ":" * + " " * } + +FUNCTION {format.date} +{ year "year" bibinfo.check duplicate$ empty$ + { + "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" + } + 'skip$ + if$ + extra.label * +} +FUNCTION{format.year} +{ year "year" bibinfo.check duplicate$ empty$ + { "empty year in " cite$ * + "; set to ????" * + warning$ + pop$ "????" + } + { + } + if$ + extra.label * + " (" 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$ + { swap$ bbl.of space.word * swap$ + emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { series empty$ + { number "number" bibinfo.check } + { output.state mid.sentence = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.prefix "number" bibinfo.check * * + bbl.in space.word * + series "series" bibinfo.check * + } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition duplicate$ empty$ 'skip$ + { + output.state mid.sentence = + { "l" } + { "t" } + if$ change.case$ + "edition" bibinfo.check + " " * bbl.edition * + } + if$ +} +INTEGERS { multiresult } +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} +FUNCTION {format.pages} +{ pages duplicate$ empty$ 'skip$ + { duplicate$ multi.page.check + { + bbl.pages swap$ + n.dashify + } + { + bbl.page swap$ + } + if$ + tie.or.space.prefix + "pages" bibinfo.check + * * + } + if$ +} +FUNCTION {format.journal.pages} +{ pages duplicate$ empty$ 'pop$ + { swap$ duplicate$ empty$ + { pop$ pop$ format.pages } + { + " " * + swap$ + n.dashify + "pages" bibinfo.check + * + } + if$ + } + if$ +} +FUNCTION {format.vol.num.pages} +{ volume field.or.null + duplicate$ empty$ 'skip$ + { + "volume" bibinfo.check + } + if$ + format.year * +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ + "type" bibinfo.check + } + if$ + chapter tie.or.space.prefix + "chapter" bibinfo.check + * * + } + 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 + capitalize + "(" 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 + 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.check format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization "organization" bibinfo.check format.org.or.pub +} + +FUNCTION {print.url} + {url duplicate$ empty$ + { pop$ "" } + { new.sentence + urlprefix "\url{" * swap$ * "}" * + } + if$ + } + +FUNCTION {print.doi} + {doi duplicate$ empty$ + { pop$ "" } + { new.sentence + doiprefix "\doi{" * swap$ * "}" * + } + if$ + } + +FUNCTION {print.eprint} + {eprint duplicate$ empty$ + { pop$ "" } + { new.sentence + duplicate$ "\href{http://arxiv.org/abs/" swap$ * "}{{\tt arXiv:" * swap$ * "}}" * + } + if$ + } + +FUNCTION {print.pubmed} + {pubmed duplicate$ empty$ + { pop$ "" } + { new.sentence + pubmedprefix "\Pubmed{" * swap$ * "}" * + } + if$ + } + +FUNCTION {webpage} +{ "%Type = Webpage" write$ + output.bibitem + format.authors "author" output.check + author format.key output + author empty$ + { + format.title "title" output.check + new.block + format.date "year" output.check + date.block + } + { + format.date "year" output.check + date.block + format.title "title" output.check + new.block +} + if$ + print.url output + fin.entry +} + + +FUNCTION {article} +{ "%Type = Article" write$ + output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { + journal + "journal" bibinfo.check + "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + } + if$ + format.journal.pages + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} +FUNCTION {book} +{ "%Type = Book" write$ + 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.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.number.series output + format.edition output + format.publisher.address output + } + { + format.book.crossref output.nonnull + } + if$ + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} +FUNCTION {booklet} +{ "%Type = Booklet" write$ + output.bibitem + format.authors output + author format.key output + format.title "title" output.check + howpublished "howpublished" bibinfo.check output + address "address" bibinfo.check output + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {inbook} +{ "%Type = Inbook" write$ + 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.btitle "title" output.check + crossref missing$ + { + format.bvolume output + format.number.series output + format.edition output + format.publisher.address output + } + { + format.book.crossref output.nonnull + } + if$ + format.date "year" output.check + format.pages "pages" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {incollection} +{ "%Type = Incollection" write$ + output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.edition output + format.publisher.address output + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.date "year" output.check + format.pages "pages" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} +FUNCTION {inproceedings} +{ "%Type = Inproceedings" write$ + output.bibitem + format.authors "author" output.check + author format.key output + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization "organization" bibinfo.check output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.date output + format.pages "pages" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} +FUNCTION {conference} { inproceedings } +FUNCTION {manual} +{ "%Type = Manual" write$ + output.bibitem + format.authors output + author format.key output + format.btitle "title" output.check + format.edition output + organization "organization" bibinfo.check output + address "address" bibinfo.check output + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {mastersthesis} +{ "%Type = Masterthesis" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.btitle + "title" output.check + bbl.mthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {misc} +{ "%Type = Misc" write$ + output.bibitem + format.authors output + author format.key output + format.title output + howpublished "howpublished" bibinfo.check output + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} +FUNCTION {phdthesis} +{ "%Type = Phdthesis" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.btitle + "title" output.check + bbl.phdthesis format.thesis.type output.nonnull + school "school" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {proceedings} +{ "%Type = Proceedings" write$ + output.bibitem + format.editors output + editor format.key output + 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.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {techreport} +{ "%Type = Techreport" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.btitle + "title" output.check + format.tr.number output.nonnull + institution "institution" bibinfo.warn output + address "address" bibinfo.check output + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note output + fin.entry +} + +FUNCTION {unpublished} +{ "%Type = Unpublished" write$ + output.bibitem + format.authors "author" output.check + author format.key output + format.title "title" output.check + format.date "year" output.check + new.sentence + print.url output + print.doi output + print.eprint output + print.pubmed output + format.note "note" output.check + 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$ "????" } + { purify$ #-1 #4 substring$ } + if$ + * + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr #1 > + { + " " * + namesleft #1 = t "others" = and + { "zzzzz" * } + { 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$ + "\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi" + write$ newline$ + "\providecommand{\url}[1]{\texttt{#1}}" + write$ newline$ + "\providecommand{\href}[2]{#2}" + write$ newline$ + "\providecommand{\path}[1]{#1}" + write$ newline$ + "\providecommand{\DOIprefix}{doi:}" + write$ newline$ + "\providecommand{\ArXivprefix}{arXiv:}" + write$ newline$ + "\providecommand{\URLprefix}{URL: }" + write$ newline$ + "\providecommand{\Pubmedprefix}{pmid:}" + write$ newline$ + "\providecommand{\doi}[1]{\href{http://dx.doi.org/#1}{\path{#1}}}" + write$ newline$ + "\providecommand{\Pubmed}[1]{\href{pmid:#1}{\path{#1}}}" + write$ newline$ + "\providecommand{\bibinfo}[2]{#2}" + write$ newline$ + "\ifx\xfnm\relax \def\xfnm[#1]{\unskip,\space#1}\fi" + write$ newline$ +} +EXECUTE {begin.bib} +EXECUTE {init.state.consts} +EXECUTE {init.web.variables} +ITERATE {call.type$} +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `elsarticle-num-names.bst'. +%% +%% +%% Change log: +%% ----------- +%% 22.04.2011 +%% +%% 10.08.2012 +%% a. doi, url, eprint, pmid added +%% b. Bibtype `webpage' defined +%% +%% 30.08.2012 +%% a. collaboration added. + + diff --git a/_extensions/quarto-journals/elsevier/bib/elsarticle-num.bst b/_extensions/quarto-journals/elsevier/bib/elsarticle-num.bst new file mode 100755 index 0000000..14499bf --- /dev/null +++ b/_extensions/quarto-journals/elsevier/bib/elsarticle-num.bst @@ -0,0 +1,1509 @@ +%% +%% This is file `elsarticle-num.bst' (Version 2.1), +%% +%% Copyright 2007-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% --------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% +%% $Id: elsarticle-num.bst 194 2020-11-23 11:29:27Z rishi $ +%% +%% $URL: https://lenova.river-valley.com/svn/elsarticle/trunk/elsarticle-num.bst $ +%% +%% ---------------------------------------- + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + eprint % urlbst + doi % urlbst + url % urlbst + lastchecked % urlbst + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +STRINGS { urlintro eprinturl eprintprefix doiprefix doiurl openinlinelink closeinlinelink } % urlbst... +INTEGERS { hrefform inlinelinks makeinlinelink addeprints adddoiresolver } +FUNCTION {init.urlbst.variables} +{ + "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 + "https://doi.org/" 'doiurl := % prefix to make URL from DOI + "doi:" 'doiprefix := % text prefix printed before DOI ref + #1 'addeprints := % 0=no eprints; 1=include eprints + #1 'adddoiresolver := % 0=no DOI resolver; 1=include it + #2 'hrefform := % 0=no crossrefs; 1=hypertex xrefs; 2=hyperref refs + #1 'inlinelinks := % 0=URLs explicit; 1=URLs attached to titles + % the following are internal state variables, not config constants + #0 'makeinlinelink := % state variable managed by setup.inlinelink + "" 'openinlinelink := % ditto + "" 'closeinlinelink := % ditto +} +INTEGERS { + bracket.state + outside.brackets + open.brackets + within.brackets + close.brackets +} +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 := +} + +STRINGS { s t } + +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 +} + +FUNCTION {setup.inlinelink} +{ makeinlinelink + { hrefform #1 = % hypertex + { "\special {html: }{" * 'openinlinelink := + "\special {html:}" 'closeinlinelink := + } + { hrefform #2 = % hyperref + { "\href{" url * "}{" * 'openinlinelink := + "}" 'closeinlinelink := + } + 'skip$ + if$ % hrefform #2 = + } + if$ % hrefform #1 = + #0 'makeinlinelink := + } + 'skip$ + if$ % makeinlinelink +} +FUNCTION {add.inlinelink} +{ openinlinelink empty$ + 'skip$ + { openinlinelink swap$ * closeinlinelink * + "" 'openinlinelink := + } + if$ +} +FUNCTION {output.nonnull} +{ % Save the thing we've been asked to output + 's := + % If the bracket-state is close.brackets, then add a close-bracket to + % what is currently at the top of the stack, and set bracket.state + % to outside.brackets + bracket.state close.brackets = + { "]" * + outside.brackets 'bracket.state := + } + 'skip$ + if$ + bracket.state outside.brackets = + { % We're outside all brackets -- this is the normal situation. + % Write out what's currently at the top of the stack, using the + % original output.nonnull function. + s + add.inlinelink + output.nonnull.original % invoke the original output.nonnull + } + { % Still in brackets. Add open-bracket or (continuation) comma, add the + % new text (in s) to the top of the stack, and move to the close-brackets + % state, ready for next time (unless inbrackets resets it). If we come + % into this branch, then output.state is carefully undisturbed. + bracket.state open.brackets = + { " [" * } + { ", " * } % bracket.state will be within.brackets + if$ + s * + close.brackets 'bracket.state := + } + if$ +} + +FUNCTION {inbrackets} +{ bracket.state close.brackets = + { within.brackets 'bracket.state := } % reset the state: not open nor closed + { open.brackets 'bracket.state := } + if$ +} + +FUNCTION {format.lastchecked} +{ lastchecked empty$ + { "" } + { inbrackets "cited " lastchecked * } + if$ +} + +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.original} +{ 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} +{ + add.blank +} + +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} +{ skip$ } + +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} +{ "Edition" } + +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} +{ "Ch." } + +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. Softw. Eng."} + +MACRO {ieeetc} {"IEEE Trans. Comput."} + +MACRO {ieeetcad} + {"IEEE Trans. Comput.-Aided Design Integrated Circuits"} + +MACRO {ipl} {"Inf. Process. Lett."} + +MACRO {jacm} {"J.~ACM"} + +MACRO {jcss} {"J.~Comput. Syst. Sci."} + +MACRO {scp} {"Sci. Comput. Programming"} + +MACRO {sicomp} {"SIAM J. Comput."} + +MACRO {tocs} {"ACM Trans. Comput. Syst."} + +MACRO {tods} {"ACM Trans. Database Syst."} + +MACRO {tog} {"ACM Trans. Gr."} + +MACRO {toms} {"ACM Trans. Math. Softw."} + +MACRO {toois} {"ACM Trans. Office Inf. Syst."} + +MACRO {toplas} {"ACM Trans. Prog. Lang. Syst."} + +MACRO {tcs} {"Theoretical Comput. Sci."} + +FUNCTION {write.url} +{ url empty$ + { skip$ } + { "\newline\urlprefix\url{" url * "}" * write$ newline$ } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{f.~}{vv~}{ll}{, jj}" format.name$ + 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + "," * + 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$ +} +FUNCTION {format.names.ed} +{ format.names } +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { " (" * bbl.editors * ")" * } + { " (" * bbl.editor * ")" * } + if$ + } + if$ +} + +FUNCTION {format.in.editors} +{ editor empty$ + { "" } + { editor format.names.ed + editor num.names$ #1 > + { " (" * bbl.editors * ")" * } + { " (" * bbl.editor * ")" * } + if$ + } + 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$ * + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title "t" change.case$ + } + if$ +} + +FUNCTION {output.bibitem.original} +{ 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 + ":" * + " " * } + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month " " * year * } + if$ + } + if$ + duplicate$ empty$ + 'skip$ + { + before.all 'output.state := + " (" swap$ * ")" * + } + if$ +} + +FUNCTION{format.year} +{ year duplicate$ empty$ + { "empty year in " cite$ * warning$ pop$ "" } + { "(" swap$ * ")" * } + if$ +} + +FUNCTION {format.btitle} +{ title +} + +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$ + { "" } + { bbl.volume volume tie.or.space.connect + series empty$ + 'skip$ + { bbl.of space.word * 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 = + { bbl.number } + { bbl.number capitalize } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { bbl.in space.word * series * } + 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} +{ 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 empty$ + { "" } + { output.state mid.sentence = + { convert.edition "l" change.case$ " " * bbl.edition * } + { convert.edition "t" change.case$ " " * bbl.edition * } + if$ + } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { bbl.pages pages n.dashify tie.or.space.connect } + { bbl.page pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.journal.pages} +{ pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { + " " * + format.year * " " * + pages n.dashify * + } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ + % volume field.or.null + " " + volume empty$ + { pop$ "" } + { volume * } + if$ + number empty$ + 'skip$ + { + "~(" number * ")" * * + volume empty$ + { "there's a number but no volume in " cite$ * warning$ } + 'skip$ + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + { "" } + { type empty$ + { bbl.chapter } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { word.in booktitle * } + { word.in format.in.editors * ", " * + booktitle * } + 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 empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { bbl.techrep } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ + key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { word.in journal emphasize * } + if$ + } + { word.in key * " " *} + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ + " " * bbl.etal * + } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { + " " * bbl.etal * + } + { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$ + * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + word.in + } + { bbl.volume volume tie.or.space.connect + 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$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { word.in booktitle * } + 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$ + { + t empty$ + { address empty$ + 'skip$ + { address * } + if$ + } + { t * + address empty$ + 'skip$ + { ", " * address * } + if$ + } + if$ + year empty$ + 'skip$ + { t empty$ address empty$ and + 'skip$ + { ", " * } + if$ + year * + } + if$ + } + if$ +} + +FUNCTION {format.publisher.address} +{ publisher empty$ + { "empty publisher in " cite$ * warning$ + "" + } + { publisher } + if$ + format.org.or.pub +} + +FUNCTION {format.organization.address} +{ organization empty$ + { "" } + { organization } + if$ + format.org.or.pub +} + +FUNCTION {make.href.null} +{ + pop$ +} +FUNCTION {make.href.hypertex} +{ + "\special {html: }" * swap$ * + "\special {html:}" * +} +FUNCTION {make.href.hyperref} +{ + "\href {" swap$ * "} {\path{" * swap$ * "}}" * +} +FUNCTION {make.href} +{ hrefform #2 = + 'make.href.hyperref % hrefform = 2 + { hrefform #1 = + 'make.href.hypertex % hrefform = 1 + 'make.href.null % hrefform = 0 (or anything else) + if$ + } + if$ +} + +FUNCTION {format.url} +{ inlinelinks #1 = url empty$ or + { "" } + { hrefform #1 = + { % special case -- add HyperTeX specials + urlintro "\url{" url * "}" * url make.href.hypertex * } + { urlintro "\url{" * url * "}" * } + if$ + } + if$ +} + +FUNCTION {format.eprint} +{ eprint empty$ + { "" } + { eprintprefix eprint * eprinturl eprint * make.href } + if$ +} + +FUNCTION {format.doi} +{ doi empty$ + { "" } + { doiprefix doi * doiurl doi * make.href } + if$ +} + +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$ +} + +FUNCTION {output.bibitem} +{ outside.brackets 'bracket.state := + output.bibitem.original + inlinelinks url empty$ not and + { #1 'makeinlinelink := } + { #0 'makeinlinelink := } + if$ +} + +FUNCTION {fin.entry} +{ output.web.refs % urlbst + makeinlinelink % ooops, it appears we didn't have a title for inlinelink + { setup.inlinelink % add some artificial link text here, as a fallback + "[link]" output.nonnull } + 'skip$ + if$ + bracket.state close.brackets = % urlbst + { "]" * } + 'skip$ + if$ + fin.entry.original +} + +FUNCTION {webpage} +{ output.bibitem + author empty$ + { editor empty$ + 'skip$ % author and editor both optional + { format.editors output.nonnull } + if$ + } + { editor empty$ + { format.authors output.nonnull } + { "can't use both author and editor fields in " cite$ * warning$ } + if$ + } + if$ + new.block + title empty$ 'skip$ 'setup.inlinelink if$ + format.title "title" output.check + inbrackets "online" output + new.block + year empty$ + 'skip$ + { format.date "year" output.check } + if$ + % We don't need to output the URL details ('lastchecked' and 'url'), + % because fin.entry does that for us, using output.web.refs. The only + % reason we would want to put them here is if we were to decide that + % they should go in front of the rather miscellaneous information in 'note'. + new.block + note output + fin.entry +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + crossref missing$ + { journal + "journal" output.check + % add.blank + before.all 'output.state := + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + format.journal.pages + format.note output + pages empty$ + { format.date "year" output.check } + 'skip$ + if$ + fin.entry + write.url +} + +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$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + crossref missing$ + { format.edition output + format.bvolume output + format.number.series output + format.publisher.address output + } + { + format.book.crossref output.nonnull + } + if$ + format.note output + fin.entry + write.url +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + howpublished output + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +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$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + crossref missing$ + { + format.edition output + format.bvolume output + format.number.series output + format.publisher.address output + format.chapter.pages "chapter and pages" output.check + } + { + format.chapter.pages "chapter and pages" output.check + format.book.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.note output + fin.entry + write.url +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.edition output + format.bvolume output + format.number.series output + format.publisher.address output + format.chapter.pages output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + format.pages "pages" output.check + format.note output + fin.entry + write.url +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.edition output + format.bvolume output + format.number.series output + publisher empty$ + { format.organization.address output } + { organization output + format.publisher.address output + } + if$ + } + { format.incoll.inproc.crossref output.nonnull + } + if$ + format.pages "pages" output.check + format.note output + fin.entry + write.url +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + author empty$ + { organization empty$ + { + address output + } + 'skip$ + if$ + } + { + organization output + address output + } + if$ + format.edition output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + bbl.mthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title output + howpublished output + format.note output + format.date "year" output.check + fin.entry + write.url + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + bbl.phdthesis format.thesis.type output.nonnull + school "school" output.check + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.btitle "title" output.check + format.bvolume output + format.number.series output + editor empty$ + { publisher empty$ + 'skip$ + { + format.publisher.address output + } + if$ + } + { publisher empty$ + { + format.organization.address output } + { + organization output + format.publisher.address output + } + if$ + } + if$ + format.note output + fin.entry + write.url +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + format.tr.number output.nonnull + institution "institution" output.check + address output + format.note output + format.date "year" output.check + fin.entry + write.url +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + title empty$ 'skip$ 'setup.inlinelink if$ % urlbst + format.title "title" output.check + format.note "note" output.check + format.date "year" output.check + fin.entry + write.url +} + +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" + write$ newline$ + "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi" + write$ newline$ + "\expandafter\ifx\csname href\endcsname\relax" + write$ newline$ + " \def\href#1#2{#2} \def\path#1{#1}\fi" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.urlbst.variables} +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 `elsarticle-num.bst'. + + diff --git a/_extensions/quarto-journals/elsevier/bib/elsevier-harvard.csl b/_extensions/quarto-journals/elsevier/bib/elsevier-harvard.csl new file mode 100755 index 0000000..0ef7b19 --- /dev/null +++ b/_extensions/quarto-journals/elsevier/bib/elsevier-harvard.csl @@ -0,0 +1,239 @@ + + diff --git a/_extensions/quarto-journals/elsevier/elsarticle.cls b/_extensions/quarto-journals/elsevier/elsarticle.cls new file mode 100755 index 0000000..02ff3a7 --- /dev/null +++ b/_extensions/quarto-journals/elsevier/elsarticle.cls @@ -0,0 +1,1382 @@ +%% +%% This is file `elsarticle.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% elsarticle.dtx (with options: `class') +%% +%% Copyright 2007-2020 Elsevier Ltd +%% +%% This file is part of the 'Elsarticle Bundle'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% The list of all files belonging to the 'Elsarticle Bundle' is +%% given in the file `manifest.txt'. +%% +%% +%% +%% + \def\RCSfile{elsarticle}% + \def\RCSversion{3.3}% + \def\RCSdate{2020/11/20}% + \def\@shortjnl{\relax} + \def\@journal{Elsevier Ltd} + \def\@company{Elsevier Ltd} + \def\@issn{000-0000} + \def\@shortjid{elsarticle} +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{\@shortjid}[\RCSdate, \RCSversion: \@journal] +\def\ABD{\AtBeginDocument} +\newif\ifpreprint \preprintfalse +\newif\ifnonatbib \nonatbibfalse +\newif\iflongmktitle \longmktitlefalse +\newif\ifnopreprintline \nopreprintlinefalse +\newif\ifdoubleblind \doubleblindfalse + +\newif\ifuseexplthreefunctions \useexplthreefunctionsfalse + +\IfFileExists{expl3.sty}{% + \global\useexplthreefunctionstrue% + \RequirePackage{expl3}}{} +\ifuseexplthreefunctions\relax% +\IfFileExists{xparse.sty}{\RequirePackage{xparse}}{} +\IfFileExists{etoolbox.sty}{\RequirePackage{etoolbox}}{} +\fi + +\def\@blstr{1} +\newdimen\@bls +\@bls=\baselineskip + +\def\@finalWarning{% + *****************************************************\MessageBreak + This document is typeset in the CRC style which\MessageBreak + is not suitable for submission.\MessageBreak + \MessageBreak + Please typeset again using 'preprint' option\MessageBreak + for creating PDF suitable for submission.\MessageBreak + ******************************************************\MessageBreak +} + +\DeclareOption{preprint}{\global\preprinttrue + \gdef\@blstr{1}\xdef\jtype{0}% + \AtBeginDocument{\@twosidefalse\@mparswitchfalse}} +\DeclareOption{nopreprintline}{\global\nopreprintlinetrue} +\DeclareOption{final}{\gdef\@blstr{1}\global\preprintfalse} +\DeclareOption{review}{\global\preprinttrue\gdef\@blstr{1.5}} +\DeclareOption{authoryear}{\xdef\@biboptions{round,authoryear}} +\DeclareOption{number}{\xdef\@biboptions{numbers}} +\DeclareOption{numbers}{\xdef\@biboptions{numbers}} +\DeclareOption{nonatbib}{\global\nonatbibtrue} +\DeclareOption{longtitle}{\global\longmktitletrue} +\DeclareOption{5p}{\xdef\jtype{5}\global\preprintfalse + \ExecuteOptions{twocolumn}} + \def\jtype{0} +\DeclareOption{3p}{\xdef\jtype{3}\global\preprintfalse} +\DeclareOption{1p}{\xdef\jtype{1}\global\preprintfalse + \AtBeginDocument{\@twocolumnfalse}} +\DeclareOption{times}{\IfFileExists{txfonts.sty}% + {\AtEndOfClass{\RequirePackage{txfonts}% + \gdef\ttdefault{cmtt}% + \let\iint\relax + \let\iiint\relax + \let\iiiint\relax + \let\idotsint\relax + \let\openbox\relax}}{\AtEndOfClass{\RequirePackage{times}}}} + +\DeclareOption{endfloat}{\IfFileExists{endfloat.sty} + {\AtEndOfClass{\RequirePackage[markers]{endfloat}}}{}} +\DeclareOption{endfloats}{\IfFileExists{endfloat.sty} + {\AtEndOfClass{\RequirePackage[markers]{endfloat}}}{}} +\DeclareOption{numafflabel} + {\AtBeginDocument{\def\theaffn{\arabic{affn}}}} %*% +\DeclareOption{lefttitle} + {\AtBeginDocument{\def\elsarticletitlealign{flushleft}}} %*% +\DeclareOption{centertitle} + {\AtBeginDocument{\def\elsarticletitlealign{center}}} %*% +\DeclareOption{reversenotenum} + {\AtBeginDocument{\def\theaffn{\arabic{affn}} + \def\thefnote{\alph{fnote}}}} +\DeclareOption{doubleblind}{\doubleblindtrue} + +\ExecuteOptions{a4paper,10pt,oneside,onecolumn,number,preprint,centertitle} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\ProcessOptions +\LoadClass{article} +\RequirePackage{graphicx} +\let\comma\@empty +\let\tnotesep\@empty +\let\@title\@empty + +\def\useelstitle{} + +\def\title#1{\g@addto@macro\@title{#1% + \global\let\tnoteref\@gobble}% + \g@addto@macro\useelstitle{#1}} + +\def\elsLabel#1{\@bsphack\protected@write\@auxout{}% + {\string\Newlabel{#1}{\@currentlabel}}\@esphack} +\def\Newlabel#1#2{\expandafter\xdef\csname X@#1\endcsname{#2}} + +\def\elsRef#1{\@ifundefined{X@#1}{0}{\csname X@#1\endcsname}} + +\let\@tnotemark\@empty + +\ifdoubleblind + \def\tnotemark[#1]{} +\else + \def\tnotemark[#1]{\@for\mytmark:=#1\do{% + \expandafter\ifcase\elsRef{\mytmark}\or$^{\star}$\or + $^{,\star\star}$\fi + }% +} +\fi + +\def\tnoteref#1{\tnotemark[{#1}]} +\let\@tnotes\@empty +\newcounter{tnote} +\def\tnotetext[#1]#2{\g@addto@macro\@tnotes{% + \stepcounter{tnote}\elsLabel{#1}% + \def\thefootnote{\ifcase\c@tnote\or$\star$\or$\star\star$\fi}% + \footnotetext{#2}}} + +\let\@nonumnotes\@empty +\def\nonumnote#1{\g@addto@macro\@nonumnotes{% + \let\thefootnote\relax\footnotetext{#1}}} + +\newcounter{fnote} +\def\thefnote{\arabic{fnote}} +\def\fnmark[#1]{\let\comma\@empty + \def\@fnmark{\@for\@@fnmark:=#1\do{% + \edef\fnotenum{\@ifundefined{X@\@@fnmark}{1}{\elsRef{\@@fnmark}}}% + \unskip\comma\fnotenum\let\comma,}}% +} + +\def\fnref#1{\fnmark[#1]} + +\let\@fnotes\@empty\let\@fnmark\@empty +\def\fntext[#1]#2{\g@addto@macro\@fnotes{% + \refstepcounter{fnote}\elsLabel{#1}% + \def\thefootnote{\c@fnote}% + \global\setcounter{footnote}{\c@fnote}% + \footnotetext{#2}}} + +\def\cormark[#1]{\edef\cnotenum{\elsRef{#1}}% + \unskip\textsuperscript{\sep\ifcase\cnotenum\or + $\ast$\or$\ast\ast$\fi\hspace{-1pt}}\let\sep=,} + +\let\@cormark\@empty +\let\@cornotes\@empty +\newcounter{cnote} +\def\cortext[#1]#2{\g@addto@macro\@cornotes{% + \refstepcounter{cnote}\elsLabel{#1}% + \def\thefootnote{\ifcase\thecnote\or$\ast$\or + $\ast\ast$\fi}% + \footnotetext{#2}}} + +\let\@corref\@empty +\def\corref#1{\edef\cnotenum{\elsRef{#1}}% + \edef\@corref{\ifcase\cnotenum\or + $\ast$\or$\ast\ast$\fi\hskip-1pt}} + +\def\resetTitleCounters{\c@cnote=0 + \c@fnote=0 \c@tnote=0 \c@footnote=0} + +\let\eadsep\@empty +\def\@elseads{} +\let\@elsuads\@empty +\let\@cormark\@empty +\def\hashchar{\expandafter\@gobble\string\~} +\def\underscorechar{\expandafter\@gobble\string\_} +\def\lbracechar{\expandafter\@gobble\string\{} +\def\rbracechar{\expandafter\@gobble\string\}} + +\gdef\ead{\@ifnextchar[{\@uad}{\@ead}} +\gdef\@ead#1{\bgroup + \def\_{\underscorechar}% + \def\{{\lbracechar}% + \def~{\hashchar}% + \def\}{\rbracechar}% + \edef\tmp{\the\@eadauthor}% + \immediate\write\@auxout{\string\emailauthor + {#1}{\expandafter\strip@prefix\meaning\tmp}}% + \egroup +} +\newcounter{ead} +\gdef\emailauthor#1#2{\stepcounter{ead}% + \g@addto@macro\@elseads{\raggedright% + \let\corref\@gobble\def\@@tmp{#1}% + \eadsep{\ttfamily\expandafter\strip@prefix\meaning\@@tmp} + (#2)\def\eadsep{\unskip,\space}}% +} +\gdef\@uad[#1]#2{\bgroup + \def~{\hashchar}% + \def\_{\underscorechar}% + \def~{\hashchar}% + \def\}{\rbracechar}% + \edef\tmp{\the\@eadauthor} + \immediate\write\@auxout{\string\urlauthor + {#2}{\expandafter\strip@prefix\meaning\tmp}}% + \egroup +} +\gdef\urlauthor#1#2{\g@addto@macro\@elsuads{\let\corref\@gobble% + \def\@@tmp{#1}\raggedright\eadsep + {\ttfamily\expandafter\strip@prefix\meaning\@@tmp}\space(#2)% + \def\eadsep{\unskip,\space}}% +} + +\def\elsauthors{} +\def\useauthors{} +\def\elsprelimauthors{} + +\def\pprinttitle{} +\let\authorsep\@empty +\let\prelimauthorsep\@empty +\let\sep\@empty +\newcounter{author} +\def\author{\@ifnextchar[{\@@author}{\@author}} + +\newtoks\@eadauthor +\def\@@author[#1]#2{% + \g@addto@macro\elsprelimauthors{% + \prelimauthorsep#2% + \def\prelimauthorsep{\unskip,\space}}% + \g@addto@macro\elsauthors{% + \def\baselinestretch{1}% + \authorsep#2\unskip\textsuperscript{%#1% + \@for\@@affmark:=#1\do{% + \edef\affnum{\@ifundefined{X@\@@affmark}{1}{\elsRef{\@@affmark}}}% + \unskip\sep\affnum\let\sep=,}% + \ifx\@fnmark\@empty\else\unskip\sep\@fnmark\let\sep=,\fi + \ifx\@corref\@empty\else\unskip\sep\@corref\let\sep=,\fi + }% + \def\authorsep{\unskip,\space}% + \global\let\sep\@empty\global\let\@corref\@empty + \global\let\@fnmark\@empty}% + \@eadauthor={#2}% + \g@addto@macro\useauthors{#2; }% +} + +\def\@author#1{% + \g@addto@macro\elsprelimauthors{% + \prelimauthorsep#1% + \def\prelimauthorsep{\unskip,\space}}% + \g@addto@macro\elsauthors{\normalsize% + \def\baselinestretch{1}% + \upshape\authorsep#1\unskip\textsuperscript{% + \ifx\@fnmark\@empty\else\unskip\sep\@fnmark\let\sep=,\fi + \ifx\@corref\@empty\else\unskip\sep\@corref\let\sep=,\fi + }% + \def\authorsep{\unskip,\space}% + \global\let\@fnmark\@empty + \global\let\@corref\@empty \global\let\sep\@empty}% + \@eadauthor={#1}% + \g@addto@macro\useauthors{#1; }% +} + +\AtBeginDocument{% + \@ifpackageloaded{hyperref}{% + \expandafter\gdef\csname Hy@title\endcsname{\useelstitle}% + \expandafter\gdef\csname Hy@author\endcsname{\useauthors}% + }{} +} + +\def\elsaddress{} +\def\addsep{\par\vskip6pt} + +\def\@alph#1{% + \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or + l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or + y\or z% + \or aa\or ab\or ac\or ad\or ae\or af\or ag\or ah\or ai\or aj\or + ak\or al\or am\or an\or ao\or ap\or aq\or ar\or as\or at\or au\or + av\or aw\or ax\or ay\or az% + \or ba\or bb\or bc\or bd\or be\or bf\or bg\or bh\or bi\or bj\or + bk\or bl\or bm\or bn\or bo\or bp\or bq\or br\or bs\or bt\or bu\or + bv\or bw\or bx\or by\or bz% + \or ca\or cb\or cc\or cd\or ce\or cf\or cg\or ch\or ci\or cj\or + ck\or cl\or cm\or cn\or co\or cp\or cq\or cr\or cs\or ct\or cu\or + cv\or cw\or cx\or cy\or cz% + \or da\or db\or dc\or dd\or de\or df\or dg\or dh\or di\or dj\or + dk\or dl\or dm\or dn\or do\or dp\or dq\or dr\or ds\or dt\or du\or + dv\or dw\or dx\or dy\or dz% + \or ea\or eb\or ec\or ed\or ee\or ef\or eg\or eh\or ei\or ej\or + ek\or el\or em\or en\or eo\or ep\or eq\or er\or es\or et\or eu\or + ev\or ew\or ex\or ey\or ez% + \or fa\or fb\or fc\or fd\or fe\or ff\or fg\or fh\or fi\or fj\or + fk\or fl\or fm\or fn\or fo\or fp\or fq\or fr\or fs\or ft\or fu\or + fv\or fw\or fx\or fy\or fz% + \or ga\or gb\or gc\or gd\or ge\or gf\or gg\or gh\or gi\or gj\or + gk\or gl\or gm\or gn\or go\or gp\or gq\or gr\or gs\or gt\or gu\or + gv\or gw\or gx\or gy\or gz% + \else\@ctrerr\fi} + +\newcounter{affn} +\renewcommand\theaffn{\alph{affn}} + +\ifuseexplthreefunctions\relax% + \ExplSyntaxOn + \def\ca_affitem_postskip{\mbox{~}\unskip\ignorespaces} + %%Author Address + \DeclareDocumentCommand \ca_organization { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_postal_code { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_aff_city { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_address_line { O{,}m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_state { O{,} m } + { + % #2 #1\mbox{~}\unskip\ignorespaces + \csgappto { ca_affiliation_values } { #2 #1\ca_affitem_postskip } + } + \DeclareDocumentCommand \ca_country { O{ } m } + { + % #2 #1 + \csgappto { ca_affiliation_values } { #2 #1 } + } + + \DeclareDocumentCommand \ca_stm_organization { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_postal_code { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_aff_city { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_aff_address_line { O{,}m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_state { O{,} m } + { + #2 #1\ca_affitem_postskip + } + \DeclareDocumentCommand \ca_stm_country { O{ } m } + { + #2 #1 + } + + \keys_define:nn { stm / affiliation } + { + op .tl_set_x:N = \l_organization_punc_tl, + oraganizationsep .tl_set_x:N = \l_organization_punc_tl, + ap .tl_set_x:N = \l_address_line_punc_tl, + addresslinesep .tl_set_x:N = \l_address_line_punc_tl, + cp .tl_set_x:N = \l_city_punc_tl, + citysep .tl_set_x:N = \l_city_punc_tl, + pp .tl_set_x:N = \l_postal_code_punc_tl, + postcodesep .tl_set_x:N = \l_postal_code_punc_tl, + sp .tl_set_x:N = \l_state_punc_tl, + statesep .tl_set_x:N = \l_state_punc_tl, + o .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + organization .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + a .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + addressline .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + c .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + city .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + p .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + postcode .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + s .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + state .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + orp .tl_set_x:N = \l_organization_punc_tl, + adp .tl_set_x:N = \l_address_line_punc_tl, + cip .tl_set_x:N = \l_city_punc_tl, + pcp .tl_set_x:N = \l_postal_code_punc_tl, + stp .tl_set_x:N = \l_state_punc_tl, + cyp .tl_set_x:N = \l_country_punc_tl, + or .code:n = { \ca_organization[\l_organization_punc_tl]{#1} }, + ad .code:n = { \ca_address_line[\l_address_line_punc_tl]{#1} }, + ci .code:n = { \ca_aff_city[\l_city_punc_tl]{#1} }, + pc .code:n = { \ca_postal_code[\l_postal_code_punc_tl]{#1} }, + st .code:n = { \ca_state[\l_state_punc_tl]{#1} }, + cy .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + country .code:n = { \ca_country[\l_country_punc_tl]{#1} }, + unknown .code:n = { + \ifstrempty { #1 } { + \csxappto { ca_affiliation_values } + { {\l_keys_key_tl}~ } + } { + \csxappto { ca_affiliation_values } + { {#1}~ } + } + } + } + + \cs_set:Npn \__reset_affiliation: + { + \tl_gset:Nn \l_organization_punc_tl { , } + \tl_gset:Nn \l_address_line_punc_tl { , } + \tl_gset:Nn \l_city_punc_tl { , } + \tl_gset:Nn \l_postal_code_punc_tl { , } + \tl_gset:Nn \l_state_punc_tl { , } + \tl_gset:Nn \l_country_punc_tl { } + } + + \DeclareDocumentCommand\affiliation{ o m }{ + \__reset_affiliation: + \csgdef { ca_affiliation_values } { } + \IfNoValueTF { #2 } + { } + { + \keys_set:nn { stm / affiliation } { #2 } + } + \csgappto{elsaddress}{ + \def\baselinestretch{1}% + \refstepcounter{affn} + \xdef\@currentlabel{\theaffn} + \IfNoValueTF { #1 } + { } + { \elsLabel{#1} } + \textsuperscript{\theaffn}} + \csxappto{elsaddress}{ + \csuse { ca_affiliation_values } + \par + } + } + \ExplSyntaxOff + \else% + \def\caaffitempostskip{\space} + + \DeclareRobustCommand\caorganization[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\capostalcode[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\caaffcity[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\caaddressline[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\castate[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\cacountry[2][,]{% + \g@addto@macro\caaffiliationvalues{#2#1\caaffitempostskip}% + } + \DeclareRobustCommand\castmorganization[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmpostalcode[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmaffcity[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmaddressline[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmstate[2][,]{% + #2#1\caaffitempostskip% + } + \DeclareRobustCommand\castmcountry[2][,]{% + #2#1\caaffitempostskip% + } + + \define@key{affiliation}{op}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{orp}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{organizationsep}{\xdef\@organizationpunc{#1}} + \define@key{affiliation}{ap}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{adp}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{addresslinesep}{\xdef\@addresslinepunc{#1}} + \define@key{affiliation}{cp}{\xdef\@citypunc{#1}} + \define@key{affiliation}{cip}{\xdef\@citypunc{#1}} + \define@key{affiliation}{cyp}{\xdef\@countrypunc{#1}} + \define@key{affiliation}{citysep}{\xdef\@citypunc{#1}} + \define@key{affiliation}{pp}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{pop}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{postcodesep}{\xdef\@postcodepunc{#1}} + \define@key{affiliation}{sp}{\xdef\@statepunc{#1}} + \define@key{affiliation}{stp}{\xdef\@statepunc{#1}} + \define@key{affiliation}{statesep}{\xdef\@statepunc{#1}} + \define@key{affiliation}{countrysep}{\xdef\@countrypunc{#1}} + + \define@key{affiliation}{organization}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{addressline}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{city}{% + \caaffcity[\@citypunc]{#1}} + \define@key{affiliation}{postcode}{% + \capostalcode[\@postcodepunc]{#1}} + \define@key{affiliation}{state}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{or}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{ad}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{ci}{% + \caaffcity[\@citypunc]{#1}} + \define@key{affiliation}{po}{% + \capostalcode[\@postcodepunc]{#1}} + \define@key{affiliation}{st}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{o}{% + \caorganization[\@organizationpunc]{#1}} + \define@key{affiliation}{a}{% + \caaddressline[\@addresslinepunc]{#1}} + \define@key{affiliation}{c}{% + \cacity[\@citypunc]{#1}} + \define@key{affiliation}{p}{% + \capostcode[\@postcodepunc]{#1}} + \define@key{affiliation}{s}{% + \castate[\@statepunc]{#1}} + \define@key{affiliation}{cy}{% + \cacountry[\@countrypunc]{#1}} + \define@key{affiliation}{country}{% + \cacountry[\@countrypunc]{#1}} + + \gdef\@resetaffiliation{% + \gdef\@organizationpunc{,}% + \gdef\@addresslinepunc{,}% + \gdef\@citypunc{,}% + \gdef\@statepunc{,}% + \gdef\@postcodepunc{,}% + \gdef\@countrypunc{}% + } + + \def\affiliation{\@ifnextchar[{\@@affiliation}{\@affiliation}} + + \newcommand*{\newstmrobustcmd}{} + \protected\def\newstmrobustcmd{\@star@or@long\stmetb@new@command} + + \def\stmetb@new@command#1{\@testopt{\stmetb@newcommand#1}0} + + \def\stmetb@newcommand#1[#2]{% + \@ifnextchar[%] + {\stmetb@xargdef#1[#2]} + {\ifx\l@ngrel@x\relax + \let\l@ngrel@x\protected + \else + \protected\def\l@ngrel@x{\protected\long}% + \fi + \@argdef#1[#2]}} + + \long\def\stmetb@xargdef#1[#2][#3]#4{% + \@ifdefinable#1{% + \expandafter\protected + \expandafter\def + \expandafter#1% + \expandafter{% + \expandafter\@testopt + \csname\string#1\endcsname{#3}}% + \expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}} + % + \newcommand{\ifstmundef}[1]{% + \ifdefined#1% + \ifx#1\relax + \expandafter\expandafter + \expandafter\@firstoftwo + \else + \expandafter\expandafter + \expandafter\@secondoftwo + \fi + \else + \expandafter\@firstoftwo + \fi} + \newcommand{\stmexpandonce}[1]{% + \unexpanded\expandafter{#1}} + \newstmrobustcmd{\gstmappto}[2]{% + \ifundef{#1} + {\xdef#1{\unexpanded{#2}}} + {\xdef#1{\stmexpandonce#1\unexpanded{#2}}}} + \newstmrobustcmd{\xstmappto}[2]{% + \ifstmundef{#1} + {\xdef#1{#2}} + {\xdef#1{\stmexpandonce#1#2}}} + + \long\def\@@affiliation[#1]#2{% + \@resetaffiliation% + \gdef\caaffiliationvalues{}% + \elsLabel{#1}% + \setkeys{affiliation}{#2}% + \g@addto@macro\elsaddress{% + \def\baselinestretch{1}% + \refstepcounter{affn}% + \xdef\@currentlabel{\theaffn}% + \elsLabel{#1}% + \textsuperscript{\theaffn}} + \xstmappto\elsaddress{\caaffiliationvalues\par}} + + \long\def\@affiliation#1{% + \@resetaffiliation% + \gdef\caaffiliationvalues{}% + \setkeys{affiliation}{#1}% + \g@addto@macro\elsauthors{% + \def\baselinestretch{1}}% + \xstmappto\elsaddress{\caaffiliationvalues\par}} +\fi + +\def\address{\@ifnextchar[{\@@address}{\@address}} + +\long\def\@@address[#1]#2{\g@addto@macro\elsaddress{% + \def\baselinestretch{1}% + \refstepcounter{affn} + \xdef\@currentlabel{\theaffn} + \elsLabel{#1}% + \textsuperscript{\theaffn}#2\par}} + +\long\def\@address#1{\g@addto@macro\elsauthors{% + \def\baselinestretch{1}% + \addsep\footnotesize\itshape#1\def\addsep{\par\vskip6pt}% + \def\authorsep{\par\vskip8pt}}} + +\newbox\absbox +\let\@elsarticleabstitle\@empty %*% +\def\abstracttitle#1{\gdef\@elsarticleabstitle{#1}} %*% +\abstracttitle{Abstract} %*% +\renewenvironment{abstract}{\global\setbox\absbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip\textbf{\@elsarticleabstitle} %*% + \par\medskip\noindent\unskip\ignorespaces} + {\egroup} + +\newbox\elsarticlehighlightsbox +\newbox\elsarticlegrabsbox +\def\@elsarticlehighlightstitle{Highlights} +\def\@elsarticlegrabstitle{Graphical Abstract} +\newif\ifelsprelimpagegrabs\global\elsprelimpagegrabsfalse +\newif\ifelsprelimpagehl\global\elsprelimpagehlfalse +\def\elsarticleprelims{% + \ifelsprelimpagegrabs\relax% + \thispagestyle{empty}% + \unvbox\elsarticlegrabsbox% + \pagebreak\clearpage% + \fi% + \ifelsprelimpagehl\relax% + \thispagestyle{empty} + \unvbox\elsarticlehighlightsbox% + \pagebreak\clearpage% + \setcounter{page}{1}% + \fi% +} +\newenvironment{highlights}{% + \global\elsprelimpagehltrue% + \global\setbox\elsarticlehighlightsbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip{\Large\@elsarticlehighlightstitle}%*% + \par\vskip12pt\noindent\unskip\ignorespaces\textbf{\@title}% + \ifx\elsprelimauthors\@empty\relax\else% + \par\vskip6pt\noindent\unskip\ignorespaces\elsprelimauthors% + \fi% + \par\medskip\noindent\unskip\ignorespaces + \begin{itemize} + } + {\end{itemize} + \egroup} +\newenvironment{graphicalabstract}{% + \global\elsprelimpagegrabstrue% + \global\setbox\elsarticlegrabsbox=\vbox\bgroup + \hsize=\textwidth\def\baselinestretch{1}% + \noindent\unskip{\Large\@elsarticlegrabstitle}%*% + \par\vskip12pt\noindent\unskip\ignorespaces\textbf{\@title}% + \ifx\elsprelimauthors\@empty\relax\else% + \par\vskip6pt\noindent\unskip\ignorespaces\elsprelimauthors% + \fi% + \par\medskip\noindent\unskip\ignorespaces} + {\egroup} + +\newbox\keybox +\let\@elsarticlekwdtitle\@empty %*% +\def\keywordtitle#1{\gdef\@elsarticlekwdtitle{#1}} %*% +\def\keywordtitlesep#1{\gdef\@elsarticlekeywordtitlesep{#1}} %*% +\keywordtitle{Keywords} %*% +\keywordtitlesep{:\ } +\def\keyword{% + \def\sep{\unskip, }% + \def\MSC{\@ifnextchar[{\@MSC}{\@MSC[2000]}} + \def\@MSC[##1]{\par\leavevmode\hbox {\it ##1~MSC:\space}}% + \def\PACS{\par\leavevmode\hbox {\it PACS:\space}}% + \def\JEL{\par\leavevmode\hbox {\it JEL:\space}}% + \global\setbox\keybox=\vbox\bgroup\hsize=\textwidth + \normalsize\normalfont\def\baselinestretch{1} + \parskip\z@ + \noindent\textit{\@elsarticlekwdtitle\@elsarticlekeywordtitlesep} + \raggedright % Keywords are not justified. + \ignorespaces} +\def\endkeyword{\par \egroup} + +\newdimen\Columnwidth +\Columnwidth=\columnwidth + +\def\printFirstPageNotes{% + \iflongmktitle + \let\columnwidth=\textwidth + \fi +\ifdoubleblind +\else + \ifx\@tnotes\@empty\else\@tnotes\fi + \ifx\@nonumnotes\@empty\else\@nonumnotes\fi + \ifx\@cornotes\@empty\else\@cornotes\fi + \ifx\@elseads\@empty\relax\else + \let\thefootnote\relax + \footnotetext{\ifnum\theead=1\relax + \textit{Email address:\space}\else + \textit{Email addresses:\space}\fi + \@elseads}\fi + \ifx\@elsuads\@empty\relax\else + \let\thefootnote\relax + \footnotetext{\textit{URL:\space}% + \@elsuads}\fi +\fi + \ifx\@fnotes\@empty\else\@fnotes\fi + \iflongmktitle\if@twocolumn + \let\columnwidth=\Columnwidth\fi\fi +} + +%% Pushing text to begin on newpage %*% +\def\newpage@after@title{title} +\def\newpage@after@subtitle{subtitle} +\def\newpage@after@author{author} +\def\newpage@after@abstract{abstract} +\def\newpageafter#1% + {\gdef\@elsarticlenewpageafter{#1}} + +\long\def\pprintMaketitle{\clearpage + \iflongmktitle\if@twocolumn\let\columnwidth=\textwidth\fi\fi + \resetTitleCounters + \def\baselinestretch{1}% + \printFirstPageNotes + \begin{\elsarticletitlealign}% + \thispagestyle{pprintTitle}% + \def\baselinestretch{1}% + \Large\@title\par\vskip18pt% + \ifx\@elsarticlenewpageafter\newpage@after@title% %*% + \newpage + \fi% + \ifdoubleblind + \vspace*{2pc} + \else + \normalsize\elsauthors\par\vskip10pt + \footnotesize\itshape\elsaddress\par\vskip36pt + \fi + \ifx\@elsarticlenewpageafter\newpage@after@author% %*% + \newpage + \fi% + \hrule\vskip12pt + \ifvoid\absbox\else\unvbox\absbox\par\vskip10pt\fi + \ifvoid\keybox\else\unvbox\keybox\par\vskip10pt\fi + \ifvoid\absbox\else\hrule\vskip12pt\fi + \ifx\@elsarticlenewpageafter\newpage@after@abstract% %*% + \newpage + \fi% + \end{\elsarticletitlealign}% + \gdef\thefootnote{\arabic{footnote}}% + } + +\def\printWarning{% + \mbox{}\par\vfill\par\bgroup + \fboxsep12pt\fboxrule1pt + \hspace*{.18\textwidth} + \fcolorbox{gray50}{gray10}{\box\warnbox} + \egroup\par\vfill\thispagestyle{empty} + \setcounter{page}{0} + \clearpage} + +\long\def\finalMaketitle{% + \resetTitleCounters + \def\baselinestretch{1}% + \MaketitleBox + \thispagestyle{pprintTitle}% + \gdef\thefootnote{\arabic{footnote}}% + } + +\long\def\MaketitleBox{% + \resetTitleCounters + \def\baselinestretch{1}% + \begin{\elsarticletitlealign}% + \def\baselinestretch{1}% + \Large\@title\par\vskip18pt + \ifdoubleblind + \vspace*{2pc} + \else + \normalsize\elsauthors\par\vskip10pt + \footnotesize\itshape\elsaddress\par\vskip36pt + \fi + \hrule\vskip12pt + \ifvoid\absbox\else\unvbox\absbox\par\vskip10pt\fi + \ifvoid\keybox\else\unvbox\keybox\par\vskip10pt\fi + \ifvoid\absbox\else\hrule\vskip12pt\fi + \end{\elsarticletitlealign}% +} + +\def\FNtext#1{\par\bgroup\footnotesize#1\egroup} +\newdimen\space@left +\def\alarm#1{\typeout{******************************}% + \typeout{#1}% + \typeout{******************************}% +} + +\def\titlespancalculator#1#2#3#4{% + % break count + \@tempcnta=#4\relax% + % pagebreakcount increment + \advance\@tempcnta by 1\relax% + % title page height + \@tempdima=#1\relax% + % Page height - title page notes height (only for first break) + % Page height - textheight (for remaining breaks) + % Page height - title page notes height + \@tempdimb=#2\relax% + % Remaining title page height + \advance\@tempdima -\the\@tempdimb% + % Checks if remaining title page + % height less than textheight + \ifdim\the\@tempdima>#3\relax% + \titlespancalculator% + {\the\@tempdima}{#3}{#3}{\the\@tempcnta}%Break again + \else% + % Save break count and exit. + \xdef\savetitlepagespan{\the\@tempcnta}% + \fi% +}% + +\long\def\myfor#1#2#3{% + \@tempcnta=#1\relax% + \ifnum#1<#2\relax% + \advance\@tempcnta by 1\relax% + #3% + \myfor{\the\@tempcnta}{#2}{#3}% + \fi} + +\long\def\getSpaceLeft{%\global\@twocolumnfalse% + \global\setbox0=\vbox{\hsize=\textwidth\MaketitleBox}% + \global\setbox1=\vbox{\hsize=\textwidth + \let\footnotetext\FNtext + \printFirstPageNotes}% + \xdef\noteheight{\the\ht1}% + \xdef\titleheight{\the\ht0}% + \@tempdima=\vsize + \advance\@tempdima-\noteheight + \advance\@tempdima-1\baselineskip + \xdef\savefpageheight{\the\@tempdima}% + \setbox2=\vbox{\titlespancalculator{\titleheight}% + {\savefpageheight}{\textheight}{0}}% +} + + \skip\footins=24pt + +\newbox\els@boxa +\newbox\els@boxb + +\ifpreprint + \def\maketitle{\elsarticleprelims\pprintMaketitle} + \else + \ifnum\jtype=1 + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \box\els@boxb} + \else% + \fi% + \box0% + \else + \finalMaketitle\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \else + \ifnum\jtype=5 + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \twocolumn[\box\els@boxb]} + \else% + \fi% + \twocolumn[\box0]%\printFirstPageNotes + \else + \twocolumn[\finalMaketitle]\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}} + \else + \if@twocolumn + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \twocolumn[\box\els@boxb]} + \else% + \fi% + \twocolumn[\box0]% + \else + \twocolumn[\finalMaketitle]\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \else + \def\maketitle{% + \elsarticleprelims% + \iflongmktitle\getSpaceLeft + \ifdim\noteheight>0pt% + \advance\@tempdima-1.35\baselineskip + \fi% + \global\setbox\els@boxa=\vsplit0 to \@tempdima + \box\els@boxa\par\resetTitleCounters + \thispagestyle{pprintTitle}% + \printFirstPageNotes + \ifnum\savetitlepagespan>1\relax% + \myfor{2}{\savetitlepagespan}{% + \global\setbox\els@boxb=\vsplit0 to \textheight%\@tempdima + \box\els@boxb} + \else% + \fi% + \box0% + \else + \elsarticleprelims% + \finalMaketitle\printFirstPageNotes + \fi + \gdef\thefootnote{\arabic{footnote}}}% + \fi + \fi + \fi +\fi + +\let\@elsarticlemyfooter\@empty +\let\@elsarticlemyfooteralign\@empty +\def\@elsarticlemyfooteralignleft{L} +\def\@elsarticlemyfooteralignright{R} +\def\@elsarticlemyfooteraligncenter{C} + +\def\myfooter[#1]#2 %*% + {\gdef\@elsarticlemyfooteralign{#1} + \gdef\@elsarticlemyfooter{#2}} + +\def\myfooterfont#1{\gdef\@myfooterfont{#1}} +\myfooterfont{\footnotesize\itshape} +\def\ps@pprintTitle{% + \let\@oddhead\@empty + \let\@evenhead\@empty + \def\@oddfoot + {\hbox to \textwidth% + {\ifnopreprintline\relax\else + \@myfooterfont% + \ifx\@elsarticlemyfooteralign\@elsarticlemyfooteraligncenter% + \hfil\@elsarticlemyfooter\hfil% + \else% + \ifx\@elsarticlemyfooteralign\@elsarticlemyfooteralignleft% + \@elsarticlemyfooter\hfill{}% + \else% + \ifx\@elsarticlemyfooteralign\@elsarticlemyfooteralignright% + {}\hfill\@elsarticlemyfooter% + \else% + % Preprint submitted to \ifx\@journal\@empty% + % Elsevier% + \ifx\@journal\@empty\else + Preprint submitted to + \@journal\hfill\@date\fi\fi% + \fi% + \fi% + \fi% + } + }% + \let\@evenfoot\@oddfoot} +\def\@seccntDot{.} +\def\@seccntformat#1{\csname the#1\endcsname\@seccntDot\hskip 0.5em} + +\renewcommand\section{\@startsection {section}{1}{\z@}% + {18\p@ \@plus 6\p@ \@minus 3\p@}% + {9\p@ \@plus 6\p@ \@minus 3\p@}% + {\normalsize\bfseries\boldmath}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {12\p@ \@plus 6\p@ \@minus 3\p@}% + {3\p@ \@plus 6\p@ \@minus 3\p@}% + {\normalfont\normalsize\itshape}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {12\p@ \@plus 6\p@ \@minus 3\p@}% + {\p@}% + {\normalfont\normalsize\itshape}} + +\def\paragraph{\secdef{\els@aparagraph}{\els@bparagraph}} +\def\els@aparagraph[#1]#2{\elsparagraph[#1]{#2.}} +\def\els@bparagraph#1{\elsparagraph*{#1.}} + +\newcommand\elsparagraph{\@startsection{paragraph}{4}{0\z@}% + {10\p@ \@plus 6\p@ \@minus 3\p@}% + {-6\p@}% + {\normalfont\itshape}} +\newdimen\leftMargin +\leftMargin=2em +\newtoks\@enLab %\newtoks\@enfont +\def\@enQmark{?} +\def\@enLabel#1#2{% + \edef\@enThe{\noexpand#1{\@enumctr}}% + \@enLab\expandafter{\the\@enLab\csname the\@enumctr\endcsname}% + \@enloop} +\def\@enSpace{\afterassignment\@enSp@ce\let\@tempa= } +\def\@enSp@ce{\@enLab\expandafter{\the\@enLab\space}\@enloop} +\def\@enGroup#1{\@enLab\expandafter{\the\@enLab{#1}}\@enloop} +\def\@enOther#1{\@enLab\expandafter{\the\@enLab#1}\@enloop} +\def\@enloop{\futurelet\@entemp\@enloop@} +\def\@enloop@{% + \ifx A\@entemp \def\@tempa{\@enLabel\Alph }\else + \ifx a\@entemp \def\@tempa{\@enLabel\alph }\else + \ifx i\@entemp \def\@tempa{\@enLabel\roman }\else + \ifx I\@entemp \def\@tempa{\@enLabel\Roman }\else + \ifx 1\@entemp \def\@tempa{\@enLabel\arabic}\else + \ifx \@sptoken\@entemp \let\@tempa\@enSpace \else + \ifx \bgroup\@entemp \let\@tempa\@enGroup \else + \ifx \@enum@\@entemp \let\@tempa\@gobble \else + \let\@tempa\@enOther + \fi\fi\fi\fi\fi\fi\fi\fi + \@tempa} +\newlength{\@sep} \newlength{\@@sep} +\setlength{\@sep}{.5\baselineskip plus.2\baselineskip + minus.2\baselineskip} +\setlength{\@@sep}{.1\baselineskip plus.01\baselineskip + minus.05\baselineskip} +\providecommand{\sfbc}{\rmfamily\upshape} +\providecommand{\sfn}{\rmfamily\upshape} +\def\@enfont{\ifnum \@enumdepth >1\let\@nxt\sfn \else\let\@nxt\sfbc \fi\@nxt} +\def\enumerate{% + \ifnum \@enumdepth >3 \@toodeep\else + \advance\@enumdepth \@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}\fi + \@ifnextchar[{\@@enum@}{\@enum@}} +\def\@@enum@[#1]{% + \@enLab{}\let\@enThe\@enQmark + \@enloop#1\@enum@ + \ifx\@enThe\@enQmark\@warning{The counter will not be printed.% + ^^J\space\@spaces\@spaces\@spaces The label is: \the\@enLab}\fi + \expandafter\edef\csname label\@enumctr\endcsname{\the\@enLab}% + \expandafter\let\csname the\@enumctr\endcsname\@enThe + \csname c@\@enumctr\endcsname7 + \expandafter\settowidth + \csname leftmargin\romannumeral\@enumdepth\endcsname + {\the\@enLab\hskip\labelsep}% + \@enum@} +\def\@enum@{\list{{\@enfont\csname label\@enumctr\endcsname}}% + {\usecounter{\@enumctr}\def\makelabel##1{\hss\llap{##1}}% + \ifnum \@enumdepth>1\setlength{\topsep}{\@@sep}\else + \setlength{\topsep}{\@sep}\fi + \ifnum \@enumdepth>1\setlength{\itemsep}{0pt plus1pt minus1pt}% + \else \setlength{\itemsep}{\@@sep}\fi + %\setlength\leftmargin{\leftMargin}%%%{1.8em} + \setlength{\parsep}{0pt plus1pt minus1pt}% + \setlength{\parskip}{0pt plus1pt minus1pt} + }} + +\def\endenumerate{\par\ifnum \@enumdepth >1\addvspace{\@@sep}\else + \addvspace{\@sep}\fi \endlist} + +\def\sitem{\@noitemargtrue\@item[\@itemlabel *]} + +\def\itemize{\@ifnextchar[{\@Itemize}{\@Itemize[]}} + +\def\@Itemize[#1]{\def\next{#1}% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \ifx\next\@empty\else\expandafter\def\csname + labelitem\romannumeral\the\@itemdepth\endcsname{#1}\fi% + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \expandafter\list\csname\@itemitem\endcsname + {\def\makelabel##1{\hss\llap{##1}}}% + \fi} +\def\newdefinition#1{% + \@ifnextchar[{\@odfn{#1}}{\@ndfn{#1}}}%] +\def\@ndfn#1#2{% + \@ifnextchar[{\@xndfn{#1}{#2}}{\@yndfn{#1}{#2}}} +\def\@xndfn#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@dfncountersep + \@dfncounter{#1}}% + \global\@namedef{#1}{\@dfn{#1}{#2}}% + \global\@namedef{end#1}{\@enddefinition}}} +\def\@yndfn#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@dfncounter{#1}}% + \global\@namedef{#1}{\@dfn{#1}{#2}}% + \global\@namedef{end#1}{\@enddefinition}}} +\def\@odfn#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}} + \global\@namedef{#1}{\@dfn{#2}{#3}}% + \global\@namedef{end#1}{\@enddefinition}}}} +\def\@dfn#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@ydfn{#1}{#2}}{\@xdfn{#1}{#2}}} +\def\@xdfn#1#2{% + \@begindefinition{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@ydfn#1#2[#3]{% + \@opargbegindefinition{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +\def\@dfncounter#1{\noexpand\arabic{#1}} +\def\@dfncountersep{.} +\def\@begindefinition#1#2{\trivlist + \item[\hskip\labelsep{\bfseries #1\ #2.}]\upshape} +\def\@opargbegindefinition#1#2#3{\trivlist + \item[\hskip\labelsep{\bfseries #1\ #2\ (#3).}]\upshape} +\def\@enddefinition{\endtrivlist} + +\def\@begintheorem#1#2{\trivlist + \let\baselinestretch\@blstr + \item[\hskip \labelsep{\bfseries #1\ #2.}]\itshape} +\def\@opargbegintheorem#1#2#3{\trivlist + \let\baselinestretch\@blstr + \item[\hskip \labelsep{\bfseries #1\ #2\ (#3).}]\itshape} + +\def\newproof#1{% + \@ifnextchar[{\@oprf{#1}}{\@nprf{#1}}} +\def\@nprf#1#2{% + \@ifnextchar[{\@xnprf{#1}{#2}}{\@ynprf{#1}{#2}}} +\def\@xnprf#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@prfcountersep + \@prfcounter{#1}}% + \global\@namedef{#1}{\@prf{#1}{#2}}% + \global\@namedef{end#1}{\@endproof}}} +\def\@ynprf#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@prfcounter{#1}}% + \global\@namedef{#1}{\@prf{#1}{#2}}% + \global\@namedef{end#1}{\@endproof}}} +\def\@oprf#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}}% + \global\@namedef{#1}{\@prf{#2}{#3}}% + \global\@namedef{end#1}{\@endproof}}}} +\def\@prf#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@yprf{#1}{#2}}{\@xprf{#1}{#2}}} +\def\@xprf#1#2{% + \@beginproof{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@yprf#1#2[#3]{% + \@opargbeginproof{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +\def\@prfcounter#1{\noexpand\arabic{#1}} +\def\@prfcountersep{.} +\def\@beginproof#1#2{\trivlist\let\baselinestretch\@blstr + \item[\hskip \labelsep{\scshape #1.}]\rmfamily} +\def\@opargbeginproof#1#2#3{\trivlist\let\baselinestretch\@blstr + \item[\hskip \labelsep{\scshape #1\ (#3).}]\rmfamily} +\def\@endproof{\endtrivlist} +\newcommand*{\qed}{\hbox{}\hfill$\Box$} + +\@ifundefined{@biboptions}{\xdef\@biboptions{numbers}}{} +\InputIfFileExists{\jobname.spl}{}{} +\ifnonatbib\relax\else + \RequirePackage[\@biboptions]{natbib} +\fi +\newwrite\splwrite +\immediate\openout\splwrite=\jobname.spl +\def\biboptions#1{\def\next{#1}\immediate\write\splwrite{% + \string\g@addto@macro\string\@biboptions{% + ,\expandafter\strip@prefix\meaning\next}}} + +\let\baselinestretch=\@blstr +\ifnum\jtype=1 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=562pt, + textwidth=384pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=12pt, + footnotesep=24pt plus 2pt minus 12pt, + } + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \if@twocolumn\global\@twocolumnfalse\fi +\else\ifnum\jtype=3 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=622pt, + textwidth=468pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=18pt, + footnotesep=24pt plus 2pt minus 12pt, + columnsep=2pc + } + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \if@twocolumn\input{fleqn.clo}\fi +\else\ifnum\jtype=5 + \RequirePackage{geometry} + \geometry{twoside, + paperwidth=210mm, + paperheight=297mm, + textheight=682pt, + textwidth=522pt, + centering, + headheight=50pt, + headsep=12pt, + footskip=18pt, + footnotesep=24pt plus 2pt minus 12pt, + columnsep=18pt + }% + \global\let\bibfont=\footnotesize + \global\bibsep=0pt + \input{fleqn.clo} + \global\@twocolumntrue +%% +%% End of option '5p' +%% +\fi\fi\fi +\def\journal#1{\gdef\@journal{#1}} + \let\@journal\@empty +\newenvironment{frontmatter}{}{\maketitle} + +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip\footnotesize + \sbox\@tempboxa{#1: #2}% + \ifdim \wd\@tempboxa >\hsize + #1: #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + +\AtBeginDocument{\@ifpackageloaded{hyperref} + {\def\@linkcolor{blue} + \def\@anchorcolor{blue} + \def\@citecolor{blue} + \def\@filecolor{blue} + \def\@urlcolor{blue} + \def\@menucolor{blue} + \def\@pagecolor{blue} +\begingroup + \@makeother\`% + \@makeother\=% + \edef\x{% + \edef\noexpand\x{% + \endgroup + \noexpand\toks@{% + \catcode 96=\noexpand\the\catcode`\noexpand\`\relax + \catcode 61=\noexpand\the\catcode`\noexpand\=\relax + }% + }% + \noexpand\x + }% +\x +\@makeother\` +\@makeother\= +}{}} +%% +\def\appendixname{Appendix } +\renewcommand\appendix{\par + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \setcounter{equation}{0} + \gdef\thefigure{\@Alph\c@section.\arabic{figure}}% + \gdef\thetable{\@Alph\c@section.\arabic{table}}% + \gdef\thesection{\appendixname~\@Alph\c@section}% + \@addtoreset{equation}{section}% + \gdef\theequation{\@Alph\c@section.\arabic{equation}}% + \addtocontents{toc}{\string\let\string\numberline\string\tmptocnumberline}{}{} +} + +%%%% \numberline width calculation for appendix. +\newdimen\appnamewidth +\def\tmptocnumberline#1{% + \setbox0=\hbox{\appendixname} + \appnamewidth=\wd0 + \addtolength\appnamewidth{2.5pc} + \hb@xt@\appnamewidth{#1\hfill} +} + +%% Added for work with amsrefs.sty + +\@ifpackageloaded{amsrefs}% + {} + {%\let\bibsection\relax% + \AtBeginDocument{\def\cites@b#1#2,#3{% + \begingroup[% + \toks@{\InnerCite{#2}#1}% + \ifx\@empty#3\@xp\@gobble\fi + \cites@c#3% +}}} +%% +%% Added for avoiding clash with cleveref.sty +\@ifpackageloaded{cleveref}% + {} + {\def\tnotetext[#1]#2{\g@addto@macro\@tnotes{% + \refstepcounter{tnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thetnote}} + \def\thefootnote{\ifcase\c@tnote\or$\star$\or$\star\star$\fi}% + \footnotetext{#2}}} +%%% + \def\fntext[#1]#2{\g@addto@macro\@fnotes{% + \refstepcounter{fnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thefnote}} + \def\thefootnote{\thefnote}% + \global\setcounter{footnote}{\c@fnote}% + \footnotetext{#2}}} +%%% + \def\cortext[#1]#2{\g@addto@macro\@cornotes{% + \refstepcounter{cnote}% + \immediate\write\@auxout{\string\Newlabel{#1}{\thecnote}} + \def\thefootnote{\ifcase\c@cnote\or$\ast$\or + $\ast\ast$\fi}% + \footnotetext{#2}}} +} + +\def\textmarker#1#2{\textcolor{#1}{#2}}%*% +\endinput +%% +%% End of file `elsarticle.cls'. diff --git a/_extensions/quarto-journals/elsevier/elsevier.lua b/_extensions/quarto-journals/elsevier/elsevier.lua new file mode 100755 index 0000000..e6be92e --- /dev/null +++ b/_extensions/quarto-journals/elsevier/elsevier.lua @@ -0,0 +1,166 @@ +-- cite style constants +local kBibStyleDefault = 'number' +local kBibStyles = { 'number', 'numbername', 'authoryear' } +local kBibStyleAuthYr = 'elsarticle-harv' +local kBibStyleNumber = 'elsarticle-num' +local kBibStyleNumberName = 'elsarticle-num-names' +local kBibStyleUnknown = kBibStyleNumberName + +-- layout and style +local kFormatting = pandoc.List({ 'preprint', 'review', 'doubleblind' }) +local kModels = pandoc.List({ '1p', '3p', '5p' }) +local kLayouts = pandoc.List({ 'onecolumn', 'twocolumn' }) + + +local function setBibStyle(meta, style) + meta['biblio-style'] = style + quarto.doc.add_format_resource('bib/' .. style .. '.bst') +end + +local function hasClassOption(meta, option) + if meta['classoption'] == nil then + return false + end + + for i, v in ipairs(meta['classoption']) do + if v[1].text == option then + return true + end + end + return false +end + +local function addClassOption(meta, option) + if meta['classoption'] == nil then + meta['classoption'] = pandoc.List({}) + end + + if not hasClassOption(meta, option) then + meta['classoption']:insert({ pandoc.Str(option) }) + end +end + +local function printList(list) + local result = '' + local sep = '' + for i, v in ipairs(list) do + result = result .. sep .. v + sep = ', ' + end + return result +end + +local bibstyle = kBibStyleDefault + +return { + { + Meta = function(meta) + -- If citeproc is being used, switch to the proper + -- CSL file + if quarto.doc.cite_method() == 'citeproc' and meta['csl'] == nil then + meta['csl'] = quarto.utils.resolve_path('bib/elsevier-harvard.csl') + end + + if quarto.doc.is_format("pdf") then + + -- read the journal settings + local journal = meta['journal'] + local citestyle = nil + local formatting = nil + local model = nil + local layout = nil + local name = nil + + if journal ~= nil then + citestyle = journal['cite-style'] + formatting = journal['formatting'] + model = journal['model'] + layout = journal['layout'] + name = journal['name'] + end + + -- process the site style + if citestyle ~= nil then + citestyle = pandoc.utils.stringify(citestyle) + else + citestyle = kBibStyleDefault + end + + -- capture the bibstyle + bibstyle = citestyle + if citestyle == 'numbername' then + setBibStyle(meta, kBibStyleNumberName) + addClassOption(meta, 'number') + elseif citestyle == 'authoryear' then + setBibStyle(meta, kBibStyleAuthYr) + addClassOption(meta, 'authoryear') + elseif citestyle == 'number' then + setBibStyle(meta, kBibStyleNumber) + addClassOption(meta, 'number') + else + error("Unknown journal cite-style " .. citestyle .. "\nPlease use one of " .. printList(kBibStyles)) + setBibStyle(meta, kBibStyleUnknown) + end + + -- process the layout + if formatting ~= nil then + formatting = pandoc.utils.stringify(formatting) + if kFormatting:includes(formatting) then + addClassOption(meta, formatting) + else + error("Unknown journal formatting " .. formatting .. "\nPlease use one of " .. printList(kFormatting)) + end + end + + -- process the type + if model ~= nil then + model = pandoc.utils.stringify(model) + if kModels:includes(model) then + addClassOption(meta, model) + else + error("Unknown journal model " .. model .. "\nPlease use one of " .. printList(kModels)) + end + end + + -- 5p models should be two column always + if model == '5p' and layout == nil then + layout = 'twocolumn' + end + + -- process the type + if layout ~= nil then + layout = pandoc.utils.stringify(layout) + if kLayouts:includes(layout) then + addClassOption(meta, layout) + if layout == 'twocolumn' then + quarto.doc.include_file('in-header', 'partials/_two-column-longtable.tex') + end + else + error("Unknown journal layout " .. layout .. "\nPlease use one of " .. printList(kLayouts)) + end + end + + -- process the name + if name ~= nil then + name = pandoc.utils.stringify(name) + quarto.doc.include_text('in-header', '\\journal{' .. name .. '}') + end + end + + return meta + end + }, + { + Cite = function(cite) + if bibstyle == 'number' then + -- If we are numbered, force citations into normal mode + -- as the author styles don't make sense + for i, v in ipairs(cite.citations) do + v.mode = 'NormalCitation' + end + return cite + end + end, + + } +} diff --git a/_extensions/quarto-journals/elsevier/partials/_two-column-longtable.tex b/_extensions/quarto-journals/elsevier/partials/_two-column-longtable.tex new file mode 100755 index 0000000..9ba482a --- /dev/null +++ b/_extensions/quarto-journals/elsevier/partials/_two-column-longtable.tex @@ -0,0 +1,20 @@ +\usepackage{float} +\makeatletter +\let\oldlt\longtable +\let\endoldlt\endlongtable +\def\longtable{\@ifnextchar[\longtable@i \longtable@ii} +\def\longtable@i[#1]{\begin{figure}[H] +\onecolumn +\begin{minipage}{0.5\textwidth} +\oldlt[#1] +} +\def\longtable@ii{\begin{figure}[H] +\onecolumn +\begin{minipage}{0.5\textwidth} +\oldlt +} +\def\endlongtable{\endoldlt +\end{minipage} +\twocolumn +\end{figure}} +\makeatother diff --git a/_extensions/quarto-journals/elsevier/partials/before-body.tex b/_extensions/quarto-journals/elsevier/partials/before-body.tex new file mode 100755 index 0000000..a7aebbe --- /dev/null +++ b/_extensions/quarto-journals/elsevier/partials/before-body.tex @@ -0,0 +1,41 @@ +\begin{frontmatter} +\title{$title$ $if(subtitle)$ \\\large{$subtitle$} $endif$ } + +$for(by-author)$\author[$for(by-author.affiliations)$$it.number$$sep$,$endfor$]{$by-author.name.literal$% +$if(by-author.attributes.corresponding)$\corref{cor1}$endif$% +$if(by-author.note.text)$\fnref{fn$by-author.note.number$}$endif$} +$if(by-author.email)$ \ead{$by-author.email$} $endif$ +$endfor$ +$for(by-affiliation)$ +\affiliation[$it.number$]{organization={$it.name$},$if(it.address)$addressline={$it.address$}$endif$$if(it.city)$$if(it.address)$,$endif$city={$it.city$}$endif$$if(it.country)$$if(it.city)$,$elseif(it.address)$,$endif$country={$it.country$}$endif$$if(it.postal-code)$$if(it.country)$,$elseif(it.city)$,$elseif(it.address)$,$endif$postcode={$it.postal-code$}$endif$} +$endfor$ + +\cortext[cor1]{Corresponding author} +$for(by-author)$ +$if(by-author.note.text)$\fntext[fn$by-author.note.number$]{$by-author.note.text$}$endif$ +$endfor$ + +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$if(journal.graphical-abstract)$\begin{graphicalabstract} +$journal.graphical-abstract$ +\end{graphicalabstract} +$endif$ + +$if(journal.highlights)$\begin{highlights} +$for(journal.highlights)$\item $it$$endfor$ +\end{highlights} +$endif$ + +$if(keywords)$ +\begin{keyword} + $for(keywords/allbutlast)$$keywords$ \sep $endfor$ + $for(keywords/last)$$keywords$$endfor$ +\end{keyword} +$endif$ +\end{frontmatter} + diff --git a/_extensions/quarto-journals/elsevier/partials/revision.tex b/_extensions/quarto-journals/elsevier/partials/revision.tex new file mode 100755 index 0000000..ca780a6 --- /dev/null +++ b/_extensions/quarto-journals/elsevier/partials/revision.tex @@ -0,0 +1,66 @@ +\usepackage{enumitem} +\usepackage{fontspec} +\usepackage{float} +\usepackage[normalem]{ulem} +\usepackage{hyperref} +\usepackage{nameref} %needed by zref-xr +\usepackage{zref-xr,zref-hyperref,zref-user} +\usepackage{xr-hyper} + + +\usepackage{adjustbox} +% \usepackage{xcolor} +\usepackage{mdframed} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + linecolor=gray!30, + backgroundcolor=gray!5, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=0pt, + innerbottommargin=0pt + ]{refquote} +\newmdenv[topline=false, + leftline=true, + bottomline=false, + rightline=false, + linewidth=3pt, + %backgroundcolor=lightgray, + backgroundcolor=red!3!white, + linecolor=red!30!white, + skipabove=\topsep, + skipbelow=\topsep, + leftmargin=0pt, + rightmargin=0pt, + innertopmargin=10pt, + innerbottommargin=10pt + ]{question} +% setup hyperlink for page and line number +\def\msname{MS} +\def\smname{SM} +\setenumerate{labelsep=*, leftmargin=1.0pc} +%\zexternaldocument*{ManuscriptNew\veraa} +\zexternaldocument*{\msname} +\zexternaldocument*{\smname} +\newcommand{\hlabel}[1]{\label{#1}\hypertarget{#1}{ + \linelabel{line:#1}}} +%\externaldocument[si-]{\smname\veraa}[\smname\veraa.pdf] +\makeatletter +\newcommand{\clab}[2][]{ + \protected@write\@auxout{\let\clab\@secondoftwo}{ + \string\newlabel{r:#1}{{#2}{}}}% + \hlabel{#1}#2\hlabel{#1end}} +\makeatother +\newcommand{\zhypera}[1]{\href[pdfnewwindow]{\msname.pdf\##1}{\\[1ex]\textbf{Page \zpageref{#1}, Line +\zref{line:#1}--\zref{line:#1end}:}\\}} +\newcommand{\cref}[1]{\begin{refquote}\zhypera{#1}{\zref{r:#1}}\\[-0.5ex]\end{refquote}} +% \newenvironment{ra}[1][\unskip]{\par \noindent \\[-1ex] \textbf{Response/Action:}\par\bf}{\ \\} +\renewenvironment{quote}{\begin{question}}{\end{question}} +% \renewenvironment{verbatim}{\begin{ra}}{\end{ra}} + diff --git a/_extensions/quarto-journals/elsevier/partials/title.tex b/_extensions/quarto-journals/elsevier/partials/title.tex new file mode 100755 index 0000000..c6bd0cb --- /dev/null +++ b/_extensions/quarto-journals/elsevier/partials/title.tex @@ -0,0 +1 @@ +\setlength{\parindent}{6pt} \ No newline at end of file diff --git a/_extensions/quarto-journals/elsevier/styles/elsevier.scss b/_extensions/quarto-journals/elsevier/styles/elsevier.scss new file mode 100755 index 0000000..d002b36 --- /dev/null +++ b/_extensions/quarto-journals/elsevier/styles/elsevier.scss @@ -0,0 +1 @@ +/*-- scss:defaults --*/ diff --git a/_quarto.yml b/_quarto.yml index 866ccbc..76ca6b9 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -1,17 +1,62 @@ -project: - type: website - output-dir: ../www/project/protected/su2023temp/@main - -title: "项目名称" -lang: zh +title: "MANUSCRIPT TITLE" +submitjournal: "Water Research" +submitid: WR73679 +lang: en date: today bibliography: [BB/Ref.bib, BB/localRef.bib] +author: + - name: Ming Su + email: mingsu@rcees.ac.cn + orcid: 0000-0001-9821-1268 + url: https://drwater.rcees.ac.cn + affiliations: + - ref: skleac + - ref: ucas + - name: Min Yang + email: yangmin@rcees.ac.cn + affiliations: + - ref: skleac + - ref: ucas + attributes: + corresponding: true +affiliations: + - id: skleac + name: State Key Laboratory of Environmental Aquatic Chemistry, Research Center for Eco-Environmental Sciences, Chinese Academy of Sciences + address: P.O. Box 2871 + city: Beijing + postal-code: 100085 + url: https://www.skleac.ac.cn + - id: ucas + name: University of Chinese Academy of Sciences + city: Beijing + postal-code: 100049 + url: https://www.ucas.ac.cn +crossref: + fig-title: Fig. # (default is "Figure") + tbl-title: Table # (default is "Table") + eq-title: Eq. # (default is "Equation") + title-delim: "" # (default is ":") + fig-prefix: Fig. # (default is "Figure") + tbl-prefix: Table # (default is "Table") + eq-prefix: Eq. + ref-hyperlink: true # (default is true) +project: + type: website + output-dir: ../www/manuscript/protected/su2023temp/@main + # render: + # - index.qmd + # - MS/SM.qmd + # - MS/MS.qmd + # - MS/CL.qmd + # - MS/HL.qmd + # - MS/RN.qmd + # - MS/AC.qmd website: title: "Version: main" reader-mode: true - site-url: https://drwater.rcees.ac.cn/project/protected/su2023temp/@main - repo-url: https://drwater.rcees.ac.cn/git/project/su2023temp/src/branch/main + site-url: https://drwater.rcees.ac.cn/manuscript/protected/su2023temp/@main + repo-url: https://drwater.rcees.ac.cn/git/manuscript/su2023temp/src/branch/main repo-actions: [edit, source, issue] page-navigation: true page-footer: "Copyright 2023, [Ming Su](https://drwater.rcees.ac.cn)" @@ -22,22 +67,35 @@ website: - icon: house text: "Home" file: index.qmd - - text: "Proposal" - file: PP/index.qmd - - text: "Report" - file: RP/index.qmd + menu: + - text: "Highlights" + file: MS/HL.qmd + - text: "Cover Letter" + file: MS/CL.qmd + - text: "Author Credits" + file: MS/AC.qmd + - text: "Trackchanges" + file: TC/index.qmd + - text: "Manuscript" + file: MS/MS.qmd + - text: "Supplementary Materials" + file: MS/SM.qmd + - text: "Revision Notes" + file: MS/RN.qmd - text: "Slides" file: SD/index.qmd - - href: AC/index.qmd - text: Achievement - - text: "About" - file: about.qmd + - text: "Other" + menu: + - text: "Report" + file: RP/index.qmd + - text: "Acomplishment" + file: AC/index.qmd - icon: git menu: - text: Edit - url: https://drwater.rcees.ac.cn/git/project/su2023temp/_edit/ + url: https://drwater.rcees.ac.cn/git/manuscript/su2023temp/_edit/ - text: Issue - url: https://drwater.rcees.ac.cn/git/project/su2023temp/issues + url: https://drwater.rcees.ac.cn/git/manuscript/su2023temp/issues comments: hypothesis: theme: clean @@ -46,8 +104,5 @@ website: format: html: theme: cosmo - css: styles.css + css: _extensions/inst/css/style.css toc: true - - -