.stowdots/texmf/tex/latex/elife-doi-fix/elife-doi-fix.cls
2023-09-19 10:26:51 -04:00

528 lines
16 KiB
TeX
Executable File

% A template for eLife submissions.
%
% Created by Overleaf (writeLaTeX).
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{elife}[2022/06/01, v1.11]
%% Move all option processing before loading class
\newif\if@reqslineno
\DeclareOption{lineno}{\@reqslinenotrue}
%% Linespacing.
\newif\if@onehalfspacing
\newif\if@doublespacing
\DeclareOption{onehalfspacing}{\@onehalfspacingtrue}
\DeclareOption{doublespacing}{\@doublespacingtrue}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}}
\ExecuteOptions{}
\ProcessOptions\relax
\LoadClass{extarticle}
\RequirePackage[english]{babel}
\RequirePackage{calc}
\RequirePackage{etoolbox}
\RequirePackage{regexpatch}
\RequirePackage{ifxetex,ifluatex}
\newif\ifxetexorluatex
\ifxetex
\xetexorluatextrue
\else
\ifluatex
\xetexorluatextrue
\else
\xetexorluatexfalse
\fi
\fi
\RequirePackage{amsmath}
\RequirePackage{mdframed}
\RequirePackage{lineno}
\if@reqslineno\linenumbers\fi
% Note v1.0 of elife.cls used Trueno font; this was
% changed to use Open Sans in v1.1
\ifxetexorluatex
\RequirePackage{unicode-math}
% v1.7: xits-math font name changed to XITSMath in TL2019
\RequirePackage[default]{opensans}
\setmonofont[Scale=MatchUppercase]{Latin Modern Mono}
% XITSMath is really STIX. Really.
% https://tex.stackexchange.com/questions/227216/stix-versus-xits
\setmathfont[Extension = .otf,BoldFont = XITSMath-Bold,]{XITSMath-Regular}
\else
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}
\RequirePackage{stix}
\RequirePackage[default]{opensans}
\renewcommand{\ttdefault}{lmtt}
\fi
\RequirePackage{microtype}
% Trueno/Open Sans requires a bigger "single" linespread.
\linespread{1.2}
\if@onehalfspacing\linespread{1.5}\fi
\if@doublespacing\linespread{2.0}\fi
\RequirePackage{graphicx,xcolor}
\definecolor{eLifeDarkBlue}{HTML}{273B81}
\definecolor{eLifeLightBlue}{HTML}{0A9DD9}
\definecolor{eLifeMediumGrey}{HTML}{6D6E70}
\definecolor{eLifeLightGrey}{HTML}{929497}
\RequirePackage{booktabs}
\RequirePackage{authblk}
\RequirePackage[left=6cm,%
marginparwidth=4cm,%
marginparsep=0.5cm,%
right=1.3cm,%
top=2cm,%
bottom=2.5cm,%
headheight=21pt,%
headsep=2\baselineskip,%
columnsep=2em,%
letterpaper]{geometry}%
\RequirePackage{changepage}
\RequirePackage{silence}
\WarningFilter{caption}{The option `hypcap=true' will be ignored}
\RequirePackage[labelfont={bf},%
labelsep=period,%
justification=raggedright,%
singlelinecheck=false,%
tableposition=top,font=small]
{caption}
% \captionsetup*[table]{skip=\medskipamount}
\RequirePackage{natbib}
\renewcommand{\bibfont}{\small}
% modifed from https://github.com/gbhutani/vancouver_authoryear_bibstyle/
\IfFileExists{vancouver-elife-doi-fix.bst}
{\bibliographystyle{vancouver-elife-doi-fix}}
{\PackageWarning{elife}{vancouver-elife-doi-fix.bst not found; falling back to apalike bibliography style.}\bibliographystyle{apalike}}
% Make author in citation italic
\renewcommand{\NAT@nmfmt}[1]{{\bfseries\itshape\color{eLifeMediumGrey} #1}}
% ...as well as the year
\xpatchcmd{\NAT@citex}
{\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@date}}
{\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@nm}\NAT@nmfmt{\NAT@date}}}
{}{\PackageWarning{eLife}{Failed to patch year format in citation}}
\xpatchcmd{\NAT@citex}
{\else\unskip\NAT@spacechar\NAT@hyper@{\NAT@date}}
{\else\unskip\NAT@spacechar\NAT@hyper@{\NAT@nmfmt{\NAT@date}}}
{}{\PackageWarning{eLife}{Failed to patch year format in citation}}
\xpatchcmd{\NAT@citex}
{\hyper@natlinkbreak{\NAT@aysep\NAT@spacechar}{\@citeb\@extra@b@citeb}\NAT@date}
{\hyper@natlinkbreak{\NAT@nmfmt{\NAT@aysep\NAT@spacechar}}{\@citeb\@extra@b@citeb}\NAT@nmfmt{\NAT@date}}
{}{\PackageWarning{eLife}{Failed to patch year format in citation}}
\xpatchcmd{\NAT@citex}
{\@citea\NAT@hyper@{\NAT@date}}
{\@citea\NAT@hyper@{\NAT@nmfmt{\NAT@date}}}
{}{\PackageWarning{eLife}{Failed to patch year format in citation}}
\xpatchcmd{\NAT@citex}
{{\@citeb\@extra@b@citeb}\NAT@date}
{{\@citeb\@extra@b@citeb}\NAT@nmfmt{\NAT@date}}
{}{\PackageWarning{eLife}{Failed to patch year format in citation}}
%% There, we're finally done with patching the year in citations.
%
% headers and footers
%
\RequirePackage{fancyhdr} % custom headers/footers
\RequirePackage{lastpage} % Number of pages in the document
\pagestyle{fancy} % Enables the custom headers/footers
\addtolength{\headwidth}{\marginparsep}
\addtolength{\headwidth}{\marginparwidth}
\fancyhf{}
% Removing header in v1.9
% \chead{%
% \setlength{\fboxsep}{3pt}
% \colorbox{eLifeMediumGrey}{\begin{minipage}{\headwidth}\centering\color{white} Manuscript submitted to eLife\end{minipage}}%
% }
% Footers
\rfoot{\small\color{eLifeMediumGrey}\thepage\space of\space\pageref{LastPage}}%
\preto{\footrule}{\color{eLifeMediumGrey}}
\renewcommand{\headrulewidth}{0pt}% % No header rule
\renewcommand{\footrulewidth}{0.4pt}% % No footer rule
%
% section/subsection/paragraph set-up
%
\setcounter{secnumdepth}{0}
\RequirePackage[explicit]{titlesec}
\titleformat{\section}
{\color{eLifeMediumGrey}\Large\bfseries}
{\thesection}{}{#1}[]
\titleformat{\subsection}
{\large\bfseries}
{\thesubsection}{}{#1}[]
\titleformat{\subsubsection}
{\large}
{\thesubsubsection}{}{#1}[]
\titleformat{\paragraph}
{\color{eLifeMediumGrey}\large}
{\theparagraph}{}{#1}[]
\titlespacing*{\section}{0pc}{3ex \@plus4pt \@minus3pt}{0pt}
\titlespacing*{\subsection}{0pc}{2.5ex \@plus3pt \@minus2pt}{0pt}
\titlespacing*{\subsubsection}{0pc}{2ex \@plus2.5pt \@minus1.5pt}{0pt}
\titlespacing*{\paragraph}{0pc}{1.5ex \@plus2pt \@minus1pt}{0pt}
\RequirePackage{enumitem}
\setlist{noitemsep}
\RequirePackage{alphalph}
\newalphalph{\fnsymbolmult}[mult]{\@fnsymbol}{5}
\newcounter{authorfn}
\setcounter{authorfn}{1}
\newcommand{\authfn}[1]{%
\fnsymbolmult{\numexpr\value{authorfn}+#1}%
}
\def\@correspondence{}
\def\@contribution{}
\def\@presentaddress{}
\def\@deceased{}
\newcommand{\corr}[2]{%
\ifx\empty\@correspondence\else\appto{\@correspondence}{; }{}{}\fi
\appto{\@correspondence}{%
\url{#1}%
\ifx\empty#2\else\space(#2)\fi
}{}{}%
}
\newcommand{\contrib}[2][]{
\appto{\@contribution}{%
\ifx\empty#1\else\textsuperscript{#1}\fi
#2\\
}{}{}
}
\newcommand{\presentadd}[2][]{
\ifx\empty\@presentaddress\else\appto{\@presentaddress}{; }{}{}\fi
\appto{\@presentaddress}{%
\ifx\empty#1\else\textsuperscript{#1}\fi
#2%
}{}{}
}
\newcommand{\deceased}[1]{\def\@deceased{\textsuperscript{#1}Deceased}}
\reversemarginpar
%
% custom title page
%
\renewcommand{\Authfont}{\bfseries\large\raggedright}
\renewcommand{\Affilfont}{\mdseries\large\raggedright}
\renewcommand{\Authands}{, }
\setlength{\affilsep}{16pt}
\renewcommand{\AB@affilsepx}{; \protect\Affilfont}
\newcommand{\themetadata}{%
\textbf{*For correspondence:\\} \@correspondence\par
\ifx\empty\@contribution\else
\bigskip\@contribution\par\fi
\ifx\empty\@presentaddress\else
\bigskip\textbf{Present address: }\@presentaddress\par\fi
\bigskip
\ifx\empty\@deceased\else\@deceased\par\fi
}
\patchcmd{\@author}{\AB@authlist\\[\affilsep]\AB@affillist}{\AB@authlist\\[\affilsep]
\marginpar{\raggedright\footnotesize\themetadata\par}\AB@affillist}{}{}
\renewcommand{\maketitle}{%
\vskip36pt%
{\color{eLifeDarkBlue}\raggedright\bfseries\fontsize{22}{27}\selectfont \@title\par}%
\vskip16pt
{\@author\par}
\vskip8pt
}
\renewenvironment{abstract}{%
\setlength{\parindent}{0pt}\raggedright
\textcolor{eLifeMediumGrey}{\rule{\textwidth}{2pt}}
\vskip16pt
\textcolor{eLifeLightBlue}{\large\bfseries\abstractname\space}
}{%
\vskip8pt
\textcolor{eLifeMediumGrey}{\rule{\textwidth}{2pt}}
\vskip16pt
}
%% Insert a grey line to separate floats from main text
\newcommand{\topfigrule}{\vskip8pt\noindent{\rule{\linewidth}{1pt}}}
\newcommand{\botfigrule}{\noindent{\rule{\linewidth}{1pt}}\vskip8pt}
\RequirePackage{newfloat}
\RequirePackage{wrapfig}
\AtEndEnvironment{wrapfigure}{\vskip8pt\noindent{\rule{\hsize}{1pt}}}
% \RequirePackage[lflt]{floatflt}
% \AtEndEnvironment{floatingfigure}{\vskip8pt\noindent\textcolor{eLifeMediumGrey}{\rule{\hsize}{2pt}}}
\DeclareFloatingEnvironment[placement=btp,name=Box]{featurebox}
\captionsetup[featurebox]{font={Large,bf,color=eLifeDarkBlue}}
% v1.11 2022-06 Updated many caption casing and dashes
\newcounter{featurefigure}
\newcounter{featuretable}
\AtBeginEnvironment{featurebox}{%
\setcounter{featurefigure}{0}%
\setcounter{featuretable}{0}%
\newcommand{\featurefig}[1]{%
\refstepcounter{featurefigure}%
\vskip\smallskipamount%
{\small\textbf{\color{eLifeDarkBlue}Box \arabic{featurebox}---figure \arabic{featurefigure}.}\space #1\par}\medskip}
\newcommand{\featuretable}[1]{%
\refstepcounter{featuretable}%
\vskip\smallskipamount%
{\small\textbf{\color{eLifeDarkBlue}Box \arabic{featurebox}---table \arabic{featuretable}.}\space #1\par}\medskip}
}
\apptocmd{\featurebox}{%
\begin{mdframed}[linewidth=0pt,backgroundcolor=eLifeLightBlue!10,fontcolor=eLifeDarkBlue]
\if@reqslineno\addtolength{\linenumbersep}{1em}\internallinenumbers\fi%
}{}{}
\pretocmd{\endfeaturebox}{\end{mdframed}}{}{}
\newenvironment{fullwidth}{%
\begin{adjustwidth}{-4.5cm}{}%
\hsize=\linewidth%
}{\end{adjustwidth}}
\appto{\appendix}{%
\captionsetup*[figure]{name={Appendix \arabic{appendix}---figure },font={color=eLifeDarkBlue,small},skip=\smallskipamount}%
\captionsetup*[table]{name={Appendix \arabic{appendix}---table },font={color=eLifeDarkBlue,small}}%
}
\newcounter{figsupp}
\setcounter{figsupp}{0}
\newcounter{data}
\setcounter{data}{0}
%% Added videos 2021/03/07
\newcounter{srccode}
\setcounter{srccode}{0}
%% Added fig supp data and source code 2022/06
\newcounter{fsdata}
\setcounter{fsdata}{0}
\newcounter{fssrccode}
\setcounter{fssrccode}{0}
%% Added videos 2018/06/03
\newcounter{video}
\setcounter{video}{0}
\newcounter{videosupp}
\setcounter{videosupp}{0}
\def\supplist{}
\RequirePackage{newfile}
\newoutputstream{suppinfo}
\openoutputfile{\jobname.suppinfo}{suppinfo}
\addtostream{suppinfo}{\protect\setcounter{figure}{0}}
% Added video source data and code 2022/06
\DeclareRobustCommand{\video}[1]{%
\refstepcounter{video}%
\setcounter{data}{0}%
\setcounter{srccode}{0}%
\bigskip%
\noindent{\small\textbf{Video \arabic{video}.} #1\par}%
\bigskip
}
\DeclareRobustCommand{\videodata}[1]{%
\refstepcounter{data}%
\par\noindent{\small\textbf{Video~\thevideo---source data \arabic{data}.} #1}\par
}
\DeclareRobustCommand{\videosrccode}[1]{%
\refstepcounter{srccode}%
\par\noindent{\small\textbf{Video~\thevideo---source code \arabic{srccode}.} #1}\par
}
% Added fig supp source data and code 2022/06
\DeclareRobustCommand{\figsuppsrccode}[1]{%
\protect\refstepcounter{fssrccode}%
\par\small\textbf{\figurename~\thefigure---figure supplement \arabic{figsupp}---source code~\arabic{fssrccode}. } #1\par
}
\DeclareRobustCommand{\figsuppdata}[1]{%
\protect\refstepcounter{fsdata}%
\par\small\textbf{\figurename~\thefigure---figure supplement \arabic{figsupp}---source data~\arabic{fsdata}. } #1\par
}
\AtBeginEnvironment{figure}{%
\setcounter{figsupp}{0}
\setcounter{data}{0}
\setcounter{videosupp}{0}
\setcounter{srccode}{0}
\addtostream{suppinfo}{
\protect\setcounter{figsupp}{0}
\protect\refstepcounter{figure}
}
}
\AtBeginEnvironment{wrapfigure}{%
\setcounter{figsupp}{0}
\setcounter{data}{0}
\setcounter{videosupp}{0}
\setcounter{srccode}{0}
\addtostream{suppinfo}{
\protect\setcounter{figsupp}{0}
\protect\refstepcounter{figure}
}
}
%% Updated 2017/06/30 to allow optional argument
\DeclareRobustCommand{\figsupp}[3][]{%
\refstepcounter{figsupp}%
\addtostream{suppinfo}{%
\protect\refstepcounter{figsupp}
\protect\setcounter{fsdata}{0}
\protect\setcounter{fssrccode}{0}
}%
{%
\ifstrequal{#1}{none}{}{%
\small\textbf{\figurename~\thefigure---figure supplement \arabic{figsupp}.}
\ifstrempty{#1}{%
\renewcommand\figsuppdata[1]{}%
\renewcommand\figsuppsrccode[1]{}%
#2}{%
\renewcommand\figsuppdata[1]{}%
\renewcommand\figsuppsrccode[1]{}%
#1}}}\raggedright\par
\addtostream{suppinfo}{%
\noindent\protect\begin{minipage}{\linewidth}
\protect #3\noexpand\par
\textbf{\figurename~\thefigure---figure supplement \arabic{figsupp}.} #2\noexpand\par
\vskip8pt
\protect\end{minipage}
\vskip16pt
}
}
\DeclareRobustCommand{\figdata}[1]{%
\refstepcounter{data}
{\small\textbf{\figurename~\thefigure---source data \arabic{data}.} #1}\par
}
%% Added 2021/03/07
\DeclareRobustCommand{\figsrccode}[1]{%
\refstepcounter{srccode}
{\small\textbf{\figurename~\thefigure---source code \arabic{srccode}.} #1}\par
}
%% Added 2018/06/03
\DeclareRobustCommand{\videosupp}[1]{%
\refstepcounter{videosupp}
{\small\textbf{\figurename~\thefigure---video \arabic{videosupp}.} #1}\par
}
% Added table source data and code 2022/06
\AtBeginEnvironment{table}{%
\setcounter{data}{0}
\setcounter{srccode}{0}
\setcounter{videosupp}{0}
}
\AtBeginEnvironment{wraptable}{%
\setcounter{data}{0}
\setcounter{srccode}{0}
\setcounter{videosupp}{0}
}
\DeclareRobustCommand{\tabledata}[1]{%
\refstepcounter{data}
{\small\textbf{\tablename~\thetable---source data \arabic{data}.} #1}\par
}
\DeclareRobustCommand{\tablesrccode}[1]{%
\refstepcounter{srccode}
{\small\textbf{\tablename~\thetable---source code \arabic{srccode}.} #1}\par
}
\AtEndDocument{%
\closeoutputstream{suppinfo}
% \pagestyle{empty}
\renewcommand{\footrule}{}
\rfoot{}
\input{\jobname.suppinfo}
}
\newcounter{appendix}
\setcounter{appendix}{0}
\newenvironment{appendixbox}{%
\setcounter{figure}{0}
\setcounter{table}{0}
\refstepcounter{appendix}%
\clearpage%
\patchcmd{\ttlf@section}{eLifeMediumGrey}{eLifeDarkBlue}{}{}
\noindent{\bfseries\Large\color{eLifeMediumGrey}Appendix \arabic{appendix}\par}
\nolinenumbers%
\begin{mdframed}[hidealllines=true,backgroundcolor=eLifeLightBlue!10,fontcolor=eLifeDarkBlue,leftline=true,linecolor=eLifeLightBlue,linewidth=1em]
\if@reqslineno\addtolength{\linenumbersep}{2em}\internallinenumbers\fi
}{%
\end{mdframed}
}
\RequirePackage{hyperref}
\hypersetup{colorlinks=true,allcolors=black,citecolor=eLifeMediumGrey,linkcolor=eLifeMediumGrey,urlcolor=eLifeLightBlue,hypertexnames=false}
\urlstyle{sf}
% Other desired commands
\renewcommand{\equationautorefname}{Eq.}
%% Added autoref support for \figsupp, \figdata, \video, \videosupp, (2021-03-04) \figsrccode
% Added support for figsupp, video source data and code 2022/06
\newcommand{\figsuppautorefname}{figure Supplement}
\newcommand{\dataautorefname}{source data}
\newcommand{\videoautorefname}{Video}
\newcommand{\videosuppautorefname}{video}
\newcommand{\srccodeautorefname}{source code}
\newcommand{\FIGSUPP}[2][]{%
\ifstrequal{#1}{}{}{\autoref{fig:#1}---}\autoref{figsupp:#2}%
}
\newcommand{\FIGDATA}[2][]{%
\ifstrequal{#1}{}{}{\autoref{fig:#1}---}\autoref{figdata:#2}%
}
\newcommand{\TABLEDATA}[2][]{%
\ifstrequal{#1}{}{}{\autoref{tab:#1}---}\autoref{tabdata:#2}%
}
\newcommand{\VIDEODATA}[2][]{%
\ifstrequal{#1}{}{}{\autoref{video:#1}---}\autoref{viddata:#2}%
}
\newcommand{\FIGSRCCODE}[2][]{%
\ifstrequal{#1}{}{}{\autoref{fig:#1}---}\autoref{figsrccode:#2}%
}
\newcommand{\TABLESRCCODE}[2][]{%
\ifstrequal{#1}{}{}{\autoref{tab:#1}---}\autoref{tabsrccode:#2}%
}
\newcommand{\VIDEOSRCCODE}[2][]{%
\ifstrequal{#1}{}{}{\autoref{video:#1}---}\autoref{vidsrccode:#2}%
}
\newcommand{\VIDEOSUPP}[2][]{%
\ifstrequal{#1}{}{}{\autoref{fig:#1}---}\autoref{videosupp:#2}%
}
\newcommand{\FIG}[1]{\autoref{fig:#1}}
\newcommand{\TABLE}[1]{\autoref{tab:#1}}
\newcommand{\VIDEO}[1]{\autoref{video:#1}}
\newcommand{\EQ}[1]{\autoref{eq:#1}}
\newcommand{\BOX}[1]{\autoref{box:#1}}
\let\oldautoref\autoref
\renewcommand{\autoref}[1]{\emph{\textbf{\oldautoref{#1}}}}
\endinput