%% ---------------------------------------------------------------
%% biblatex-chem --- A set of biblatex implementation for
%%   chemistry-related bibliography styles
%% Maintained by Joseph Wright
%% E-mail: joseph.wright@morningstar2.co.uk
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ---------------------------------------------------------------
%% 

\ProvidesFile{chem-rsc.bbx}[2021/02/24 v1.1z biblatex bibliography style]

% Load the standard style to avoid copy-pasting unnecessary material
\RequireBibliographyStyle{numeric-comp}

% New options
\newtoggle{bbx:articletitle}
\newtoggle{bbx:chaptertitle}
\newtoggle{bbx:pageranges}
\DeclareBibliographyOption{articletitle}[true]{%
  \settoggle{bbx:articletitle}{#1}%
}
\DeclareBibliographyOption{chaptertitle}[true]{%
  \settoggle{bbx:chaptertitle}{#1}%
}
\DeclareBibliographyOption{pageranges}[true]{%
  \settoggle{bbx:pageranges}{#1}%
}

\DeclareBibliographyOption{biblabel}{%
  \ifstrequal{#1}{plain}
    {\DeclareFieldFormat{labelnumberwidth}{##1}}
    {%
      \ifstrequal{#1}{brackets}
        {\DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{##1}}}%
        {%
          \ifstrequal{#1}{dot}
            {\DeclareFieldFormat{labelnumberwidth}{##1\adddot\midsentence}}
            {\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{##1}}}%
        }%
    }%
}

% Alter settings that carry through from biblatex
\ExecuteBibliographyOptions
  {
    date         = year  ,
    doi          = false ,
    eprint       = false ,
    giveninits   = true  ,
    isbn         = false ,
    maxnames     = 999   ,
    maxcitenames = 2     ,
    pageranges   = true  ,
    url          = false
  }

% Modify the name format
\@ifpackageloaded{biblatex_legacy}
  {
    \DeclareNameFormat{default}{%
      \usebibmacro{name:first-last}{#1}{#4}{#5}{#7}%
      \usebibmacro{name:andothers}%
    }
  }
  {
    \DeclareNameFormat{default}{%
      \nameparts{#1}%
      \usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefix}
        {\namepartsuffix}%
      \usebibmacro{name:andothers}%
    }
  }

% Custom field formats 
\DeclareFieldFormat[inproceedings]{booktitle}{#1}
\DeclareFieldFormat{doi}{%
  DOI\addcolon\space
  \ifhyperref
    {\href{https://doi.org/#1}{\nolinkurl{#1}}}
    {\nolinkurl{#1}}%
}
\DeclareFieldFormat{journaltitle}{\mkbibitalic{#1}\isdot}
\DeclareFieldFormat{labelnumberwidth}{\mkbibparens{#1}}
\DeclareFieldFormat[patent]{number}{\mkgroupeddigits{#1}}
\DeclareFieldFormat[article]{pages}{%
  \iftoggle{bbx:pageranges}{#1}{\mkfirstpage{#1}}%
}
\DeclareFieldFormat[inbook, incollection, proceedings]{title}{#1}
\DeclareFieldFormat[patent]{type}{%
  \ifbibstring{#1}
    {\mkbibitalic{\bibstring{#1}}}
    {\mkbibitalic{#1}}%
}
\DeclareFieldFormat{url}{\url{#1}}
\DeclareFieldFormat[article]{volume}{\mkbibbold{#1}}

% Simple modifications to punctuation, etc.
\renewcommand*{\begrelateddelim}{\addsemicolon\space}%
\renewcommand*{\intitlepunct}{\addspace}
\renewcommand*{\mkbibnamesuffix}[1]{\addcomma\space#1}
\renewcommand*{\newunitpunct}{\addcomma\addspace}

\DefineBibliographyExtras{english}{%
  \renewrobustcmd*{\finalandcomma}{}%
}

% Bibliography strings
\DefineBibliographyStrings{english}{%
  chapter   = ch\adddot          ,
  edition   = edn\adddot         ,
  patentus  = US Pat\adddot      ,
  phdthesis = Ph.D.\space Thesis
}

% Bibliography macros
\renewbibmacro*{byeditor+others}{%
  \ifnameundef{editor}
    {}
    {%
      \usebibmacro{editorstrg}%
      \setunit{\addspace}%
      \printnames[byeditor]{editor}%
      \clearname{editor}%
      \newunit
    }%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}%
}

\renewbibmacro*{editorstrg}{%
  \printtext[editortype]{\bibstring{editor}}%
}

\renewbibmacro*{event+venue+date}{%
  \printfield{eventtitle}%
  \printfield{venue}%
  \newunit
  \printeventdate
  \newunit
}

\renewbibmacro*{institution+location+date}{%
  \printlist{institution}%
  \newunit
  \printlist{location}%
  \newunit
  \usebibmacro{date}%
  \newunit
}

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \newunit
  \printdate
  \newunit
  \printfield{volume}%
  \newunit
}

\renewbibmacro*{maintitle+booktitle}{%
  \iffieldundef{maintitle}
    {}
    {\usebibmacro{maintitle}%
     \newunit\newblock
    }%
  \usebibmacro{booktitle}%
  \newunit}

\renewbibmacro*{maintitle+title}{%
  \iffieldsequal{maintitle}{title}
    {\clearfield{maintitle}%
     \clearfield{mainsubtitle}%
     \clearfield{maintitleaddon}}
    {\iffieldundef{maintitle}
       {}
       {\usebibmacro{maintitle}%
	\newunit\newblock
	}}%
  \usebibmacro{title}%
  \newunit
}

\renewbibmacro*{note+pages}{%
  \printfield{note}%
  \setunit{\bibpagespunct}%
  \printfield{pages}%
  \iffieldundef{pages}
    {%
      \printfield{doi}%
      \clearfield{doi}%
    }%
    {%
      \iftoggle{bbx:doi}
        {}
        {\clearfield{doi}}%
    }%
}

\renewbibmacro*{publisher+location+date}{%
  \printlist{publisher}%
  \newunit
  \printlist{location}%
  \newunit
  \printfield{edition}%
  \newunit
  \usebibmacro{date}%
  \newunit
  \printfield{volume}%
  \newunit
}

\newbibmacro*{related:translatedas}[1]{%
  \entrydata{#1}{%
    \usebibmacro{journal+issuetitle}%
    \newunit
    \usebibmacro{byeditor+others}%
    \newunit
    \usebibmacro{note+pages}%
    \newunit\newblock
    \iftoggle{bbx:isbn}
      {\printfield{issn}}
      {}%
    \newunit\newblock
    \usebibmacro{doi+eprint+url}%
  }%
}

% Specialised functions for manipulating data, where the biblatex
% kernel does not provide a suitable function.
\newcommand*\mkgroupeddigits[1]{%
  \ifinteger{#1}
    {%
      \bbx@digits@ifmorethanfour{#1}
        {%
          \def\@tempa{}%
          \bbx@digits@separate{}#1\@empty\@empty\@empty
        }
        {#1}%
    }%
    {#1}%
}

\newcommand*\bbx@digits@ifmorethanfour[1]{%
  \bbx@digits@ifmorethanfour@aux#1\@empty\@empty\@empty\@empty
    \@empty\@nil
}

\def\bbx@digits@ifmorethanfour@aux#1#2#3#4#5\@nil{%
 \ifx\@empty#5\@empty
   \expandafter\@secondoftwo
  \else
    \expandafter\@firstoftwo
  \fi
}

\newcommand*\bbx@digits@separate[4]{%
  \ifx\@empty#2\@empty
    \bbx@digits@print#1\relax
  \else
    \ifx\@empty#3\@empty
      \bbx@digits@print\@empty\@empty#1#2\relax
    \else
      \ifx\@empty#4\@empty
        \bbx@digits@print\@empty#1#2#3\relax
      \else
        \bbx@digits@separate@aux{#1#2#3#4}%
      \fi
    \fi
  \fi
}
  
\def\bbx@digits@separate@aux#1\fi\fi\fi{%
  \fi\fi\fi\bbx@digits@separate{#1}%
}

\newcommand*\bbx@digits@print[4]{%
  \ifblank{#1}{}{#1}%
  #2#3%
  \ifx\relax#4\relax\else
    \addnbthinspace
    \expandafter\bbx@digits@print\expandafter#4%
  \fi
}

% New bibliography drivers, using the required order of fields. These
% are mainly copied from standard.bbx then modified.
\DeclareBibliographyDriver{article}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \iftoggle{bbx:articletitle}
    {%
      \usebibmacro{title}%
      \newunit
    }
    {}%
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{bytranslator+others}%
  \newunit\newblock
  \printfield{version}%
  \newunit\newblock
  \usebibmacro{journal+issuetitle}%
  \newunit
  \usebibmacro{byeditor+others}%
  \newunit
  \usebibmacro{note+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{issn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{book}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{maintitle+title}%
  \newunit
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{volumes}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit
  \printfield{pagetotal}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{collection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{maintitle+title}%
  \newunit
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{volumes}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit
  \printfield{pagetotal}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{inbook}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \iftoggle{bbx:chaptertitle}
    {\usebibmacro{title}}
    {}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{bybookauthor}%
  \setunit*{\newunitpunct}\newblock
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{volumes}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \iftoggle{bbx:chaptertitle}
    {\usebibmacro{title}}
    {}%
  \newunit\newblock
  \usebibmacro{in:}%
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{volumes}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{inproceedings}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{event+venue+date}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{volumes}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{manual}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/editor}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{byeditor}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{type}%
  \newunit
  \printfield{version}%
  \newunit
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit
  \usebibmacro{publisher+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit
  \printfield{pagetotal}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{patent}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{type}%
  \newunit
  \printfield{number}%
  \iflistundef{location}
    {}
    {\setunit*{\addspace}%
     \printtext[parens]{%
       \printlist[][-\value{listtotal}]{location}}}%
  \newunit\newblock
  \usebibmacro{byholder}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{date}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

\DeclareBibliographyDriver{thesis}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printfield{type}%
  \newunit
  \usebibmacro{institution+location+date}%
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \newunit
  \printfield{pagetotal}%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}%
}

%% 
%% Copyright (C) 2010-2014,2016-2019,2021 by
%%   Joseph Wright <joseph.wright@morningstar2.co.uk>
%% 
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version.  The latest
%% version of this license is in the file:
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% This work is "maintained" (as per LPPL maintenance status) by
%%   Joseph Wright.
%% 
%% This work consists of the files biblatex-chem.bib,
%%                                 biblatex-chem.tex,
%%                                 biblatex-chem-acs.tex,
%%                                 biblatex-chem-angew.tex,
%%                                 biblatex-chem-biochem.tex,
%%                                 biblatex-chem-rsc.tex,
%%                                 chem-acs.bbx,
%%                                 chem-acs.cbx,
%%                                 chem-angew.bbx,
%%                                 chem-angew.cbx,
%%                                 chem-biochem.bbx,
%%                                 chem-biochem.cbx,
%%                                 chem-rsc.bbx and
%%                                 chem-rsc.cbx,
%%           and the derived files biblatex-chem.pdf,
%%                                 biblatex-chem-acs.pdf,
%%                                 biblatex-chem-angew.pdf,
%%                                 biblatex-chem-biochem.pdf and
%%                                 biblatex-chem-rsc.pdf.
%% 
%%
%% End of file `chem-rsc.bbx'.