% Copyright (c) 2006-2011 Philipp Lehman. % 2012-2016 Philip Kime, Audrey Boruvka, Joseph Wright % % Permission is granted to copy, distribute and/or modify this % software under the terms of the LaTeX Project Public License % (LPPL), version 1.3c. % % This software is provided 'as is', without warranty of any kind, % either expressed or implied, including, but not limited to, the % implied warranties of merchantability and fitness for a % particular purpose. % Set up the version strings here \def\abx@date{2016/05/14} \def\abx@version{3.4} \def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/JW/AB)} \def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/JW/AB)} \def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/JW/AB)} \def\abx@cptid{\abx@date\space v\abx@version\space biblatex compatibility (PK/JW/AB)} % This is not updated by build script as the control file version % does not necessarily change with the package version. % This is used when writing the .bcf \def\blx@bcfversion{3.1} % This is not updated by build script as the bbl version % does not necessarily change with the package version. % This is used when checking the .bbl \def\blx@bblversion{2.7} \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{biblatex} [\abx@date\space v\abx@version\space programmable bibliographies (PK/JW/AB)] %% Dependencies \RequirePackage{iftex} \RequirePackage{pdftexcmds} \RequirePackage{etoolbox} \RequirePackage{keyval} \RequirePackage{kvoptions} \RequirePackage{logreq} \RequirePackage{ifthen} \RequirePackage{url} \RequirePackage{xstring} %\RequirePackage{trace} \@ifpackagelater{etoolbox}{2010/11/29} {} {\PackageError{biblatex} {Outdated 'etoolbox' package} {Upgrade to etoolbox v2.1 (2010/11/29) or later.\MessageBreak I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak This is a fatal error. I'm aborting now.}% \endinput} %% Category codes \def\blx@docatcodes{% \do\=\do\<\do\>\do\-\do\"\do\'\do\`\do\.% \do\,\do\;\do\:\do\!\do\?\do\/} \def\do#1{\catcode\number`#1=\the\catcode`#1\relax} \edef\blx@catcodes{\blx@docatcodes\do\^\do\~\do\&\do\|} \let\do\noexpand \def\blx@saneccodes{% \catcode`\~=\active \let\do\@makeother \blx@docatcodes \let\do\noexpand} \blx@saneccodes \catcode`\&=3 \catcode`\|=3 \catcode`\^=7 \def\blx@nl{^^J} %% Compatibility \AtEndPreamble{% \def\do#1{% \@ifpackageloaded{#1} {\blx@error {Incompatible package '#1'} {The '#1' package and biblatex are incompatible}} {}}% \docsvlist{% amsrefs,apacite,babelbib,backref,bibtopic,bibunits,chapterbib, cite,citeref,drftcite,footbib,inlinebib,jurabib,mcite,mciteplus, mlbib,multibbl,multibib,natbib,opcit,overcite,splitbib,ucs}% \def\blx@langstrings{}% % Set up sortlocale defaults \ifdefstring\blx@sortlocale{auto} {\ifdef\bbl@main@language% babel or polyglossia is loaded {\edef\blx@sortlocale{\bbl@main@language}} {\def\blx@sortlocale{english}}} {}% \@ifpackageloaded{polyglossia} {% This is required for languages which are never explicitly selected % This check because \xpg@loaded is not defined in polyglossia <= v1.42.0 \ifundef\xpg@loaded {\let\xpg@loaded\@empty \let\xpg@vloaded\@empty \PackageWarningNoLine{biblatex}{Upgrade package 'polyglossia' to >v1.42.0 recommended}} {}% \def\do#1{\blx@langsetup{#1}}% \expandafter\docsvlist\expandafter{\xpg@loaded}% \expandafter\docsvlist\expandafter{\xpg@vloaded}% \ifboolexpr{ not test {\iftoggle{blx@autolangbib}} and not test {\iftoggle{blx@autolangcite}}} {\blx@mknoautolang} {\blx@mkautolangpoly}} {\@ifpackageloaded{babel} {% This is required for languages which are never explicitly selected \def\do#1{\blx@langsetup{#1}}% \expandafter\docsvlist\expandafter{\bbl@loaded}% \ifboolexpr{ not test {\iftoggle{blx@autolangbib}} and not test {\iftoggle{blx@autolangcite}}} {\blx@mknoautolang} {\blx@mkautolangbabel}} {\blx@mknoautolang}}% % These already have defaults set to basically do nothing % so if the toggles are true, we need to define again since % mkautolang* redefines \blx@beglang % In turn, \blx@beglang defines \blx@endlang and so \blx@beglangcite and % \blx@endlangcite need redefining inside \blx@beglang after \blx@endlang % has been defined. \iftoggle{blx@autolangbib} {\let\blx@beglangbib\blx@beglang} {}% \iftoggle{blx@autolangcite} {\let\blx@beglangcite\blx@beglang} {}% \csuse{abx@extras@\blx@languagename}% \csuse{abx@strings@\blx@languagename}% \undef\blx@mkautolangbabel \undef\blx@mkautolangpoly \undef\blx@mknoautolang \ifnum\blx@hyperref=\z@ \blx@mknohyperref \else \@ifpackageloaded{hyperref} {\blx@mkhyperref} {\ifnum\blx@hyperref=\@ne \blx@warning@noline{% Missing 'hyperref' package.\MessageBreak Setting hyperref=false}% \fi \blx@mknohyperref}% \fi \providecommand*{\nolinkurl}{\url}% \undef\blx@mkhyperref \undef\blx@mknohyperref \ifundef\TE@hook {\let\TE@hook\@empty \toggletrue{blx@tempa}% \def\do#1{% \patchcmd#1% {\let\isundefined\TE@undef} {\let\isundefined\TE@undef\TE@hook} {\togglefalse{blx@tempa}\listbreak} {}}% \docsvlist{% \ifthenelse,% ifthen \org@ifthenelse,% babel \HyOrg@ifthenelse,% hyperref \NROrg@ifthenelse}% nameref \iftoggle{blx@tempa} {\blx@err@patch{'ifthen' package}} {}} {}% \appto\TE@hook{\blx@TE@hook}% \toggletrue{blx@tempa}% \def\do#1{% \patchcmd#1% {\color@begingroup} {\color@begingroup\toggletrue{blx@footnote}} {\togglefalse{blx@tempa}\listbreak} {}}% \docsvlist{% \@footnotetext,% latex \H@@footnotetext,% hyperref \V@@footnotetext,% fancyvrb \scr@saved@footnotetext,% koma-script 3.x \l@dold@footnotetext,% ledmac \l@doldold@footnotetext,% ledmac \@fntORI}% frenchle \iftoggle{blx@tempa}% ams classes {\patchcmd\@footnotetext {\@makefntext} {\toggletrue{blx@footnote}\@makefntext} {\togglefalse{blx@tempa}} {}} {}% \@ifclassloaded{memoir} {\def\do#1{% \patchcmd#1% {\color@begingroup} {\color@begingroup\toggletrue{blx@footnote}} {} {}}% \docsvlist{% \m@mold@footnotetext,% \@plainfootnotetext,% \@twocolfootnotetext,% \@threecolfootnotetext,% \@parafootnotetext}% \def\do#1{% \patchcmd#1% {\color@begingroup\@makefntext} {\color@begingroup\toggletrue{blx@footnote}\@makefntext} {} {}}% \docsvlist{% \@footnotetext,% patch twice \H@@footnotetext,% patch twice \@plainfootnotetext}} {}% \iftoggle{blx@tempa} {\blx@warning@noline{% Patching footnotes failed.\MessageBreak Footnote detection will not work}} {}% \@ifpackageloaded{endnotes} {\patchcmd\theendnotes {\enoteformat} {\toggletrue{blx@footnote}\enoteformat} {} {\blx@err@patch{'endnotes' package}}} {}% \@ifpackageloaded{bigfoot} {\apptocmd\@makefnstartbox {\toggletrue{blx@footnote}} {} {\blx@err@patch{'bigfoot' package}}} {}% \@ifpackageloaded{showkeys} {\ifdef\SK@ {\AtEveryBibitem{\SK@\SK@@label{\thefield{entrykey}}}% \AtEveryLositem{\SK@\SK@@label{\thefield{entrykey}}}% \ifundef\SK@cite % = 'notcite' disabled {\AtEveryCitekey{\SK@\SK@@ref{\thefield{entrykey}}}} {}} {}} {}% \apptocmd\@floatboxreset {\boolfalse{citetracker}% \boolfalse{pagetracker}} {} {\blx@err@patch{floats}}% \ifdef\TX@endtabularx % tabularx/memoir {\pretocmd\TX@endtabularx {\addtocounter{tabx@nest}{1}}% track nested tabularx environments {} {\blx@err@patch{'tabularx'}}% % no need to conditionalise on top-level tabx as the search/replace % will only match once anyway \patchcmd\TX@endtabularx {\edef\TX@ckpt{\cl@@ckpt}} {\edef\TX@ckpt{\cl@@ckpt\abx@resttrackers}% \abx@savetrackers} {} {\blx@err@patch{'tabularx'}}% \apptocmd\TX@endtabularx {\ifnum\value{tabx@nest}=1% only clear trackers for top-level tabularx \abx@cleartrackers \fi \addtocounter{tabx@nest}{-1}} {} {\blx@err@patch{'tabularx'}}} {}% \@ifpackageloaded{csquotes} {\@ifpackagelater{csquotes}{2009/05/30} {} {\blx@error {Outdated 'csquotes' package} {Upgrade to csquotes v4.4 (2009/05/30) or later.\MessageBreak I found: '\csuse{ver@csquotes.sty}'}}% \BlockquoteDisable{\let\blx@thecheckpunct\@gobble}% \@ifpackagelater{csquotes}{2009/08/27} {\appto\@blockquote@prehook{\abx@savetrackers}% \appto\@blockquote@posthook{\abx@resttrackers\abx@cleartrackers}} {}% \@ifpackagelater{csquotes}{2010/06/09} {} {\newcommand*{\@quotereset}{}\newcount\@quotereset}} {\@ifpackageloaded{babel} {\blx@warning@noline{% 'babel/polyglossia' detected but 'csquotes' missing.\MessageBreak Loading 'csquotes' recommended}} {}% \newcommand*{\@quotelevel}{}% \newcount\@quotelevel \newcommand*{\@quotereset}{}% \newcount\@quotereset \newcommand*{\@setquotesfcodes}{}% \let\@setquotesfcodes\relax \newrobustcmd*{\initoquote}{\@quotelevel\@ne}% \newrobustcmd*{\initiquote}{\@quotelevel\tw@}% \newrobustcmd*{\textooquote}{``}% \newrobustcmd*{\textcoquote}{''}% \newrobustcmd*{\textoiquote}{`\relax}% block ligs \newrobustcmd*{\textciquote}{'\relax}% block ligs \newrobustcmd*{\enquote}{\@ifstar\blx@enquote@ii\blx@enquote}% \def\blx@enquote{% \ifnum\@quotelevel>\z@ \expandafter\blx@enquote@ii \else \expandafter\blx@enquote@i \fi}% \long\def\blx@enquote@i#1{% \begingroup\initoquote \textooquote#1\textcoquote \endgroup}% \long\def\blx@enquote@ii#1{% \begingroup\initiquote \textoiquote#1\textciquote \endgroup}% \appto\blx@setsfcodes{% \sfcode`\`=\z@ \sfcode`\'=\z@}}% \let\do\noexpand} \begingroup \@makeother\# % \relax: gobble newline -> titletoc.sty \AtEndPreamble{% \addtocontents{toc}{% \boolfalse{citerequest}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \boolfalse{backtracker}\relax}% \addtocontents{lof}{% \boolfalse{citerequest}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \boolfalse{backtracker}\relax}% \addtocontents{lot}{% \boolfalse{citerequest}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \boolfalse{backtracker}\relax}% \patchcmd\addtocontents {\string\@writefile} {\string\@writefile{#1}{\defcounter{refsection}{\the\c@refsection}\relax}% \string\@writefile} {} {\blx@err@patch{\string\addtocontents}}} \endgroup % trick hyperref into believing we're natbib \let\NAT@parse\@empty % trick showkeys into believing we're havard \let\HAR@checkdef\@empty %% Allocation \providecommand{\@gobblefive}[5]{} % Counter to track nested tabularx environemnts so we don't % try to patch the commands more than once below as this undefs some % macros and an error is thrown \newcounter{tabx@nest} \setcounter{tabx@nest}{0} \newcounter{listtotal} \def\thelisttotal{\the\c@listtotal} \newcounter{listcount} \def\thelistcount{\the\c@listcount} \newcounter{liststart} \def\theliststart{\the\c@liststart} \newcounter{liststop} \def\theliststop{\the\c@liststop} \newcounter{citecount} \def\thecitecount{\the\c@citecount} \newcounter{citetotal} \def\thecitetotal{\the\c@citetotal} \newcounter{multicitecount} \def\themulticitecount{\the\c@multicitecount} \newcounter{multicitetotal} \def\themulticitetotal{\the\c@multicitetotal} \newcounter{instcount} \def\theinstcount{\the\c@instcount} \newcounter{maxnames} \def\themaxnames{\the\c@maxnames} \newcounter{minnames} \def\theminnames{\the\c@minnames} \newcounter{maxitems} \def\themaxitems{\the\c@maxitems} \newcounter{minitems} \def\theminitems{\the\c@minitems} \newcounter{citecounter} \def\thecitecount{\the\c@citecounter} \newcounter{savedcitecounter} \def\thecitecount{\the\c@savedcitecounter} \newcounter{uniquelist} \def\theuniquelist{\the\c@uniquelist} \newcounter{uniquename} \def\theuniquename{\the\c@uniquename} \newcounter{refsection} \def\therefsection{\the\c@refsection} \newcounter{refsegment} \def\therefsegment{\the\c@refsegment} \newcounter{maxextratitle} \def\themaxextratitle{\the\c@maxextratitle} \newcounter{maxextratitleyear} \def\themaxextratitleyear{\the\c@maxextratitleyear} \newcounter{maxextrayear} \def\themaxextrayear{\the\c@maxextrayear} \newcounter{maxextraalpha} \def\themaxextraalpha{\the\c@maxextraalpha} \newcounter{abbrvpenalty} \def\theabbrvpenalty{\the\c@abbrvpenalty} \newcounter{highnamepenalty} \def\thehighnamepenalty{\the\c@highnamepenalty} \newcounter{lownamepenalty} \def\thelownamepenalty{\the\c@lownamepenalty} \newcounter{maxparens} \def\themaxparens{\the\c@maxparens} \newcounter{parenlevel} \def\theparenlevel{\the\c@parenlevel} \newcount\blx@tempcnta \newcount\blx@tempcntb \newcount\blx@tempcntc \newcount\blx@maxsection \expandafter\newcount\csname blx@maxsegment@0\endcsname \newcount\blx@notetype \newcount\blx@parenlevel@text \newcount\blx@parenlevel@foot \expandafter\newcount\csname blx@sectionciteorder@0\endcsname \def\blx@uniquename{0} \def\blx@uniquelist{0} \def\blx@maxbibnames{0} \def\blx@minbibnames{0} \def\blx@maxcitenames{0} \def\blx@mincitenames{0} \def\blx@maxbibnames@type{\blx@maxbibnames} \def\blx@minbibnames@type{\blx@minbibnames} \def\blx@maxcitenames@type{\blx@maxcitenames} \def\blx@mincitenames@type{\blx@mincitenames} \def\blx@maxalphanames{0} \def\blx@minalphanames{0} \def\blx@maxitems{0} \def\blx@minitems{0} \def\blx@maxitems@type{\blx@maxitems} \def\blx@minitems@type{\blx@minitems} \newlength{\labelnumberwidth} \newlength{\labelalphawidth} \newlength{\biblabelsep} \ifdef\bibitemsep % memoir {} {\newlength{\bibitemsep}} \newlength{\bibnamesep} \newlength{\bibinitsep} \newlength{\bibparsep} \newlength{\bibhang} \newbool{refcontextdefaults} \booltrue{refcontextdefaults}% \newbool{sourcemap} \newbool{citetracker} \newbool{pagetracker} \newbool{backtracker} \newbool{citerequest} \booltrue{citerequest} \newbool{sortcites} \newtoggle{blx@bbldone} \newtoggle{blx@tempa} \newtoggle{blx@tempb} \newtoggle{blx@runltx} \newtoggle{blx@runbiber} \newtoggle{blx@block} \newtoggle{blx@unit} \newtoggle{blx@skipentry} \newtoggle{blx@insert} \newtoggle{blx@lastins} \newtoggle{blx@keepunit} \newtoggle{blx@bibtex} \newtoggle{blx@debug} \newtoggle{blx@sortcase} \newtoggle{blx@sortupper} \newtoggle{blx@autolangbib} \newtoggle{blx@autolangcite} \newtoggle{blx@clearlang} \newtoggle{blx@defernumbers} \newtoggle{blx@omitnumbers} \newtoggle{blx@footnote} \newtoggle{blx@labelalpha} \newtoggle{blx@labelnumber} \newtoggle{blx@labeltitle} \newtoggle{blx@labeltitleyear} \newtoggle{blx@labeldate} \newtoggle{blx@natbib} \newtoggle{blx@mcite} \newtoggle{blx@loadfiles} \newtoggle{blx@singletitle} \newtoggle{blx@crossrefsource} \newtoggle{blx@xrefsource} \newtoggle{blx@uniqueprimaryauthor} \newtoggle{blx@uniquetitle} \newtoggle{blx@terseinits} \newtoggle{blx@giveninits} \newtoggle{blx@sortgiveninits} \newtoggle{blx@useprefix} \newtoggle{blx@addset} \newtoggle{blx@setonly} \newtoggle{blx@dataonly} \newtoggle{blx@skipbib} \newtoggle{blx@skipbiblist} \newtoggle{blx@skiplab} \newtoggle{blx@citation} \newtoggle{blx@bibliography} \newtoggle{blx@citeindex} \newtoggle{blx@bibindex} \newtoggle{blx@localnumber} \newtoggle{blx@refcontext} % Nice command from etextools which causes too many problems if you load % the whole package % Don't use it on arbitrary user input as it dies on non-expandable arguments \newcommand*{\blx@xifempty}[1]{\blx@xifstrcmp{#1}{}} % {string1}{string2}{true}{false} \newcommand*{\blx@xifstrcmp}[2]{\csname @% \ifnum\pdf@strcmp{#1}{#2}=0 first\else second\fi oftwo\endcsname} % Special fields which need resolution using the information provided by biber \listadd\abx@rfields{labeltitle} \def\abx@dorfields{% \dolistcsloop{abx@rfields}% } % Just in case we ever have non-name lists to instantiate %\listadd\abx@rlists{} % \def\abx@dorlists{% % \dolistcsloop{abx@rlists}% % } \listadd\abx@rnames{labelname} \def\abx@dornames{% \dolistcsloop{abx@rnames}% } % Used to track default refcontexts for citations \cslet{blx@defaultrefcontexts@0}\@empty \listadd\blx@allrefsections{0} % Used to track sorting name key specifications \global\let\blx@sortingnamekeyspecs\@empty % Used to track transliterations \global\let\blx@translits\@empty % Initialise some lists which track changing citations/sortschemes % etc. between runs \global\let\blx@cites\@empty \global\let\blx@refcontexts\@empty \global\let\blx@lastrefcontexts\@empty \global\let\blx@sortschemes\@empty \global\let\blx@lastsortschemes\@empty \global\let\blx@biblists\@empty \global\let\blx@lastbiblists\@empty \global\let\blx@lastcites\@empty \global\let\blx@localnumaux\@empty \newread\blx@bcfin \newwrite\blx@bcfout \def\blx@onlypreamble#1{% \gappto\blx@dopreamblecmds{\do#1}} \def\blx@dopreamblecmds{% \do\blx@dopreamblecmds \do\blx@onlypreamble} % Deprecations \newrobustcmd*{\DeprecateField}[2]{% \csdef{abx@field@#1}{% \ifcsundef{abx@field@legacy@warning@#1}{\blx@warning@noline{Field '#1' deprecated. #2}}{}% \global\csdef{abx@field@legacy@warning@#1}{}}}% \newrobustcmd*{\DeprecateList}[2]{% \csdef{abx@list@#1}{% \ifcsundef{abx@list@legacy@warning@#1}{\blx@warning@noline{List '#1' deprecated. #2}}{}% \global\csdef{abx@list@legacy@warning@#1}{}}}% \newrobustcmd*{\DeprecateName}[2]{% \csdef{abx@name@#1}{% \ifcsundef{abx@name@legacy@warning@#1}{\blx@warning@noline{Name '#1' deprecated. #2}}{}% \global\csdef{abx@name@legacy@warning@#1}{}}}% \DeprecateField{prefixnumber}{Please use 'labelprefix' instead} % Biblatex v3.4 %% Initialization \def\blx@blxinit{% \let\blx@blxinit\relax \blx@initunit} \def\blx@secinit{% \csgdef{blx@sections@\the\c@refsection}{true}% just to say we have a section for tests later \ifcsundef{blx@bsee@\the\c@refsection} {\global\cslet{blx@bsee@\the\c@refsection}\@empty} {}% \ifcsundef{blx@fsee@\the\c@refsection} {\global\cslet{blx@fsee@\the\c@refsection}\@empty} {}% \blx@ibidreset@force \blx@idemreset@force \blx@opcitreset@force \blx@loccitreset@force % List to track all aliases in a section. We need to output all aliases % to the .bcf every time so that they are visible to biber % Reset only if undefined \ifcsundef{blx@keyaliases@\the\c@refsection} {\global\cslet{blx@keyaliases@\the\c@refsection}\@empty} {}% \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment} {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty} {}} %% Auxiliary commands \protected\def\blx@safe@actives{% \let\blx@if@safe@actives\if@safe@actives \let\if@safe@actives\iftrue} \protected\def\blx@rest@actives{% \let\if@safe@actives\blx@if@safe@actives} \protected\def\blx@regimc#1{% \xappto\blx@blxinit{% \let\noexpand#1\expandafter\noexpand\csname blx@imc@\expandafter\@gobble\string#1\endcsname}} \protected\def\blx@regimcs#1{\blx@regimcs@i#1&} \def\blx@regimcs@i#1{% \ifx#1&\else \blx@regimc#1% \expandafter\blx@regimcs@i \fi} % {} => \do{}\do{}... \def\blx@imc@docsvfield#1{% \blx@imc@iffieldundef{#1} {} {\expandafter\expandafter\expandafter\docsvlist \expandafter\expandafter\expandafter{% \csname abx@field@#1\endcsname}}} % {}{} => {}{}... \def\blx@imc@forcsvfield#1#2{% \blx@imc@iffieldundef{#2} {} {\expandafter\expandafter\expandafter\blx@imc@forcsvfield@i \expandafter\expandafter\expandafter{% \csname abx@field@#2\endcsname}{#1}}} \def\blx@imc@forcsvfield@i#1#2{\forcsvlist{#2}{#1}} \blx@regimcs{\docsvfield \forcsvfield} % {|} \protected\long\def\blx@listloop#1{% \expandafter\blx@listloop@i#1|&} \long\def\blx@listloop@i#1|{% \ifblank{#1} {\blx@break} {\blx@do{#1}\blx@listloop@i}} \long\def\blx@break#1&{% \blx@done \undef\blx@do \undef\blx@done} % {}{} => matches in \protected\def\blx@filter#1#2{% \def\do##1{% \ifinlistcs{##1}{#2} {\listadd#1{##1}} {}}% \blx@runfilter#1} % {}{} => matches in % Slightly odd use of filtering to do citation sorting. % Same as blx@filter but it keeps \tempcnta in step with the % resulting number of things in the filtered list. This is % because \tempcnta is used to set citetotal - this use % of filtering for cite sorting has the side-effect of stripping % duplicates like \cite{foo,foo} but we need then to keep citetotal % in sync. \protected\def\blx@filtercitesort#1#2{% \blx@tempcnta\z@ \def\do##1{% \ifinlistcs{##1}{#2} {\listadd#1{##1}% \advance\blx@tempcnta\@ne} {}}% \blx@runfilter#1} % {}{} => neg. matches in \protected\def\blx@notfilter#1#2{% \def\do##1{% \ifinlistcs{##1}{#2} {} {\listadd#1{##1}}}% \blx@runfilter#1} \def\blx@runfilter#1{% \begingroup\edef#1{\endgroup \unexpanded{\let#1\@empty\dolistloop}{#1}}% #1\let\do\noexpand} % {}{} => {} \protected\def\blx@xsanitizeafter#1#2{% \begingroup \abx@hook@xsanitize \def\blx@tempa{\endgroup#1}% \edef\blx@tempb{#2}% \expandafter\blx@tempa \expandafter{\detokenize\expandafter{\blx@tempb}}} \def\abx@hook@xsanitize{% \blx@safe@actives \let\protect\string} % {}{} => {} \begingroup \catcode`\<=\active \catcode`\>=\active \catcode`\&=\active \catcode`\"=\active \catcode`\'=\active \protected\gdef\blx@xmlsanitizeafter#1#2{% \begingroup \abx@hook@xsanitize \def\blx@tempa{\endgroup#1}% \edef\blx@tempb{#2}% \let\do\@makeother \dospecials \catcode`\<=\active \catcode`\>=\active \catcode`\&=\active \catcode`\"=\active \catcode`\'=\active \edef<{\string<\string;}% \edef>{\string>\string;}% \edef&{\string&\string;}% \edef"{\string"\string;}% \edef'{\string&apos\string;}% \endlinechar\m@ne \everyeof{\noexpand}% \edef\blx@tempb{\scantokens\expandafter{\blx@tempb}}% \expandafter\blx@tempa \expandafter{\detokenize\expandafter{\blx@tempb}}} \endgroup % {}{}{}{}{}{} \protected\long\def\blx@inputonce#1#2#3#4#5#6{% \ifcsundef{blx@file@#1} {\blx@info@noline{Trying to load #2..}% \IfFileExists{#1} {\blx@info@noline{... file '#1' found}% \listxadd\blx@list@req@stat{#1}% #3\@@input\@filef@und#4#5} {\blx@info@noline{... file '#1' not found}#6}% \global\csdef{blx@file@#1}{}% \@addtofilelist{#1}} {#5}} % {}{}{} \protected\def\blx@auxwrite#1#2#3{% \if@filesw \begingroup \blx@safe@actives \let\protect\string #2% \immediate\write#1{#3}% \endgroup \fi} % {}{}{}{} \def\blx@ifsigned#1#2{% \begingroup \let\blx@tempa\@firstoftwo \edef\blx@tempb{\csuse{blx@sig@#2}}% \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}% \openin\blx@bcfin #1.#2\relax \ifeof\blx@bcfin \else \endlinechar\m@ne \readline\blx@bcfin to \blx@tempc \ifeof\blx@bcfin \else \ifx\blx@tempb\blx@tempc \readline\blx@bcfin to \blx@tempc \edef\blx@tempb{\csuse{blx@ver@#2}}% \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}% \ifx\blx@tempb\blx@tempc \else \blx@warning@noline{% File '#1.#2' is wrong format version - expected \blx@bblversion} \fi \else \blx@error {File '#1.#2' not created by biblatex} {This file was apparently not created by biblatex. Rename it or\MessageBreak move it to a location were TeX will not find it. If this error\MessageBreak persists, consider redefining \string\blxauxsuffix.% See the biblatex\MessageBreak manual for details}% \let\blx@tempa\@secondoftwo \fi \fi \fi \closein\blx@bcfin \expandafter\endgroup\blx@tempa} \edef\blx@sig@bbl{\@percentchar\space $ biblatex auxiliary file $} \edef\blx@ver@bbl{\@percentchar\space $ biblatex bbl format version \blx@bblversion\space $} \edef\blx@sig@bcf{\detokenize{}} \edef\blx@ver@bcf{% \detokenize{}} % {}{} \newrobustcmd*{\lbx@ifutfinput}{\ifboolexpr{% test {\ifdefstring\inputencodingname{utf8}} or test {\ifdefstring\inputencodingname{utf8x}} or test {\ifdefstring\inputencodingname{lutf8}} or ( test {\ifundef\inputencodingname} and ( not test {\ifundef\XeTeXrevision} or not test {\ifundef\luatexversion} ) ) }} %% User feedback \protected\def\blx@error#1#2{% \begingroup \blx@safe@actives \PackageError{biblatex}{#1}{#2.}% \endgroup} \protected\def\blx@warning@noline#1{% \begingroup \blx@safe@actives \PackageWarningNoLine{biblatex}{#1}% \endgroup} \let\blx@warning\blx@warning@noline \AtEndOfPackage{ \protected\def\blx@warning#1{% \begingroup \blx@safe@actives \PackageWarning{biblatex}{#1}% \endgroup}} \protected\def\blx@warning@entry#1{% \ifdef\abx@field@entrykey {\blx@warning{#1\MessageBreak at entry '\abx@field@entrykey'}} {\blx@warning{#1}}} \protected\def\blx@info@noline#1{% \begingroup \blx@safe@actives \PackageInfo{biblatex}{#1\@gobble}% \endgroup} \let\blx@info\blx@info@noline \AtEndOfPackage{ \protected\def\blx@info#1{% \begingroup \blx@safe@actives \PackageInfo{biblatex}{#1}% \endgroup}} \let\blx@noline\@gobble \AtEndOfPackage{\let\blx@noline\@empty} \def\blx@imc@BibliographyWarning{\blx@warning@entry} \blx@regimc\BibliographyWarning \protected\def\abx@missing#1{% \mbox{\reset@font\bfseries#1}} \def\blx@err@patch#1{% \blx@error {Patching #1 failed} {This is an internal issue typically caused by a conflict\MessageBreak between biblatex and some other package. Modifying\MessageBreak the package loading order may fix the problem}} \def\blx@err@nolang#1{% \blx@error {Language '#1' not found} {The localization module for '#1' could not be found}} \def\blx@err@invarg#1#2{% \blx@error {Argument '#1' invalid} {\ifblank{#2} {The argument you have supplied is invalid.\MessageBreak See the biblatex manual for details} {#2}}} \def\blx@err@invopt#1#2{% \blx@error {Option '#1' invalid} {\ifblank{#2} {The option you have supplied is invalid.\MessageBreak See the biblatex manual for valid option keys and possible values} {#2}}} \def\blx@err@confopt#1#2{% \blx@error {Conflicting options\ifblank{#1}{}{ (#1)}} {\ifblank{#2} {The option you have supplied conflicts with another one.\MessageBreak See the biblatex manual for valid option keys and possible values} {#2}}} \def\blx@err@optdef#1{% \blx@error {Conflicting options} {The option '#1' is already defined}} \def\blx@err@nodocdiv#1{% \blx@error {\@backslashchar#1 not provided by class} {The document class does not seems to support #1s}} \def\blx@err@nosec#1{% \blx@error {Section '#1' not found} {The reference section '#1' could not be found}} \def\blx@err@nosort#1{% \blx@error {Sorting scheme '#1' not found} {The sorting scheme '#1' does not seem to have been defined anywhere}} \def\blx@err@secfirst{% \blx@error {'section' not first filter} {When passing multiple filter options, the 'section' filter must be given first}} \protected\def\blx@err@nestcite{% \blx@error {Nested citation command} {Citation commands may not be nested}} \def\blx@err@nestenv#1{% \blx@error {Nested '#1' environment} {This environment may not be nested}} \protected\def\blx@err@citecmd#1{% \begingroup \escapechar\m@ne \blx@error {Command '\@backslashchar\string#1' undefined} {The citation command '\@backslashchar\string#1' has not been defined\MessageBreak by the selected citation style}% \endgroup} \def\blx@err@endnote#1{% \blx@error {Missing or incomplete endnote support} {There does not seem to be endnote support available\MessageBreak or the available support is incomplete.\MessageBreak If you continue, I will fall back to '\string#1'}% #1} \def\blx@err@matchparen#1{% \blx@error {Unbalanced parentheses or brackets} {\iftoggle{blx@footnote}{#1 in foot or endnote}{#1}.\MessageBreak This error is triggered if \string\bibopenparen\space and \string\bibcloseparen\MessageBreak or \string\bibopenbracket\space and \string\bibclosebracket\space are unbalanced\MessageBreak or mismatched}} \def\blx@err@nestparen#1{% \blx@error {Too deeply nested parentheses or brackets} {#1 nested too deeply% \iftoggle{blx@footnote}{\space in foot or endnote}{}.\MessageBreak This error may also be triggered if \string\mkbibparens\MessageBreak or \string\mkbibbrackets\space are nested too deeply}} \def\blx@err@filter{% \blx@error {Invalid filter expression} {The filter expression you have supplied is invalid.\MessageBreak See the biblatex manual for details}} \def\blx@warn@nohyph#1{% \blx@warning{No hyphenation patterns for '#1'}} \protected\def\blx@warn@citecmd#1#2{% \blx@warning{% '\string#1' not defined by citation style.\MessageBreak Falling back to '\string#2'}% #2} \protected\def\blx@warn@nostring#1{% \blx@warning@entry{Bibliography string '#1' undefined}% \abx@missing{#1}} \def\blx@warn@conflopt#1{% \blx@warning{Conflicting options.\MessageBreak#1}} \def\blx@warn@badoptdt#1{% \blx@warning{Invalid option datatype '#1'.\MessageBreak Defaulting to 'boolean'}} \def\blx@warn@depropt#1{% \blx@warning{Deprecated option.\MessageBreak Ignoring '#1'}} \def\blx@warn@bibempty{% \@latex@warning{Empty bibliography}} \def\blx@warn@biblistempty#1{% \@latex@warning{Empty biblist '#1'}} \def\blx@inf@refsec{% \blx@info{Reference section=\the\c@refsection}}% \def\blx@warn@delimdeclare#1#2{% \blx@warning{Delimiter '#1' in context '#2' already defined, overwriting}} \def\blx@warn@delimuse#1#2{% \blx@warning{Delimiter '#1' in context '#2' undefined}} \def\blx@inf@refseg{% \ifnum\c@refsection=\z@ \blx@info{Reference segment=\the\c@refsegment}% \else \blx@info{% Reference section/segment=% \the\c@refsection/\the\c@refsegment}% \fi} \def\blx@inf@creset{% \blx@info{Resetting trackers}}% \def\blx@msg@cundef#1{% Citation '#1' undefined} \def\blx@msg@cundefon#1{% Citation '#1' on page \the\c@page\space undefined} % Dummy as backend is biber by default. Some style may still use this to % check though. \newrobustcmd*{\RequireBiber}[1][2]{} % \blx@list@active active aux files (basename) % [internal list] % \blx@list@inactive inactive aux files (basename) % [internal list] % \blx@list@bibfiles@ aux file -> bib file mapping (refsections) % aux file (basename) -> bib files (full) % [internal list] \let\blx@list@active\@empty \let\blx@list@inactive\@empty \listeadd\blx@list@inactive{\jobname} \protected\def\blx@regbibfiles#1#2{% \forlistloop{\blx@regbibfile{#1}}{#2}} \def\blx@regbibfile#1#2{% \ifcsundef{blx@res@loca@#2} {\blx@regbibfile@i{#1}{#2}} {\ifcsstring{blx@res@loca@#2}{local} {\blx@regbibfile@i{#1}{#2}} {}}} \def\blx@regbibfile@i#1#2{% \ifinlistcs{#2}{blx@list@bibfiles@#1} {} {\listcsxadd{blx@list@bibfiles@#1}{#2}}} \def\blx@check@logreq{% \begingroup \ltxrequest{biblatex}{{\iftoggle{blx@runltx}{1}{0}}}{% \provides[type=dynamic]{ \file{\jobname.bcf} } \requires[type=dynamic]{ \file{\jobname.bbl} } \ifdef\blx@list@req@edit {\requires[type=editable]{ \forlistloop\file\blx@list@req@edit }} {} \ifdef\blx@list@req@stat {\requires[type=static]{ \forlistloop\file\blx@list@req@stat }} {} }% \logrequest[package=biblatex,priority=5,active={{\iftoggle{blx@runbiber}{1}{0}}}]{% \generic{biber} \cmdline{ \binary{biber} \infile{\jobname} } \input{ \file{\jobname.bcf} } \output{ \file{\jobname.bbl} } \provides[type=dynamic]{ \file{\jobname.bbl} } \requires[type=dynamic]{ \file{\jobname.bcf} } \ifcsdef{blx@list@bibfiles@\jobname} {\requires[type=editable]{ \def\do{\file} \dolistcsloop{blx@list@bibfiles@\jobname} }} {} }% \endgroup} \def\blx@logreq@active#1{% \ifblank{#1} {} {\@latex@warning{#1}}% \blx@rerun@latex \blx@rerun@biber} \def\blx@rerun@latex{% \G@refundefinedtrue \global\toggletrue{blx@runltx}% \global\let\blx@rerun@latex\relax} \def\blx@rerun@biber{% \global\toggletrue{blx@runbiber}% \global\let\blx@rerun@biber\relax} \let\blx@checksum@old\@empty \let\blx@checksum@new\@empty \let\blx@pagesum@old\@empty \let\blx@pagesum@new\@empty \def\blx@checksum#1#2#3{% \begingroup \blx@tempcnta\the\numexpr0#2*0#3\relax \blx@tempcntb\blx@tempcnta \divide\blx@tempcntb10 \multiply\blx@tempcntb10 \advance\blx@tempcnta-\blx@tempcntb \xdef#1{#1\the\blx@tempcnta}% \endgroup} \def\blx@addchecksum{\blx@checksum\blx@checksum@old} \def\blx@addpagesum{\blx@checksum\blx@pagesum@old} \AtEndDocument{% \def\blx@addchecksum{\blx@checksum\blx@checksum@new}% \def\blx@addpagesum{\blx@checksum\blx@pagesum@new}} \protected\def\blx@check@rerun{% \begingroup \blx@tempcnta\z@ \iftoggle{blx@runltx} {\blx@tempcnta\@ne} {\ifx\blx@checksum@old\blx@checksum@new \ifx\blx@pagesum@old\blx@pagesum@new \else \blx@tempcnta\@ne \fi \else \blx@tempcnta\@ne \fi}% \iftoggle{blx@runbiber} {\advance\blx@tempcnta\tw@} {}% \ifcase\blx@tempcnta \or \blx@rerun@latex \blx@warning@noline{% Please rerun LaTeX% \ifx\blx@pagesum@old\blx@pagesum@new\else .\MessageBreak Page breaks have changed% \fi}% \else \blx@rerun@latex \blx@warn@auxlist \fi \endgroup} \def\blx@warn@auxlist{% \begingroup \edef\blx@tempa{% Please (re)run Biber on the file:\MessageBreak \jobname}% \blx@warning@noline{% \blx@tempa\MessageBreak and rerun LaTeX afterwards}% \endgroup} \AfterEndDocument{% \blx@check@rerun \blx@check@logreq} %% Punctuation and capitalization % 1001 prefix sep for names (e.g. d'Argent ... \printnames only) % 1002 abbreviation period (dot) % 1003/1250 comma % 1004/1500 semicolon % 1005/2000 colon % 1006/3000 period % 1007/3001 exclamation mark % 1008/3002 question mark % 1009 suppress punctuation % 1010 new paragaph \mathchardef\blx@sf@prefixchar=1001% e.g. apostrophe or equivalent for prefix handling \mathchardef\blx@sf@dot=1002 \mathchardef\blx@sf@comma=1003 \mathchardef\blx@sf@semicolon=1004 \mathchardef\blx@sf@colon=1005 \mathchardef\blx@sf@period=1006 \mathchardef\blx@sf@exclam=1007 \mathchardef\blx@sf@question=1008 \mathchardef\blx@sf@nopunct=1009 \mathchardef\blx@sf@par=1010 \mathchardef\blx@sf@threshold@low=1002 \mathchardef\blx@sf@threshold@high=1009 \csdef{blx@sf@1250}{\the\blx@sf@comma} \csdef{blx@sf@1500}{\the\blx@sf@semicolon} \csdef{blx@sf@2000}{\the\blx@sf@colon} \csdef{blx@sf@3000}{\the\blx@sf@period} \csdef{blx@sf@3001}{\the\blx@sf@exclam} \csdef{blx@sf@3002}{\the\blx@sf@question} \csdef{blx@pm@,}{comma} \csdef{blx@pm@;}{semicolon} \csdef{blx@pm@:}{colon} \csdef{blx@pm@.}{period} \csdef{blx@pm@!}{exclam} \csdef{blx@pm@?}{question} \def\blx@setsfcodes{% \let\blx@setsfcodes\relax \let\frenchspacing\blx@setfrcodes \let\nonfrenchspacing\blx@setencodes \ifnum\sfcode`\.>2000 \blx@setencodes \else \blx@setfrcodes \fi \@setquotesfcodes \sfcode`\(=\z@ \sfcode`\)=\z@ \sfcode`\[=\z@ \sfcode`\]=\z@ \sfcode`\<=\z@ \sfcode`\>=\z@} \def\blx@setfrcodes{% \ifnum\sfcode`\A=\@m \else \blx@setazcodes \fi \sfcode`\,=\blx@sf@comma \sfcode`\;=\blx@sf@semicolon \sfcode`\:=\blx@sf@colon \sfcode`\.=\blx@sf@period \sfcode`\!=\blx@sf@exclam \sfcode`\?=\blx@sf@question } \def\blx@setencodes{% \sfcode`\,=1250 \sfcode`\;=1500 \sfcode`\:=2000 \sfcode`\.=3000 \sfcode`\!=3001 \sfcode`\?=3002 } % Defining characters that count as prefices in names like d'Argent % Code from moewe \let\blx@prefchars\@empty \def\blx@defprefchars@loop#1{% \ifx#1\relax \else \listadd{\blx@prefchars}{#1}% \expandafter\blx@defprefchars@loop \fi} \def\blx@defprefchars#1{% \expandafter\blx@defprefchars@loop\detokenize{#1}\relax} \newrobustcmd*{\DeclarePrefChars}{% \@ifstar {\blx@defprefchars} {\let\blx@prefchars\@empty \blx@defprefchars}} \DeclarePrefChars{'} \protected\def\blx@imc@ifprefchar{% \ifhmode \begingroup \ifnum\spacefactor=\blx@sf@prefixchar \endgroup \expandafter\expandafter \expandafter\@firstoftwo \else \endgroup \expandafter\expandafter \expandafter\@secondoftwo \fi \else \expandafter\@secondoftwo \fi} \blx@regimcs{\ifprefchar} \def\blx@namecodes{% \ifnum\sfcode`\A=\@m \else \blx@setazcodes \fi \def\do##1{\sfcode`##1=\blx@sf@prefixchar}% \dolistloop\blx@prefchars } \begingroup \let\blx@setazcodes\@empty \def\blx@tempa{% \xdef\blx@setazcodes{% \blx@setazcodes \sfcode\the\blx@tempcnta=\@m} \ifnum\blx@tempcnta<\blx@tempcntb \advance\blx@tempcnta\@ne \expandafter\blx@tempa \fi} \blx@tempcnta`\A \blx@tempcntb`\Z \blx@tempa \ifnum\inputlineno=\m@ne\else \blx@tempcnta"80 \blx@tempcntb"9C \blx@tempa \blx@tempcnta"C0 \blx@tempcntb"DF \blx@tempa \fi \ifx\Umathcode\undefined \else \openin\blx@bcfin=UnicodeData.txt % \ifeof\blx@bcfin \else \let\blx@setazcodes\@empty \def\Lu{Lu} \def\storedpar{\par} \def\blx@tempa#1;#2;#3;#4\relax{% \def\temp{#3}% \ifx\temp\Lu \xdef\blx@setazcodes{% \blx@setazcodes \sfcode"#1=\@m } \fi } \loop\unless\ifeof\blx@bcfin \read\blx@bcfin to \blx@tempb \unless\ifx\blx@tempb\storedpar \expandafter\blx@tempa\blx@tempb\relax \fi \repeat \fi \closein\blx@bcfin \fi \endgroup \def\blx@spacefactor{% \ifhmode \ifcsundef{blx@sf@\the\spacefactor} {\the\spacefactor} {\csname blx@sf@\the\spacefactor\endcsname}% \else \the\blx@sf@par \fi} \protected\def\blx@leavevmode{% \ifhmode \else \leavevmode\spacefactor\blx@sf@par \fi} \protected\def\blx@leavevmode@cite{% \ifhmode \ifnum\spacefactor=\blx@sf@par \else \spacefactor\@m \fi \else \leavevmode \fi} \protected\def\blx@imc@setpunctfont#1{% \blx@ifpuncthook {\gdef\abx@puncthook{% \ifdim\lastkern>\z@\unkern\fi \blx@imc@resetpunctfont#1}} {}} \protected\def\blx@imc@resetpunctfont{% \blx@ifpuncthook {\global\let\abx@puncthook\@firstofone} {}} \protected\def\blx@setpostpunct#1{% \blx@ifuspunct {\global\let\blx@postpunct\blx@dopostpunct \ifdef\blx@thepostpunct {\gappto\blx@thepostpunct{#1}} {\gdef\blx@thepostpunct{#1}}} {}} \def\blx@dopostpunct{% \blx@thepostpunct \global\let\blx@postpunct\@empty \global\undef\blx@thepostpunct} \protected\def\blx@postpunct@agroup{% \aftergroup\blx@postpunct \let\blx@postpunct@agroup\@empty} % {} \newrobustcmd*{\DeclareCapitalPunctuation}[1]{% \cslet{blx@cap@\the\blx@sf@par}\@empty \csundef{blx@cap@\the\blx@sf@comma}% \csundef{blx@cap@\the\blx@sf@semicolon}% \csundef{blx@cap@\the\blx@sf@colon}% \csundef{blx@cap@\the\blx@sf@period}% \csundef{blx@cap@\the\blx@sf@exclam}% \csundef{blx@cap@\the\blx@sf@question}% \ifblank{#1} {} {\expandafter\blx@defcapstring\detokenize{#1}\relax}} \def\blx@defcapstring#1{% \ifx#1\relax \else \begingroup \blx@setfrcodes \ifcsdef{blx@pm@#1} {\expandafter\endgroup \expandafter\let \csname blx@cap@\the\sfcode`#1\endcsname\@empty} {\blx@warning{Ignoring invalid punctuation mark '#1'}% \endgroup}% \expandafter\blx@defcapstring \fi} % {} \newrobustcmd*{\DeclareQuotePunctuation}[1]{% \csdef{blx@qp@comma}{\blx@postpunct}% \csdef{blx@qp@semicolon}{\blx@postpunct}% \csdef{blx@qp@colon}{\blx@postpunct}% \csdef{blx@qp@period}{\blx@postpunct}% \csdef{blx@qp@exclam}{\blx@postpunct}% \csdef{blx@qp@question}{\blx@postpunct}% \cslet{blx@pq@comma}\@empty \cslet{blx@pq@semicolon}\@empty \cslet{blx@pq@colon}\@empty \cslet{blx@pq@period}\@empty \cslet{blx@pq@exclam}\@empty \cslet{blx@pq@question}\@empty \let\blx@quotepunct\@empty \ifblank{#1} {\let\blx@ifuspunct\@secondoftwo} {\let\blx@ifuspunct\@firstoftwo \expandafter\blx@defquotepunct\detokenize{#1}&}} \def\blx@defquotepunct#1{% \ifx\relax \else \ifcsdef{blx@pm@#1} {\appto\blx@quotepunct{#1}% \cslet{blx@qp@\csuse{blx@pm@#1}}\@empty \csdef{blx@pq@\csuse{blx@pm@#1}}{\blx@postpunct}} {\blx@warning{Ignoring invalid punctuation mark '#1'}}% \expandafter\blx@defquotepunct \fi} % {}{} \newrobustcmd*{\DeclarePunctuationPairs}[2]{% \ifcsdef{blx@sf@\detokenize{#1}} {\ifnum\csname blx@sf@\detokenize{#1}\endcsname>\blx@sf@prefixchar \ifnum\csname blx@sf@\detokenize{#1}\endcsname<\blx@sf@nopunct \expandafter\blx@defpunctpairs \expandafter{\the\csname blx@sf@\detokenize{#1}\endcsname}{#2}% \else \blx@err@invarg{\detokenize{#1}{}}% \fi \else \blx@err@invarg{\detokenize{#1}{}}% \fi} {\blx@err@invarg{\detokenize{#1}{}}}} \def\blx@defpunctpairs#1#2{% \blx@undefpair{#1}{\the\blx@sf@dot}% \blx@undefpair{#1}{\the\blx@sf@comma}% \blx@undefpair{#1}{\the\blx@sf@semicolon}% \blx@undefpair{#1}{\the\blx@sf@colon}% \blx@undefpair{#1}{\the\blx@sf@period}% \blx@undefpair{#1}{\the\blx@sf@exclam}% \blx@undefpair{#1}{\the\blx@sf@question}% \ifblank{#2} {} {\begingroup \def\blx@tempa{#1}% \let\blx@tempb\@empty \blx@setfrcodes \sfcode`\*=\blx@sf@dot \expandafter\blx@defpair\detokenize{#2}&% \expandafter\endgroup\blx@tempb}} \def\blx@defpair#1{% \ifx% \else \ifnum\the\sfcode`#1>\blx@sf@prefixchar \ifnum\the\sfcode`#1<\blx@sf@nopunct \eappto\blx@tempb{% \cslet{blx@pp@\blx@tempa @\the\sfcode`#1}\noexpand\@empty}% \else \blx@err@invarg{#1}{}% \fi \else \blx@err@invarg{#1}{}% \fi \expandafter\blx@defpair \fi} \def\blx@undefpair#1#2{% \ifcsdef{blx@pp@#1@#2} {\csundef{blx@pp@#1@#2}} {}} \protected\def\blx@resetpunct{% \DeclareCapitalPunctuation{.!?}% \DeclarePunctuationPairs{dot}{}% \DeclarePunctuationPairs{comma}{*!?}% \DeclarePunctuationPairs{semicolon}{*!?}% \DeclarePunctuationPairs{colon}{*!?}% \DeclarePunctuationPairs{period}{}% \DeclarePunctuationPairs{exclam}{*}% \DeclarePunctuationPairs{question}{*}% \DeclareQuotePunctuation{}% \def\abx@dot{\ifdim\lastkern>\z@\unkern\fi.\spacefactor\blx@sf@dot}% \def\abx@comma{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{,}}% \def\abx@semicolon{\abx@puncthook{;}}% \def\abx@colon{\abx@puncthook{:}}% \def\abx@period{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{.}}% \def\abx@exclam{\abx@puncthook{!}}% \def\abx@question{\abx@puncthook{?}}% \global\let\abx@puncthook\@firstofone \global\let\blx@postpunct\@empty} \blx@resetpunct % {}{}{} \protected\def\blx@imc@ifpunctmark#1{% \ifhmode \begingroup \sfcode`\*=\blx@sf@dot \ifnum\sfcode`#1=\spacefactor \endgroup \expandafter\expandafter \expandafter\@firstoftwo \else \endgroup \expandafter\expandafter \expandafter\@secondoftwo \fi \else \expandafter\@secondoftwo \fi} % {}{} \protected\def\blx@imc@ifterm{% \ifhmode \expandafter\blx@imc@ifcapital \else \expandafter\@secondoftwo \fi} % {}{} \protected\def\blx@imc@ifcapital{% \ifcsdef{blx@cap@\blx@spacefactor}} % {}{} \protected\def\blx@imc@ifpunct{% \ifnum\blx@spacefactor>\blx@sf@threshold@low \ifnum\blx@spacefactor<\blx@sf@threshold@high \expandafter\expandafter \expandafter\@firstoftwo \else \expandafter\expandafter \expandafter\@secondoftwo \fi \else \expandafter\@secondoftwo \fi} % {} \newrobustcmd*{\autocap}[1]{#1} \protected\def\blx@imc@autocap{% \blx@imc@ifcapital\MakeUppercase\@firstofone} \protected\def\blx@imc@nopunct{% \leavevmode\spacefactor\blx@sf@nopunct} \protected\def\blx@imc@isdot{% \ifnum\blx@spacefactor=\blx@sf@period \spacefactor\blx@sf@dot \fi} \protected\def\blx@imc@adddot{% \blx@addpunct{dot}% \ifnum\blx@spacefactor=\blx@sf@period \spacefactor\blx@sf@dot \fi} \protected\def\blx@imc@addperiod{% \blx@addpunct{period}% \ifnum\blx@spacefactor=\blx@sf@dot \spacefactor\blx@sf@period \fi} \protected\def\blx@imc@addcomma{\blx@addpunct{comma}} \protected\def\blx@imc@addsemicolon{\blx@addpunct{semicolon}} \protected\def\blx@imc@addcolon{\blx@addpunct{colon}} \protected\def\blx@imc@addexclam{\blx@addpunct{exclam}} \protected\def\blx@imc@addquestion{\blx@addpunct{question}} \def\blx@addpunct#1{% \unspace \ifnum\blx@spacefactor<\blx@sf@threshold@low \csuse{blx@qp@#1}\csuse{abx@#1}% \else \ifnum\blx@spacefactor>\blx@sf@threshold@high \csuse{blx@qp@#1}\csuse{abx@#1}% \else \ifcsdef{blx@pp@\the\csname blx@sf@#1\endcsname @\blx@spacefactor} {\csuse{blx@qp@#1}\csuse{abx@#1}} {\csuse{blx@qp@#1}}% \fi \fi \csuse{blx@pq@#1}} \providerobustcmd*{\unspace}{% \ifbool{hmode} {\ifdimgreater\lastskip\z@ {\unskip\unspace} {\ifnumgreater\lastpenalty\z@ {\unpenalty\unspace} {}}} {}} \newrobustcmd*{\bibsentence}{% \leavevmode\spacefactor\blx@sf@par \ignorespaces} \newrobustcmd*{\midsentence}{% \leavevmode \@ifstar {\ifnum\spacefactor=\blx@sf@dot \else \spacefactor\@m \fi} {\spacefactor\@m}} \newrobustcmd*{\addslash}{% \unspace/\penalty\hyphenpenalty\hskip\z@skip} \newrobustcmd*{\addspace}{% \unspace\blx@postpunct \space\blx@imc@resetpunctfont} \newrobustcmd*{\addnbspace}{% \unspace\blx@postpunct \nobreak\space\blx@imc@resetpunctfont} \newrobustcmd*{\addthinspace}{% \unspace\blx@postpunct \hskip0.16667em\relax \blx@imc@resetpunctfont} \newrobustcmd*{\addnbthinspace}{% \unspace\blx@postpunct \nobreak\hskip0.16667em\relax \blx@imc@resetpunctfont} \newrobustcmd*{\addlowpenspace}{% \unspace\blx@postpunct \penalty\value{lownamepenalty}\space \blx@imc@resetpunctfont} \newrobustcmd*{\addhighpenspace}{% \unspace\blx@postpunct \penalty\value{highnamepenalty}\space \blx@imc@resetpunctfont} \newrobustcmd*{\addlpthinspace}{% \unspace\blx@postpunct \penalty\value{lownamepenalty}% \hskip0.16667em\relax\blx@imc@resetpunctfont} \newrobustcmd*{\addhpthinspace}{% \unspace\blx@postpunct \penalty\value{highnamepenalty}% \hskip0.16667em\relax\blx@imc@resetpunctfont} \newrobustcmd*{\addabbrvspace}{% \unspace\blx@postpunct \penalty\value{abbrvpenalty}% \space\blx@imc@resetpunctfont} \newrobustcmd*{\addabthinspace}{% \unspace\blx@postpunct \penalty\value{abbrvpenalty}% \hskip0.16667em\relax \blx@imc@resetpunctfont} \newrobustcmd*{\adddotspace}{% \unspace\adddot\blx@postpunct \penalty\value{abbrvpenalty}% \space\blx@imc@resetpunctfont} \providerobustcmd*{\noligature}{% \penalty\@M\discretionary{-}{}{\kern0.03em}% \nobreak\hskip\z@skip} \providerobustcmd*{\hyphen}{% \nobreak-\nobreak\hskip\z@skip} \providerobustcmd*{\nbhyphen}{% \nobreak\mbox{-}\nobreak\hskip\z@skip} \providerobustcmd*{\hyphenate}{% \nobreak\-\nobreak\hskip\z@skip} \providerobustcmd*{\allowhyphens}{% \nobreak\hskip\z@skip} \providerobustcmd*{\nohyphenation}{% \lefthyphenmin\@m} \providerobustcmd*{\textnohyphenation}[1]{% \bgroup\nohyphenation#1\egroup} \blx@regimcs{% \setpunctfont \resetpunctfont \ifcapital \autocap \ifpunctmark \ifpunct \ifterm \nopunct \isdot \adddot \addperiod \addcomma \addsemicolon \addcolon \addexclam \addquestion} \appto\blx@blxinit{% \appto\nocorrlist{\isdot\adddot\addperiod\addcomma}} %% Style definition % {} \newrobustcmd*{\RequireBibliographyStyle}[1]{% \blx@inputonce{#1.bbx}{bibliography style '#1'}{}{}{} {\blx@error {Style '#1' not found} {The bibliography style '#1' could not be found}}} \@onlypreamble\RequireBibliographyStyle % {} \newrobustcmd*{\InitializeBibliographyStyle}{\appto\blx@hook@bbxinit} \@onlypreamble\InitializeBibliographyStyle % {}{} \newrobustcmd*{\DeclareBibliographyDriver}[1]{% \long\csdef{blx@bbx@#1}} \@onlypreamble\DeclareBibliographyDriver % {} \def\blx@driver#1{% \ifcsdef{blx@bbx@#1} {\csuse{blx@bbx@#1}} {\ifcsdef{blx@bbx@*} {\blx@warning{% No driver for entry type '#1'.\MessageBreak Using fallback driver}% \csuse{blx@bbx@*}} {\blx@error {No driver found} {I can't find a driver for the entry type '\abx@field@entrytype'\MessageBreak and there is no fallback driver either}}}} % {}{}{} \def\blx@imc@ifdriver#1{\ifcsdef{blx@bbx@#1}} % {}{} \newrobustcmd*{\DeclareBibliographyAlias}[2]{% \csedef{blx@bbx@#1}{% \expandafter\noexpand\csname blx@bbx@#2\endcsname}} \@onlypreamble\DeclareBibliographyAlias %% Auxiliary commands \newrobustcmd*{\citereset}{% \csuse{blx@hook@cbxinit}% \@ifstar {} {\global\cslet{blx@bsee@\the\c@refsection}\@empty \global\cslet{blx@fsee@\the\c@refsection}\@empty \blx@ibidreset@force \blx@idemreset@force \blx@opcitreset@force \blx@loccitreset@force}} \def\blx@save#1{% \ifcsdef{blx@saved@#1} {} {\blx@safe@actives \csletcs{blx@saved@#1}{#1}% \blx@rest@actives}} \def\blx@restore#1{% \ifcsdef{blx@saved@#1} {\blx@safe@actives \csletcs{#1}{blx@saved@#1}% \csundef{blx@saved@#1}% \blx@rest@actives} {}} \newrobustcmd*{\savecommand}[1]{% \ifcsdef{blx@saved@cmd@\detokenize{#1}} {} {\cslet{blx@saved@cmd@\detokenize{#1}}{#1}}} \newrobustcmd*{\restorecommand}[1]{% \ifcsdef{blx@saved@cmd@\detokenize{#1}} {\letcs{#1}{blx@saved@cmd@\detokenize{#1}}% \csundef{blx@saved@cmd@\detokenize{#1}}} {}} % {} \newrobustcmd*{\savebibmacro}[1]{% \blx@save{abx@macro@\detokenize{#1}}} \newrobustcmd*{\restorebibmacro}[1]{% \blx@restore{abx@macro@\detokenize{#1}}} % {}[][]{} \newrobustcmd*{\newbibmacro}{% \@star@or@long\blx@newbibmacro} \def\blx@newbibmacro#1{% \ifcsundef{abx@macro@\detokenize{#1}} {\blx@defbibmacro\new@command{#1}} {\blx@warning{% Macro '\detokenize{#1}' already defined.\MessageBreak Using \string\renewbibmacro} \blx@defbibmacro\renew@command{#1}}} \newrobustcmd*{\renewbibmacro}{% \@star@or@long\blx@renewbibmacro} \def\blx@renewbibmacro#1{% \ifcsundef{abx@macro@\detokenize{#1}} {\blx@warning{% Macro '\detokenize{#1}' undefined.\MessageBreak Using \string\newbibmacro} \blx@defbibmacro\new@command{#1}} {\blx@defbibmacro\renew@command{#1}}} \newrobustcmd*{\providebibmacro}{% \@star@or@long{\blx@defbibmacro\provide@command}} \def\blx@defbibmacro#1#2{% \expandafter#1\csname abx@macro@\detokenize{#2}\endcsname} % {} \newrobustcmd*{\usebibmacro}{% \@ifstar {\blx@usebibmacro@i} {\blx@usebibmacro}} \def\blx@usebibmacro#1{% \blx@usebibmacro@i{\detokenize{#1}}} \def\blx@usebibmacro@i#1{% \ifcsundef{abx@macro@#1} {\blx@error {Bibliography macro '#1' undefined} {Use '\string\newbibmacro' to define this macro}} {\csuse{abx@macro@#1}}} % {}{}{} \def\blx@imc@ifbibmacroundef#1{% \ifcsundef{abx@macro@#1}} % {} \def\blx@imc@thefield#1{\csuse{abx@field@#1}} \def\blx@imc@strfield#1{% \ifcsdef{abx@field@#1} {\detokenize\expandafter\expandafter\expandafter {\csname abx@field@#1\endcsname}} {}} \def\blx@imc@csfield#1{\usefield{\unexpanded}{#1}} % {}{} \def\blx@imc@usefield#1#2{% \expandafter\expandafter\expandafter#1% \expandafter\expandafter\expandafter{\csname abx@field@#2\endcsname}} % {} \def\blx@imc@thelist#1{\csuse{abx@list@#1}} \def\blx@imc@strlist#1{% \ifcsdef{abx@list@#1} {\detokenize\expandafter\expandafter\expandafter {\csname abx@list@#1\endcsname}} {}} % {} \def\blx@imc@thename#1{\csuse{abx@name@#1}} \def\blx@imc@strname#1{% \ifcsdef{abx@name@#1} {\detokenize\expandafter\expandafter\expandafter {\csname abx@name@#1\endcsname}} {}} % We have to save cleared fields/lists/names in case a related entry % needs them for tests \let\abx@dorelfields\@empty \let\abx@dorellists\@empty \let\abx@dorelnames\@empty % {} % If there is a related field in the entry, save a special copy in case % the related entry needs it for tests. See the corresponding tests in % \blx@save{field,list,name} \protected\def\blx@imc@clearfield#1{% \ifdef\abx@field@related {\csletcs{abx@field@relsaved#1}{abx@field@#1}% \listadd\abx@dorelfields{#1}} {}% \csundef{abx@field@#1}} % {} % If there is a related field in the entry, save a special copy in case % the related entry needs it for tests. See the corresponding tests in % \blx@save{field,list,name} \protected\def\blx@imc@clearlist#1{% \ifcsundef{abx@list@#1} {} {\ifdef\abx@field@related {\csletcs{abx@list@relsaved#1}{abx@list@#1}% \csletcs{etb@tgl@abx@bool@morerelsaved#1}{etb@tgl@abx@bool@more#1}% \csletcs{c@relsaved#1}{c@#1}% \listadd\abx@dorellists{#1}} {}% \togglefalse{abx@bool@more#1}% \csundef{abx@list@#1}% \csname c@#1\endcsname\z@}} % {} % If there is a related field in the entry, save a special copy in case % the related entry needs it for tests. See the corresponding tests in % \blx@save{field,list,name} \protected\def\blx@imc@clearname#1{% \ifcsundef{abx@name@#1} {} {\ifdef\abx@field@related {\csletcs{abx@name@relsaved#1}{abx@name@#1}% \csletcs{etb@tgl@abx@bool@morerelsaved#1}{etb@tgl@abx@bool@more#1}% \csletcs{c@relsaved#1}{c@#1}% \listadd\abx@dorelnames{#1}} {}% \togglefalse{abx@bool@more#1}% \csundef{abx@name@#1}% \csname c@#1\endcsname\z@}} % {}{} \protected\def\blx@imc@restorefield#1{\cslet{abx@field@#1}} % {}{} \protected\def\blx@imc@restorelist#1{\cslet{abx@list@#1}} % {}{} \protected\def\blx@imc@restorename#1{\cslet{abx@name@#1}} % {}{} \protected\def\blx@imc@savefield{% \@ifstar{\blx@savedata{field}}{\global\blx@savedata{field}}} \def\blx@savedata#1#2#3{\letcs#3{abx@#1@#2}} % {}{} \protected\def\blx@imc@savelist{% \@ifstar{\blx@savedata{list}}{\global\blx@savedata{list}}} % {}{} \protected\def\blx@imc@savename{% \@ifstar{\blx@savedata{name}}{\global\blx@savedata{name}}} % {}{} \protected\def\blx@imc@savefieldcs{% \@ifstar{\blx@savedatacs{field}}{\global\blx@savedatacs{field}}} \def\blx@savedatacs#1#2#3{\csletcs{#3}{abx@#1@#2}} % {}{} \protected\def\blx@imc@savelistcs{% \@ifstar{\blx@savedatacs{list}}{\global\blx@savedatacs{list}}} % {}{} \protected\def\blx@imc@savenamecs{% \@ifstar{\blx@savedatacs{name}}{\global\blx@savedatacs{name}}} % {}{}{} \def\blx@imc@iffieldundef#1{% \ifcsundef{abx@field@#1}} % {}{}{} \def\blx@imc@iflistundef#1{% \ifcsundef{abx@list@#1}} % {}{}{} \def\blx@imc@ifnameundef#1{% \ifcsundef{abx@name@#1}} % {}{}{}{} \def\blx@imc@iffieldsequal#1#2{% \ifcsequal{abx@field@#1}{abx@field@#2}} % {}{}{}{} \def\blx@imc@iflistsequal#1#2{% \ifcsequal{abx@list@#1}{abx@list@#2}} % {}{}{}{} \def\blx@imc@ifnamesequal#1#2{% \ifcsundef{abx@name@#1} {\@secondoftwo} {\ifcsundef{abx@name@#2} {\@secondoftwo} {\blx@ifnamesequal{#1}{#2}}}} \def\blx@ifnamesequal#1#2{% \begingroup \let\blx@tempa\@empty \expandafter\expandafter \expandafter\blx@ifnamesequal@i\csname abx@name@#2\endcsname \let\blx@tempb\blx@tempa \let\blx@tempa\@empty \expandafter\expandafter \expandafter\blx@ifnamesequal@i\csname abx@name@#1\endcsname \expandafter\endgroup \ifx\blx@tempa\blx@tempb \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} \def\blx@ifnamesequal@i#1#2{% \expandafter\blx@ifnamesequal@ii#2{}&} \def\blx@ifnamesequal@ii#1{% \ifblank{#1} {\blx@namebreak} {\blx@ifnamesequal@iii#1% \blx@ifnamesequal@ii}} \def\blx@ifnamesequal@iii#1#2{% \setkeys{blx@opt@name}{#1}% \setkeys{blx@opt@namepart}{#2}% \ifdef\abx@field@hash {\eappto\blx@tempa{{\abx@field@hash}}} {\eappto\blx@tempa{{{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}}}} % {}{}{}{} \def\blx@imc@iffieldequals#1#2{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\ifundef#2% {\@secondoftwo} {\expandafter\ifx\csname abx@field@#1\endcsname#2% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}}} % {}{}{}{} \def\blx@imc@iflistequals#1#2{% \blx@imc@iflistundef{#1} {\@secondoftwo} {\ifundef#2% {\@secondoftwo} {\expandafter\ifx\csname abx@list@#1\endcsname#2% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}}} % {}{}{}{} \def\blx@imc@ifnameequals#1#2{% FIXME \blx@imc@ifnameundef{#1} {\@secondoftwo} {\ifundef#2% {\@secondoftwo} {\expandafter\ifx\csname abx@name@#1\endcsname#2% \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}}} % {}{}{}{} \def\blx@imc@iffieldequalcs#1{% \ifcsequal{abx@field@#1}} % {}{}{}{} \def\blx@imc@iflistequalcs#1{% \ifcsequal{abx@list@#1}} % {}{}{}{} \def\blx@imc@ifnameequalcs#1{% FIXME \ifcsequal{abx@name@#1}} % {}{}{}{} \protected\long\def\blx@imc@iffieldequalstr#1#2{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\expandafter\expandafter\expandafter\ifstrequal \expandafter\expandafter\expandafter{% \csname abx@field@#1\endcsname}{#2}}} % {}{}{} \protected\def\blx@imc@iffieldxref#1{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\blx@whichxref {\blx@iffieldxref{#1}} {\@secondoftwo}}} \def\blx@iffieldxref#1#2{% \begingroup \letcs\blx@tempa{abx@field@#2}% \letcs\blx@tempb{abx@field@#1}% \csundef{abx@field@#1}% \blx@getdata{\blx@tempa}% \blx@imc@iffieldequals{#1}\blx@tempb {\aftergroup\@firstoftwo} {\aftergroup\@secondoftwo}% \endgroup} \def\blx@whichxref#1#2{% \blx@imc@iffieldundef{crossref} {\blx@imc@iffieldundef{xref} {#2} {#1{xref}}} {#1{crossref}}} % {}{}{} \protected\def\blx@imc@iflistxref#1{% \blx@imc@iflistundef{#1} {\@secondoftwo} {\blx@whichxref {\blx@iflistxref{#1}} {\@secondoftwo}}} \def\blx@iflistxref#1#2{% \begingroup \letcs\blx@tempa{abx@field@#2}% \letcs\blx@tempb{abx@list@#1}% \csundef{abx@list@#1}% \blx@getdata{\blx@tempa}% \blx@imc@iflistequals{#1}\blx@tempb {\aftergroup\@firstoftwo} {\aftergroup\@secondoftwo}% \endgroup} % {}{}{} \protected\def\blx@imc@ifnamexref#1{% \blx@imc@ifnameundef{#1} {\@secondoftwo} {\blx@whichxref {\blx@ifnamexref{#1}} {\@secondoftwo}}} \def\blx@ifnamexref#1#2{% \begingroup \letcs\blx@tempa{abx@field@#2}% \letcs\blx@tempb{abx@name@#1}% \csundef{abx@name@#1}% \blx@getdata{\blx@tempa}% \blx@imc@ifnameequals{#1}\blx@tempb {\aftergroup\@firstoftwo} {\aftergroup\@secondoftwo}% \endgroup} % {}{}{} \protected\def\blx@imc@ifcurrentfield#1{% \begingroup \def\blx@tempa{#1}% \ifx\currentfield\blx@tempa \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \endgroup} % {}{}{} \protected\def\blx@imc@ifcurrentlist#1{% \begingroup \def\blx@tempa{#1}% \ifx\currentlist\blx@tempa \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \endgroup} % {}{}{} \protected\def\blx@imc@ifcurrentname#1{% \begingroup \def\blx@tempa{#1}% \ifx\currentname\blx@tempa \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \endgroup} % {}{}{} \protected\def\blx@imc@ifentrytype#1{% \begingroup \def\blx@tempa{#1}% \ifx\abx@field@entrytype\blx@tempa \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \endgroup} % {}{} \def\blx@imc@ifmorenames{% \ifundef\currentname {\@secondoftwo} {\iftoggle{abx@bool@more\currentname} {\@firstoftwo} {\ifnum\c@listtotal>\c@liststop \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}}} % {}{} \def\blx@imc@ifmoreitems{% \ifundef\currentlist {\@secondoftwo} {\iftoggle{abx@bool@more\currentlist} {\@firstoftwo} {\ifnum\c@listtotal>\c@liststop \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi}}} % {}{} \def\blx@imc@iffirstcitekey{% \ifboolexpr{ ( test {\ifnumequal\c@multicitetotal\z@} and test {\ifnumequal\c@citecount\@ne} ) or ( test {\ifnumgreater\c@multicitetotal\z@} and test {\ifnumequal\c@multicitecount\@ne} and test {\ifnumequal\c@citecount\@ne} ) }} \def\blx@imc@iflastcitekey{% \ifboolexpr{ test {\ifnumequal\c@citecount\c@citetotal} and test {\ifnumequal\c@multicitecount\c@multicitetotal} }} % {}{}{} \protected\def\blx@imc@ifcategory{% \ifdef\abx@field@entrykey {\blx@imc@ifentrycategory\abx@field@entrykey} {\expandafter\@secondoftwo\@gobble}} % {}{}{}{} \protected\def\blx@imc@ifentrycategory{% \blx@xsanitizeafter\blx@imc@ifentrycategory@i} \def\blx@imc@ifentrycategory@i#1#2{% \ifcsdef{blx@catg@\detokenize{#2}} {\ifinlistcs{#1}{blx@catg@\detokenize{#2}}} {\@secondoftwo}} % {}{}{} \protected\def\blx@imc@ifkeyword{% \ifdef\abx@field@entrykey {\blx@imc@ifentrykeyword\abx@field@entrykey} {\expandafter\@secondoftwo\@gobble}} % {}{}{}{} \protected\def\blx@imc@ifentrykeyword{% \blx@xsanitizeafter\blx@imc@ifentrykeyword@i} \def\blx@imc@ifentrykeyword@i#1#2{% \ifcsdef{blx@keyw@\the\c@refsection @\detokenize{#2}} {\ifinlistcs{#1}{blx@keyw@\the\c@refsection @\detokenize{#2}}} {\@secondoftwo}} % {}{} \protected\def\blx@ifciteseen@global{% \ifbool{citetracker} {\ifdef\abx@field@entrykey {\expandafter\blx@ifseen@global \expandafter{\abx@field@entrykey}} {\@secondoftwo}} {\@secondoftwo}} \protected\def\blx@ifciteseen@context{% \ifbool{citetracker} {\ifdef\abx@field@entrykey {\expandafter\blx@ifseen@context \expandafter{\abx@field@entrykey}} {\@secondoftwo}} {\@secondoftwo}} \protected\def\blx@ifciteseen@context{% \ifbool{citetracker} {\ifdef\abx@field@entrykey {\expandafter\blx@ifseen@context \expandafter{\abx@field@entrykey}} {\@secondoftwo}} {\@secondoftwo}} % {}{}{} \protected\def\blx@ifentryseen@global{% \blx@xsanitizeafter\blx@ifseen@global} \protected\def\blx@ifentryseen@context{% \blx@xsanitizeafter\blx@ifseen@context} \def\blx@ifseen@global#1{% \ifbool{citetracker} {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}} {\@secondoftwo}} \def\blx@ifseen@context#1{% \ifbool{citetracker} {\iftoggle{blx@footnote} {\ifinlistcs{#1}{blx@fsee@\the\c@refsection}} {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}} {\@secondoftwo}} % {}{} \def\blx@ifciteibid@global{% \ifbool{citetracker} {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text} {\@secondoftwo}} \def\blx@ifciteibid@context{% \ifbool{citetracker} {\iftoggle{blx@footnote} {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot} {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}} {\@secondoftwo}} \def\blx@ifciteibid@strict{% \ifbool{citetracker} {\blx@ifcitesingle {\blx@ifciteibid@global} {\@secondoftwo}} {\@secondoftwo}} \def\blx@ifciteibid@constrict{% \ifbool{citetracker} {\blx@ifcitesingle {\iftoggle{blx@footnote} {\blx@ifmpfncheck {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot} {\@secondoftwo}} {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}} {\@secondoftwo}} {\@secondoftwo}} % {}{} \def\blx@ifciteidem@global{% \ifbool{citetracker} {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text} {\@secondoftwo}} \def\blx@ifciteidem@context{% \ifbool{citetracker} {\iftoggle{blx@footnote} {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot} {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}} {\@secondoftwo}} \let\blx@ifciteidem@strict\blx@ifciteidem@global \def\blx@ifciteidem@constrict{% \ifbool{citetracker} {\iftoggle{blx@footnote} {\blx@ifmpfncheck {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot} {\@secondoftwo}} {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}} {\@secondoftwo}} % {}{} \def\blx@ifopcit@global{% \ifbool{citetracker} {\blx@imc@iffieldundef{namehash} {\@secondoftwo} {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}} {\@secondoftwo}} \def\blx@ifopcit@context{% \ifbool{citetracker} {\blx@imc@iffieldundef{namehash} {\@secondoftwo} {\iftoggle{blx@footnote} {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@namehash}} {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}} {\@secondoftwo}} \def\blx@ifopcit@strict{% \ifbool{citetracker} {\blx@ifcitesingle {\blx@ifopcit@global} {\@secondoftwo}} {\@secondoftwo}} \def\blx@ifopcit@constrict{% \ifbool{citetracker} {\blx@ifcitesingle {\blx@imc@iffieldundef{namehash} {\@secondoftwo} {\iftoggle{blx@footnote} {\blx@ifmpfncheck {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@namehash}} {\@secondoftwo}} {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}} {\@secondoftwo}} {\@secondoftwo}} % {}{} \def\blx@ifloccit@global{% \ifbool{citetracker} {\blx@loccit@check{text}} {\@secondoftwo}} \def\blx@ifloccit@context{% \ifbool{citetracker} {\iftoggle{blx@footnote} {\blx@loccit@check{foot}} {\blx@loccit@check{text}}} {\@secondoftwo}} \def\blx@ifloccit@strict{% \ifbool{citetracker} {\blx@ifcitesingle {\blx@loccit@numcheck{text}} {\@secondoftwo}} {\@secondoftwo}} \def\blx@ifloccit@constrict{% \ifbool{citetracker} {\blx@ifcitesingle {\iftoggle{blx@footnote} {\blx@ifmpfncheck {\blx@loccit@numcheck{foot}} {\@secondoftwo}} {\blx@loccit@numcheck{text}}} {\@secondoftwo}} {\@secondoftwo}} \def\blx@loccit@check#1{% \blx@imc@iffieldundef{postnote} {\@secondoftwo} {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}} \def\blx@loccit@numcheck#1{% \blx@imc@iffieldundef{postnote} {\@secondoftwo} {\expandafter\blx@imc@ifpages \expandafter{\abx@field@postnote} {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}} {\@secondoftwo}}} % {}{} \def\blx@ifmpfncheck{% \ifnum\numexpr\value\@mpfn-\blx@lastmpfn<\tw@ \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} \def\blx@mpfnsave{% \xdef\blx@lastmpfn{\the\value\@mpfn}} \def\blx@mpfnreset{% \global\let\blx@lastmpfn\z@} \blx@mpfnreset % {}{} \def\blx@imc@iffirstonpage{% \ifbool{pagetracker} {\iftoggle{blx@footnote} {\blx@iffirstonpage{fnpage}} {\blx@iffirstonpage{page}}} {\@secondoftwo}} \def\blx@iffirstonpage#1{% \ifcsundef{blx@#1@\number\c@instcount} {\@secondoftwo} {\expandafter\blx@iffirstonpage@i \expandafter{\number\numexpr\c@instcount-1}{#1}}} \def\blx@iffirstonpage@i#1#2{% \ifcsundef{blx@#2@#1} {\ifnum#1>\@ne \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi {\expandafter\blx@iffirstonpage@i \expandafter{\number\numexpr#1-1}{#2}} {\@firstoftwo}} {\ifnum\csuse{blx@#2@\number\c@instcount}=% \csuse{blx@#2@#1} % \expandafter\@secondoftwo \else \expandafter\@firstoftwo \fi}} % {}{}{}{} \def\blx@imc@ifsamepage#1#2{% \ifbool{pagetracker} {\ifcsundef{blx@page@\number\numexpr#1} {\ifcsundef{blx@fnpage@\number\numexpr#1} {\@secondoftwo} {\blx@ifsamepage{#1}{#2}{fnpage}}} {\blx@ifsamepage{#1}{#2}{page}}} {\@secondoftwo}} \def\blx@ifsamepage#1#2#3{% \ifcsundef{blx@page@\number\numexpr#2} {\ifcsundef{blx@fnpage@\number\numexpr#2} {\@secondoftwo} {\blx@ifsamepage@i{#1}{#2}{#3}{fnpage}}} {\blx@ifsamepage@i{#1}{#2}{#3}{page}}} \def\blx@ifsamepage@i#1#2#3#4{% \ifnum\csuse{blx@#3@\number\numexpr#1}=% \csuse{blx@#4@\number\numexpr#2} % \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi} % {}{}{} \protected\long\def\blx@imc@ifinteger#1{% \begingroup \def\do##1{\uccode`##1=`\%}% \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9% \makeatletter \catcode`\%=9 \endlinechar\m@ne \uppercase{\scantokens{\def\blx@tempa{#1}}}% \ifx\blx@tempa\@empty \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \endgroup} % {}{}{} \protected\def\blx@imc@iffieldint#1{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\expandafter\expandafter \expandafter\ifinteger \expandafter\expandafter \expandafter{\csname abx@field@#1\endcsname}}} % {}{}{} \protected\def\blx@imc@ifnumeral{% \blx@ifnum\blx@hook@ifnum} \protected\def\blx@imc@ifnumerals{% \blx@ifnum\blx@hook@ifnums} \protected\def\blx@imc@ifpages{% \blx@ifnum\blx@hook@ifpages} \long\def\blx@ifnum#1#2{% \begingroup \let\protect\@unexpandable@protect \uppercase{\edef\blx@tempa{#2}}% \ifx\blx@tempa\@empty \aftergroup\@secondoftwo \else \makeatletter \catcode`\%=9 \endlinechar\m@ne \everyeof{\noexpand}#1% \uppercase{\edef\blx@tempa{\scantokens{#2}}}% \ifx\blx@tempa\@empty \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi \fi \endgroup} \def\blx@hook@ifnum{% \def\do##1{\uccode`##1=`\%}% \do\ \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9% \do\i\do\v\do\x\do\l\do\c\do\d\do\m \do\I\do\V\do\X\do\L\do\C\do\D\do\M \blx@donumchars \let\RN\@firstofone \let\Rn\@firstofone} \def\blx@hook@ifnums{% \blx@hook@ifnum \def\do##1{\uccode`##1=`\%}% \blx@dorangechars \def\do##1{\let##1\@empty}% \blx@dorangecmds} \def\blx@hook@ifpages{% \blx@hook@ifnum \blx@hook@ifnums \def\do##1{\let##1\@empty}% \blx@dopagecmds} % {}{}{} \protected\def\blx@imc@iffieldnum#1{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\expandafter\expandafter \expandafter\blx@imc@ifnumeral \expandafter\expandafter \expandafter{\csname abx@field@#1\endcsname}}} \protected\def\blx@imc@iffieldnums#1{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\expandafter\expandafter \expandafter\blx@imc@ifnumerals \expandafter\expandafter \expandafter{\csname abx@field@#1\endcsname}}} \protected\def\blx@imc@iffieldpages#1{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\expandafter\expandafter \expandafter\blx@imc@ifpages \expandafter\expandafter \expandafter{\csname abx@field@#1\endcsname}}} % {} \newrobustcmd*{\DeclareNumChars}{% \@ifstar {\blx@defnumchars} {\global\let\blx@donumchars\@empty \blx@defnumchars}} \def\blx@defnumchars#1{% \ifblank{#1} {} {\expandafter\blx@defdochars \expandafter\blx@donumchars \detokenize{#1}\relax}} % {} \newrobustcmd*{\DeclareRangeChars}{% \@ifstar {\blx@defrangechars} {\global\let\blx@dorangechars\@empty \blx@defrangechars}} \def\blx@defrangechars#1{% \ifblank{#1} {} {\expandafter\blx@defdochars \expandafter\blx@dorangechars \detokenize{#1}\relax}} \def\blx@defdochars#1#2{% \ifx#2\relax \else \xdef#1{% \expandonce#1\noexpand\do \expandafter\noexpand\csname#2\endcsname}% \expandafter\blx@defdochars \expandafter#1% \fi} % {} \newrobustcmd*{\DeclareRangeCommands}{% \@ifstar {\blx@defrangecmds} {\global\let\blx@dorangecmds\@empty \blx@defrangecmds}} \def\blx@defrangecmds#1{% \ifblank{#1} {} {\blx@defrangecmds@i#1&}} \def\blx@defrangecmds@i#1{% \ifx% \else \gappto\blx@dorangecmds{\do#1}% \expandafter\blx@defrangecmds@i \fi} % {} \newrobustcmd*{\DeclarePageCommands}{% \@ifstar {\blx@defpagecmds} {\global\let\blx@dopagecmds\@empty \blx@defpagecmds}} \def\blx@defpagecmds#1{% \ifblank{#1} {} {\blx@defpagecmds@i#1&}} \def\blx@defpagecmds@i#1{% \ifx% \else \gappto\blx@dopagecmds{\do#1}% \expandafter\blx@defpagecmds@i \fi} \DeclareNumChars{.} \DeclareRangeChars{~,;-+/} \DeclareRangeCommands{% \ \,\space\nobreakspace\addspace\addnbspace \addthinspace\addnbthinspace\addlowpenspace \addhighpenspace\addlpthinspace\addhpthinspace \adddotspace\addabbrvspace\&\psq\psqq \bibrangedash\bibdatedash\textendash\textemdash\bibrangessep} \DeclarePageCommands{\pno\ppno} % *{} \newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum} \newcommand*{\NumcheckSetup}{\NumCheckSetup} % [][]{} \newrobustcmd*{\blx@imc@mkpageprefix}[1][pagination]{% \begingroup \def\blx@tempa{\blx@mkpageprefix{page}}% \iffieldundef{#1} {} {\iffieldequalstr{#1}{none} {\def\blx@tempa{\blx@mkpageprefix@i}} {\iffieldbibstring{#1} {\edef\blx@tempa{\blx@mkpageprefix{\thefield{#1}}}} {\blx@warning@entry{% Unknown pagination type '\strfield{#1}'}}}}% \@ifnextchar[%] {\blx@tempa} {\blx@tempa[\@firstofone]}} \protected\long\def\blx@mkpageprefix#1[#2]#3{% \ifnumeral{#3} {\bibstring{#1}\ppspace} {\ifnumerals{#3} {\bibstring{#1s}\ppspace} {\def\pno{\bibstring{#1}}% \def\ppno{\bibstring{#1s}}}}% \blx@mkpageprefix@i[#2]{#3}} \long\def\blx@mkpageprefix@i[#1]#2{#1{#2}\endgroup} % [][]{} \newrobustcmd*{\blx@imc@mkpagetotal}[1][bookpagination]{% \begingroup \def\blx@tempa{\blx@mkpagetotal{page}}% \iffieldundef{#1} {} {\iffieldequalstr{#1}{none} {\def\blx@tempa{\blx@mkpagetotal@i}} {\iffieldbibstring{#1} {\edef\blx@tempa{\blx@mkpagetotal{\thefield{#1}}}} {\blx@warning@entry{% Unknown pagination type '\strfield{#1}'}}}}% \@ifnextchar[%] {\blx@tempa} {\blx@tempa[\@firstofone]}} \protected\long\def\blx@mkpagetotal#1[#2]#3{% \ifnumeral{#3} {\setbox\@tempboxa=\hbox{% \blx@tempcnta0#3\relax \ifnum\blx@tempcnta=\@ne \aftergroup\@firstoftwo \else \aftergroup\@secondoftwo \fi}% {#2{#3}\ppspace\bibstring{#1}} {#2{#3}\ppspace\bibstring{#1s}}} {\def\pno{\bibstring{#1}}% \def\ppno{\bibstring{#1s}}% #2{#3}}% \endgroup} \long\def\blx@mkpagetotal@i[#1]#2{#1{#2}\endgroup} \newcounter{mincomprange} \newcounter{maxcomprange} \newcounter{mincompwidth} \setcounter{mincomprange}{10} \setcounter{maxcomprange}{100000} \setcounter{mincompwidth}{1} \def\abx@rangeproclimit{100000} % {} \newcommand*{\rangelen}[1]{% \ifcsdef{abx@range@#1} {\csuse{abx@range@#1}} {}} \let\frangelen\rangelen % Legacy name for \rangelen % <*>[]{} \newrobustcmd*{\mkcomprange}{% \begingroup \@ifstar {\blx@comprange\blx@comprange@ii} {\blx@comprange\blx@comprange@i}} \def\blx@comprange#1{% \@ifnextchar[{#1}{#1[\@firstofone]}} \def\blx@comprange@i[#1]#2{% \let\blx@tempa\@empty \protected\def\blx@range@out@value{\appto\blx@tempa}% \let\blx@range@out@delim\blx@range@out@value \let\blx@range@split\blx@comprange@split \blx@range@chunk{#2}% \edef\blx@tempa{\endgroup \unexpanded{#1}{\expandonce\blx@tempa}}% \blx@tempa} \def\blx@comprange@ii[#1]#2{% \protected\def\blx@range@out@value{#1}% \let\blx@range@out@delim\@firstofone \let\blx@range@split\blx@comprange@split \blx@range@chunk{#2}% \endgroup} \def\blx@comprange@split#1{% \def\blx@comprange@abort{\blx@range@out@value{#1}}% \blx@imc@ifpages{#1} {\blx@comprange@range#1\bibrangedash\bibrangedash&} {\blx@comprange@abort}} \def\blx@comprange@range#1\bibrangedash#2\bibrangedash#3&{% \ifblank{#3} {\blx@comprange@hyphen#1--&} {\ifblank{#2} {\blx@range@out@value{#1\bibrangedash}} {\ifblank{#1} {\blx@range@out@value{\bibrangedash#2}} {\blx@comprange@check{#1}{#2}}}}} \def\blx@comprange@hyphen#1-#2-#3&{% \ifblank{#3} {\blx@comprange@abort} {\ifblank{#2} {\ifblank{#1} {\let\blx@tempb\@empty} {\def\blx@tempb{#1}}% \blx@comprange@hyphen@i#3&} {\ifblank{#1} {\blx@range@out@value{\bibrangedash#2}} {\blx@comprange@check{#1}{#2}}}}} \def\blx@comprange@hyphen@i#1-#2&{% \ifblank{#1#2} {\expandafter\blx@range@out@value \expandafter{\blx@tempb\bibrangedash}} {\notblank{#1} {\ifdefempty\blx@tempb {\blx@range@out@value{\bibrangedash#1}} {\expandafter\blx@comprange@check \expandafter{\blx@tempb}{#1}}} {\blx@comprange@hyphen@i#2&}}} \def\blx@comprange@check#1#2{% \blx@imc@ifinteger{#1} {\blx@imc@ifinteger{#2} {\blx@comprange@comp{#1}{#2}} {\blx@range@out@value{#1\bibrangedash#2}}} {\blx@range@out@value{#1\bibrangedash#2}}} \def\blx@comprange@comp#1#2{% \def\blx@tempb{#1}% \def\blx@tempc{#2}% \let\blx@tempd\blx@tempc \ifnum\c@maxcomprange<\abx@rangeproclimit\relax \numdef\blx@tempe\abx@rangeproclimit \else \numdef\blx@tempe\c@maxcomprange \fi \blx@tempcntc=\blx@tempe\relax \ifnum \ifnum\c@mincompwidth<1\space1\fi \ifnum\c@maxcomprange<10\space1\fi \ifnum\c@mincomprange<\blx@tempb\space\else1\fi \ifnum\blx@tempb<\numexpr\blx@tempcntc*10\relax\else1\fi 0=\z@ \expandafter\blx@comprange@comp@div \else \expandafter\blx@comprange@end \fi} \def\blx@comprange@end{% \numdef\blx@tempb\blx@tempb \ifnum\blx@tempe>\c@maxcomprange\relax \numdef\blx@tempc\blx@tempc \else \numdef\blx@tempc\blx@tempd \fi \edef\blx@tempb{% \blx@range@out@value{\blx@tempb\noexpand\bibrangedash\blx@tempc}}% \blx@tempb} \def\blx@comprange@comp@div{% \unless\ifnum\blx@tempb<\blx@tempcntc \blx@tempcnta\blx@tempb\relax \blx@tempcntb\blx@tempc\relax \divide\blx@tempcnta\blx@tempcntc \divide\blx@tempcntb\blx@tempcntc \ifnum\blx@tempcnta=\blx@tempcntb \edef\blx@tempd{\expandafter\@gobble\blx@tempd}% \numdef\blx@tempe\blx@tempcntc \fi \fi \divide\blx@tempcntc10\relax \ifnum \ifnum\blx@tempcntc<10 1\fi \ifnum\blx@tempcntc>\c@mincompwidth\else 1\fi 0=\z@ \expandafter\blx@comprange@comp@div \else \expandafter\blx@comprange@end \fi} \def\blx@range@chunk#1{% \blx@range@chunk@semcol#1;&} \def\blx@range@chunk@semcol#1;#2&{% \notblank{#1} {\blx@range@chunk@comma#1,&} {}% \notblank{#2} {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}% \blx@range@chunk@semcol#2&} {}} \def\blx@range@chunk@comma#1,#2&{% \notblank{#1} {\blx@range@chunk@sep#1\bibrangessep&} {}% \notblank{#2} {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}% \blx@range@chunk@comma#2&} {}} \def\blx@range@chunk@sep#1\bibrangessep#2&{% \notblank{#1} {\expandafter\blx@range@split \expandafter{\@firstofone#1}} {}% \notblank{#2} {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}% \blx@range@chunk@sep#2&} {}} % <*>[]{} \newrobustcmd*{\mkfirstpage}{% \begingroup \@ifstar {\blx@firstpage\blx@firstpage@ii} {\blx@firstpage\blx@firstpage@i}} \def\blx@firstpage#1{% \@ifnextchar[{#1}{#1[\@firstofone]}} \def\blx@firstpage@i[#1]#2{% \let\blx@tempa\@empty \protected\def\blx@range@out@value{\appto\blx@tempa}% \let\blx@range@out@delim\blx@range@out@value \let\blx@range@split\blx@firstpage@split \blx@range@chunk{#2}% \edef\blx@tempa{\endgroup \unexpanded{#1}{\expandonce\blx@tempa}}% \blx@tempa} \def\blx@firstpage@ii[#1]#2{% \protected\def\blx@range@out@value{#1}% \let\blx@range@out@delim\@firstofone \let\blx@range@split\blx@firstpage@split \blx@range@chunk{#2}% \endgroup} \def\blx@firstpage@split#1{% \def\blx@firstpage@abort{\blx@range@out@value{#1}}% \blx@firstpage@range#1\bibrangedash\bibrangedash&} \def\blx@firstpage@range#1\bibrangedash#2\bibrangedash#3&{% \ifblank{#3} {\blx@firstpage@hyphen#1--&} {\ifblank{#1} {\blx@range@out@value{\bibrangedash#2}} {\blx@range@out@value{#1}}}} \def\blx@firstpage@hyphen#1-#2-#3&{% \ifblank{#3} {\blx@firstpage@abort} {\ifblank{#1} {\ifblank{#2} {\blx@firstpage@hyphen@i#3&} {\blx@range@out@value{\bibrangedash#2}}} {\blx@range@out@value{#1}}}} \def\blx@firstpage@hyphen@i#1-#2&{% \ifblank{#1} {\ifblank{#2} {\blx@firstpage@abort} {\blx@firstpage@hyphen@i#2&}} {\blx@range@out@value{\bibrangedash#1}}} \newcommand*{\ppspace}{\addnbspace} \newcommand*{\sqspace}{\addnbspace} \newrobustcmd*{\RN}[1]{% \begingroup \expandafter\RNfont \expandafter{\romannumeral#1}% \endgroup} \newrobustcmd*{\Rn}[1]{% \begingroup \expandafter\Rnfont \expandafter{\romannumeral#1}% \endgroup} \newcommand*{\RNfont}{\uppercase} \newcommand*{\Rnfont}{} % Delimiter interface % []{}{} \newrobustcmd*{\DeclareDelimFormat}{% \@ifstar {\blx@declaredelimclear} {\blx@declaredelim}} \newrobustcmd*{\blx@declaredelimclear}[3][]{% \def\do##1{\global\cslet{blx@printdelim@##1@#2}=\undefined}% \dolistcsloop{blx@declaredelimcontexts@#2}% \ifblank{#1} {\blx@declaredelim{#2}{#3}} {\blx@declaredelim[#1]{#2}{#3}}} \newrobustcmd*{\blx@declaredelim}[3][]{% \ifblank{#1} {\blx@declaredelim@i{}{}{#2}{#3}} {\def\do##1{% \listcsgadd{blx@declaredelimcontexts@#2}{##1}% \blx@declaredelim@i{blx@printdelim@##1@}{##1}{#2}{#3}} \docsvlist{#1}}}% \def\blx@declaredelim@i#1#2#3#4{% \begingroup \def\do##1{% \ifcsdef{#1##1} {\blx@warn@delimdeclare{##1}{#2}} {}% \csgdef{#1##1}{#4}}% \docsvlist{#3} \endgroup} \def\blx@delimcontext{none} \newcommand*{\printdelim}[2][]{% \ifblank{#1} {\ifcsdef{blx@printdelim@\blx@delimcontext @#2} {\csuse{blx@printdelim@\blx@delimcontext @#2}} {\ifcsdef{#2}% fall back on legacy macros {\csuse{#2}} {\blx@warn@delimuse{#2}{*}}}} {\ifcsdef{blx@printdelim@#1@#2} {\csuse{blx@printdelim@#1@#2}} {\blx@warn@delimuse{#2}{#1}}}} \newcommand*{\delimcontext}[1]{% \edef\blx@delimcontext{#1}} % {}{} \protected\def\blx@imc@usedriver#1#2{% \begingroup \let\finentry\blx@finentry@usedrv \let\newblock\relax \let\abx@macro@bibindex\@empty \let\abx@macro@pageref\@empty \csuse{blx@hook@bbxinit}#1% \delimcontext{bib}% \blx@beglangbib \blx@driver{#2}% \blx@endlangbib \endgroup} % Punctuation \protected\def\blx@initunit{% \global\togglefalse{blx@block}% \global\togglefalse{blx@unit}% \global\togglefalse{blx@insert}% \global\togglefalse{blx@lastins}% \global\togglefalse{blx@keepunit}% \global\let\blx@unitpunct\newunitpunct \blx@imc@resetpunctfont} \def\blx@begunit{% \toggletrue{blx@tempa}% \iftoggle{blx@insert} {\iftoggle{blx@unit} {\begingroup \let\blx@begunit\@empty \let\blx@endunit\@empty \let\blx@endnounit\@empty \blx@unitpunct\blx@postpunct \endgroup \global\togglefalse{blx@unit}% \togglefalse{blx@tempa}} {\blx@postpunct}% \iftoggle{blx@block} {\begingroup \let\blx@begunit\@empty \let\blx@endunit\@empty \let\blx@endnounit\@empty \newblockpunct \endgroup \global\togglefalse{blx@block}% \togglefalse{blx@tempa}} {}} {}% \blx@postpunct \blx@imc@resetpunctfont \iftoggle{blx@tempa} {} {\global\togglefalse{blx@insert}}% \blx@leavevmode \begingroup} \def\blx@endunit{% \endgroup \global\toggletrue{blx@insert}% \global\toggletrue{blx@lastins}} \def\blx@nounit{% \global\togglefalse{blx@lastins}} \def\blx@endnounit{% \endgroup\blx@nounit} \protected\def\blx@imc@newblock{% \global\toggletrue{blx@block}}% \protected\def\blx@imc@newunit{% \iftoggle{blx@keepunit} {} {\global\let\blx@unitpunct\newunitpunct \global\toggletrue{blx@unit}}} \protected\def\blx@imc@setunit{% \@ifstar\blx@setunit@i\blx@setunit} \long\def\blx@setunit#1{% \iftoggle{blx@keepunit} {} {\long\gdef\blx@unitpunct{#1}% \global\toggletrue{blx@unit}}} \def\blx@setunit@i{% \iftoggle{blx@lastins} {\blx@setunit} {\@gobble}} \protected\def\blx@imc@printunit{% \@ifstar\blx@printunit@i\blx@printunit} \def\blx@printunit#1{% \long\gdef\blx@unitpunct{#1\global\togglefalse{blx@keepunit}}% \global\toggletrue{blx@keepunit}% \global\toggletrue{blx@unit}} \def\blx@printunit@i{% \iftoggle{blx@lastins} {\blx@printunit} {\@gobble}} \protected\def\blx@imc@finentry{% \unspace\finentrypunct \blx@postpunct \blx@initunit} \protected\def\blx@finentry@usedrv{% \blx@setunit\relax} \protected\def\blx@finentry@inset{% \blx@setunit\entrysetpunct \global\toggletrue{blx@block}} \blx@regimcs{% \ifdriver \thefield \strfield \csfield \usefield \thelist \strlist \thename \strname \clearfield \clearlist \clearname \restorefield \restorelist \restorename \ifcategory \ifentrycategory \ifkeyword \ifentrykeyword \ifciteseen \ifentryseen \ifentryinbib \ifciteibid \ifciteidem \ifopcit \ifloccit \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal \ifbibmacroundef \iffieldundef \iffieldxref \iflistequalcs \iflistequals \iflistsequal \iflistundef \iflistxref \ifmorenames \ifmoreitems \iffirstcitekey \iflastcitekey \ifnameequalcs \ifnameequals \ifnamesequal \ifnameundef \ifnamexref \iffirstonpage \ifsamepage \savefield \savefieldcs \savelist \savelistcs \savename \savenamecs \usedriver \ifinteger \ifnumeral \ifnumerals \ifpages \iffieldint \iffieldnum \iffieldnums \iffieldpages \mkpageprefix \mkpagetotal \newblock \newunit \setunit \printunit \finentry} \appto\blx@blxinit{% \def\ifnatbibmode{\iftoggle{blx@natbib}}% \def\ifcitation{\iftoggle{blx@citation}}% \def\ifbibliography{\iftoggle{blx@bibliography}}% \def\ifciteindex{\iftoggle{blx@citeindex}}% \def\ifbibindex{\iftoggle{blx@bibindex}}% \def\iffootnote{\iftoggle{blx@footnote}}% \def\ifuseprefix{\iftoggle{blx@useprefix}}% \def\ifterseinits{\iftoggle{blx@terseinits}}% \def\iffirstinits{\iftoggle{blx@giveninits}}% legacy name for \ifgiveninits \def\ifgiveninits{\iftoggle{blx@giveninits}}% \def\ifcrossrefsource{\iftoggle{abx@bool@crossrefsource}}% \def\ifxrefsource{\iftoggle{abx@bool@xrefsource}}% \def\ifsingletitle{\iftoggle{abx@bool@singletitle}}% \def\ifuniquetitle{\iftoggle{abx@bool@uniquetitle}}% \def\ifuniqueprimaryauthor{\iftoggle{abx@bool@uniqueprimaryauthor}}% \def\ifandothers#1{\iftoggle{abx@bool@more#1}}% \protected\def\pno{\bibstring{page}}% \protected\def\ppno{\bibstring{pages}}% \let\nopp\relax \protected\def\psq{\sqspace\bibstring{sequens}}% \protected\def\psqq{\sqspace\bibstring{sequentes}}} % Make sure that commands which might pop up inside an \edef will be defined % as something. If they are taken \AtBeginDocument then we assume that all will % be well. If not, then provide a definition which will give an error outside % of a citation context. \AtBeginDocument{% \protected\def\do#1{% \ifdefined#1% \else \protected\def#1{\ERROR}% \fi }% \docsvlist{\pno,\ppno,\nopp,\psq,\psqq}% } %% Global formatting hooks % capitalization % {} \newrobustcmd{\MakeCapital}[1]{% \begingroup \blx@mkcp@init \protected@edef\blx@tempa{#1}% \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end} \def\blx@mkcp@init{% \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}% \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}% \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}% \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}% \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents \def\IeC##1{\blx@mkcp@iec\IeC{##1}}% \def\@tabacckludge##1{% \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}} \begingroup \catcode`\"=\active \gappto\blx@mkcp@init{% \ifnum\catcode`\"=\active \def"#1{\blx@mkcp@bbl"\noexpand#1}% \fi} \endgroup \def\blx@mkcp@parse{% \futurelet\@let@token\blx@mkcp@eval} \long\def\blx@mkcp@eval{% \ifx\@let@token\blx@mkcp@iec \expandafter\blx@mkcp@getiec \fi \ifx\@let@token\blx@mkcp@bbl \expandafter\blx@mkcp@gettwo \fi \ifx\@let@token\blx@mkcp@sgl \expandafter\blx@mkcp@gettwo \fi \ifx\@let@token\blx@mkcp@dbl \expandafter\blx@mkcp@getthree \fi \blx@mkcp@case} \def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{% \blx@mkcp@case{#2#3{#4}}} \def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{% \blx@mkcp@case{#2#3#4}} \def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{% \blx@mkcp@case{#2#3#4#5}} \long\def\blx@mkcp@case#1{% \begingroup \def\i{I}\def\j{J}% \def\do##1##2{\let##1##2\do}% \expandafter\do\@uclclist\relax{\relax\@gobble}% \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}% \blx@tempa} \protected\long\def\blx@mkcp@end#1\blx@mkcp@end{% \let\blx@mkcp@iec\noexpand \let\blx@mkcp@bbl\noexpand \let\blx@mkcp@sgl\noexpand \let\blx@mkcp@dbl\noexpand \protected@edef\blx@tempa{\endgroup#1}% \blx@tempa} \def\abx@dosingleaccents{% \do\"\do\'\do\`\do\^\do\~\do\=\do\.% \do\H\do\b\do\c\do\d\do\r\do\u\do\v} \def\abx@dodoubleaccents{% \do\t} % {} \newrobustcmd*{\MakeSentenceCase}{% \@ifstar\blx@mksc@i\blx@mksc@ii} % if we have option language=, then this overrides % langid field, otherwise, we try than, otherwise try main doc lang \def\blx@mksc@i{% \ifdef\blx@forcelanguagename {\xifinlist\blx@forcelanguagename\blx@cmksc@lang {\blx@mksc@ii} {\@firstofone}} {\ifdef\abx@field@langid {\xifinlist\abx@field@langid\blx@cmksc@lang {\blx@mksc@ii} {\@firstofone}} {\xifinlist\bbl@main@language\blx@cmksc@lang {\blx@mksc@ii} {\@firstofone}}}} \long\def\blx@mksc@ii#1{% \begingroup \let\blx@tempa\@empty \let\blx@tempb\@empty \blx@mksc@init \protected@edef\@tempa{#1}% \expandafter\blx@mksc@parse\@tempa\blx@mksc@end} \def\blx@mksc@init{% \blx@mkcp@init \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}% \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}% \def\do##1{% \ifx##1\relax \else \def##1{\blx@mkcp@nil##1}% \expandafter\do \fi}% \expandafter\do\@uclclist\relax} \def\blx@mksc@parse{% \futurelet\@let@token\blx@mksc@eval} \def\blx@mksc@eval{% \ifx\@let@token\blx@mksc@end \expandafter\blx@mksc@end \fi \ifx\@let@token\bgroup \expandafter\blx@mksc@group \fi \ifx\@let@token\@sptoken \expandafter\blx@mksc@space \fi \ifx\@let@token\blx@mkcp@nil \expandafter\blx@mksc@getone \fi \ifx\@let@token\blx@mkcp@iec \expandafter\blx@mksc@getiec \fi \ifx\@let@token\blx@mkcp@bbl \expandafter\blx@mksc@gettwo \fi \ifx\@let@token\blx@mkcp@sgl \expandafter\blx@mksc@gettwo \fi \ifx\@let@token\blx@mkcp@dbl \expandafter\blx@mksc@getthree \fi \if\noexpand\@let@token\relax \expandafter\blx@mksc@cs \fi \blx@mksc@other} \def\blx@mksc@end#1\blx@mksc@end{% \blx@mksc@eject \let\blx@mkcp@nil\noexpand \let\blx@mkcp@iec\noexpand \let\blx@mkcp@bbl\noexpand \let\blx@mkcp@sgl\noexpand \let\blx@mkcp@dbl\noexpand \let\MakeUppercase\relax \let\MakeLowercase\relax \protected@edef\blx@tempa{\endgroup\blx@tempa}% \blx@tempa} \long\def\blx@mksc@group#1\blx@mksc@other#2{% \futurelet\@let@token\blx@mksc@ingroup#2&{#2}% \blx@mksc@endhead \blx@mksc@parse} \long\def\blx@mksc@ingroup#1{% \if\noexpand\@let@token\relax \blx@mksc@locase{{#2}}% \else \blx@mksc@nocase{{#2}}% \fi} \def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other} \csuse{blx@mksc@space} {% \blx@mksc@anycase{ }% \blx@mksc@endhead \blx@mksc@parse} \long\def\blx@mksc@cs#1\blx@mksc@other#2{% \ifcat\noexpand~\noexpand#2% \blx@mksc@locase{#2}% \else \blx@mksc@nocase{#2}% \fi \blx@mksc@endhead \blx@mksc@parse} \def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{% \blx@mksc@other{#2#3{#4}}} \def\blx@mksc@getone#1\blx@mksc@other#2#3{% \blx@mksc@other{#2#3}} \def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{% \blx@mksc@other{#2#3#4}} \def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{% \blx@mksc@other{#2#3#4#5}} \long\def\blx@mksc@other#1{% \blx@mksc@locase{#1}% \blx@mksc@endhead \blx@mksc@parse} \def\blx@mksc@locase{% \appto\blx@tempb} \def\blx@mksc@nocase{% \blx@mksc@eject \appto\blx@tempa} \def\blx@mksc@anycase{% \ifx\blx@tempb\@empty \expandafter\appto \expandafter\blx@tempa \else \expandafter\appto \expandafter\blx@tempb \fi} \def\blx@mksc@eject{% \ifx\blx@tempb\@empty \else \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}% \let\blx@tempb\@empty \fi} \def\blx@mksc@endhead{% \ifx\blx@tempb\@empty \else \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}% \let\blx@tempb\@empty \fi \let\blx@mksc@endhead\relax} % {} \newrobustcmd*{\DeclareCaseLangs}{% \@ifstar {\blx@defcaselangs} {\global\let\blx@cmksc@lang\@empty \blx@defcaselangs}} \def\blx@defcaselangs#1{% \ifblank{#1} {} {\forcsvlist{\listgadd\blx@cmksc@lang}{#1}}} \DeclareCaseLangs{% american,british,canadian, english,USenglish,UKenglish, australian,newzealand} \newrobustcmd*{\ifcaselang}[1][]{% \ifblank{#1} {\xifinlist\blx@languagename\blx@cmksc@lang} {\xifinlist{#1}\blx@cmksc@lang}} %% Main formatting commands % The work by creating a \let alias: % \abx@@@ -> \blx@defformat@d % for later use in \print* % Then, \blx@defformat@d is defined by calling % \def\blx@defformat@d#1{format body} % []{}{} \newrobustcmd*{\DeclareNameFormat}{% \@ifstar {\blx@defformat\blx@defnameformat{nfd}*} {\blx@defformat\blx@defnameformat{nfd}{}}} \newrobustcmd*{\DeclareIndexNameFormat}{% \@ifstar {\blx@defformat\blx@defnameformat{nid}*} {\blx@defformat\blx@defnameformat{nid}{}}} \newrobustcmd*{\DeclareListFormat}{% \@ifstar {\blx@defformat\blx@defplainformat{lfd}*} {\blx@defformat\blx@defplainformat{lfd}{}}} \newrobustcmd*{\DeclareIndexListFormat}{% \@ifstar {\blx@defformat\blx@defplainformat{lid}*} {\blx@defformat\blx@defplainformat{lid}{}}} \newrobustcmd*{\DeclareFieldFormat}{% \@ifstar {\blx@defformat\blx@defplainformat{ffd}*} {\blx@defformat\blx@defplainformat{ffd}{}}} \newrobustcmd*{\DeclareIndexFieldFormat}{% \@ifstar {\blx@defformat\blx@defplainformat{fid}*} {\blx@defformat\blx@defplainformat{fid}{}}} % {}{}{<*>} \def\blx@defformat#1#2#3{% \@ifnextchar[%] {\blx@defformat@i{#1}{#2}{#3}} {\blx@defformat@i{#1}{#2}{#3}[*]}} % {}{}{<*>}[]{} \def\blx@defformat@i#1#2#3[#4]#5{% \notblank{#3} {\blx@resetformat{#2}{#5}} {}% \def\blx@defformat@a{#2}% \def\blx@defformat@b{#4}% \blx@xsanitizeafter{\def\blx@defformat@c}{#5}% \afterassignment\blx@defformat@ii #1} \def\blx@defformat@ii{% \expandafter\forcsvlist \expandafter\blx@defformat@iii \expandafter{\blx@defformat@b}} \def\blx@defformat@iii#1{% \cslet{abx@\blx@defformat@a @#1@\blx@defformat@c}\blx@defformat@d} \def\blx@defplainformat{% \long\def\blx@defformat@d##1} \def\blx@defnameformat{% \long\def\blx@defformat@d##1} \def\blx@resetformat#1#2{% \let\blx@saved@do\do \def\do##1{\blx@resetformat@i{#1}{#2}{##1}}% \blx@safe@actives \abx@doentrytypes \blx@rest@actives \let\do\blx@saved@do} \def\blx@resetformat@i#1#2#3{% \ifcsdef{abx@#1@#3@#2} {\csundef{abx@#1@#3@#2}} {}} % {}{} \def\blx@letformat#1#2{% \blx@safe@actives \afterassignment\blx@rest@actives \csletcs{#1}{#2}} % [aliastype]{aliasname}[formattype]{formatname} \def\blx@defalias#1{% \@ifnextchar[%] {\blx@defalias@i{#1}} {\blx@defalias@i{#1}[*]}} \def\blx@defalias@i#1[#2]#3{% \@ifnextchar[%] {\blx@defalias@ii{#1}{#2}{#3}} {\blx@defalias@ii{#1}{#2}{#3}[*]}} \def\blx@defalias@ii#1#2#3[#4]#5{% \blx@safe@actives \afterassignment\blx@rest@actives \csedef{abx@#1@#2@#3}{% \expandonce{\csname abx@#1@#4@#5\endcsname}}} % {}{}{}{} \def\blx@getformat#1#2#3#4{% \blx@safe@actives \afterassignment\blx@rest@actives \ifcsundef{abx@#2@\blx@imc@thefield{entrytype}@#3} {\ifcsundef{abx@#2@*@#3} {\ifcsundef{abx@#2@\blx@imc@thefield{entrytype}@#4} {\ifcsundef{abx@#2@*@#4} {\letcs#1{abx@#2@*@default}} {\letcs#1{abx@#2@*@#4}}} {\letcs#1{abx@#2@\blx@imc@thefield{entrytype}@#4}}} {\letcs#1{abx@#2@*@#3}}} {\letcs#1{abx@#2@\blx@imc@thefield{entrytype}@#3}}} % []{} \newrobustcmd*{\savefieldformat}[2][*]{\blx@save{abx@ffd@#1@#2}} \newrobustcmd*{\savelistformat}[2][*]{\blx@save{abx@lfd@#1@#2}} \newrobustcmd*{\savenameformat}[2][*]{\blx@save{abx@nfd@#1@#2}} \newrobustcmd*{\restorefieldformat}[2][*]{\blx@restore{abx@ffd@#1@#2}} \newrobustcmd*{\restorelistformat}[2][*]{\blx@restore{abx@lfd@#1@#2}} \newrobustcmd*{\restorenameformat}[2][*]{\blx@restore{abx@nfd@#1@#2}} % []{}{}{} \newrobustcmd*{\iffieldformatundef}[2][*]{\ifcsundef{abx@ffd@#1@#2}} \newrobustcmd*{\iflistformatundef}[2][*]{\ifcsundef{abx@lfd@#1@#2}} \newrobustcmd*{\ifnameformatundef}[2][*]{\ifcsundef{abx@nfd@#1@#2}} % []{}[]{} \newrobustcmd*{\DeclareNameAlias}{\blx@defalias{nfd}} \newrobustcmd*{\DeclareIndexNameAlias}{\blx@defalias{nid}} \newrobustcmd*{\DeclareListAlias}{\blx@defalias{lfd}} \newrobustcmd*{\DeclareIndexListAlias}{\blx@defalias{lid}} \newrobustcmd*{\DeclareFieldAlias}{\blx@defalias{ffd}} \newrobustcmd*{\DeclareIndexFieldAlias}{\blx@defalias{fid}} % []{} \newrobustcmd{\blx@imc@printtext}[2][]{% \ifblank{#2} {\blx@nounit} {\ifblank{#1} {\let\blx@theformat\@firstofone} {\blx@getformat\blx@theformat{ffd}{#1}{}}% \ifdefvoid\blx@theformat {\blx@nounit} {\blx@begunit \blx@theformat{#2}% \blx@endunit}}} % []{} \newrobustcmd*{\blx@imc@printfield}[2][]{% \blx@imc@iffieldundef{#2} {\blx@nounit} {\blx@getformat\blx@theformat{ffd}{#1}{#2}% \ifdefvoid\blx@theformat {\blx@nounit} {\blx@begunit \edef\currentfield{#2}% \expandafter\expandafter \expandafter\blx@theformat \expandafter\expandafter \expandafter{\csname abx@field@#2\endcsname}% \blx@endunit}}} % []{} \newcommand*{\blx@imc@indexfield}[2][]{% \blx@imc@iffieldundef{#2} {} {\blx@getformat\blx@theformat{fid}{#1}{#2}% \ifdefvoid\blx@theformat {} {\begingroup \edef\currentfield{#2}% \letcs\blx@tempa{abx@field@#2}% \expandafter\blx@theformat\expandafter{\blx@tempa}% \endgroup}}} % []{} \newrobustcmd*{\blx@imc@printfile}[2][]{% \iftoggle{blx@loadfiles} {\IfFileExists{#2} {\listxadd\blx@list@req@edit{#2}% \blx@imc@printtext[#1]{\input{#2}\unspace}} {\blx@nounit}} {\blx@nounit}} % {}[][-] % => {}{}{} \def\blx@listargs#1{% \@ifnextchar[%] {\blx@listargs@i{#1}} {#1{}{}{}}} \def\blx@listargs@i#1[#2]{% \@ifnextchar[%] {\blx@listargs@ii{#1}{#2}} {#1{#2}{}{}}} \def\blx@listargs@ii#1#2[#3]{% \blx@listargs@iii{#1}{#2}#3&} \def\blx@listargs@iii#1#2#3-#4&{% #1{#2}{#3}{#4}} % [][-]{} \protected\def\blx@imc@printnames{% \blx@listargs\blx@printnames} % {}{}{}{} \def\blx@printnames#1#2#3#4{% \blx@imc@ifnameundef{#4} {\blx@nounit} {\blx@getformat\blx@theformat{nfd}{#1}{#4}% \ifdefvoid\blx@theformat {\blx@nounit} {\blx@begunit \blx@namesetup{#2}{#3}{#4}% \expandafter\blx@nameparser\blx@thedata{}&% \blx@endunit}}} \def\blx@namesetup#1#2#3{% \def\currentname{#3}% \c@listcount\@ne \c@listtotal\csname c@#3\endcsname \blx@namesetup@i{#3}% \ifblank{#1} {\c@liststart\@ne} {\ifnum#1<\@ne \c@liststart\@ne \else \c@liststart#1\relax \fi}% \ifblank{#2} {\c@liststop\c@listtotal \ifnum\c@liststop>\c@maxnames \c@liststop\c@minnames \ifnum\c@uniquelist>\c@liststop \c@liststop\c@uniquelist \fi \fi} {\ifnum#2>\c@listtotal \c@liststop\c@listtotal \else \ifnum#2<\@ne \c@liststop\@ne \else \c@liststop#2\relax \fi \fi}% \blx@namecodes} \def\blx@namesetup@i#1{% \expandafter\expandafter \expandafter\blx@namesetup@ii\csname abx@name@#1\endcsname} \def\blx@namesetup@ii#1#2{% \c@uniquelist\z@ \ifblank{#1} {} {\setkeys{blx@opt@namelist}{#1}}% \def\blx@thedata{#2}} % Per-namelist options \define@key{blx@opt@namelist}{uniquelist}{\c@uniquelist#1\relax} \define@key{blx@opt@namelist}{useprefix}{\settoggle{blx@useprefix}{#1}} \define@key{blx@opt@namelist}{sortnamekeyscheme}{\def\blx@refcontext@sortingnamekey{#1}} % Per-name options \define@key{blx@opt@name}{uniquename}{\c@uniquename#1\relax} \define@key{blx@opt@name}{hash}{\edef\abx@field@hash{\detokenize{#1}}} \define@key{blx@opt@name}{useprefix}{\settoggle{blx@useprefix}{#1}} \define@key{blx@opt@name}{sortnamekeyscheme}{\def\blx@refcontext@sortingnamekey{#1}} \newrobustcmd*{\bibinitperiod}{\adddot} \newrobustcmd*{\bibinitdelim}{\addnbspace} \newrobustcmd*{\bibinithyphendelim}{.\mbox{-}} \newrobustcmd*{\bibnamedelima}{\addhighpenspace} \newrobustcmd*{\bibnamedelimb}{\addlowpenspace} \newrobustcmd*{\bibnamedelimc}{\addhighpenspace} \newrobustcmd*{\bibnamedelimd}{\addlowpenspace} \newrobustcmd*{\bibnamedelimi}{\addnbspace} % [][-]{} \protected\def\blx@imc@indexnames{% \blx@listargs\blx@indexnames} % {}{}{}{} \def\blx@indexnames#1#2#3#4{% \blx@imc@ifnameundef{#4} {} {\blx@getformat\blx@theformat{nid}{#1}{#4}% \ifdefvoid\blx@theformat {} {\begingroup \blx@namesetup{#2}{#3}{#4}% \blx@indexnamesetup \expandafter\blx@nameparser\blx@thedata{}&% \endgroup}}} \def\blx@indexnamesetup{% \let\bibinitperiod\bibindexinitperiod \let\bibinitdelim\bibindexinitdelim \let\bibinithyphendelim\bibindexinithyphendelim \let\bibnamedelima\bibindexnamedelima \let\bibnamedelimb\bibindexnamedelimb \let\bibnamedelimc\bibindexnamedelimc \let\bibnamedelimd\bibindexnamedelimd \let\bibnamedelimi\bibindexnamedelimi} % {}{}{...} \long\def\blx@nameparser#1{% \ifblank{#1} {\blx@namebreak} {\ifnum\c@listcount<\c@liststart \else \blx@nameparser@i#1% \fi \advance\c@listcount\@ne \ifnum\c@listcount>\c@liststop \expandafter\blx@namebreak \fi \blx@nameparser}} % {name opts}{nameparts} \long\def\blx@nameparser@i#1#2{% \ifblank{#1} {} {\setkeys{blx@opt@name}{#1}}% % reset all the nameparts to empty between names \def\do##1{% \cslet{namepart##1}\@empty \cslet{namepart##1i}\@empty}% \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}% \setkeys{blx@opt@namepart}{#2}% Extract nameparts information % Still pass the nameparts forward for backwards compat % When \nameparts is finally removed, remove the "{2}" and remove the % arg to \blx@defformat@d in def of \blx@defnameformat \blx@theformat{#2}} \long\def\blx@namebreak#1&{} % [][-]{} \protected\def\blx@imc@printlist{% \blx@listargs\blx@printlist} % {}{}{}{} \def\blx@printlist#1#2#3#4{% \blx@imc@iflistundef{#4} {\blx@nounit} {\blx@getformat\blx@theformat{lfd}{#1}{#4}% \ifdefvoid\blx@theformat {\blx@nounit} {\blx@begunit \blx@listsetup{#2}{#3}{#4}% \expandafter\blx@listparser\blx@thedata{}&% \blx@endunit}}} \def\blx@listsetup#1#2#3{% \def\currentlist{#3}% \c@listcount\@ne \expandafter\c@listtotal\csname c@#3\endcsname \letcs\blx@thedata{abx@list@#3}% \ifblank{#1} {\c@liststart\@ne} {\ifnum#1<\@ne \c@liststart\@ne \else \c@liststart#1\relax \fi}% \ifblank{#2} {\c@liststop\c@listtotal \ifnum\c@listtotal>\c@maxitems \c@liststop\c@minitems \fi} {\ifnum#2>\c@listtotal \c@liststop\c@listtotal \else \ifnum#2<\@ne \c@liststop\@ne \else \c@liststop#2\relax \fi \fi}} % [][-]{} \protected\def\blx@imc@indexlist{% \blx@listargs\blx@indexlist} % {}{}{}{} \def\blx@indexlist#1#2#3#4{% \blx@imc@iflistundef{#4} {} {\blx@getformat\blx@theformat{lid}{#1}{#4}% \ifdefvoid\blx@theformat {} {\begingroup \blx@listsetup{#2}{#3}{#4}% \expandafter\blx@listparser\blx@thedata{}&% \endgroup}}} % {}{}{...} \long\def\blx@listparser#1{% \ifblank{#1} {\blx@listbreak} {\ifnum\c@listcount<\c@liststart \else \blx@theformat{#1}% \fi \advance\c@listcount\@ne \ifnum\c@listcount>\c@liststop \expandafter\blx@listbreak \fi \blx@listparser}} \long\def\blx@listbreak#1&{} % <*>{}{} \protected\def\blx@imc@entrydata{% \@ifstar {\blx@xsanitizeafter{\blx@imc@entrydata@i\blx@saveentry}} {\blx@xsanitizeafter{\blx@imc@entrydata@i{}}}} \long\def\blx@imc@entrydata@i#1#2#3{% \blx@getrefcontext{#2}% \blx@ifdata{#2} {\begingroup #1% \blx@resetdata \blx@getdata{#2}% \blx@entrysetcount \blx@setoptions@type\abx@field@entrytype \blx@setoptions@entry \addtocounter{instcount}\@ne \blx@execute \blx@beglangbib#3\blx@endlangbib \endgroup} {}} \protected\def\blx@imc@entryset#1#2{% \blx@imc@iffieldundef{entrykey} {} {\begingroup \long\def\blx@entryset@precode{#1}% \long\def\blx@entryset@postcode{#2}% \let\finentry\blx@finentry@inset \let\do\blx@entryset \blx@imc@docsvfield{entryset}% \endgroup}} \def\blx@entryset#1{% \blx@ifdata{#1} {\begingroup \blx@imc@clearlist{pageref}% \blx@getdata{#1}% \blx@setoptions@type\abx@field@entrytype \def\abx@field@entrysetcount{1}% \blx@entryset@precode \blx@driver{\blx@imc@thefield{entrytype}}% \blx@entryset@postcode \endgroup} {}% \let\do\blx@entryset@i} \def\blx@entryset@i#1{% \blx@ifdata{#1} {\begingroup \blx@resetdata \blx@getdata{#1}% \blx@entrysetcount \blx@setoptions@type\abx@field@entrytype \blx@setoptions@entry \addtocounter{instcount}\@ne \blx@execute \blx@beglangbib \blx@begunit \blx@entryset@precode \blx@driver{\blx@imc@thefield{entrytype}} \blx@entryset@postcode \blx@endunit \blx@endlangbib \endgroup} {\blx@nounit}} \blx@regimcs{% \printtext \printfield \printlist \printnames \printfile \indexfield \indexlist \indexnames \entrydata \entryset} %% Localization % []{} \newrobustcmd*{\blx@imc@bibstring}[2][\@firstofone]{% \blx@bibstring{#1}{\abx@str}{#2}} \newrobustcmd*{\blx@imc@biblstring}[2][\@firstofone]{% \blx@bibstring{#1}{abx@lstr}{#2}} \newrobustcmd*{\blx@imc@bibsstring}[2][\@firstofone]{% \blx@bibstring{#1}{abx@sstr}{#2}} \protected\def\blx@bibstring#1#2#3{% \blx@begunit \blx@hyphenreset \let\bibstring\blx@imc@bibxstring \let\biblstring\blx@imc@bibxlstring \let\bibsstring\blx@imc@bibxsstring \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa \blx@endnounit} {\blx@imc@ifcapital {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}} {#1{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % []{} \newrobustcmd*{\blx@imc@bibcpstring}[2][\@firstofone]{% \blx@bibcpstring{#1}{\abx@str}{#2}} \newrobustcmd*{\blx@imc@bibcplstring}[2][\@firstofone]{% \blx@bibcpstring{#1}{abx@lstr}{#2}} \newrobustcmd*{\blx@imc@bibcpsstring}[2][\@firstofone]{% \blx@bibcpstring{#1}{abx@sstr}{#2}} \protected\def\blx@bibcpstring#1#2#3{% \blx@begunit \blx@hyphenreset \let\bibstring\blx@imc@bibxstring \let\biblstring\blx@imc@bibxlstring \let\bibsstring\blx@imc@bibxsstring \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa \blx@endnounit} {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % []{} \newrobustcmd*{\blx@imc@biblcstring}[2][\@firstofone]{% \blx@biblcstring{#1}{\abx@str}{#2}} \newrobustcmd*{\blx@imc@biblclstring}[2][\@firstofone]{% \blx@biblcstring{#1}{abx@lstr}{#2}} \newrobustcmd*{\blx@imc@biblcsstring}[2][\@firstofone]{% \blx@biblcstring{#1}{abx@sstr}{#2}} \protected\def\blx@biblcstring#1#2#3{% \blx@begunit \blx@hyphenreset \let\bibstring\blx@imc@bibxstring \let\biblstring\blx@imc@bibxlstring \let\bibsstring\blx@imc@bibxsstring \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa \blx@endnounit} {#1{\MakeLowercase{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % []{} \newrobustcmd*{\blx@imc@bibucstring}[2][\@firstofone]{% \blx@bibucstring{#1}{\abx@str}{#2}} \newrobustcmd*{\blx@imc@bibuclstring}[2][\@firstofone]{% \blx@bibucstring{#1}{abx@lstr}{#2}} \newrobustcmd*{\blx@imc@bibucsstring}[2][\@firstofone]{% \blx@bibucstring{#1}{abx@sstr}{#2}} \protected\def\blx@bibucstring#1#2#3{% \blx@begunit \blx@hyphenreset \let\bibstring\blx@imc@bibxstring \let\biblstring\blx@imc@bibxlstring \let\bibsstring\blx@imc@bibxsstring \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa \blx@endnounit} {#1{\MakeUppercase{\csuse{#2@\blx@tempa}}}% \blx@endunit}} % {} \def\blx@imc@bibxstring#1{% \blx@bibxstring{\abx@str}{#1}} \def\blx@imc@bibxlstring#1{% \blx@bibxstring{abx@lstr}{#1}} \def\blx@imc@bibxsstring#1{% \blx@bibxstring{abx@sstr}{#1}} \def\blx@bibxstring#1#2{% \ifcsundef{#1@#2} {\protect\blx@warn@nostring{#2}} {\csuse{#1@#2}}} % {}{}{} \def\blx@imc@ifbibstring#1{% \ifcsundef{\abx@str @\detokenize{#1}} {\@secondoftwo} {\@firstoftwo}} \def\blx@imc@ifbibxstring#1{% \blx@xsanitizeafter\ifcsundef{\abx@str @#1} {\@secondoftwo} {\@firstoftwo}} % {}{}{} \def\blx@imc@iffieldbibstring#1{% \blx@imc@iffieldundef{#1} {\@secondoftwo} {\ifcsundef{\abx@str @\detokenize\expandafter \expandafter\expandafter{% \csname abx@field@#1\endcsname}} {\@secondoftwo} {\@firstoftwo}}} \blx@regimcs{% \bibstring \biblstring \bibsstring \bibxstring \bibxlstring \bibxsstring \bibcpstring \bibcplstring \bibcpsstring \biblcstring \biblclstring \biblcsstring \bibucstring \bibuclstring \bibucsstring \ifbibstring \ifbibxstring \iffieldbibstring} \let\blx@hook@uc\relax \let\blx@hook@lc\relax \AtEndPreamble{% \toggletrue{blx@tempa}% \toggletrue{blx@tempb}% \expandafter\patchcmd\csname MakeUppercase \endcsname {\protected@edef} {\blx@hook@uc\protected@edef} {\togglefalse{blx@tempa}} {}% \expandafter\patchcmd\csname MakeLowercase \endcsname {\protected@edef} {\blx@hook@lc\protected@edef} {\togglefalse{blx@tempb}} {}% \@ifpackageloaded{textcase} {\expandafter\patchcmd\csname MakeUppercase \endcsname {\def\i} {\blx@hook@uc\def\i} {\togglefalse{blx@tempa}} {}% \expandafter\patchcmd\csname MakeLowercase \endcsname {\@uclcnotmath{}} {\@uclcnotmath{\blx@hook@lc}} {\togglefalse{blx@tempb}} {}% \expandafter\patchcmd\csname MakeTextUppercase \endcsname {\def\i} {\blx@hook@uc\def\i} {} {}% \expandafter\patchcmd\csname MakeTextLowercase \endcsname {\@uclcnotmath{}} {\@uclcnotmath{\blx@hook@lc}} {} {}} {}% \iftoggle{blx@tempa}{\blx@err@patch{\string\MakeUppercase}}{}% \iftoggle{blx@tempb}{\blx@err@patch{\string\MakeLowercase}}{}% } \appto\blx@blxinit{% \def\blx@hook@uc{% \def\bibstring{\blx@imc@bibucstring}% \def\biblstring{\blx@imc@bibuclstring}% \def\bibsstring{\blx@imc@bibucsstring}% \def\biblcstring{\blx@imc@bibucstring}% \def\biblclstring{\blx@imc@bibuclstring}% \def\biblcsstring{\blx@imc@bibucsstring}% \def\bibcpstring{\blx@imc@bibucstring}% \def\bibcplstring{\blx@imc@bibuclstring}% \def\bibcpsstring{\blx@imc@bibucsstring}}% \def\blx@hook@lc{% \def\bibstring{\blx@imc@biblcstring}% \def\biblstring{\blx@imc@biblclstring}% \def\bibsstring{\blx@imc@biblcsstring}% \def\bibucstring{\blx@imc@biblcstring}% \def\bibuclstring{\blx@imc@biblclstring}% \def\bibucsstring{\blx@imc@biblcsstring}% \def\bibcpstring{\blx@imc@biblcstring}% \def\bibcplstring{\blx@imc@biblclstring}% \def\bibcpsstring{\blx@imc@biblcsstring}}} \def\abx@dostrings{% \do{bibliography}% \do{references}% \do{shorthands}% \do{editor}% \do{editors}% \do{compiler}% \do{compilers}% \do{redactor}% \do{redactors}% \do{reviser}% \do{revisers}% \do{founder}% \do{founders}% \do{continuator}% \do{continuators}% \do{collaborator}% \do{collaborators}% \do{translator}% \do{translators}% \do{commentator}% \do{commentators}% \do{annotator}% \do{annotators}% \do{commentary}% \do{annotations}% \do{introduction}% \do{foreword}% \do{afterword}% \do{editortr}% \do{editorstr}% \do{editorco}% \do{editorsco}% \do{editoran}% \do{editorsan}% \do{editorin}% \do{editorsin}% \do{editorfo}% \do{editorsfo}% \do{editoraf}% \do{editorsaf}% \do{editortrco}% \do{editorstrco}% \do{editortran}% \do{editorstran}% \do{editortrin}% \do{editorstrin}% \do{editortrfo}% \do{editorstrfo}% \do{editortraf}% \do{editorstraf}% \do{editorcoin}% \do{editorscoin}% \do{editorcofo}% \do{editorscofo}% \do{editorcoaf}% \do{editorscoaf}% \do{editoranin}% \do{editorsanin}% \do{editoranfo}% \do{editorsanfo}% \do{editoranaf}% \do{editorsanaf}% \do{editortrcoin}% \do{editorstrcoin}% \do{editortrcofo}% \do{editorstrcofo}% \do{editortrcoaf}% \do{editorstrcoaf}% \do{editortranin}% \do{editorstranin}% \do{editortranfo}% \do{editorstranfo}% \do{editortranaf}% \do{editorstranaf}% \do{translatorco}% \do{translatorsco}% \do{translatoran}% \do{translatorsan}% \do{translatorin}% \do{translatorsin}% \do{translatorfo}% \do{translatorsfo}% \do{translatoraf}% \do{translatorsaf}% \do{translatorcoin}% \do{translatorscoin}% \do{translatorcofo}% \do{translatorscofo}% \do{translatorcoaf}% \do{translatorscoaf}% \do{translatoranin}% \do{translatorsanin}% \do{translatoranfo}% \do{translatorsanfo}% \do{translatoranaf}% \do{translatorsanaf}% \do{byauthor}% \do{byeditor}% \do{bycompiler}% \do{byredactor}% \do{byreviser}% \do{byreviewer}% \do{byfounder}% \do{bycontinuator}% \do{bycollaborator}% \do{bytranslator}% \do{bycommentator}% \do{byannotator}% \do{withcommentator}% \do{withannotator}% \do{withintroduction}% \do{withforeword}% \do{withafterword}% \do{byeditortr}% \do{byeditorco}% \do{byeditoran}% \do{byeditorin}% \do{byeditorfo}% \do{byeditoraf}% \do{byeditortrco}% \do{byeditortran}% \do{byeditortrin}% \do{byeditortrfo}% \do{byeditortraf}% \do{byeditorcoin}% \do{byeditorcofo}% \do{byeditorcoaf}% \do{byeditoranin}% \do{byeditoranfo}% \do{byeditoranaf}% \do{byeditortrcoin}% \do{byeditortrcofo}% \do{byeditortrcoaf}% \do{byeditortranin}% \do{byeditortranfo}% \do{byeditortranaf}% \do{bytranslatorco}% \do{bytranslatoran}% \do{bytranslatorin}% \do{bytranslatorfo}% \do{bytranslatoraf}% \do{bytranslatorcoin}% \do{bytranslatorcofo}% \do{bytranslatorcoaf}% \do{bytranslatoranin}% \do{bytranslatoranfo}% \do{bytranslatoranaf}% \do{and}% \do{andothers}% \do{andmore}% \do{volume}% \do{volumes}% \do{involumes}% \do{part}% \do{jourvol}% \do{jourser}% \do{newseries}% \do{oldseries}% \do{edition}% \do{reprint}% \do{reprintof}% \do{reprintas}% \do{reprintfrom}% \do{reviewof}% \do{translationof}% \do{translationas}% \do{translationfrom}% \do{origpubas}% \do{origpubin}% \do{astitle}% \do{bypublisher}% \do{page}% \do{pages}% \do{column}% \do{columns}% \do{line}% \do{lines}% \do{nodate}% \do{verse}% \do{verses}% \do{section}% \do{sections}% \do{paragraph}% \do{paragraphs}% \do{in}% \do{inseries}% \do{ofseries}% \do{book}% \do{issue}% \do{number}% \do{chapter}% \do{mathesis}% \do{phdthesis}% \do{candthesis}% \do{resreport}% \do{techreport}% \do{software}% \do{datacd}% \do{audiocd}% \do{version}% \do{url}% \do{urlfrom}% \do{urlseen}% \do{file}% \do{inpreparation}% \do{submitted}% \do{inpress}% \do{prepublished}% \do{forthcoming}% \do{library}% \do{abstract}% \do{annotation}% \do{citedas}% \do{seenote}% \do{quotedin}% \do{opcit}% \do{loccit}% \do{ibidem}% \do{idem}% \do{idemsf}% \do{idemsm}% \do{idemsn}% \do{idempf}% \do{idempm}% \do{idempn}% \do{idempp}% \do{confer}% \do{sequens}% \do{sequentes}% \do{passim}% \do{see}% \do{seealso}% \do{backrefpage}% \do{backrefpages}% \do{thiscite}% \do{january}% \do{february}% \do{march}% \do{april}% \do{may}% \do{june}% \do{july}% \do{august}% \do{september}% \do{october}% \do{november}% \do{december}% \do{langamerican}% \do{langbrazilian}% \do{langcatalan}% \do{langcroatian}% \do{langczech}% \do{langdanish}% \do{langdutch}% \do{langenglish}% \do{langfinnish}% \do{langfrench}% \do{langgerman}% \do{langgreek}% \do{langitalian}% \do{langjapanese}% \do{langlatin}% \do{langnorwegian}% \do{langpolish}% \do{langportuguese}% \do{langrussian}% \do{langslovak}% \do{langslovene}% \do{langspanish}% \do{langswedish}% \do{fromamerican}% \do{frombrazilian}% \do{fromcatalan}% \do{fromcroatian}% \do{fromczech}% \do{fromdanish}% \do{fromdutch}% \do{fromenglish}% \do{fromfinnish}% \do{fromfrench}% \do{fromgerman}% \do{fromgreek}% \do{fromitalian}% \do{fromjapanese}% \do{fromlatin}% \do{fromnorwegian}% \do{frompolish}% \do{fromportuguese}% \do{fromrussian}% \do{fromslovak}% \do{fromslovene}% \do{fromspanish}% \do{fromswedish}% \do{countryde}% \do{countryep}% \do{countryeu}% \do{countryfr}% \do{countryuk}% \do{countryus}% \do{patent}% \do{patentde}% \do{patenteu}% \do{patentfr}% \do{patentuk}% \do{patentus}% \do{patreq}% \do{patreqde}% \do{patreqeu}% \do{patreqfr}% \do{patrequk}% \do{patrequs}% } \newrobustcmd*{\NewBibliographyString}[1]{% \forcsvlist\blx@newstring{#1}} \def\blx@newstring#1{% \ifcsundef{KV@blx@lbx@#1} {\gappto\abx@dostrings{\do{#1}}% \csgdef{KV@blx@lbx@#1}##1{\blx@defstring{#1}{##1}}} {}} % in *.cbx/bbx/tex: = {}, % in *.lbx: = {{}{}}, \def\do#1{\define@key{blx@lbx}{#1}{\blx@defstring{#1}{##1}}} \abx@dostrings % in *.cbx/bbx/tex: (implicit) % in *.lbx: inherit = {}, \define@key{blx@lbx}{inherit}{% \blx@lbxinput{#1}{}{\blx@err@nolang{#1}}% \csuse{abx@strings@#1}} \def\blx@cfg@defstring#1#2{% \csdef{abx@lstr@#1}{#2}% \csdef{abx@sstr@#1}{#2}} \def\blx@lbx@defstring#1#2{% \blx@lbx@defstring@i{#1}#2} \def\blx@lbx@defstring@i#1#2#3{% \csdef{abx@lstr@#1}{#2}% \csdef{abx@sstr@#1}{#3}} % {} \def\blx@lbxcheck#1{% \ifcsdef{blx@lng@#1} {\expandafter\expandafter\expandafter\IfFileExists \expandafter\expandafter\expandafter{% \csname blx@lng@#1\endcsname.lbx} {} {\blx@err@nolang{#1}}} {\IfFileExists{#1.lbx} {} {\blx@err@nolang{#1}}}} % {}{} \newrobustcmd*{\DefineBibliographyExtras}[2]{% \blx@lbxcheck{#1}% \csgappto{blx@hook@extras@#1}{% \blx@defbibextras{#1}{#2}}} \@onlypreamble\DefineBibliographyExtras \newrobustcmd*{\UndefineBibliographyExtras}[2]{% \blx@lbxcheck{#1}% \csgappto{blx@hook@noextras@#1}{% \blx@undefbibextras{#1}{#2}}} \@onlypreamble\UndefineBibliographyExtras \def\blx@defbibextras#1{\csgappto{abx@extras@#1}} \def\blx@undefbibextras#1{\csgappto{abx@noextras@#1}} % {}{} \def\blx@letbibextras#1#2{% \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}% \global\csletcs{abx@extras@#1}{abx@extras@#2} \global\csletcs{abx@noextras@#1}{abx@noextras@#2}}% % {}{} \newrobustcmd*{\DefineBibliographyStrings}[2]{% \blx@lbxcheck{#1}% \csgappto{blx@hook@strings@#1}{% \begingroup \let\blx@defstring\blx@cfg@defstring \blx@defbibstrings{#1}{#2}% \endgroup}} \@onlypreamble\DefineBibliographyStrings \def\blx@defbibstrings#1#2{% \def\do##1{\csundef{abx@lstr@##1}\csundef{abx@sstr@##1}}% \abx@dostrings \csuse{abx@strings@#1}% \setkeys{blx@lbx}{#2}% \let\do\blx@defbibstrings@i \csxdef{abx@strings@#1}{\abx@dostrings}% \csgappto{abx@strings@#1}{% \ifcsdef{\abx@str @bibliography} {\letcs\bibname{\abx@str @bibliography}} {\let\bibname\@empty}% \ifcsdef{\abx@str @references} {\letcs\refname{\abx@str @references}} {\let\refname\@empty}% \ifcsdef{\abx@str @shorthands} {\letcs\biblistname{\abx@str @shorthands}} {\let\biblistname\@empty}}} \def\blx@defbibstrings@i#1{% \ifcsdef{abx@lstr@#1} {\def\expandafter\noexpand\csname abx@lstr@#1\endcsname{% \csexpandonce{abx@lstr@#1}}} {\undef\expandafter\noexpand\csname abx@lstr@#1\endcsname}% \ifcsdef{abx@sstr@#1} {\def\expandafter\noexpand\csname abx@sstr@#1\endcsname{% \csexpandonce{abx@sstr@#1}}} {\undef\expandafter\noexpand\csname abx@sstr@#1\endcsname}} % {}{} \def\blx@letbibstrings#1#2{% \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}% \global\csletcs{abx@strings@#1}{abx@strings@#2}}% % {}{} \newrobustcmd*{\DefineHyphenationExceptions}[2]{% \ifcsundef{l@#1} {\blx@warn@nohyph{#1}} {}% \csgappto{blx@hook@hyph@#1}{\blx@hyphexcept{#1}{#2}}} \@onlypreamble\DefineHyphenationExceptions \def\blx@hyphexcept#1#2{% \ifcsundef{l@#1} {\blx@warn@nohyph{#1}} {\begingroup \language\csname l@#1\endcsname\relax \hyphenation{#2}% \endgroup}} % {}{} \newrobustcmd*{\DeclareLanguageMapping}[2]{% \csgdef{blx@lng@#1}{#2}} \@onlypreamble\DeclareLanguageMapping % {}{}{} \def\blx@lbxinput#1{% \ifcsdef{blx@lng@#1} {\expandafter\expandafter\expandafter\blx@lbxinput@i \expandafter\expandafter\expandafter{% \csname blx@lng@#1\endcsname}{#1}} {\blx@lbxinput@ii{#1}{#1}{language '#1'}}} % {}{} \def\blx@lbxinput@i#1#2{% \global\csundef{blx@lng@#2}% \IfFileExists{#1.lbx} {\blx@lbxinput@ii{#2}{#1}{language '#2' -> '#1'}} {\blx@warning@noline{% File '#1.lbx' not found!\MessageBreak Ignoring mapping '#2' -> '#1'}% \blx@lbxinput{#2}}} % {}{}{} \def\blx@lbxinput@ii#1#2#3{% \begingroup \setbox\@tempboxa=\hbox\bgroup \aftergroup\endgroup \blx@inputonce{#2.lbx}{#3} {\global\cslet{abx@strings@#1}\@empty \global\cslet{abx@extras@#1}\@empty \global\cslet{abx@noextras@#1}\@empty \blx@maplang{#1}{#1}% \def\InheritBibliographyStrings{% \blx@letbibstrings{#1}}% \def\DeclareBibliographyStrings####1{% \begingroup \let\blx@defstring\blx@lbx@defstring \blx@defbibstrings{#1}{####1}% \endgroup}% \def\InheritBibliographyExtras{\blx@letbibextras{#1}}% \def\DeclareBibliographyExtras{\blx@defbibextras{#1}}% \def\UndeclareBibliographyExtras{\blx@undefbibextras{#1}}% \def\DeclareHyphenationExceptions{\blx@hyphexcept{#1}}% \begingroup \blx@saneccodes \makeatletter} {\endgroup \csuse{blx@hook@strings@#1}% \csuse{blx@hook@strings@#2}% \csuse{blx@hook@extras@#1}% \csuse{blx@hook@extras@#2}% \csuse{blx@hook@noextras@#1}% \csuse{blx@hook@noextras@#2}% \csuse{blx@hook@hyph@#1}% \csuse{blx@hook@hyph@#2}} {\aftergroup\@firstoftwo} {\aftergroup\@secondoftwo}% \egroup} % {} \def\blx@langsetup#1{% \blx@lbxinput{#1} {\edef\blx@languagename{#1}} {\blx@warning {Language '#1' not supported.\MessageBreak Using fallback language '\blx@languagename'}% \blx@lbxinput{\blx@languagename} {\blx@maplang{#1}{\blx@languagename}} {\blx@err@nolang{\blx@languagename}}}} % auxiliary macros % {} \newrobustcmd*{\mkbibrangeshort}{% \mkbibrangefull{short}} \newrobustcmd*{\mkbibrangelong}{% \mkbibrangefull{long}} \newrobustcmd*{\mkbibrangeterse}{% \mkbibrangetrunc{short}} \newrobustcmd*{\mkbibrangecomp}{% \mkbibrangetrunc{long}} \newrobustcmd*{\mkbibrangeshortextra}{% \mkbibrangefullextra{short}} \newrobustcmd*{\mkbibrangelongextra}{% \mkbibrangefullextra{long}} \newrobustcmd*{\mkbibrangeterseextra}{% \mkbibrangetruncextra{short}} \newrobustcmd*{\mkbibrangecompextra}{% \mkbibrangetruncextra{long}} % {}{} \newrobustcmd*{\mkbibrangefull}[2]{% \iffieldundef{#2year} {} {\printtext[#2date]{% \csuse{mkbibdate#1}{#2year}{#2month}{#2day}% \iffieldundef{#2endyear} {} {\iffieldequalstr{#2endyear}{} {\mbox{\bibdatedash}} {\bibdatedash \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}}}} \newrobustcmd*{\mkbibrangetrunc}[2]{% \iffieldundef{#2year} {} {\printtext[#2date]{% \iffieldsequal{#2year}{#2endyear} {\iffieldsequal{#2month}{#2endmonth} {\csuse{mkbibdate#1}{}{}{#2day}} {\csuse{mkbibdate#1}{}{#2month}{#2day}}} {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}% \iffieldundef{#2endyear} {} {\iffieldequalstr{#2endyear}{} {\mbox{\bibdatedash}} {\bibdatedash \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}}}} \newrobustcmd*{\mkbibrangefullextra}[2]{% \iffieldundef{#2year} {} {\printtext[#2date]{% \printtext{% \csuse{mkbibdate#1}{#2year}{#2month}{#2day}}% \iffieldundef{#2endyear} {\printfield{extrayear}} {\iffieldequalstr{#2endyear}{} {\printfield{extrayear}% \printtext{\mbox{\bibdatedash}}} {\printtext{% \bibdatedash \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}% \printfield{extrayear}}}}}}} \newrobustcmd*{\mkbibrangetruncextra}[2]{% \iffieldundef{#2year} {} {\printtext[#2date]{% \printtext{% \iffieldsequal{#2year}{#2endyear} {\iffieldsequal{#2month}{#2endmonth} {\csuse{mkbibdate#1}{}{}{#2day}} {\csuse{mkbibdate#1}{}{#2month}{#2day}}} {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}}}% \iffieldundef{#2endyear} {\printfield{extrayear}} {\iffieldequalstr{#2endyear}{} {\printfield{extrayear}% \printtext{\mbox{\bibdatedash}}} {\printtext{% \bibdatedash \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}% \printfield{extrayear}}}}}}} \newrobustcmd*{\mkbibrangeyear}[1]{% \blx@imc@clearfield{#1month}% \blx@imc@clearfield{#1day}% \blx@imc@clearfield{#1endmonth}% \blx@imc@clearfield{#1endday}% \iffieldsequal{#1year}{#1endyear} {\blx@imc@clearfield{#1endyear}} {}% \mkbibrangefull{short}{#1}} \newrobustcmd*{\mkbibrangeyearextra}[1]{% \blx@imc@clearfield{#1month}% \blx@imc@clearfield{#1day}% \blx@imc@clearfield{#1endmonth}% \blx@imc@clearfield{#1endday}% \iffieldsequal{#1year}{#1endyear} {\blx@imc@clearfield{#1endyear}} {}% \mkbibrangefullextra{short}{#1}} \expandafter\newrobustcmd \expandafter*\csname mkbibrangeiso8601\endcsname[1]{% \iffieldundef{#1year} {} {\printtext[#1date]{% \blx@isodate{#1year}{#1month}{#1day}% \iffieldundef{#1endyear} {} {\addslash\blx@isodate{#1endyear}{#1endmonth}{#1endday}}}}} \expandafter\newrobustcmd \expandafter*\csname mkbibrangeiso8601extra\endcsname[1]{% \iffieldundef{#1year} {} {\printtext[#1date]{% \blx@isodate[extrayear]{#1year}{#1month}{#1day}% \iffieldundef{#1endyear} {} {\addslash\blx@isodate{#1endyear}{#1endmonth}{#1endday}}}}} \newrobustcmd*{\blx@isodate}[4][]{% \thefield{#2}\ifblank{#1}{}{\printfield{#1}}% \iffieldundef{#3}{}{\mbox{-}\thefield{#3}}% \iffieldundef{#4}{}{\mbox{-}\thefield{#4}}} \newrobustcmd*{\mkbibdatelong}[3]{} \newrobustcmd*{\mkbibdateshort}[3]{} \newrobustcmd*{\bibrangedash}{\textendash} \newrobustcmd*{\bibrangessep}{,\space} \newrobustcmd*{\bibdatedash}{\bibrangedash} \newrobustcmd*{\finalandcomma}{} \newrobustcmd*{\finalandsemicolon}{} \newrobustcmd*{\mkbibordinal}[1]{#1} \newrobustcmd*{\mkbibmascord}{\mkbibordinal} \newrobustcmd*{\mkbibfemord}{\mkbibordinal} \newrobustcmd*{\mkbibneutord}{\mkbibordinal} \newrobustcmd*{\mkbibmonth}[1]{% \ifcase0#1\relax \blx@warning@entry{Month out of range or not an integer}% \or\abx@bibmonth{january}% \or\abx@bibmonth{february}% \or\abx@bibmonth{march}% \or\abx@bibmonth{april}% \or\abx@bibmonth{may}% \or\abx@bibmonth{june}% \or\abx@bibmonth{july}% \or\abx@bibmonth{august}% \or\abx@bibmonth{september}% \or\abx@bibmonth{october}% \or\abx@bibmonth{november}% \or\abx@bibmonth{december}% \else \blx@warning@entry{Month out of range}#1% \fi} \protected\def\blx@imc@printdatelabel{} \protected\def\blx@imc@printdateextralabel{} \let\blx@imc@mkdatezeros\@firstofone \protected\def\blx@imc@stripzeros#1{% \begingroup \setbox\@tempboxa=\hbox\bgroup \aftergroup\endgroup \abx@hook@xsanitize \if0#1\relax \expandafter\@firstoftwo \else \expandafter\@secondoftwo \fi {\@tempcnta#1\relax \expandafter\egroup \number\@tempcnta \@tempcnta#1\relax} {\egroup#1}} \blx@regimcs{\printdatelabel \printdateextralabel \printorigdate \stripzeros \mkdatezeros} % User macro for retrieving currrent language \def\currentlang{\blx@languagename} % {}{} \def\blx@maplang#1#2{% \csxappto{extras#1}{% \noexpand\blx@resetpunct \expandafter\noexpand\csname abx@extras@#2\endcsname \expandafter\noexpand\csname abx@strings@#2\endcsname}% \csxappto{noextras#1}{% \noexpand\blx@resetpunct \expandafter\noexpand\csname abx@noextras@#2\endcsname}} %% babel/polyglossia interface \def\blx@beglang{\blx@clearlang\begingroup} \def\blx@endlang{\endgroup} \let\blx@beglangbib\blx@beglang \let\blx@endlangbib\blx@endlang \let\blx@beglangcite\blx@beglang \let\blx@endlangcite\blx@endlang \let\blx@hook@endlang\@empty \let\blx@hook@initlang\@empty \let\blx@imc@mainlang\@empty \def\blx@hyphenreset{% \ifcsundef{l@\blx@languagename} {} {\language\csname l@\blx@languagename\endcsname\relax}% \ifcsundef{\blx@languagename hyphenmins} {\blx@sethyphenmins\tw@\thr@@} {\expandafter\expandafter\expandafter\blx@sethyphenmins \csname\blx@languagename hyphenmins\endcsname}} \def\blx@sethyphenmins#1#2{% \lefthyphenmin#1\relax \righthyphenmin#2\relax} \begingroup \@makeother\# \gdef\blx@mkautolangbabel{% \ifundef\bbl@main@language {\blx@error {No default babel language defined} {You must define a default language for babel}} {}% \pretocmd\select@language{\blx@langsetup{#1}} {\ifdef\blx@thelangenv {\def\blx@beglang{% \blx@clearlang \begingroup % Need to override all entries, regardless of if there is a langid % if language= option is given \ifboolexpr { test {\ifdef\abx@field@langid } or test {\ifdef\blx@forcelanguagename} } % override local langid if we forced it with % language= option {\ifdef\blx@forcelanguagename {\let\abx@field@langid\blx@forcelanguagename} {}% \let\blx@languagename\abx@field@langid% track global language \ifcsundef{l@\abx@field@langid} {\blx@warn@nohyph{\abx@field@langid}} {\blx@hook@initlang \def\blx@endlang{% \blx@hook@endlang \csname end\blx@thelangenv\endcsname \endgroup}% \iftoggle{blx@autolangbib} {\let\blx@endlangbib\blx@endlang} {}% \iftoggle{blx@autolangcite} {\let\blx@endlangcite\blx@endlang} {}% \csname\blx@thelangenv\expandafter\endcsname \expandafter{\abx@field@langid}}} {}}} {}% \def\blx@langstrings{}% \def\blx@imc@mainlang{\select@language{\bbl@main@language}}% \blx@langsetup\bbl@main@language} {\blx@err@patch{'babel' package}% \blx@mknoautolang}} \gdef\blx@mkautolangpoly{% \ifundef\bbl@main@language {\blx@error {No default polyglossia language defined} {You must define a default language for polyglossia}} {}% \catcode`\_=11% polyglossia uses "_" as a letter \pretocmd\select@language{\blx@langsetup{#1}} {\ifdef\blx@thelangenv {\def\blx@beglang{% \blx@clearlang \begingroup % Need to override all entries, regardless of if there is a langid % if language= option is given \ifboolexpr { test {\ifdef\abx@field@langid } or test {\ifdef\blx@forcelanguagename} } % override local langid if we forced it with % language= option {\ifdef\blx@forcelanguagename {\let\abx@field@langid\blx@forcelanguagename} {}% \let\blx@languagename\abx@field@langid% track global language \ifcsundef{l@\abx@field@langid} {\blx@warn@nohyph{\abx@field@langid}} {\blx@hook@initlang \def\blx@endlang{% \blx@hook@endlang % Polyglossia language envs are \[] \ifcsstring{blx@thelangenv}{langname} {\csname end\abx@field@langid\endcsname} {\csname end\blx@thelangenv\endcsname}% \endgroup}% \iftoggle{blx@autolangbib} {\let\blx@endlangbib\blx@endlang} {}% \iftoggle{blx@autolangcite} {\let\blx@endlangcite\blx@endlang} {}% \ifcsstring{blx@thelangenv}{langname} {\ifdef\abx@field@langidopts {\csname\abx@field@langid\expandafter\endcsname\expandafter[\abx@field@langidopts]} {\csname\abx@field@langid\endcsname}} {\csname\blx@thelangenv\expandafter\endcsname\expandafter{\abx@field@langid}}% % These lines are equal to \blx@maplang \blx@resetpunct \csuse{abx@extras@\abx@field@langid}% \csuse{abx@strings@\abx@field@langid}}} {}}} {}% % polyglossia needs this - it doesn't get the % strings automatically set for some reason \def\blx@langstrings{% \csuse{abx@extras@\languagename}% \csuse{abx@strings@\languagename}}% \def\blx@imc@mainlang{% \select@language{\bbl@main@language}% % These lines are equal to \blx@maplang \blx@resetpunct \csuse{abx@extras@\bbl@main@language}% \csuse{abx@strings@\bbl@main@language}}% \blx@langsetup\bbl@main@language} {\blx@err@patch{'polyglossia' package}% \blx@mknoautolang}% \catcode`\_=8} \endgroup \def\blx@mknoautolang{% \blx@lbxinput{\blx@languagename} {} {\blx@err@nolang{\blx@languagename}}} \blx@regimcs{\mainlang} \newrobustcmd*{\DeclareRedundantLanguages}[2]{% \begingroup \ifblank{#2} {\def\do##1{% \global\csundef{blx@rlm@##1}% \global\csundef{blx@rlm@lang##1}}} {\def\do##1{% \csxdef{blx@rlm@##1}{#2}% \csxdef{blx@rlm@lang##1}{#2}}}% \docsvlist{#1}% \endgroup} \def\blx@clearlang{% \iftoggle{blx@clearlang} {\iflistundef{language} {} {\ifnumgreater{\value{language}}{1} {} {\expandafter\blx@clearlang@i\abx@list@language}}} {}} \def\blx@clearlang@i#1{% \ifcsdef{blx@rlm@#1} {\expandafter\expandafter\expandafter\forcsvlist \expandafter\expandafter\expandafter\blx@clearlang@ii \expandafter\expandafter\expandafter{% \csname blx@rlm@#1\endcsname}} {}} \def\blx@clearlang@ii#1{% \ifdefstring\languagename{#1} {\clearlist{language}} {}} %% Biber equivalents to bibtex data interface \def\abx@doentrytypes{\dolistcsloop{blx@datamodel@entrytypes}} % fields which can be used as labels - we auto-create some macros for these \def\abx@dolabelfields{\dolistcsloop{blx@datamodel@labelfields}} \def\abx@donames{\dolistcsloop{blx@datamodel@names}} \def\abx@dofields{\dolistcsloop{blx@datamodel@fields}} \def\abx@dolists{% \dolistcsloop{blx@datamodel@lists}% \do{pageref}} \def\abx@dodates{\dolistcsloop{blx@datamodel@dates}} % Used to pass regexps to .bcf \def\regexp#1{\expandafter\zap@space\detokenize{#1} \@empty} % Have to do this otherwise the '~'s in the .bcf strings are not expanded % This is done for the .bcf later but since we have to do all the % data model things much earlier, have to set this here and reset on finishing \let\blx@tsave~ \let~\space % Data model and supporting macros must be loaded early \blx@inputonce{blx-dm.def}{biblatex default data model}{}{}{}{} \let~\blx@tsave % We need to now load any style data model % Order of precedence is: % .dbx %