diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex/biblatex_.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/biblatex/biblatex_.sty | 11607 |
1 files changed, 0 insertions, 11607 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex/biblatex_.sty b/Master/texmf-dist/tex/latex/biblatex/biblatex_.sty deleted file mode 100644 index 0bc186ad0f0..00000000000 --- a/Master/texmf-dist/tex/latex/biblatex/biblatex_.sty +++ /dev/null @@ -1,11607 +0,0 @@ -% 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.3. -% -% 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. - -\NeedsTeXFormat{LaTeX2e}[2005/12/01] -\ProvidesPackage{biblatex_} -[\abx@date\space v\abx@version\space programmable bibliographies (biber) (PK/JW/AB)] - -%% Dependencies -\RequirePackage{etoolbox} -\RequirePackage{keyval} -\RequirePackage{kvoptions} -\RequirePackage{logreq} -\RequirePackage{ifthen} -\RequirePackage{url} -%\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} - -% Tests for emptiness, regardless whether the arg is macro or literal -% Expand everything and test as string -\def\ifempty#1{% - \edef\z{#1}% - \expandafter\ifblank\expandafter{\z}} - -%% 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{sourcemap} -\newbool{citetracker} -\newbool{pagetracker} -\newbool{backtracker} -\newbool{citerequest} -\booltrue{citerequest} - -\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@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@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} - -% 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 sorting name key specifications -\global\let\blx@biber@sortingnamekeyspecs\@empty - -% Initialise some lists which track changing citations/sortschemes -% etc. between runs -\global\let\blx@cites\@empty -\global\let\blx@sortnamekeyschemes\@empty -\global\let\blx@lastsortnamekeyschemes\@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} - -%% 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} - -% {<field>} => \do{<item1>}\do{<item2>}... -\def\blx@imc@docsvfield#1{% - \blx@imc@iffieldundef{#1} - {} - {\expandafter\expandafter\expandafter\docsvlist - \expandafter\expandafter\expandafter{% - \csname abx@field@#1\endcsname}}} - -% {<handler>}{<field>} => <handler>{<item1>}<handler>{<item2>}... -\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} - -% {<list>|<listmacro>} -\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} - -% {<listmacro>}{<listcsname>} => matches in <listmacro> -\protected\def\blx@filter#1#2{% - \def\do##1{% - \ifinlistcs{##1}{#2} - {\listadd#1{##1}} - {}}% - \blx@runfilter#1} - -% {<listmacro>}{<listcsname>} => matches in <listmacro> -% 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} - -% {<listmacro>}{<listcsname>} => neg. matches in <listmacro> -\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} - -% {<code>}{<string>} => <code>{<string>} -\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} - -% {<code>}{<string>} => <code>{<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 - -% {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>} -\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}} - -% {<write>}{<precode>}{<string>} -\protected\def\blx@auxwrite#1#2#3{% - \if@filesw - \begingroup - \blx@safe@actives - \let\protect\string - #2% - \immediate\write#1{#3}% - \endgroup - \fi} - -% {<file>}{<signature>}{<true>}{<false>} -\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{<?xml version="1.0" encoding="UTF-8"?>}} -\edef\blx@ver@bcf{% - \detokenize{<bcf:controlfile version="}\blx@bcfversion - \detokenize{" xmlns:bcf="https://sourceforge.net/projects/biblatex">}} - -% {<true>}{<false>} -\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@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@<auxfile> 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 -\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} - -% {<characters>} - -\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} - -% {<characters>} - -\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} - -% {<mark>}{<characters>} - -\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 - -% {<character>}{<true>}{<false>} - -\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} - -% {<true>}{<false>} - -\protected\def\blx@imc@ifterm{% - \ifhmode - \expandafter\blx@imc@ifcapital - \else - \expandafter\@secondoftwo - \fi} - -% {<true>}{<false>} - -\protected\def\blx@imc@ifcapital{% - \ifcsdef{blx@cap@\blx@spacefactor}} - -% {<true>}{<false>} - -\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} - -% {<character>} - -\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 - -% {<bibstyle>} -\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 - -% {<code>} -\newrobustcmd*{\InitializeBibliographyStyle}{\appto\blx@hook@bbxinit} -\@onlypreamble\InitializeBibliographyStyle - -% {<entry type>}{<driverdef>} -\newrobustcmd*{\DeclareBibliographyDriver}[1]{% - \long\csdef{blx@bbx@#1}} -\@onlypreamble\DeclareBibliographyDriver - -% {<entry type>} -\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}}}} - -% {<type>}{<true>}{<false>} -\def\blx@imc@ifdriver#1{\ifcsdef{blx@bbx@#1}} - -% {<alias>}{<type>} -\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}}} - {}} - -% {<name>} -\newrobustcmd*{\savebibmacro}[1]{% - \blx@save{abx@macro@\detokenize{#1}}} - -\newrobustcmd*{\restorebibmacro}[1]{% - \blx@restore{abx@macro@\detokenize{#1}}} - -% {<name>}[<args>][<optarg>]{<definition>} -\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} - -% {<name>} -\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}}} - -% {<name>}{<true>}{<false>} -\def\blx@imc@ifbibmacroundef#1{% - \ifcsundef{abx@macro@#1}} - -% {<field>} -\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}} - -% {<command>}{<field>} -\def\blx@imc@usefield#1#2{% - \expandafter\expandafter\expandafter#1% - \expandafter\expandafter\expandafter{\csname abx@field@#2\endcsname}} - -% {<plainlist>} -\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}} - {}} - -% {<namelist>} -\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}} - {}} - -% {<field>} -\protected\def\blx@imc@clearfield#1{% - \csundef{abx@field@#1}} - -% {<plainlist>} -\protected\def\blx@imc@clearlist#1{% - \ifcsundef{abx@list@#1} - {} - {\togglefalse{abx@bool@more#1}% - \csundef{abx@list@#1}% - \csname c@#1\endcsname\z@}} - -% {<namelist>} -\protected\def\blx@imc@clearname#1{% - \ifcsundef{abx@name@#1} - {} - {\togglefalse{abx@bool@more#1}% - \csundef{abx@name@#1}% - \csname c@#1\endcsname\z@}} - -% {<field>}{<macro>} -\protected\def\blx@imc@restorefield#1{\cslet{abx@field@#1}} - -% {<plainlist>}{<macro>} -\protected\def\blx@imc@restorelist#1{\cslet{abx@list@#1}} - -% {<namelist>}{<macro>} -\protected\def\blx@imc@restorename#1{\cslet{abx@name@#1}} - -% {<field>}{<macro>} -\protected\def\blx@imc@savefield{% - \@ifstar{\blx@savedata{field}}{\global\blx@savedata{field}}} -\def\blx@savedata#1#2#3{\letcs#3{abx@#1@#2}} - -% {<plainlist>}{<macro>} -\protected\def\blx@imc@savelist{% - \@ifstar{\blx@savedata{list}}{\global\blx@savedata{list}}} - -% {<namelist>}{<macro>} -\protected\def\blx@imc@savename{% - \@ifstar{\blx@savedata{name}}{\global\blx@savedata{name}}} - -% {<field>}{<csname>} -\protected\def\blx@imc@savefieldcs{% - \@ifstar{\blx@savedatacs{field}}{\global\blx@savedatacs{field}}} -\def\blx@savedatacs#1#2#3{\csletcs{#3}{abx@#1@#2}} - -% {<plainlist>}{<csname>} -\protected\def\blx@imc@savelistcs{% - \@ifstar{\blx@savedatacs{list}}{\global\blx@savedatacs{list}}} - -% {<namelist>}{<csname>} -\protected\def\blx@imc@savenamecs{% - \@ifstar{\blx@savedatacs{name}}{\global\blx@savedatacs{name}}} - -% {<field>}{<true>}{<false>} -\def\blx@imc@iffieldundef#1{% - \ifcsundef{abx@field@#1}} - -% {<plainlist>}{<true>}{<false>} -\def\blx@imc@iflistundef#1{% - \ifcsundef{abx@list@#1}} - -% {<namelist>}{<true>}{<false>} -\def\blx@imc@ifnameundef#1{% - \ifcsundef{abx@name@#1}} - -% {<field1>}{<field2>}{<true>}{<false>} -\def\blx@imc@iffieldsequal#1#2{% - \ifcsequal{abx@field@#1}{abx@field@#2}} - -% {<plainlist1>}{<plainlist2>}{<true>}{<false>} -\def\blx@imc@iflistsequal#1#2{% - \ifcsequal{abx@list@#1}{abx@list@#2}} - -% {<namelist1>}{<namelist2>}{<true>}{<false>} -\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}}}}} - -% {<field>}{<macro>}{<true>}{<false>} -\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}}} - -% {<plainlist>}{<macro>}{<true>}{<false>} -\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}}} - -% {<namelist>}{<macro>}{<true>}{<false>} -\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}}} - -% {<field>}{<csname>}{<true>}{<false>} -\def\blx@imc@iffieldequalcs#1{% - \ifcsequal{abx@field@#1}} - -% {<plainlist>}{<csname>}{<true>}{<false>} -\def\blx@imc@iflistequalcs#1{% - \ifcsequal{abx@list@#1}} - -% {<namelist>}{<csname>}{<true>}{<false>} -\def\blx@imc@ifnameequalcs#1{% FIXME - \ifcsequal{abx@name@#1}} - -% {<field>}{<string>}{<true>}{<false>} -\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}}} - -% {<field>}{<true>}{<false>} -\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}}} - -% {<plainlist>}{<true>}{<false>} -\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} - -% {<namelist>}{<true>}{<false>} -\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} - -% {<string>}{<true>}{<false>} -\protected\def\blx@imc@ifcurrentfield#1{% - \begingroup - \def\blx@tempa{#1}% - \ifx\currentfield\blx@tempa - \aftergroup\@firstoftwo - \else - \aftergroup\@secondoftwo - \fi - \endgroup} - -% {<string>}{<true>}{<false>} -\protected\def\blx@imc@ifcurrentlist#1{% - \begingroup - \def\blx@tempa{#1}% - \ifx\currentlist\blx@tempa - \aftergroup\@firstoftwo - \else - \aftergroup\@secondoftwo - \fi - \endgroup} - -% {<string>}{<true>}{<false>} -\protected\def\blx@imc@ifcurrentname#1{% - \begingroup - \def\blx@tempa{#1}% - \ifx\currentname\blx@tempa - \aftergroup\@firstoftwo - \else - \aftergroup\@secondoftwo - \fi - \endgroup} - -% {<string>}{<true>}{<false>} -\protected\def\blx@imc@ifentrytype#1{% - \begingroup - \def\blx@tempa{#1}% - \ifx\abx@field@entrytype\blx@tempa - \aftergroup\@firstoftwo - \else - \aftergroup\@secondoftwo - \fi - \endgroup} - -% {<true>}{<false>} -\def\blx@imc@ifmorenames{% - \ifundef\currentname - {\@secondoftwo} - {\iftoggle{abx@bool@more\currentname} - {\@firstoftwo} - {\ifnum\c@listtotal>\c@liststop - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi}}} - -% {<true>}{<false>} -\def\blx@imc@ifmoreitems{% - \ifundef\currentlist - {\@secondoftwo} - {\iftoggle{abx@bool@more\currentlist} - {\@firstoftwo} - {\ifnum\c@listtotal>\c@liststop - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi}}} - -% {<true>}{<false>} -\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} }} - -% {<category>}{<true>}{<false>} -\protected\def\blx@imc@ifcategory{% - \ifdef\abx@field@entrykey - {\blx@imc@ifentrycategory\abx@field@entrykey} - {\expandafter\@secondoftwo\@gobble}} - -% {<entrykey>}{<category>}{<true>}{<false>} -\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}} - -% {<keyword>}{<true>}{<false>} -\protected\def\blx@imc@ifkeyword{% - \ifdef\abx@field@entrykey - {\blx@imc@ifentrykeyword\abx@field@entrykey} - {\expandafter\@secondoftwo\@gobble}} - -% {<entrykey>}{<keyword>}{<true>}{<false>} -\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}} - -% {<true>}{<false>} -\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}} - -% {<entrykey>}{<true>}{<false>} -\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}} - -% {<true>}{<false>} -\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}} - -% {<true>}{<false>} -\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}} - -% {<true>}{<false>} -\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}} - -% {<true>}{<false>} -\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}}} - -% {<true>}{<false>} -\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 - -% {<true>}{<false>} -\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}} - -% {<count1>}{<count2>}{<true>}{<false>} -\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} - -% {<string>}{<true>}{<false>} -\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} - -% {<field>}{<true>}{<false>} -\protected\def\blx@imc@iffieldint#1{% - \blx@imc@iffieldundef{#1} - {\@secondoftwo} - {\expandafter\expandafter - \expandafter\ifinteger - \expandafter\expandafter - \expandafter{\csname abx@field@#1\endcsname}}} - -% {<string>}{<true>}{<false>} -\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} - -% {<field>}{<true>}{<false>} -\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}}} - -% {<chars>} -\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}} - -% {<chars>} -\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} - -% {<cstokens>} -\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} - -% {<cstokens>} -\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} - -% *{<code>} -\newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum} -\newcommand*{\NumcheckSetup}{\NumCheckSetup} - -% [<pagination>][<postpro>]{<string>} -\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} - -% [<pagination>][<postpro>]{<string>} -\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} - -% {<rangefield>} -\newcommand*{\frangelen}[1]{% - \ifcsdef{abx@range@#1} - {\csuse{abx@range@#1}} - {}} - -% {<string>} -% This mustn't be robust as it's likely to be used mainly tests and so -% needs to be expandable -\newcommand*\rangelen[1]{% - \ifblank{#1} - {0}% - {% - \expandafter\blx@rangelen@range\romannumeral-`\q% - #1\bibrangedash\bibrangedash&% - }% - } - -\def\blx@rangelen@range#1\bibrangedash#2\bibrangedash#3&{% - \ifblank{#3} - {\blx@rangelen@hyphen#1--&} - {\blx@rangelen@check{#1}{#2}}% -} -\def\blx@rangelen@hyphen#1-#2-#3&{% - \ifblank{#3} - {1}% No range at all: assume one page - {\blx@rangelen@check{#1}{#2}}% -} -\def\blx@rangelen@check#1#2{% - \expandafter\blx@rangelen@check@aux - \number\numexpr - \blx@rangelen@check@int{#2} - - - \blx@rangelen@check@int{#1} - + 1 - \relax - &\stop -} -\def\blx@rangelen@check@aux#1\stop{% - \ifblank{#2} - {#1} - {-1}% -} -\def\blx@rangelen@check@int#1{% - \ifblank{#1} - {0&} - {% - \if\number\numexpr0#1-0#1\relax0 - #1 - \else - 0& - \fi - }% -} - -% <*>[<postpro>]{<string>} - -\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&} - {}} - -% <*>[<postpro>]{<string>} -\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}{} - -% {<init>}{<entrytype>} - -\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% - \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\ifsingletitle{\iftoggle{abx@bool@singletitle}}% - \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 - -% {<text>} -\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} - -% {<text>} -\newrobustcmd*{\MakeSentenceCase}{% - \@ifstar\blx@mksc@i\blx@mksc@ii} - -\def\blx@mksc@i{% - \ifdef\abx@field@langid - {\xifinlist\abx@field@langid\blx@cmksc@lang - {\blx@mksc@ii} - {\@firstofone}} - {\blx@mksc@ii}} - -\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} - -% {<language,language,...>} -\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} - -%% Main formatting commands - -% [<entrytype>]{<name>}{<definiton>} -\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}{}}} - -% {<macro>}{<class>}{<*>} -\def\blx@defformat#1#2#3{% - \@ifnextchar[%] - {\blx@defformat@i{#1}{#2}{#3}} - {\blx@defformat@i{#1}{#2}{#3}[*]}} - -% {<macro>}{<class>}{<*>}[<entrytype>]{<name>} -\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 - \dolistcsloop{blx@biber@datamodel@entrytypes}% - \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}} - {}} - -% {<name>}{<name>} -\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}}} - -% {<macro>}{<id>}{<name>}{<field>} -\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}}} - -% [<entrytype>]{<name>} -\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}} - -% [<entrytype>]{<name>}{<true>}{<false>} -\newrobustcmd*{\iffieldformatundef}[2][*]{\ifcsundef{abx@ffd@#1@#2}} -\newrobustcmd*{\iflistformatundef}[2][*]{\ifcsundef{abx@lfd@#1@#2}} -\newrobustcmd*{\ifnameformatundef}[2][*]{\ifcsundef{abx@nfd@#1@#2}} - -% [<entrytype>]{<alias>}[<entrytype>]{<name>} -\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}} - -% [<format>]{<text>} -\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}}} - -% [<format>]{<field>} -\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}}} - -% [<format>]{<field>} -\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}}} - -% [<format>]{<file>} -\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}} - -% {<macro>}[<format>][<start>-<stop>] -% => <macro>{<format>}{<start>}{<stop>} -\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}} - -% [<format>][<start>-<stop>]{<namelist>} -\protected\def\blx@imc@printnames{% - \blx@listargs\blx@printnames} - -% {<format>}{<start>}{<stop>}{<namelist>} -\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} - -% [<format>][<start>-<stop>]{<namelist>} -\protected\def\blx@imc@indexnames{% - \blx@listargs\blx@indexnames} - -% {<format>}{<start>}{<stop>}{<namelist>} -\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} - -% {<name1>}{<name2>}{...} -\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}} - -\long\def\blx@nameparser@i#1{% - \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}% - \blx@theformat} - -\long\def\blx@namebreak#1&{} - -% [<format>][<start>-<stop>]{<plainlist>} -\protected\def\blx@imc@printlist{% - \blx@listargs\blx@printlist} - -% {<format>}{<start>}{<stop>}{<plainlist>} -\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}} - -% [<format>][<start>-<stop>]{<plainlist>} -\protected\def\blx@imc@indexlist{% - \blx@listargs\blx@indexlist} - -% {<format>}{<start>}{<stop>}{<plainlist>} -\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}}} - -% {<item1>}{<item2>}{...} -\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&{} - -% <*>{<key>}{<code>} -\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@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 - -% [<wrapper>]{<string>} -\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}} - -% [<wrapper>]{<string>} -\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}} - -% [<wrapper>]{<string>} -\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}} - -% [<wrapper>]{<string>} -\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}} - -% {<string>} -\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}}} - -% {<string>}{<true>}{<false>} -\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}} - -% {<field>}{<true>}{<false>} -\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{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{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: <key> = {<string>}, -% in *.lbx: <key> = {{<longstring>}{<abbrevstring>}}, -\def\do#1{\define@key{blx@lbx}{#1}{\blx@defstring{#1}{##1}}} -\abx@dostrings - -% in *.cbx/bbx/tex: (implicit) -% in *.lbx: inherit = {<language>}, -\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}} - -% {<language>} -\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}}}} - -% {<language>}{<definitions>} -\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}} - -% {<language>}{<language>} -\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}}% - -% {<language>}{<strings>} -\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}} - -% {<language>}{<language>} -\def\blx@letbibstrings#1#2{% - \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}% - \global\csletcs{abx@strings@#1}{abx@strings@#2}}% - -% {<language>}{<exceptions>} -\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}} - -% {<language>}{<mapping>} -\newrobustcmd*{\DeclareLanguageMapping}[2]{% - \csgdef{blx@lng@#1}{#2}} -\@onlypreamble\DeclareLanguageMapping - -% {<language>}{<success>}{<failure>} -\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'}}} - -% {<mapping>}{<language>} -\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}}} - -% {<language>}{<lbxfile>}{<message>} -\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} - -% {<language>} -\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 - -% {<field base name>} - -\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}} - -% {<short|long>}{<basename>} - -\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@printdate{} -\protected\def\blx@imc@printdateextra{} -\protected\def\blx@imc@printdatelabel{} -\protected\def\blx@imc@printdateextralabel{} -\protected\def\blx@imc@printurldate{} -\protected\def\blx@imc@printeventdate{} -\protected\def\blx@imc@printorigdate{} - -\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{% - \printdate \printdateextra \printdatelabel \printdateextralabel - \printurldate \printeventdate \printorigdate \stripzeros \mkdatezeros} - -% {<language>}{<strings>} -\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 - \ifdef\abx@field@langid - {\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 - \ifdef\abx@field@langid - {\ifcsundef{l@\abx@field@langid} - {\blx@warn@nohyph{\abx@field@langid}} - {\blx@hook@initlang - \def\blx@endlang{% - \blx@hook@endlang - % Polyglossia language envs are \<lang>[] - \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@dotypes{\dolistcsloop{blx@biber@datamodel@entrytypes}} - -% fields which can be used as labels - we auto-create some macros for these -\def\abx@dolabelfields{% - \dolistcsloop{blx@biber@datamodel@labelfields}} - -\def\abx@donames{% - \dolistcsloop{blx@biber@datamodel@names}% -} - -\def\abx@dolists{% - \dolistcsloop{blx@biber@datamodel@lists}% - \do{pageref}% -} - -\def\abx@dofields{\dolistcsloop{blx@biber@datamodel@fields}} - -% 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: -% <datamodel option>.dbx -% <style option>.dbx -% <citestyle option>.dbx and <bibstyle option>.dbx -% This has to be done before the real options processing so we need to -% pick out just these four options to look at. You can't do this with keyval, -% you have to use kvoptions. So, pick out these four, pass through all -% others and delete datamodel option as we don't care about it when we come -% to really set options below -\SetupKeyvalOptions{ - family=blx@opt@eldt, - prefix=blx@opt@eldt@} -\DeclareStringOption{datamodel} -\DeclareStringOption{style} -\DeclareStringOption{citestyle} -\DeclareStringOption{bibstyle} -\DeclareDefaultOption{} -\ProcessLocalKeyvalOptions{blx@opt@eldt} -\ifx\blx@opt@eldt@datamodel\@empty - \ifx\blx@opt@eldt@style\@empty - \ifx\blx@opt@eldt@citestyle\@empty - \else - \blx@inputonce{\blx@opt@eldt@citestyle.dbx}{biblatex citestyle data model}{}{}{}{} - \fi - \ifx\blx@opt@eldt@bibstyle\@empty - \else - \blx@inputonce{\blx@opt@eldt@bibstyle.dbx}{biblatex bibstyle data model}{}{}{}{} - \fi - \else - \blx@inputonce{\blx@opt@eldt@style.dbx}{biblatex style data model}{}{}{}{} - \fi -\else - \blx@inputonce{\blx@opt@eldt@datamodel.dbx}{biblatex style data model}{}{}{}{} -\fi -\DisableKeyvalOption[action=undef,local]{blx@opt@eldt}{datamodel} - -% Override with user-defined data model if there is one -\blx@inputonce{biblatex-dm.cfg}{biblatex custom data model}{}{}{}{} - -% Initialise option datatypes lists -\global\let\blx@bcf@options@scope@global\@empty -\global\let\blx@bcf@options@scope@type\@empty -\global\let\blx@bcf@options@scope@entry\@empty -\global\let\blx@bcf@options@scope@namelist\@empty -\global\let\blx@bcf@options@scope@name\@empty -\global\let\blx@globalopts@datatypes\@empty -\global\let\blx@typeopts@datatypes\@empty -\global\let\blx@entryopts@datatypes\@empty -\global\let\blx@namelistopts@datatypes\@empty -\global\let\blx@nameopts@datatypes\@empty -\def\do#1{% - \global\cslet{blx@globalopts@#1}\@empty - \global\cslet{blx@typeopts@#1}\@empty - \global\cslet{blx@entryopts@#1}\@empty - \global\cslet{blx@namelistopts@#1}\@empty - \global\cslet{blx@nameopts@#1}\@empty} -\expandafter\expandafter\expandafter\docsvlist\expandafter\expandafter\expandafter{\csname blx@datamodel@constant@optiondatatypes\endcsname} - -% Helper for collecting options and datatypes -% {<datatype>}{<scope>}{<name>} -\def\blx@collectopts#1#2#3{% - \ifinlistcs{#1}{#2@datatypes} - {} - {\listcsgadd{#2@datatypes}{#1}}% - \ifinlistcs{#3}{#2@#1} - {} - {\listcsgadd{#2@#1}{#3}}} - -% useprefix namelist/name scope -\blx@collectopts{boolean}{blx@namelistopts}{useprefix}% for passing to bcf -\blx@collectopts{boolean}{blx@nameopts}{useprefix}% for passing to the .bcf - -% sortnamekeyscheme namelist/name scope -\blx@collectopts{string}{blx@namelistopts}{sortnamekeyscheme}% for passing to bcf -\blx@collectopts{string}{blx@nameopts}{sortnamekeyscheme}% for passing to the .bcf - -% Misc globalopts -\blx@collectopts{xml}{blx@globalopts}{datamodel}% for passing to the .bcf -\blx@collectopts{string}{blx@globalopts}{controlversion}% for passing to the .bcf - -\newcommand*{\labelalphaothers}{+} -\newcommand*{\sortalphaothers}{\labelalphaothers} -\blx@collectopts{string}{blx@globalopts}{alphaothers}% for passing to the .bcf -\blx@collectopts{string}{blx@typeopts}{alphaothers}% for passing to the .bcf -\blx@collectopts{string}{blx@globalopts}{sortalphaothers}% for passing to the .bcf -\blx@collectopts{string}{blx@typeopts}{sortalphaothers}% for passing to the .bcf - -% The Declare*Option macros are for options which need to be visible -% to biblatex. For options which only biber needs to see, they can be -% passed to the .bcf directly using \blx@collectopts -% [<datatype>]{<key>}[<value>]{<code>} -\newrobustcmd*{\DeclareBibliographyOption}[2][]{% - \ifblank{#1} - {\def\blx@tempa{boolean}} - {\ifcsundef{blx@globalopts@#1} - {\blx@warn@badoptdt{#1}% - \def\blx@tempa{boolean}} - {\def\blx@tempa{#1}}}% - \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@globalopts}{#2}% - \@ifnextchar[%] - {\blx@defbibopt{#2}} - {\blx@defbibopt{#2}[]}} - -\long\def\blx@defbibopt#1[#2]#3{% - \ifcsundef{KV@blx@opt@ldt@#1} - {\ifcsundef{KV@blx@opt@pre@#1} - {\ifblank{#2} - {\define@key{blx@opt@pre}{#1}{#3}} - {\define@key{blx@opt@pre}{#1}[#2]{#3}}} - {\blx@err@optdef{#1}}} - {\blx@err@optdef{#1}}} - -% [<datatype>]{<key>}[<value>]{<code>} -\newrobustcmd*{\DeclareTypeOption}[2][]{% - \ifblank{#1} - {\def\blx@tempa{boolean}} - {\ifcsundef{blx@typeopts@#1} - {\blx@warn@badoptdt{#1}% - \def\blx@tempa{boolean}} - {\def\blx@tempa{#1}}}% - \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@typeopts}{#2}% - \@ifnextchar[%] - {\blx@deftypeopt{#2}} - {\blx@deftypeopt{#2}[]}} - -\long\def\blx@deftypeopt#1[#2]#3{% - \ifcsundef{KV@blx@opt@typ@#1} - {\ifblank{#2} - {\define@key{blx@opt@typ}{#1}{#3}} - {\define@key{blx@opt@typ}{#1}[#2]{#3}}} - {\blx@err@optdef{#1}}} - -% [<datatype>]{<key>}[<value>]{<code>} -\newrobustcmd*{\DeclareEntryOption}[2][]{% - \ifblank{#1} - {\def\blx@tempa{boolean}} - {\ifcsundef{blx@entryopts@#1} - {\blx@warn@badoptdt{#1}% - \def\blx@tempa{boolean}} - {\def\blx@tempa{#1}}}% - \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@entryopts}{#2}% - \@ifnextchar[%] - {\blx@defentryopt{#2}} - {\blx@defentryopt{#2}[]}} - - \long\def\blx@defentryopt#1[#2]#3{% - \ifcsundef{KV@blx@opt@ent@#1} - {\ifblank{#2} - {\define@key{blx@opt@ent}{#1}{#3}} - {\define@key{blx@opt@ent}{#1}[#2]{#3}}} - {\blx@err@optdef{#1}}} - -% These are internal fields which are not part of the data model but -% which need to be dealt with along with data model fields in places -\def\abx@dointernalfields{% - \do{childentrykey}% - \do{clonesourcekey}% - \do{datelabelsource}% - \do{entrykey}% - \do{entryset}% - \do{entrysetcount}% - \do{entrytype}% - \do{extraalpha}% - \do{extratitle}% - \do{extratitleyear}% - \do{extrayear}% - \do{fullhash}% - \do{labelalpha}% - \do{labelnumber}% - \do{labeltitleyear}% - \do{labeldate}% - \do{localnumber}% - \do{namehash}% - \do{prefixnumber}% - \do{sortinit}% - \do{sortinithash}} - -\def\abx@dobooleans{% - \do{singletitle}} - -% Name toggles like \ifauthor etc. need to be dynamically created for all -% name datatypes in the data model and we have to do this here after the -% datamodel is available. Need to be careful about expansions here as these -% go into hooks to be executed later - -% Define name toggles -\def\do#1{\newtoggle{blx@use#1}\toggletrue{blx@use#1}} -\dolistcsloop{blx@biber@datamodel@names} - -% Define name toggle checking macros -\let\blx@nametoggles\@empty -\def\do#1{\gappto\blx@nametoggles{\expandafter\def\csname ifuse#1\endcsname{\iftoggle{blx@use#1}}}} -\dolistcsloop{blx@biber@datamodel@names} -\eappto\blx@blxinit{\expandafter\expandonce\noexpand\blx@nametoggles} - -% Define ifthen interface name toggle checking macros -\let\blx@nametogglesit\@empty -\def\do#1{\gappto\blx@nametogglesit{\expandafter\def\csname ifuse#1\endcsname{\blx@TE{\iftoggle{blx@use#1}}}}} -\dolistcsloop{blx@biber@datamodel@names} -\expandafter\def\expandafter\blx@nametogglesite\expandafter{\expandonce\blx@nametogglesit} -\appto\blx@blxinit{\appto\blx@TE@hook{\blx@nametogglesite}} - -% Define \ifuse<name> options scope for biber -\def\do#1{\blx@collectopts{boolean}{blx@globalopts}{use#1}% - \blx@collectopts{boolean}{blx@typeopts}{use#1}% - \blx@collectopts{boolean}{blx@entryopts}{use#1}} -\dolistcsloop{blx@biber@datamodel@names} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\def\do#1{% - \newcounter{#1}% - \newcounter{saved#1}% - \appto\abx@dobooleans{\do{more#1}}} - -\abx@donames -\abx@dornames -\abx@dolists -%\abx@dorlists -\def\do#1{\newtoggle{abx@bool@#1}} -\abx@dobooleans - -\def\do#1{\expandafter\newlength\expandafter{\csname #1width\endcsname}} -\abx@dolabelfields - -\protected\def\blx@resetdata{% - \let\blx@saved@do\do - \let\do\blx@imc@clearname - \abx@donames - \let\do\blx@imc@clearlist - \abx@dolists - \let\do\blx@imc@clearfield - \abx@dofields - \do{options}\do{labelyear}\do{labelmonth}\do{labelday}\do{datelabelsource}% - \abx@dointernalfields - \def\do##1{\togglefalse{abx@bool@##1}}% - \abx@dobooleans - \let\do\blx@saved@do - \c@citecounter\z@ - \iftoggle{blx@bibliography} - {\c@maxnames\blx@maxbibnames\relax - \c@minnames\blx@minbibnames\relax} - {\c@maxnames\blx@maxcitenames\relax - \c@minnames\blx@mincitenames\relax}% - \c@maxitems\blx@maxitems\relax - \c@minitems\blx@minitems\relax} - -\protected\def\blx@saveentry{% - \let\blx@saved@do\do - \let\do\blx@savename - \abx@donames - \let\do\blx@savelist - \abx@dolists - \let\do\blx@savefield - \abx@dofields - \do{options}\do{labelyear}\do{labelmonth}\do{labelday}\do{datelabelsource}% - \abx@dointernalfields - \let\do\blx@savebool - \abx@dobooleans - \c@savedcitecounter\c@citecounter - \let\do\blx@saved@do} - -\protected\def\blx@savename#1{% - \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}% - \csletcs{abx@name@saved#1}{abx@name@#1}% - \csname c@saved#1\endcsname\csname c@#1\endcsname} - -\protected\def\blx@savelist#1{% - \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}% - \csletcs{abx@list@saved#1}{abx@list@#1}% - \csname c@saved#1\endcsname\csname c@#1\endcsname} - -\protected\def\blx@savefield#1{% - \csletcs{abx@field@saved#1}{abx@field@#1}} - -\protected\def\blx@savebool#1{% - \csletcs{abx@bool@saved#1}{abx@bool@#1}} - -% {<code>} -\protected\long\def\blx@bbl@preamble#1{% - \gappto\abx@preamble{#1}} - -% {<message>} -\protected\def\blx@bbl@warn#1{% - \begingroup - \def\item{\MessageBreak-\space}% - \def\break{\MessageBreak\space\space}% - \edef\blx@tempa{% - Biber reported the following issues% - \ifdef\abx@field@entrykey - {\MessageBreak with '\abx@field@entrykey'} - {}% - :#1}% - \blx@warning@noline{\blx@tempa}% - \endgroup} - -% {<field>}{<code>} -\newrobustcmd{\DeclareFieldInputHandler}[2]{% - \ifblank{#2} - {\csundef{blx@fih@#1}} - {\long\csdef{blx@fih@#1}##1{#2}}} -\@onlypreamble\DeclareFieldInputHandler - -% {<list>}{<code>} -\newrobustcmd*{\DeclareListInputHandler}[2]{% - \ifblank{#2} - {\csundef{blx@lih@#1}} - {\csdef{blx@lih@#1}##1{#2}}} -\@onlypreamble\DeclareListInputHandler - -% {<name>}{<code>} -\newrobustcmd*{\DeclareNameInputHandler}[2]{% - \ifblank{#2} - {\csundef{blx@nih@#1}} - {\csdef{blx@nih@#1}##1{#2}}} -\@onlypreamble\DeclareNameInputHandler - -% {<entrykey>}{<refsection>}{<field>}{<sort context>}{<value>} -\long\def\blx@bbl@addentryfield#1#2#3#4#5{% - \csxappto{blx@data@#2@#4@#1}{% - \def\expandafter\noexpand\csname abx@field@#3\endcsname{#5}}} - -% {<rangefield>}{<value>} -\protected\def\blx@bbl@rangedef#1#2{% - \csxappto\blx@bbl@data{% - \def\expandafter\noexpand\csname abx@range@#1\endcsname{#2}}} - -% {<field>}{<value>} -\long\def\blx@bbl@addfield#1#2{% - \csxappto\blx@bbl@data{% - \def\expandafter\noexpand\csname abx@field@#1\endcsname{#2}}} - -\protected\long\def\blx@bbl@fielddef#1#2{% - \def\NewValue{#2}% - \ifcsdef{blx@fih@#1} - {\csname blx@fih@#1\endcsname{#2}% - \ifdefvoid\NewValue} - {\@secondoftwo} - {} - {\blx@bbl@addfield{#1}{\expandonce\NewValue}}} - -\protected\long\def\blx@bbl@fieldedef#1#2{% - \edef\NewValue{#2}% - \ifcsdef{blx@fih@#1} - {\csname blx@fih@#1\expandafter - \endcsname\expandafter{\NewValue}% - \ifdefvoid\NewValue} - {\@secondoftwo} - {} - {\blx@bbl@addfield{#1}{\NewValue}}} - -\protected\long\def\blx@bbl@stringdef#1#2{% - \begingroup - \edef\blx@tempa{\endgroup - \blx@bbl@fielddef{#1}{\detokenize{#2}}}% - \blx@tempa} - -% Verbatim lists -% {<list>}{<listcount>} -\protected\def\blx@bbl@verbldef#1#2{% - \begingroup - \let\lverb\blx@bbl@verbladd - \def\blx@tempa{#1}% - \def\blx@tempb{#2}% - \let\blx@tempc\@empty - \let\NewValue\@empty} - -\protected\def\blx@bbl@verblend{% - \expandafter\blx@bbl@listdef\expandafter{\expandafter\blx@tempa\expandafter}\expandafter{\expandafter\blx@tempb\expandafter}\expandafter{\blx@tempc}% - \endgroup} - -\protected\def\blx@bbl@verbladd{% - \begingroup - \let\do\@makeother - \dospecials - \catcode\endlinechar=12\relax - \blx@bbl@verbladd@i} - -% Verbatim fields -% {<field>} -\protected\def\blx@bbl@verbdef#1{% - \begingroup - \let\verb\blx@bbl@verbadd - \def\blx@tempa{#1}% - \let\NewValue\@empty} - -\protected\def\blx@bbl@verbend{% - \ifcsdef{blx@fih@\blx@tempa} - {\csname blx@fih@\blx@tempa\expandafter - \endcsname\expandafter{\NewValue}% - \ifdefvoid\NewValue} - {\@secondoftwo} - {} - {\blx@bbl@addfield{\blx@tempa}{\NewValue}}% - \endgroup} - -\protected\def\blx@bbl@verbadd{% - \begingroup - \let\do\@makeother - \dospecials - \catcode\endlinechar=12\relax - \blx@bbl@verbadd@i} - -\begingroup -\catcode`\<=12 -\catcode`\>=12 -\uccode`\<=`\ % -\uccode`\>=\endlinechar -\uppercase{\gdef\blx@bbl@verbadd@i<#1>}{% - \endgroup - \edef\NewValue{\NewValue\detokenize{#1}}} -\uppercase{\gdef\blx@bbl@verbladd@i<#1>}{% - \endgroup - \eappto\blx@tempc{{\detokenize{#1}}}}% -\endgroup - -% {<counter>}{<value>} -\protected\long\def\blx@bbl@cntdef#1#2{% - \csxappto\blx@bbl@data{% - \csname c@#1\endcsname#2\relax}} - -% {<boolean>} -\protected\def\blx@bbl@booltrue#1{% - \csgappto\blx@bbl@data{% - \toggletrue{abx@bool@#1}}} - -\protected\def\blx@bbl@boolfalse#1{% - \csgappto\blx@bbl@data{% - \togglefalse{abx@bool@#1}}} - -% {<list>}{<itemcount>}{<value>} -\protected\def\blx@bbl@listdef#1#2#3{% - \def\NewCount{#2}% - \def\NewValue{#3}% - \ifcsdef{blx@lih@#1} - {\csname blx@lih@#1\endcsname{#3}% - \ifdefvoid\NewValue} - {\@secondoftwo} - {} - {\csxappto\blx@bbl@data{% - \csname c@#1\endcsname\NewCount\relax - \def\expandafter\noexpand\csname abx@list@#1\endcsname - {\expandonce\NewValue}}}} - -% {<name>}{<itemcount>}{<nameoptions>}{<value>} -\protected\def\blx@bbl@namedef#1#2#3#4{% - \def\NewCount{#2}% - \def\NewOption{#3}% - \def\NewValue{#4}% - \ifcsdef{blx@nih@#1} - {\csname blx@nih@#1\endcsname{#4}% - \ifdefvoid\NewValue} - {\@secondoftwo} - {} - {\csxappto\blx@bbl@data{% - \csname c@#1\endcsname\NewCount\relax - \def\expandafter\noexpand\csname abx@name@#1\endcsname - {{\expandonce\NewOption}{\expandonce\NewValue}}}}} - -% blx@setp@<rs>@<sp> = map of set parent <sp> in a refsection <rs> to csv -% of set children -% blx@seti@<rs>@<sc> = position of set child <sc> in entry set in -% refsection <rs> -% blx@setc@<rs>@<sc> = map of set child <sc> in refsection <rs> to set parent - -% {<entrykey>,...} -\protected\def\blx@bbl@set#1{% - \blx@bbl@fieldedef{entryset}{\detokenize{#1}}% - \csxdef{blx@setp@\the\c@refsection @\abx@field@entrykey}{\detokenize{#1}}% - \begingroup - \blx@tempcnta\z@ - \expandafter\forcsvlist - \expandafter\blx@bbl@set@i - \expandafter{\detokenize{#1}}% - \endgroup} - -\def\blx@bbl@set@i#1{% - \advance\blx@tempcnta\@ne - \csxdef{blx@seti@\the\c@refsection @#1}{\the\blx@tempcnta}} - -% {<entrykey>} -\protected\def\blx@bbl@inset#1{% - \toggletrue{blx@setonly}% - \blx@bbl@fieldedef{entryset}{\detokenize{#1}}% - \csxdef{blx@setc@\the\c@refsection @\abx@field@entrykey}{\detokenize{#1}}} - -% {<keyword>,...} -\protected\def\blx@bbl@keyw#1{% - \iftoggle{blx@skipbib} - {} - {\forcsvlist{\blx@addkeyword{\abx@field@entrykey}}{#1}% - \blx@bbl@fielddef{keywords}{#1}}} - -\def\blx@addkeyword#1#2{% - \listcsxadd{blx@keyw@\the\c@refsection @\detokenize{#2}}{#1}} - -% {<options>} -\protected\long\def\blx@bbl@options#1{% - \begingroup - \let\blx@tempa\@empty - \forcsvlist\blx@bbl@options@i{#1}% - \edef\blx@tempa{% - \endgroup - \ifx\blx@tempa\@empty - \else - \def\noexpand\abx@field@options{\expandonce\blx@tempa}% - \fi}% - \blx@tempa} - -\long\def\blx@bbl@options@i#1{\blx@bbl@options@ii#1==&} - -\long\def\blx@bbl@options@ii#1=#2=#3&{% - \ifcsundef{KV@blx@opt@ent@#1} - {\blx@warning@noline{% - Ignoring undefined option '#1'\MessageBreak - at entry '\abx@field@entrykey'}} - {\eappto\blx@tempa{% - \ifx\blx@tempa\@empty\else,\fi - \unexpanded{#1}\ifblank{#2}{}{=\unexpanded{#2}}}}} - -\def\blx@ifdata#1{% - \ifcsdef{blx@data@\the\c@refsection @\blx@refcontext@context @#1}} -\let\blx@imc@ifentryinbib\blx@ifdata - -\def\blx@getdata#1{% - \csuse{blx@data@\the\c@refsection @\blx@refcontext@context @#1}% - % Here we resolve label* bib fields to their real fields. Doing this here - % dynamically means that we can vary the field chosen depending on the refcontext. - % biber used to resolve these and materialise them in the .bbl but this - % means a static resolution which is independent of the document context. - \def\do##1{% - \ifcsdef{abx@field@##1source} - {\expandafter\def\csname abx@field@##1\endcsname{\csuse{abx@field@\csuse{abx@field@##1source}}}}% - {}}% - \dolistloop{\abx@rfields}% - % Just in case we ever have non-name lists to instantiate - % \def\do##1{% - % \ifcsdef{abx@field@##1source} - % {\csletcs{c@##1}{c@\csuse{abx@field@##1source}}% - % \csletcs{abx@list@##1}{abx@list@\csuse{abx@field@##1source}}} - % {}}% - % \dolistloop{\abx@rlists}% - \def\do##1{% - \ifcsdef{abx@field@##1source} - {\csletcs{c@##1}{c@\csuse{abx@field@##1source}}% - \csletcs{abx@name@##1}{abx@name@\csuse{abx@field@##1source}}} - {}}% - \dolistloop{\abx@rnames}% - \blx@setcitecounter} - -\def\blx@getdata@cite#1{% - \ifcsdef{blx@setc@\the\c@refsection @#1} - {\expandafter\expandafter\expandafter\blx@getdata - \expandafter\expandafter\expandafter{% - \csname blx@setc@\the\c@refsection @#1\endcsname}% - \blx@ifdata{#1} - {\def\abx@field@childentrykey{#1}% - \begingroup - \blx@getdata{#1}% - \edef\blx@tempa{\endgroup - \def\noexpand\abx@field@childentrytype{\abx@field@entrytype}}% - \blx@tempa} - {}} - {\blx@getdata{#1}}% - \ifcsdef{blx@seti@\the\c@refsection @#1} - {\letcs\abx@field@entrysetcount{blx@seti@\the\c@refsection @#1}} - {}} - -\def\blx@execute{% - \blx@imc@thefield{execute}} - -\def\blx@setoptions@entry{% - \blx@imc@iffieldundef{options} - {} - {\begingroup - \edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@ent}{\abx@field@options}}% - \blx@tempa - \blx@checkoptions@entry}} - -\def\blx@setoptions@type#1{% - \ifcsdef{blx@opts@type@#1} - {\begingroup - \edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@typ}{\csuse{blx@opts@type@#1}}}% - \blx@tempa} - {}} - -\def\blx@checkoptions@global{} -\def\blx@checkoptions@type{} -\def\blx@checkoptions@entry{} - -\def\blx@entrysetcount{% - \ifdef\abx@field@entrykey - {\ifcsdef{blx@seti@\the\c@refsection @\abx@field@entrykey} - {\letcs\abx@field@entrysetcount{% - blx@seti@\the\c@refsection @\abx@field@entrykey}} - {}} - {}} - -% {<section>} -\def\blx@bbl@refsection#1{% - \begingroup - \c@refsection#1\relax} - -\def\blx@bbl@endrefsection{% - \iftoggle{blx@addset} - {\blx@addset - \global\togglefalse{blx@addset}} - {}% - \endgroup} - -% {<entrykey>} -\protected\def\blx@bbl@missing#1{% - \listcsxadd{blx@miss@\the\c@refsection}{\detokenize{#1}}% - \blx@warning@noline{% - The following entry could not be found\MessageBreak - in the database% - \ifnumgreater\c@refsection\z@ - { (refsection \the\c@refsection)} - {}:\MessageBreak - \detokenize{#1}\MessageBreak - Please verify the spelling and rerun\MessageBreak - LaTeX afterwards}} - -% We create an alias resolving macro and also a list of aliases -% which we need to add to the .bcf. We need to resolve the aliases -% for internal use but we always want the aliases themselves in the .bcf -% so that biber can correctly use and resolve them too. -\protected\def\blx@bbl@keyalias#1#2{% - \csgdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}% - \listcsgadd{blx@keyaliases@\the\c@refsection}{#1}} - -% blx@slist@list@<section>@<scheme> - a list of list items in a scheme in a -% section (for tracking bibliography lists, -% obeys skipbiblist) -% blx@slist@entry@<section>@<scheme> - a list of normal entries in a scheme in a -% section (for tracking bibliographies, -% obeys skipbib) -% blx@slist@centry@<section>@<scheme> - a list of normal entries in a scheme in a -% section (for tracking citations, -% obeys skipbib). Same as @entry@ but -% with added set children - -% {<entrykey>}{<entrytype>}{<options>} -\protected\def\blx@bbl@entry#1#2#3{% - \begingroup - \edef\abx@field@entrykey{\detokenize{#1}}% - \blx@setoptions@type{#2}% - \blx@bbl@options{#3}% - \blx@setoptions@entry - \edef\blx@bbl@data{blx@data@\the\c@refsection @\blx@slist@name @\abx@field@entrykey}% - \csuse\blx@bbl@data - \blx@bbl@addfield{entrykey}{\abx@field@entrykey}% - \blx@bbl@addfield{entrytype}{#2}% - \blx@imc@iffieldundef{options} - {} - {\blx@bbl@fieldedef{options}{\expandonce\abx@field@options}}} - -\protected\def\blx@bbl@endentry{% - \csuse\blx@bbl@data - \ifcsundef{blx@pref@\the\c@refsection @\abx@field@entrykey} - {} - {\blx@addpageref{\abx@field@entrykey}}% - \nottoggle{blx@setonly} - {} - {\global\toggletrue{blx@addset}% - \toggletrue{blx@skipbib}% - \toggletrue{blx@skipbiblist}% - \toggletrue{blx@skiplab}}% - \nottoggle{blx@skipbib} - {\expandafter\ifstrequal\expandafter{\blx@slist@type}{entry} - {\listcsxadd{blx@slist@entry@\the\c@refsection @\blx@slist@name}{\abx@field@entrykey}% - \listcsxadd{blx@slist@centry@\the\c@refsection @\blx@slist@name}{\abx@field@entrykey}% - \listcsxadd{blx@type@\the\c@refsection @\abx@field@entrytype}{\abx@field@entrykey}% - \ifdef\abx@field@entrysubtype - {\listcsxadd{blx@subt@\the\c@refsection @\abx@field@entrysubtype}{\abx@field@entrykey}} - {}} - {}}% - {}% - \nottoggle{blx@skipbiblist} - {\expandafter\ifstrequal\expandafter{\blx@slist@type}{list} - {\blx@bbl@labelfields - \listcsxadd{blx@slist@\blx@slist@type @\the\c@refsection @\blx@slist@name}{\abx@field@entrykey}} - {}}% - {}% - \nottoggle{blx@skiplab} - {\iftoggle{blx@labelnumber} - {\blx@bbl@labelnumber} - {}% - \iftoggle{blx@labelalpha} - {\blx@bbl@labelalpha} - {}% - \iftoggle{blx@labeltitle} - {\blx@bbl@labeltitle} - {}% - \iftoggle{blx@labeltitleyear} - {\blx@bbl@labeltitleyear} - {}% - \iftoggle{blx@labeldate} - {\blx@bbl@labeldate} - {}% - \blx@bbl@prefixnumber} - {}% - \blx@bbl@titles - \blx@bbl@hooks - \endgroup} - -% This, at the end of the .bbl, puts any set parent children into the -% current context sort list of citations (a separate list *@centry@* to the -% bibliography *@entry@* which doesn't want the children adding if they weren't -% cited) as this is needed for the subentry citing -% when sortcites is enabled as for sortcites, the current context sorting list -% is used and the parent set of a subentry is not necessarily -% available in the current context sortlist. -\def\blx@addset{% - \begingroup - \letcs\blx@tempa{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}% - \global\cslet{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}\@empty - \forlistloop\blx@addset@i\blx@tempa - \endgroup} - -\def\blx@addset@i#1{% - \listcsgadd{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}{#1}% - \ifcsdef{blx@setp@\the\c@refsection @#1} - {\expandafter\expandafter\expandafter\forcsvlist - \expandafter\expandafter\expandafter\blx@addset@ii - \expandafter\expandafter\expandafter{% - \csname blx@setp@\the\c@refsection @#1\endcsname}} - {}} - -\def\blx@addset@ii#1{% - \listcsgadd{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}{#1}} - -\def\blx@bbl@labelfields{% - \def\do##1{% - \ifcsundef{abx@field@##1} - {} - {\blx@setlabwidth{\csname ##1width\endcsname}{% - \csuse{abx@ffd@*@##1width}{\csname abx@field@##1\endcsname}}}}% - \abx@dolabelfields} - -\def\blx@bbl@labelnumber{% - % Used at endentry, when reading .bbl - % only do this for the global sorting list otherwise we increment - % the labelnumbers for each sortlist - \ifdefempty\abx@field@localnumber - {}% only if omitnumbers=true - {\ifcsundef{abx@ffd@\blx@imc@thefield{entrytype}@labelnumberwidth} - {\letcs{\@lnw@labelnumberwidth}{abx@ffd@*@labelnumberwidth}} - {\letcs{\@lnw@labelnumberwidth}{abx@ffd@\blx@imc@thefield{entrytype}@labelnumberwidth}}% - \ifcsundef{abx@ffd@\blx@imc@thefield{entrytype}@prefixnumber} - {\letcs{\@lnw@prefixnumber}{abx@ffd@*@prefixnumber}} - {\letcs{\@lnw@prefixnumber}{abx@ffd@\blx@imc@thefield{entrytype}@prefixnumber}}% - \ifcsundef{abx@ffd@\blx@imc@thefield{entrytype}@labelnumber} - {\letcs{\@lnw@labelnumber}{abx@ffd@*@labelnumber}} - {\letcs{\@lnw@labelnumber}{abx@ffd@\blx@imc@thefield{entrytype}@labelnumber}}% - \ifundef\abx@field@shorthand - {\iftoggle{blx@defernumbers} - % only if defernumbers=true, we have to define localnumber to - % something to stop labelnumberwidth def complaining on first - % post-backend run since there will be nothing in the .aux yet - % for defernums localnumbers. On the second post-backend run, - % it will have a value correct for generating labelnumberwidth - % We also have to define a dummy value for labelnumber here for - % first post-backend runs otherwise references to labelnumber - % in cite styles like numeric-comp will die. - {\ifundef\abx@field@localnumber - {\numdef\abx@field@localnumber{0}% - \blx@bbl@fielddef{labelnumber}{0}} - {}} - {\csnumgdef{blx@labelnumber@\the\c@refsection @\blx@slist@name}{% - \csuse{blx@labelnumber@\the\c@refsection @\blx@slist@name}+1}% - \edef\abx@field@localnumber{% - \csuse{blx@labelnumber@\the\c@refsection @\blx@slist@name}}% - \blx@bbl@fieldedef{labelnumber}{\abx@field@localnumber}}% - \iftoggle{blx@skipbib} - {} - {\blx@setlabwidth{\labelnumberwidth}{% - \csuse{@lnw@labelnumberwidth}{% - \ifdef\abx@field@prefixnumber - {\csuse{@lnw@prefixnumber}{\abx@field@prefixnumber}} - {}% - \csuse{@lnw@labelnumber}{\abx@field@localnumber}}}}} - {\csgappto\blx@bbl@data{\let\abx@field@labelnumber\abx@field@shorthand}% - \iftoggle{blx@skipbib} - {} - {\blx@setlabwidth{\labelnumberwidth}{% - \csuse{@lnw@labelnumberwidth}{\abx@field@shorthand}}}}}} - -\def\blx@bbl@prefixnumber{% - \ifdef\abx@field@prefixnumber - {\blx@bbl@fieldedef{prefixnumber}{\abx@field@prefixnumber}} - {}} - -\def\blx@bbl@labelalpha{% - \ifundef\abx@field@labelalpha - {} - {\ifundef\abx@field@extraalpha - {} - {\ifnum\abx@field@extraalpha>\c@maxextraalpha - \global\c@maxextraalpha\abx@field@extraalpha\relax - \fi}% - \iftoggle{blx@skipbib} - {} - {\blx@setlabwidth{\labelalphawidth}{% - \csuse{abx@ffd@*@labelalphawidth}{% - \ifdef\abx@field@prefixnumber - {\csuse{abx@ffd@*@prefixnumber}{\abx@field@prefixnumber}} - {}% - \csuse{abx@ffd@*@labelalpha}{\abx@field@labelalpha}% - \ifundef\abx@field@extraalpha - {} - {\csuse{abx@ffd@*@extraalpha}{\abx@field@extraalpha}}}}}}} - -\def\blx@bbl@labeltitle{% - \ifundef\abx@field@extratitle - {} - {\ifnum\abx@field@extratitle>\c@maxextratitle - \global\c@maxextratitle\abx@field@extratitle\relax - \fi}} - -\def\blx@bbl@labeltitleyear{% - \ifundef\abx@field@extratitleyear - {} - {\ifnum\abx@field@extratitleyear>\c@maxextratitleyear - \global\c@maxextratitleyear\abx@field@extratitleyear\relax - \fi}} - -\def\blx@bbl@labeldate{% - \ifundef\abx@field@extrayear - {} - {\ifnum\abx@field@extrayear>\c@maxextrayear - \global\c@maxextrayear\abx@field@extrayear\relax - \fi}} - -\def\blx@bbl@titles{% - \ifundef\abx@field@indextitle - {\csgappto\blx@bbl@data{% - \let\abx@field@indextitle\abx@field@title}} - {}% - \ifundef\abx@field@indexsorttitle - {\csgappto\blx@bbl@data{% - \let\abx@field@indexsorttitle\abx@field@indextitle}} - {}} - -\def\blx@bbl@hooks{% - \ifcsundef{blx@hook@bblitem@*} - {\ifcsundef{blx@hook@bblitem@\abx@field@entrytype} - {} - {\csuse\blx@bbl@data - \csuse{blx@hook@bblitem@\abx@field@entrytype}}} - {\csuse\blx@bbl@data - \csuse{blx@hook@bblitem@*}% - \csuse{blx@hook@bblitem@\abx@field@entrytype}}} - -\newrobustcmd*{\AtDataInput}[1][*]{\csgappto{blx@hook@bblitem@#1}} -\@onlypreamble\AtDataInput - -\def\blx@setlabwidth#1#2{% - \begingroup - \settowidth{\@tempdima}{\bibfont#2}% - \ifnum\@tempdima>#1% - \global#1\@tempdima - \fi - \endgroup} - -\def\blx@bblstart{% - \let\preamble\blx@bbl@preamble - \let\warn\blx@bbl@thewarn - \let\refsection\blx@bbl@refsection - \let\endrefsection\blx@bbl@endrefsection - \let\entry\blx@bbl@entry - \let\endentry\blx@bbl@endentry - \let\missing\blx@bbl@missing - \let\keyalias\blx@bbl@keyalias - \let\sortlist\blx@bbl@slist - \let\endsortlist\blx@bbl@endslist - \let\set\blx@bbl@set - \let\inset\blx@bbl@inset - \let\keyw\blx@bbl@keyw - \let\name\blx@bbl@namedef - \let\list\blx@bbl@listdef - \let\field\blx@bbl@fielddef - \let\range\blx@bbl@rangedef - \let\strng\blx@bbl@stringdef - \let\cnt\blx@bbl@cntdef - \let\true\blx@bbl@booltrue - \let\false\blx@bbl@boolfalse - \let\verb\blx@bbl@verbdef - \let\endverb\blx@bbl@verbend - \let\lverb\blx@bbl@verbldef - \let\endlverb\blx@bbl@verblend} - -\def\blx@bblend{% -} - -% {<entrykey>} -% Get the saved information on which citations were mentioned last run -\protected\def\abx@aux@cite#1{% - \listxadd{\blx@lastcites}{\detokenize{#1}}} - -% {<sortschemename>} -% Get the saved information on which sorting schemes were mentioned last run -\protected\def\abx@aux@sortscheme#1{% - \listgadd{\blx@lastsortschemes}{#1}} - -% {<sortnamekeyschemename>} -% Get the saved information on which sorting name key schemes were mentioned last run -\protected\def\abx@aux@sortnamekeyscheme#1{% - \listgadd{\blx@lastsortnamekeyschemes}{#1}} - -% {<sortschemename>} -% Get the saved information on which shorthand sorting schemes were mentioned last run -\protected\def\abx@aux@biblist#1{% - \listgadd{\blx@lastbiblists}{#1}} - -% Here we mustn't change the checksum if we used localnumbers from the -% .aux file as this means that deferred numbering is -% complete. Otherwise we get in an endless rerun loop because the -% checksum due to number changes is always different. -\AtEndDocument{% - \def\abx@aux@number#1#2#3#4{% - \ifblank{#4} - {} - {\nottoggle{blx@localnumber} - {\blx@addchecksum{#1}{#4}} - {}}}} - -\AtEndDocument{% - % Here we run some tests to decide if we need to issue re-run - % messages in certain circumstances. In general, if we add/remove - % any citations or add/remove any sorting schemes, we need to re-run - % biber. Also, if we have to re-run biber, we need to defer writing - % the defernumbers .aux information because it will not yet be correct. - - % Test to see if we *removed* any citations since last run - % (adding citations is dealt with naturally in \blx@citation@entry) - % If so, give a rerun biber message. This also sets the - % rerun biber toggle so defernums doesn't consume the localnumbers - % in the .aux but instead, re-writes them, which is what we need. - \begingroup - \def\do#1{\ifinlist{#1}{\blx@cites}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@lastcites - % Special case - if we are using sortscheme "none" anywhere, then changes - % in citation order matter and we need to re-run biber. So a special test - % to see if the cites from last run are identical in order. We have - % already tested for more or less cites between runs by now, we are - % testing here for exactly the same cites by treating the cite and - % lastcite lists as strings and comparing them. This doesn't apply - % to biblist sortschemes as nobody wants to sort biblists with - % "none", since it makes no sense - \ifinlist{none}{\blx@sortschemes} - {\ifdefstrequal{\blx@cites}{\blx@lastcites} - {} - {\blx@logreq@active{}}} - {}% - % Test if we removed any mention of a sorting name key scheme since last run. - % If we did, we need to re-run biber - \def\do#1{\ifinlist{#1}{\blx@sortnamekeyschemes}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@lastsortnamekeyschemes - % Test if we added any mention of a sorting name key scheme since last run - % If we did, we need to re-run biber - \def\do#1{\ifinlist{#1}{\blx@lastsortnamekeyschemes}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@sortnamekeyschemes - % Test if we removed any mention of a sorting scheme since last run. - % If we did, we need to re-run biber - \def\do#1{\ifinlist{#1}{\blx@sortschemes}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@lastsortschemes - % Test if we added any mention of a sorting scheme since last run - % If we did, we need to re-run biber - \def\do#1{\ifinlist{#1}{\blx@lastsortschemes}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@sortschemes - % Test if we removed any mention of a biblist since last run. - % If we did, we need to re-run biber - \def\do#1{\ifinlist{#1}{\blx@biblists}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@lastbiblists - % Test to see if we added any mention of a biblist since last run. - % If we did, we need to re-run biber - \def\do#1{\ifinlist{#1}{\blx@lastbiblists}{}{\blx@logreq@active{}}\relax}% - \dolistloop\blx@biblists - % If we have to run biber or latex again and we are using defernumbers, - % don't write the localnumber information to the .aux file yet as we will - % potentially have to regenerate sorting order first in biber - \iftoggle{blx@defernumbers} - {\iftoggle{blx@runbiber} - {} - {\def\do#1{\blx@auxwrite\@mainaux{}{#1}} - \dolistloop\blx@localnumaux}} - {}% - \endgroup} - -% {<instcount>}{<entrykey>}{<refsection>}{<sort context>}{<labelnumber>} -\protected\def\blx@aux@number#1#2#3#4#5{% - \blx@bbl@addentryfield{\detokenize{#2}}{#3}{localnumber}{#4}{#5}% - \blx@bbl@addentryfield{\detokenize{#2}}{#3}{labelnumber}{#4}{#5}% - \global\toggletrue{blx@localnumber}% - \ifblank{#5} - {} - {\csgdef{blx@labelnumber@#3@#4}{#5}}} - -% Called as part of bib output for an entry -% Only used when defernumbers=true -\def\blx@addlabelnumber{% - \begingroup - \nottoggle{blx@skiplab} - {\iftoggle{blx@labelnumber} - {\ifundef\abx@field@shorthand - % Need to know if we set any localnumber from .aux file, not - % just current item. Otherwise, we may just write new - % localnumbers but not existing ones - % Also, don't want to regenerate localnumber for any key in a - % refsection which we've already seen because this has the nasty - % side-effect of incrementing the localnum counter - {\ifboolexpr { not togl {blx@localnumber} - and - test {\ifcsundef{blx@defer@\the\c@refsection @\abx@field@entrykey}} } - {\iftoggle{blx@omitnumbers} - {\let\abx@field@localnumber\@empty} - {\csnumgdef{blx@labelnumber@\the\c@refsection @\blx@refcontext@context}{% - \csuse{blx@labelnumber@\the\c@refsection @\blx@refcontext@context}+1}% - \edef\abx@field@localnumber{% - \csuse{blx@labelnumber@\the\c@refsection @\blx@refcontext@context}}% - \blx@bbl@addentryfield{\abx@field@entrykey}{\the\c@refsection}% - {localnumber}{\blx@refcontext@context}{\abx@field@localnumber}}} - {}% - % If localnumbers were already in the .aux, add them - % again from the .aux. This prevents some cycling - % problems where pagebreaks change after localnumber - % settles down and then we need another run which then - % regenerates localnumber requiring another run but then - % the pagebreaks change back again ... etc. - \ifcsundef{blx@defer@\the\c@refsection @\abx@field@entrykey} - {\listxadd\blx@localnumaux{% - \string\abx@aux@number% - {\the\c@instcount}% - {\abx@field@entrykey}% - {\the\c@refsection}% - {\blx@refcontext@context}% - {\abx@field@localnumber}}% - % record that we have already generated and output localnum - % for this key in this refsection - \csgdef{blx@defer@\the\c@refsection @\abx@field@entrykey}{}} - {}} - {}}% - {}} - {}% - \endgroup} - -\def\blx@addprefixnumber{% - \nottoggle{blx@skiplab} - {\ifdef\blx@prefixnumbers - {\ifundef\abx@field@shorthand - {\edef\abx@field@prefixnumber{\expandonce\blx@prefixnumbers}% - \ifundef\abx@field@prefixnumber - {\blx@bbl@addentryfield{\abx@field@entrykey}{\the\c@refsection}% - {prefixnumber}{\blx@refcontext@context}{\expandonce\abx@field@prefixnumber}} - {}% - \blx@auxwrite\@mainaux{}{% - \string\blx@aux@numprefix{\abx@field@entrykey}% - {\the\c@refsection}{\blx@refcontext@context}{\expandonce\abx@field@prefixnumber}}} - {}} - {}} - {}} - -% {<entrykey>}{<refsection>}{<sorting context}{<numberprefix>} -\protected\def\blx@aux@numprefix#1#2#3#4{% - \blx@bbl@addentryfield{\detokenize{#1}}{#2}{prefixnumber}{#3}{#4}} - -% {<sortlistname>} -\def\blx@bbl@slist[#1]#2{% - \begingroup - \def\blx@slist@type{#1}% - \def\blx@slist@name{#2}} - - % This macro (\key) will only be called in sortlists of type "list" -% \def\key##1{\listcsxadd{blx@slists@\the\c@refsection @#1}{\detokenize{##1}}}} - -\def\blx@bbl@endslist{% - \csnumgdef{blx@labelnumber@\the\c@refsection @\blx@slist@name}{0}% - \endgroup} - -\def\blx@addpageref#1{% - \begingroup - \blx@tempcnta\z@ - \let\blx@tempa\@empty - \def\do##1{% - \appto\blx@tempa{{##1}}% - \advance\blx@tempcnta\@ne}% - \dolistcsloop{blx@pref@\the\c@refsection @#1}% - \edef\blx@tempa{\endgroup\noexpand\blx@bbl@listdef - {pageref}{\the\blx@tempcnta}{\blx@tempa}}% - \blx@tempa} - -%% Data input - -\def\blx@bblinput{% - \begingroup - \blx@info@noline{Trying to load bibliographic data..}% - \blx@blxinit - \blx@bblfile@biber - \endgroup} - -\def\blx@bblfile@biber{% - \blx@secinit - \begingroup - \blx@bblstart - \blx@ifsigned{\jobname}{bbl} - {\InputIfFileExists{\jobname.bbl} - {\blx@info@noline{... file '\jobname.bbl' found}} - {\blx@info@noline{... file '\jobname.bbl' not found}% - \typeout{No file \jobname.bbl.}}} - {}% - \blx@bblend - \endgroup - % global sorting as this is called at BeginDocument - \csnumgdef{blx@labelnumber@\the\c@refsection @\blx@sorting}{0}} - -%% Bibliography - -% {<name>}{<start code>}[<end code>]{<item code>} -\newrobustcmd*{\defbibenvironment}[4]{% - \long\csdef{blx@env@#1}{#2}% - \long\csdef{blx@endenv@#1}{#3}% - \long\csdef{blx@item@#1}{#4}} - -\defbibenvironment{bibliography} - {\list{}{% - \leftmargin\bibhang - \itemindent-\leftmargin - \itemsep\bibitemsep - \parsep\bibparsep}} - {\endlist} - {\item} - -\def\do#1{% - \defbibenvironment{#1} - {\list{\thefield{#1}}{% - \labelwidth\csname #1width\endcsname - \labelsep\biblabelsep - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \itemsep\bibitemsep - \parsep\bibparsep - \def\makelabel####1{####1\hss}}} - {\endlist} - {\item}} -\abx@dolabelfields - -% {<name>}[<default>]{<code>} -\newrobustcmd*{\defbibheading}[1]{% - \@ifnextchar[%] - {\blx@defbibheading{blx@head@#1}} - {\blx@defbibheading{blx@head@#1}[\bibname]}} - -\def\blx@defbibheading#1[#2]{% - \csundef{#1}% - \expandafter\newcommand\csname#1\endcsname[1][#2]} - -% {<name>}{<text>} -\newrobustcmd*{\defbibnote}[1]{% - \long\csdef{blx@note@#1}} - -% {<name>}{<code>} -\newrobustcmd*{\defbibfilter}[2]{% - \begingroup - \def\blx@flt@error{\csname blx@flt@errortrue\endcsname}% - \let\not\blx@flt@not \let\NOT\not - \let\and\blx@flt@and \let\AND\and - \let\or\blx@flt@or \let\OR\or - \letcs\({blx@flt@(} \letcs\){blx@flt@)}% - \def\section##1{\blx@flt@error}% - \def\segment##1{segment=##1}% - \def\type##1{type=##1}% - \def\subtype##1{subtype=##1}% - \def\keyword##1{keyword={##1}}% - \def\category##1{category={##1}}% - \edef\blx@tempa{\noexpand\blx@defbibfilter{#2}}% - \ifdef\blx@flt@errortrue - {\blx@err@filter} - {\let\the\relax - \let\blx@flt@item\relax - \edef\blx@tempa{\blx@tempa}% - \ifdef\blx@flt@errortrue - {\blx@err@filter} - {\csxdef{blx@filter@#1}{\blx@tempa}}}% - \endgroup} - -\def\blx@defbibfilter#1{% - \blx@defbibfilter@i#1 &} -\def\blx@defbibfilter@i#1 #2&{% - \blx@defbibfilter@ii#1==&% - \ifblank{#2}{}{\blx@defbibfilter@i#2 &}} -\def\blx@defbibfilter@ii#1=#2=#3&{% - \ifblank{#2} - {\ifblank{#1} - {} - {\ifcsdef{blx@flt@#1} - {\csname blx@flt@#1\endcsname} - {\blx@flt@error}}} - {\ifcsdef{blx@flt@#1} - {\csname blx@flt@#1\endcsname{\detokenize{#2}}} - {\blx@flt@error}}} - -\def\blx@flt@and{ and } -\def\blx@flt@or{ or } -\def\blx@flt@not{ not } -\csdef{blx@flt@(}{ ( } -\csdef{blx@flt@)}{ ) } -\def\blx@flt@segment#1{% - test {\xifinlistcs\blx@flt@item{blx@segm@\the\c@refsection @#1}}} -\def\blx@flt@type#1{% - test {\xifinlistcs\blx@flt@item{blx@type@\the\c@refsection @#1}}} -\def\blx@flt@subtype#1{% - test {\xifinlistcs\blx@flt@item{blx@subt@\the\c@refsection @#1}}} -\def\blx@flt@keyword#1{% - test {\xifinlistcs\blx@flt@item{blx@keyw@\the\c@refsection @#1}}} -\def\blx@flt@category#1{% - test {\xifinlistcs\blx@flt@item{blx@catg@#1}}} - -% {<name>}{<code>} -\newrobustcmd*{\defbibcheck}[2]{% - \csdef{blx@bibcheck@#1}{% - \togglefalse{blx@skipentry}% - \def\skipentry{\toggletrue{blx@skipentry}}% - #2\undef\skipentry}} - -% options -% We need a 2-pass structure for options in \printbibliography and -% \printbiblist because the section has to be set before any -% other options and this partly determines which list to use for later filtering -\define@key{blx@bib1}{segment}{} -\define@key{blx@bib1}{type}{} -\define@key{blx@bib1}{nottype}{} -\define@key{blx@bib1}{subtype}{} -\define@key{blx@bib1}{notsubtype}{} -\define@key{blx@bib1}{keyword}{} -\define@key{blx@bib1}{notkeyword}{} -\define@key{blx@bib1}{category}{} -\define@key{blx@bib1}{notcategory}{} -\define@key{blx@bib1}{filter}{} -\define@key{blx@bib1}{check}{} -\define@key{blx@bib1}{heading}{} -\define@key{blx@bib1}{env}{} -\define@key{blx@bib1}{title}{} -\define@key{blx@bib1}{prenote}{} -\define@key{blx@bib1}{postnote}{} -\define@key{blx@bib1}{resetnumbers}[]{} -\define@key{blx@bib1}{omitnumbers}[]{} -\define@key{blx@bib1}{prefixnumbers}{} - -\define@key{blx@bib2}{section}{} -\define@key{blx@bib2}{sorting}{} - -\define@key{blx@biblist1}{segment}{} -\define@key{blx@biblist1}{type}{} -\define@key{blx@biblist1}{nottype}{} -\define@key{blx@biblist1}{subtype}{} -\define@key{blx@biblist1}{notsubtype}{} -\define@key{blx@biblist1}{keyword}{} -\define@key{blx@biblist1}{notkeyword}{} -\define@key{blx@biblist1}{category}{} -\define@key{blx@biblist1}{notcategory}{} -\define@key{blx@biblist1}{filter}{} -\define@key{blx@biblist1}{check}{} -\define@key{blx@biblist1}{heading}{} -\define@key{blx@biblist1}{env}{} -\define@key{blx@biblist1}{title}{} -\define@key{blx@biblist1}{prenote}{} -\define@key{blx@biblist1}{postnote}{} - -\define@key{blx@biblist2}{section}{} -\define@key{blx@biblist2}{sorting}{} - -\define@key{blx@bib1}{sorting}{% - \blx@warning@noline{% - sorting option to \string\printbibliography\space is no longer supported, use 'sorting' option to \string\newrefcontext}} - -\define@key{blx@bib1}{section}{% - \ifcsundef{blx@sections@#1} - {\blx@err@nosec{#1}} - {\c@refsection#1\relax - \def\blx@tempe{#1}}} - -\define@key{blx@biblist1}{section}{% - \ifcsundef{blx@sections@#1} - {\blx@err@nosec{#1}} - {\c@refsection#1\relax - \def\blx@tempe{#1}}} - -\define@key{blx@biblist1}{sorting}{% - \blx@warning@noline{% - sorting option to \string\printbiblist\space is no longer supported, use 'sorting' option to \string\newrefcontext}} - -\define@key{blx@bbg}{section}{% - \ifcsundef{blx@sections@#1} - {\blx@err@nosec{#1}} - {\c@refsection#1\relax}} - -\define@key{blx@bbc}{section}{% - \ifcsundef{blx@sections@#1} - {\blx@err@nosec{#1}} - {\c@refsection#1\relax}} - -\define@key{blx@bib2}{segment}{\blx@key@segment{#1}} -\define@key{blx@biblist2}{segment}{\blx@key@segment{#1}} - -\def\blx@key@segment#1{% - \ifcsundef{blx@segm@\the\c@refsection @#1} - {\blx@error - {Segment '#1' not found in section '\the\c@refsection'} - {The reference segment '#1' could not be found in section '\the\c@refsection'}} - {\c@refsegment#1\relax - \blx@printbibchecks - \blx@filter\blx@tempa{blx@segm@\the\c@refsection @#1}}} - -\define@key{blx@bib2}{type}{\blx@key@type{#1}} -\define@key{blx@biblist2}{type}{\blx@key@type{#1}} - -\def\blx@key@type#1{% - \ifcsundef{blx@type@\the\c@refsection @#1} - {\blx@warning{Type '#1' not found}% - \let\blx@tempa\@empty} - {\blx@printbibchecks - \iftoggle{blx@tempb} - {\togglefalse{blx@tempb}% - \blx@filter\blx@tempa{blx@type@\the\c@refsection @#1}} - {\let\blx@tempa\@empty - \blx@error - {'type' used multiple times} - {When passing multiple filter options, each entry\MessageBreak - must satisfy all conditions (AND conjunction),\MessageBreak - hence some options may not be used twice.\MessageBreak - Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}} - -\define@key{blx@bib2}{nottype}{\blx@key@nottype{#1}} -\define@key{blx@biblist2}{nottype}{\blx@key@nottype{#1}} - -\def\blx@key@nottype#1{% - \ifcsundef{blx@type@\the\c@refsection @#1} - {} - {\blx@printbibchecks - \blx@notfilter\blx@tempa{blx@type@\the\c@refsection @#1}}} - -\define@key{blx@bib2}{subtype}{\blx@key@subtype{#1}} -\define@key{blx@biblist2}{subtype}{\blx@key@subtype{#1}} - -\def\blx@key@subtype#1{% - \ifcsundef{blx@subt@\the\c@refsection @#1} - {\blx@warning{Subtype '#1' not found}% - \let\blx@tempa\@empty} - {\blx@printbibchecks - \iftoggle{blx@tempb} - {\togglefalse{blx@tempb}% - \blx@filter\blx@tempa{blx@subt@\the\c@refsection @#1}} - {\let\blx@tempa\@empty - \blx@error - {'subtype' used multiple times} - {When passing multiple filter options, each entry\MessageBreak - must satisfy all conditions (AND conjunction),\MessageBreak - hence some options may not be used twice.\MessageBreak - Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}} - -\define@key{blx@bib2}{notsubtype}{\blx@key@notsubtype{#1}} -\define@key{blx@biblist2}{notsubtype}{\blx@key@notsubtype{#1}} - -\def\blx@key@notsubtype#1{% - \ifcsundef{blx@subt@\the\c@refsection @#1} - {} - {\blx@printbibchecks - \blx@notfilter\blx@tempa{blx@subt@\the\c@refsection @#1}}} - -\define@key{blx@bib2}{keyword}{\blx@key@keyword{#1}} -\define@key{blx@biblist2}{keyword}{\blx@key@keyword{#1}} - -\def\blx@key@keyword#1{% - \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}} - {\blx@warning{Keyword '\detokenize{#1}' not found}% - \let\blx@tempa\@empty} - {\blx@printbibchecks - \blx@filter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}} - -\define@key{blx@bib2}{notkeyword}{\blx@key@notkeyword{#1}} -\define@key{blx@biblist2}{notkeyword}{\blx@key@notkeyword{#1}} - -\def\blx@key@notkeyword#1{% - \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}} - {} - {\blx@printbibchecks - \blx@notfilter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}} - -\define@key{blx@bib2}{category}{\blx@key@category{#1}} -\define@key{blx@biblist2}{category}{\blx@key@category{#1}} - -\def\blx@key@category#1{% - \ifcsundef{blx@catg@\detokenize{#1}} - {\blx@warning{Category '\detokenize{#1}' not found}% - \let\blx@tempa\@empty} - {\blx@printbibchecks - \blx@filter\blx@tempa{blx@catg@\detokenize{#1}}}} - -\define@key{blx@bib2}{notcategory}{\blx@key@notcategory{#1}} -\define@key{blx@biblist2}{notcategory}{\blx@key@notcategory{#1}} - -\def\blx@key@notcategory#1{% - \ifcsundef{blx@catg@#1} - {} - {\blx@printbibchecks - \blx@notfilter\blx@tempa{blx@catg@#1}}} - -\define@key{blx@bib2}{filter}{\blx@key@filter{#1}} -\define@key{blx@biblist2}{filter}{\blx@key@filter{#1}} - -\def\blx@key@filter#1{% - \ifcsdef{blx@filter@#1} - {\blx@printbibchecks - \blx@bibfilter\blx@tempa{blx@filter@#1}} - {\let\blx@tempa\@empty - \blx@error - {Filter '#1' not found} - {The filter '#1' could not be found.\MessageBreak - Use \string\defbibfilter\space to define it}}} - -\define@key{blx@bib2}{check}{\blx@key@bibcheck{#1}} -\define@key{blx@biblist2}{check}{\blx@key@bibcheck{#1}} - -\def\blx@key@bibcheck#1{% - \ifcsdef{blx@bibcheck@#1} - {\letcs\blx@bibcheck{blx@bibcheck@#1}} - {\let\blx@tempa\@empty - \blx@error - {Check '#1' not found} - {The check '#1' could not be found.\MessageBreak - Use \string\defbibcheck\space to define it}}} - -\define@key{blx@bhd}{heading}{\blx@key@heading{#1}} -\define@key{blx@bib2}{heading}{\blx@key@heading{#1}} -\define@key{blx@biblist2}{heading}{\blx@key@heading{#1}} -\define@key{blx@bbs}{heading}{\blx@key@heading{#1}} -\define@key{blx@bbg}{heading}{\blx@key@heading{#1}} - -\def\blx@key@heading#1{% - \ifcsundef{blx@head@#1} - {\blx@error - {Heading '#1' not found} - {The heading '#1' could not be found.\MessageBreak - Use \string\defbibheading\space to define it}} - {\def\blx@theheading{#1}}} - -\define@key{blx@bib2}{env}{\blx@key@env{#1}} -\define@key{blx@biblist2}{env}{\blx@key@env{#1}} -\define@key{blx@bbs}{env}{\blx@key@env{#1}} -\define@key{blx@bbg}{env}{\blx@key@env{#1}} -\define@key{blx@bbc}{env}{\blx@key@env{#1}} - -\def\blx@key@env#1{% - \ifcsundef{blx@env@#1} - {\blx@error - {Environment '#1' not found} - {The environment '#1' could not be found.\MessageBreak - Use \string\defbibenvironment\space to define it}} - {\def\blx@theenv{#1}}} - -\define@key{blx@bhd}{title}{\def\blx@thetitle{#1}} -\define@key{blx@bib2}{title}{\def\blx@thetitle{#1}} -\define@key{blx@biblist2}{title}{\def\blx@thetitle{#1}} - -\define@key{blx@bib2}{prenote}{\blx@key@prenote{#1}} -\define@key{blx@biblist2}{prenote}{\blx@key@prenote{#1}} -\define@key{blx@bbs}{prenote}{\blx@key@prenote{#1}} -\define@key{blx@bbg}{prenote}{\blx@key@prenote{#1}} -\define@key{blx@bbc}{prenote}{\blx@key@prenote{#1}} -\def\blx@key@prenote#1{% - \ifcsundef{blx@note@#1} - {\blx@error - {Note '#1' not found} - {The note '#1' could not be found.\MessageBreak - Use \string\defbibnote\space to define it}} - {\def\blx@theprenote{#1}}} - -\define@key{blx@bib2}{postnote}{\blx@key@postnote{#1}} -\define@key{blx@biblist2}{postnote}{\blx@key@postnote{#1}} -\define@key{blx@bbs}{postnote}{\blx@key@postnote{#1}} -\define@key{blx@bbg}{postnote}{\blx@key@postnote{#1}} -\define@key{blx@bbc}{postnote}{\blx@key@postnote{#1}} - -\def\blx@key@postnote#1{% - \ifcsundef{blx@note@#1} - {\blx@error - {Note '#1' not found} - {The note '#1' could not be found.\MessageBreak - Use \string\defbibnote\space to define it}} - {\def\blx@thepostnote{#1}}} - -\define@key{blx@bib2}{resetnumbers}[true]{% - \iftoggle{blx@defernumbers} - {\ifstrequal{#1}{true} - {\csnumdef{blx@labelnumber@\the\c@refsection @\blx@refcontext@context}{0}} - {\ifstrequal{#1}{false} - {} - {\csnumdef{blx@labelnumber@\the\c@refsection @\blx@refcontext@context}{#1-1}}}} - {\blx@warning{% - Option 'resetnumbers' requires 'defernumbers=true'.\MessageBreak - Ignoring 'resetnumbers=true'}}} - -\define@key{blx@bib2}{omitnumbers}[true]{% - \ifstrequal{#1}{true} - {\iftoggle{blx@defernumbers} - {\toggletrue{blx@omitnumbers}} - {\blx@warning{% - Option 'omitnumbers' requires 'defernumbers=true'.\MessageBreak - Ignoring 'omitnumbers=true'}}} - {}} - -\define@key{blx@bib2}{prefixnumbers}{% - \def\blx@prefixnumbers{#1}% - \iftoggle{blx@defernumbers} - {\csnumdef{blx@labelnumber@\the\c@refsection @\blx@refcontext@context}{0}} - {\iftoggle{blx@labelnumber} - {\blx@warning{% - Option 'prefixnumbers' requires global\MessageBreak - 'defernumbers=true'}} - {}}} - -% [<options>] -\newrobustcmd*{\printbibheading}{% - \begingroup - \edef\on@line{\on@line}% - \@ifnextchar[%] - {\blx@printbibheading} - {\blx@printbibheading[]}} - -\def\blx@printbibheading[#1]{% - \def\blx@theheading{bibliography}% - \let\blx@thetitle\@empty - \blx@safe@actives - \setkeys{blx@bhd}{#1}% - \blx@rest@actives - \blx@langstrings - \blx@bibheading\blx@theheading\blx@thetitle - \endgroup} - -% [<options>] -\newrobustcmd*{\printbibliography}{% - \begingroup - \edef\on@line{\on@line}% - \@ifnextchar[%] - {\blx@printbibliography} - {\blx@printbibliography[]}} - -\def\blx@printbibliography[#1]{% - \toggletrue{blx@tempa}% - \toggletrue{blx@tempb}% - \def\blx@theheading{bibliography}% - \def\blx@theenv{bibliography}% - \let\blx@theprenote\@empty - \let\blx@thepostnote\@empty - \let\blx@thetitle\@empty - % defaults - \let\blx@tempa\@empty% before there is a .bbl, this must not be undef - \edef\blx@tempd{% - \blx@xml@sorting{% - \ifcsdef{blx@sortdef@locale@\blx@refcontext@sorting} - { locale="\csuse{blx@sortdef@locale@\blx@refcontext@sorting}"} - {}}{% - \csuse{blx@biber@sorting@\blx@refcontext@sorting}}}% default to context - \edef\blx@tempe{\the\c@refsection}% default refsection is current - \blx@safe@actives - % Add the sortscheme to the list of sortschemes - % so we can compare on next run - \xifinlist{\blx@refcontext@sorting}{\blx@sortschemes} - {} - {\listxadd\blx@sortschemes{\blx@refcontext@sorting}% - \blx@auxwrite\@mainaux{}{\string\abx@aux@sortscheme{\blx@refcontext@sorting}}}% - \edef\blx@tempd{% - \blx@xml@sorting{% - \ifcsdef{blx@sortdef@locale@\blx@refcontext@sorting} - { locale="\csuse{blx@sortdef@locale@\blx@refcontext@sorting}"} - {}}{% - \csuse{blx@biber@sorting@\blx@refcontext@sorting}}}% - \setkeys{blx@bib1}{#1}% Set section only, if present ... - \blx@rest@actives - \ifcsvoid{blx@slist@entry@\blx@tempe @\blx@refcontext@context} - {} - {\letcs\blx@tempa{blx@slist@entry@\blx@tempe @\blx@refcontext@context}}% - \blx@safe@actives - % Must reset omitnumbers as it's a global macro and if we don't, any - % \printbibliography following one with this set will inherit any - % previous "true" value - \togglefalse{blx@omitnumbers}% - \setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options - \blx@rest@actives - \csxappto{blx@biber@slists}{% - \blx@xml@slist{\blx@refcontext@context}{entry}{\blx@tempe}{\blx@refcontext@sorting}{\blx@refcontext@sortingnamekey}{\blx@tempd}{}}% - \ifdefvoid\blx@tempa - {\blx@warn@bibempty\endgroup} - {\blx@bibliography\blx@tempa}} - -% [<options>] -\newrobustcmd*{\bibbysection}{% - \begingroup - \ifnum\blx@maxsection=\z@ - \blx@warning{No reference sections found}% - \fi - \edef\on@line{\on@line}% - \@ifnextchar[%] - {\blx@bibbysection} - {\blx@bibbysection[]}} - -\def\blx@bibbysection[#1]{% - \def\blx@theheading{bibliography}% - \def\blx@theenv{bibliography}% - \let\blx@theprenote\@empty - \let\blx@thepostnote\@empty - \let\blx@thetitle\@empty - \c@refsection\z@ - \blx@safe@actives - \setkeys{blx@bbs}{#1}% - \blx@rest@actives - \togglefalse{blx@tempa}% - \blx@refsections} - -\def\blx@refsections{% - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} - {} - {\toggletrue{blx@tempa}% - \begingroup - \expandafter\blx@bibliography\csname blx@slist@entry@\the\c@refsection @\blx@refcontext@context\endcsname}% - \ifnum\c@refsection<\blx@maxsection - \advance\c@refsection\@ne - \expandafter\blx@refsections - \else - \iftoggle{blx@tempa}{}{\blx@warn@bibempty}% - \endgroup - \fi} - -% [<options>] -\newrobustcmd*{\bibbysegment}{% - \begingroup - \edef\on@line{\on@line}% - \ifnum\csname blx@maxsegment@\the\c@refsection\endcsname=\z@ - \blx@warning{No reference segments found}% - \fi - \@ifnextchar[%] - {\blx@bibbysegment} - {\blx@bibbysegment[]}} - -\def\blx@bibbysegment[#1]{% - \def\blx@theheading{bibliography}% - \def\blx@theenv{bibliography}% - \let\blx@theprenote\@empty - \let\blx@thepostnote\@empty - \let\blx@thetitle\@empty - \c@refsegment\@ne - \blx@safe@actives - \setkeys{blx@bbg}{#1}% - \blx@rest@actives - \togglefalse{blx@tempa}% - \blx@refsegments} - -\def\blx@refsegments{% - \ifcsvoid{blx@segm@\the\c@refsection @\the\c@refsegment} - {} - {\toggletrue{blx@tempa}% - \begingroup - \let\blx@tempa\@empty - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} - {} - {\letcs\blx@tempa{blx@slist@entry@\the\c@refsection @\blx@refcontext@context}}% - \blx@filter\blx@tempa{blx@segm@\the\c@refsection @\the\c@refsegment}% - \blx@bibliography\blx@tempa}% - \ifnum\c@refsegment<\csname blx@maxsegment@\the\c@refsection\endcsname - \advance\c@refsegment\@ne - \expandafter\blx@refsegments - \else - \iftoggle{blx@tempa}{}{\blx@warn@bibempty}% - \endgroup - \fi} - -% [<options>] -\newrobustcmd*{\bibbycategory}{% - \begingroup - \edef\on@line{\on@line}% - \ifx\blx@categories\@empty - \blx@warning{No categories found}% - \fi - \@ifnextchar[%] - {\blx@bibbycategory} - {\blx@bibbycategory[]}} - -\def\blx@bibbycategory[#1]{% - \def\blx@theheading{bibliography}% - \def\blx@theenv{bibliography}% - \let\blx@theprenote\@empty - \let\blx@thepostnote\@empty - \let\blx@thetitle\@empty - \c@refsection\z@ - \blx@safe@actives - \setkeys{blx@bbc}{#1}% - \blx@rest@actives - \togglefalse{blx@tempa}% - \forlistloop\blx@bibcategory\blx@categories - \blx@endbibcategory} - -\def\blx@bibcategory#1{% - \ifcsvoid{blx@catg@#1} - {} - {\toggletrue{blx@tempa}% - \begingroup - \blx@key@heading{#1}% - \let\blx@tempa\@empty - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} - {} - {\letcs\blx@tempa{blx@slist@entry@\the\c@refsection @\blx@refcontext@context}}% - \blx@filter\blx@tempa{blx@catg@#1}% - \blx@bibliography\blx@tempa}}% - -\def\blx@endbibcategory{% - \iftoggle{blx@tempa}{}{\blx@warn@bibempty}% - \endgroup} - -% {<entrykey>,...} -\def\blx@bibliography{% - \blx@langstrings - \blx@bibheading\blx@theheading\blx@thetitle - \blx@bibnote\blx@theprenote - \begingroup - \blx@bibinit - \let\@noitemerr\@empty - \let\blx@noitem\blx@warn@bibempty - \ifnum\bibinitsep=\z@ - \let\blx@initsep\relax - \fi - \ifnum\bibnamesep=\z@ - \let\blx@namesep\relax - \fi - \csuse{blx@env@\blx@theenv}% - \csuse{blx@hook@bibinit}% - \csuse{blx@hook@bibinit@next}% - \let\blx@do\blx@bibitem - \let\blx@done\blx@endbibliography - \blx@listloop} - -\def\blx@endbibliography{% - \csuse{blx@endenv@\blx@theenv}% - \blx@noitem - \endgroup - \blx@bibnote\blx@thepostnote - \endgroup} - -\def\blx@bibheading#1#2{% - \begingroup - \edef\blx@tempa{\endgroup - \noexpand\blx@bibheading@i{\expandonce#1}{\expandonce#2}}% - \blx@tempa} - -\def\blx@bibheading@i#1#2{% - \let\newrefsection\relax - \let\newrefsegment\relax - \ifblank{#2} - {\csuse{blx@head@#1}} - {\csuse{blx@head@#1}[#2]}% - \let\newrefsection\blx@newrefsection - \let\newrefsegment\blx@newrefsegment} - -\def\blx@bibnote#1{% - \ifdefempty#1 - {} - {\begingroup - \let\newrefsection\relax - \let\newrefsegment\relax - \noindent - \csuse{blx@note@#1}\par\nobreak - \endgroup}} - -\def\blx@bibinit{% - \iftoggle{blx@citation} - {} - {\toggletrue{blx@bibliography}}% - \blx@blxinit - \blx@resetdata - \csuse{blx@hook@bbxinit}% - \bibsetup\bibfont - \blx@setsfcodes - \csuse{blx@bibsetup}} - -% {<entrykey>} -% output a bib item, this is why \blx@thelabelnumber is here so that -% labelnumber is deferred if defernumbers=true -\def\blx@bibitem#1{% - \blx@ifdata{#1} - {\begingroup - \blx@getdata{#1}% - \blx@bibcheck - \iftoggle{blx@skipentry}{}{% - \global\let\blx@noitem\@empty - \blx@setoptions@type\abx@field@entrytype - \blx@setoptions@entry - \blx@thelabelnumber - \blx@addprefixnumber - \addtocounter{instcount}\@ne - \csuse{blx@item@\blx@theenv}\relax - \blx@initsep - \blx@namesep - \csuse{blx@hook@bibitem}% - \blx@execute - \blx@initunit - \blx@anchor - \blx@beglangbib - \bibsentence - \blx@pagetracker - \blx@driver\abx@field@entrytype - \blx@postpunct - \blx@endlangbib}% - \endgroup} - {}} - -\let\blx@bibcheck\relax - -\def\blx@initsep{% - \blx@imc@iffieldundef{sortinithash} - {} - {\ifnum\c@instcount>\@ne - \blx@imc@iffieldequals{sortinithash}\blx@previnithash - {} - {\addvspace{\bibinitsep}}% - \fi - \global\let\blx@previnithash\abx@field@sortinithash}} - -\def\blx@namesep{% - \ifnum\c@instcount>\@ne - \blx@imc@iffieldequals{fullhash}\blx@prevhash - {} - {\addvspace{\bibnamesep}}% - \fi - \global\let\blx@prevhash\abx@field@fullhash} - -\newrobustcmd*{\AtBeginBibliography}{\gappto\blx@hook@bibinit} -\newrobustcmd*{\AtEveryBibitem}{\gappto\blx@hook@bibitem} -\@onlypreamble\AtBeginBibliography -\@onlypreamble\AtEveryBibitem - -\def\blx@imc@UseBibitemHook{\csuse{blx@hook@bibitem}} - -\blx@regimcs{\UseBibitemHook} - -\newrobustcmd*{\AtNextBibliography}{% - \ifundef\blx@hook@bibinit@next - {\gdef\blx@hook@bibinit@next{\global\undef\blx@hook@bibinit@next}} - {}% - \gappto\blx@hook@bibinit@next} - -% page tracker -\def\blx@pagetracker@context{% - \blx@leavevmode - \ifbool{@filesw} - {\ifbool{pagetracker} - {\protected@write\@mainaux{}{% - \iftoggle{blx@footnote} - {\string\abx@aux@fnpage} - {\string\abx@aux@page}% - {\the\c@instcount}{\noexpand\the\c@page}}} - {}} - {}} - -% {<instcount>}{<page>} -\protected\def\blx@aux@page#1#2{% - \csgdef{blx@page@#1}{#2}% - \blx@addpagesum{#1}{#2}} -\protected\def\blx@aux@spread#1#2{% - \ifodd#2\relax - \csxdef{blx@page@#1}{\number\numexpr#2-1}% - \else - \csgdef{blx@page@#1}{#2}% - \fi - \blx@addpagesum{#1}{#2}} - -\protected\def\blx@aux@fnpage#1#2{% - \csgdef{blx@fnpage@#1}{#2}% - \blx@addpagesum{#1}{#2}} -\protected\def\blx@aux@fnspread#1#2{% - \ifodd#2\relax - \csxdef{blx@fnpage@#1}{\number\numexpr#2-1}% - \else - \csgdef{blx@fnpage@#1}{#2}% - \fi - \blx@addpagesum{#1}{#2}} - -\AtEndDocument{% - \def\abx@aux@page#1#2{\blx@addpagesum{#1}{#2}}% - \def\abx@aux@fnpage#1#2{\blx@addpagesum{#1}{#2}}} - -% hyperref interface -\appto\blx@mkhyperref{% - \let\blx@anchors\@empty - \ifundef\hyper@natanchorstart - {\protected\def\blx@anchor{% - \xifinlist{\the\c@refsection @\abx@field@entrykey}{\blx@anchors} - {} - {\listxadd\blx@anchors{\the\c@refsection @\abx@field@entrykey}% - \hypertarget{cite.\the\c@refsection @\abx@field@entrykey}{}}}} - {\protected\def\blx@anchor{% - \xifinlist{\the\c@refsection @\abx@field@entrykey}{\blx@anchors} - {} - {\listxadd\blx@anchors{\the\c@refsection @\abx@field@entrykey}% - \hyper@natanchorstart{\the\c@refsection @\abx@field@entrykey}% - \hyper@natanchorend}}}} - -\appto\blx@mknohyperref{\let\blx@anchor\relax} - -% Legacy alias for \printshorthands -\def\printshorthands{% - \@ifnextchar[%] - {\blx@printshorthands} - {\blx@printshorthands[]}} - -\def\blx@printshorthands[#1]{\printbiblist[#1]{shorthand}} - -% Custom bibliography list -% [<otions>]{biblistname} -\newrobustcmd*{\printbiblist}[2][]{% - \begingroup - \edef\on@line{\on@line}% - \toggletrue{blx@tempa}% - \toggletrue{blx@tempb}% - \def\blx@theheading{biblist}% default to biblist heading - \def\blx@theenv{#2}% default to list name - \def\blx@thebiblist{#2}% - \let\blx@theprenote\@empty - \let\blx@thepostnote\@empty - \let\blx@thetitle\@empty - % defaults - \let\blx@tempa\@empty% before there is a .bbl, this must not be undef - % default sorting scheme and scheme name for list is same name as list - % name, then current context if not found - \edef\blx@tempc{% - \ifcsdef{blx@biber@sorting@#2} - {#2} - {\blx@refcontext@sorting}}% - % locally define this since we want to fetch data from the slist named - % after the list we are printing rather than the data in refcontext list - \edef\blx@refcontext@context{\blx@tempc/\blx@refcontext@sortingnamekey}% - \edef\blx@tempd{% - \blx@xml@sorting - {\ifcsdef{blx@sortdef@locale@#2} - { locale="\csuse{blx@sortdef@locale@#2}"} - {}} - {\csuse{blx@biber@sorting@\blx@tempc}}}% - \let\blx@printbibchecks\relax - \edef\blx@tempe{\the\c@refsection}% default refsection is current - \blx@safe@actives - \blx@printbibchecks - % Add the sortscheme to the list of sortschemes for this biblist - % so we can compare on next run - \xifinlist{\blx@tempc}{\blx@biblists} - {} - {\listxadd\blx@biblists{\blx@tempc}% - \blx@auxwrite\@mainaux{}{\string\abx@aux@biblist{\blx@tempc}}}% - \edef\blx@tempd{% - \blx@xml@sorting{% - \ifcsdef{blx@sortdef@locale@\blx@tempc} - { locale="\csuse{blx@sortdef@locale@\blx@tempc}"} - {}}{% - \csuse{blx@biber@sorting@\blx@tempc}}}% - \setkeys{blx@biblist1}{#1}% Set section only, if present ... - \blx@rest@actives - \ifcsvoid{blx@slist@list@\blx@tempe @\blx@refcontext@context} - {} - {\letcs\blx@tempa{blx@slist@list@\blx@tempe @\blx@refcontext@context}}% - \blx@safe@actives - \setkeys{blx@biblist2}{#1}% ... now we have correct \blx@tempa, set rest of options - \ifundef\blx@bibcheck - {\ifcsdef{blx@bibcheck@#2} - {\letcs\blx@bibcheck{blx@bibcheck@#2}} - {}} - {}% - \blx@rest@actives - \csxappto{blx@biber@slists}{% - \blx@xml@slist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@tempc}{\blx@refcontext@sortingnamekey}{\blx@tempd}{\csuse{blx@biber@biblistfilters@#2}}}% - \ifdefvoid\blx@tempa - {\blx@warn@biblistempty{#2}\endgroup} - {\blx@biblist\blx@tempa}} - -\def\blx@printbibchecks{% - \togglefalse{blx@tempa}% - \iftoggle{blx@defernumbers} - {\global\let\blx@printbibchecks\relax} - {\iftoggle{blx@labelnumber} - {\blx@warning@noline{Setting 'defernumbers=true' recommended}} - {\global\let\blx@printbibchecks\relax}}} - -% {<entrykey>,...} -\def\blx@biblist{% - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse - \fi - \blx@langstrings - \blx@bibheading\blx@theheading\blx@thetitle - \blx@bibnote\blx@theprenote - \begingroup - \blx@bibinit - \let\@noitemerr\@empty - \def\blx@noitem{\blx@warn@biblistempty{\blx@thebiblist}}% - \csuse{blx@env@\blx@theenv}% - \csuse{blx@hook@biblistinit@\blx@thebiblist}% - \let\blx@do\blx@biblistitem - \let\blx@done\blx@endbiblist - \blx@listloop} - -\def\blx@endbiblist{% - \csuse{blx@endenv@\blx@theenv}% - \blx@noitem - \endgroup - \blx@bibnote\blx@thepostnote - \endgroup - \if@restonecol\twocolumn\fi} - -% Legacy aliases -\def\AtBeginShorthands{\AtBeginBiblist{shorthand}} -\def\AtEveryLositem{\AtEveryBiblistitem{shorthand}} -\@onlypreamble\AtBeginShorthands -\@onlypreamble\AtEveryLositem - -% {<biblistname>} -\newrobustcmd*{\AtBeginBiblist}[1]{\csgappto{blx@hook@biblistinit@#1}} -\newrobustcmd*{\AtEveryBiblistitem}[1]{\csgappto{blx@hook@biblistitem@#1}} -\@onlypreamble\AtBeginBiblist -\@onlypreamble\AtEveryBiblistitem - -% {<entrykey>} -\def\blx@biblistitem#1{% - \blx@ifdata{#1} - {\begingroup - \blx@getdata{#1}% - \blx@bibcheck - \iftoggle{blx@skipentry}{}{% - \global\let\blx@noitem\@empty - \blx@setoptions@type\abx@field@entrytype - \blx@setoptions@entry - \addtocounter{instcount}\@ne - \csuse{blx@item@\blx@theenv}\relax - \csuse{blx@hook@biblistitem@\blx@thebiblist}% - \blx@execute - \blx@initunit - \blx@beglangbib - \bibsentence - \blx@pagetracker - \blx@driver{\blx@thebiblist}% - \blx@postpunct - \blx@endlangbib}% - \endgroup} - {}} - -% Just a default in case .bbx doesn't define it. standard.bbx defines -% it to print a complete entry, like the bibliography. -\DeclareBibliographyDriver{shorthand}{% - \iffieldundef{shorttitle} - {\printfield{title}} - {\printfield{shorttitle}}} - -% Reference contexts -\def\newrefcontext{% - \endrefcontext - \refcontext} - -\def\refcontext[#1]{% - \iftoggle{blx@refcontext} - {\blx@err@nestenv{refcontext}% - \endrefcontext} - {\toggletrue{blx@refcontext}% - \setkeys{blx@refcontext}{#1}% - \xdef\blx@refcontext@context{\blx@refcontext@sorting/\blx@refcontext@sortingnamekey}% - \ifcsundef{blx@biber@sorting@\blx@refcontext@sorting} - {\blx@err@invopt{sorting=\blx@refcontext@sorting}{}} - {}}} - -% Reset to global sorting etc. when we leave a ref context (since they can't be nested) -\protected\def\endrefcontext{% - \togglefalse{blx@refcontext}% - \xdef\blx@refcontext@sorting{\blx@sorting}% - \gdef\blx@refcontext@sortingnamekey{global}% - \xdef\blx@refcontext@context{\blx@refcontext@sorting/\blx@refcontext@sortingnamekey}} - -\define@key{blx@refcontext}{sorting}{\gdef\blx@refcontext@sorting{#1}} -\define@key{blx@refcontext}{sortingnamekeyscheme}{\gdef\blx@refcontext@sortingnamekey{#1}} - -% [refcontext keys]{<keyword1>,<keyword2>,...} -\def\assignrefcontextkeyws[#1]#2{% - \edef\blx@tempa{\blx@sorting}% - \def\blx@tempb{global}% - \setkeys{blx@assignrefcontext}{#1}% - \def\do##1{% - \listxadd\blx@assignedrefcontextkeywlist{##1}% - \csxdef{blx@assignedrefcontextkeyws@\the\c@refsection @##1}{\blx@tempa/\blx@tempb}} - \docsvlist{#2}} - -% [refcontext keys]{<category1>,<category2>,...} -\def\assignrefcontextcats[#1]#2{% - \edef\blx@tempa{\blx@sorting}% - \def\blx@tempb{global}% - \setkeys{blx@assignrefcontext}{#1}% - \def\do##1{% - \listxadd\blx@assignedrefcontextcatlist{##1}% - \csxdef{blx@assignedrefcontextcats@\the\c@refsection @##1}{\blx@tempa/\blx@tempb}} - \docsvlist{#2}} - -% [refcontext keys]{<entrykey1>,<entrykey2>,...} -\def\assignrefcontextentries[#1]#2{% - \edef\blx@tempa{\blx@sorting}% - \def\blx@tempb{global}% - \setkeys{blx@assignrefcontext}{#1}% - \def\do##1{% - \csxdef{blx@assignedrefcontextkeys@\the\c@refsection @##1}{\blx@tempa/\blx@tempb}}% - \docsvlist{#2}} - -\define@key{blx@assignrefcontext}{sorting}{\def\blx@tempa{#1}} -\define@key{blx@assignrefcontext}{sortingnamekeyscheme}{\def\blx@tempb{#1}} - -% Reference sections -\newrobustcmd*{\newrefsection}{% - \ifnum\c@refsection>\z@ - \endrefsection - \fi - \refsection} -\let\blx@newrefsection\newrefsection - -\newrobustcmd*{\refsection}{% - \begingroup - \edef\on@line{\on@line}% - \ifnum\c@refsection>\z@ - \blx@err@nestenv{refsection}% - \blx@endrefsection - \fi - \ifnum\c@refsegment>\z@ - \blx@err@nestenv{refsection}% - \blx@endrefsegment - \fi - \@ifnextchar[%] - {\blx@refsection} - {\blx@refsection[]}} - -\def\blx@refsection{% - \begingroup - \blx@hook@fileverb - \blx@refsection@i} - -\def\blx@refsection@i[#1]{% - \endgroup - \global\advance\blx@maxsection\@ne - \global\c@refsection\blx@maxsection - \expandafter\newcount\csname blx@maxsegment@\the\c@refsection\endcsname - \expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname - \blx@inf@refsec - \blx@secinit - \if@filesw - \blx@auxwrite\@mainaux{}{% - \string\abx@aux@refsection{\the\c@refsection}{\the\c@page}}% - \ifblank{#1} - {} - {\let\blx@bibfiles\@empty - % globals should be first as it might contain macros needed for others - \forlistloop{\listadd\blx@bibfiles}\blx@bibfiles@global}% - \blx@xsanitizeafter{\forcsvlist\blx@refsection@addfile}{#1}% - \blx@refsection@biber - \fi - \blx@info{Setting label 'refsection:\the\c@refsection'}% - \label{refsection:\the\c@refsection}% - \endgroup} - -\def\blx@refsection@addfile#1{% - \ifcsdef{blx@res@labl@#1} - {\blx@refsection@addfile@i{\csuse{blx@res@labl@#1}}} - {\blx@refsection@addfile@i{#1}}} - -\def\blx@refsection@addfile@i#1{% - \ifcsdef{blx@res@loca@#1} - {\listeadd\blx@bibfiles{#1}} - {\listeadd\blx@bibfiles{\blx@stripbib{#1}\detokenize{.bib}}}} - -\def\blx@refsection@biber{% - \blx@regbibfiles\jobname\blx@bibfiles - \begingroup - \let\blx@tempa\@empty - \blx@bibdata\blx@tempa\blx@bibfiles - \blx@auxwrite\blx@bcfout - {\let\do\blx@datasource} - {\blx@xml@endsection\blx@nl - \blx@xml@comment{SECTION \the\c@refsection}% - \blx@xml@bibdata{\the\c@refsection}{\blx@tempa}% - \blx@xml@section{\the\c@refsection}}% - \endgroup} - -\protected\def\endrefsection{% - \blx@endrefsection - \blx@inf@refsec} - -\def\blx@endrefsection{% - \blx@endrefsegment - \blx@endrefsection@biber - \global\c@refsection\z@} - -\def\blx@endrefsection@biber{% - % make sure we always output aliases to the .bcf otherwise after their - % first resolution by biber, they will be invisible to subsequent biber - % runs since biblatex will resolve the \keyalias{} macro to the main - % entry key, biber won't put \keyalias{}in the .bbl on subsequent runs - % and biblatex will report a missing citekey - \def\do##1{% - % Make sure this counter exists. Sometimes it might not when using, e.g: - % refsection=chapter and \includeonly to put in the chapters or when - % inserting citations into table of contents - \ifcsname blx@sectionciteorder@\the\c@refsection\endcsname\else - \expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname - \fi - \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne - \blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{##1}{\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}}}% - \dolistcsloop{blx@keyaliases@\the\c@refsection}% - \ifnum\c@refsection>\z@ - \blx@auxwrite\blx@bcfout{}{% - \blx@xml@endsection\blx@nl - \blx@xml@comment{SECTION 0 (cont.)}% - \blx@xml@section{0}}% - \fi} - -\AtEndDocument{% - \endrefcontext - \blx@endrefsection - \def\abx@aux@refsection#1#2{\blx@addchecksum{#1}{#2}}} - -\protected\def\abx@aux@refsection#1#2{% - \ifnum#1>\blx@maxsection - \global\blx@maxsection#1\relax - \fi - \blx@addchecksum{#1}{#2}} - -% Reference segments - -\newrobustcmd*{\newrefsegment}{% - \ifnum\c@refsegment>\z@ - \blx@endrefsegment - \fi - \refsegment} -\let\blx@newrefsegment\newrefsegment - -\newrobustcmd*{\refsegment}{% - \ifnum\c@refsegment>\z@ - \blx@err@nestenv{refsegment}% - \blx@endrefsegment - \fi - \global\advance\csname blx@maxsegment@\the\c@refsection\endcsname\@ne - \global\c@refsegment\csname blx@maxsegment@\the\c@refsection\endcsname - \blx@inf@refseg - \blx@info{Setting label 'refsegment:\the\c@refsection\the\c@refsegment'}% - \label{refsegment:\the\c@refsection\the\c@refsegment}% - \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment} - {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty} - {}} - -\protected\def\endrefsegment{% - \blx@endrefsegment - \blx@inf@refseg} - -\def\blx@endrefsegment{% - \global\c@refsegment\z@} - -% Reference section/segment auto-reset -% we are prepending to the commands so that the resets happen before -% the part title is typeset otherwise \cites in there could be "ibid" -% which makes no sense -\def\blx@refpatch@part#1{% - \ifundef\part - {\blx@err@nodocdiv{part}} - {\toggletrue{blx@tempa}% - \def\do##1{% - \pretocmd##1{#1} - {\togglefalse{blx@tempa}\listbreak} - {}}% - \docsvlist{% - \H@old@part,% hyperref - \NR@part,% nameref - \@part}% latex/koma-script/memoir - \iftoggle{blx@tempa} - {\blx@err@patch{\string\@part}} - {}% - \let\do\noexpand}} - -\def\blx@refpatch@chapter#1{% - \ifundef\chapter - {\blx@err@nodocdiv{chapter}} - {\pretocmd\@makechapterhead{#1} - {} - {\blx@err@patch{\string\@makechapterhead}}}} - -\def\blx@refpatch@sect#1{% - \ifcsundef{#1} - {\blx@err@nodocdiv{#1}\@gobbletwo} - {\blx@refpatch@sect@i}} - -\edef\blx@refpatch@sect@i#1#2{% - \def\noexpand\do##1{% - \pretocmd##1% - {\noexpand\blx@refpatch@sect@ii{#1}{#2}{\string#2}} - {\togglefalse{blx@tempa}\noexpand\listbreak} - {}}% - \noexpand\blx@refpatch@sect@iii} - -\def\blx@refpatch@sect@ii#1#2#3{% - \ifnumequal{#2}{#3}{#1}{}} - -\def\blx@refpatch@sect@iii{% - \toggletrue{blx@tempa}% - \docsvlist{% order does matter: - \H@old@sectm@m,% memoir+hyperref (what a mess...) - \M@sect,% memoir - \H@old@sect,% hyperref - \NR@sect,% nameref - \scr@sect,% koma-script 3.x - \@sect}% latex - \iftoggle{blx@tempa} - {\blx@err@patch{\string\@sect}} - {}% - \let\do\noexpand} - -% Bibliography categories - -\let\blx@categories\@empty - -% {<category>} -\newrobustcmd*{\DeclareBibliographyCategory}[1]{% - \ifcsundef{blx@catg@#1} - {\global\cslet{blx@catg@#1}\@empty - \listgadd\blx@categories{#1}} - {\blx@error - {Category '#1' already declared} - {The bibliography category '#1'\MessageBreak - has already been declared}}} -\@onlypreamble\DeclareBibliographyCategory - -% {<category>}{<entrykey>,...} -\newrobustcmd*{\addtocategory}[2]{% - \ifcsundef{blx@catg@#1} - {\blx@error - {Category '#1' not declared} - {Use \string\DeclareBibliographyCategory\space to declare}} - {\AfterPreamble{% - \blx@xsanitizeafter{\forcsvlist{\blx@addtocategory{#1}}}{#2}}}} - -% {<category>}{<entrykey>,...} -\def\blx@addtocategory#1#2{% - % If we are adding a set member to a category, make sure we also add the - % set parent if it is cited. If it is cited, we should be using the set - % parent in the category, not the set child member. blx@setc@... will - % only exist if the set parent is also cited as it is only defined when a - % member contains \inset which only happens when the set parent is cited. - \ifcsdef{blx@setc@\the\c@refsection @#2} - {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}% - \abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}} - {}% - \blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{#2}}% - \abx@aux@category{#1}{#2}} - -% {<category>}{<entrykey>,...} -\protected\def\abx@aux@category#1#2{% - \xifinlistcs{\detokenize{#2}}{blx@catg@#1} - {} - {\listcsxadd{blx@catg@#1}{\detokenize{#2}}}} - -\AtEndDocument{\let\abx@aux@category\@gobbletwo} - -% [<options>]{<resource>,...} -\renewrobustcmd*{\bibliography}[1]{% - \begingroup - \def\blx@tempa{file}% - \def\blx@tempb{bibtex}% - \def\blx@tempc{local}% - \blx@xsanitizeafter{\forcsvlist\blx@addbib@legacy}{#1}% - \endgroup} -\@onlypreamble\bibliography - -\def\blx@addbib@legacy#1{% - \begingroup - \edef\blx@tempa{\endgroup - \noexpand\blx@addbib@resource{\blx@stripbib{#1}\detokenize{.bib}}}% - \blx@tempa} - -\def\blx@stripbib#1{% - \expandafter\blx@stripbib@i\detokenize{#1.bib}&} -\edef\blx@stripbib@i{% - \def\noexpand\blx@stripbib@i##1\detokenize{.bib}##2&} -\blx@stripbib@i{#1} - -% [<options>]{<resource>,...} -\newrobustcmd*{\addbibresource}{% - \blx@addbib\blx@addbib@resource} -\@onlypreamble\addbibresource - -\newrobustcmd*{\addglobalbib}{% - \blx@addbib\blx@addbib@global} -\@onlypreamble\addglobalbib - -\newrobustcmd*{\addsectionbib}{% - \blx@addbib\blx@addbib@register} -\@onlypreamble\addsectionbib - -\def\blx@addbib#1{% - \@ifnextchar[%] - {\blx@addbib@i{#1}} - {\blx@addbib@i{#1}[]}} - -\def\blx@addbib@i#1[#2]{% - \begingroup - \blx@hook@fileverb - \blx@addbib@ii{#1}{#2}} - -\def\blx@addbib@ii#1#2#3{% - \endgroup - \begingroup - \def\blx@tempa{file}% - \def\blx@tempb{bibtex}% - \def\blx@tempc{local}% - \undef\blx@tempd - \setkeys{blx@addbib}{#2}% - \blx@xsanitizeafter{#1}{#3}% - \endgroup} - -\def\blx@hook@fileverb{% - \let\do\@makeother - \dospecials - \catcode`\\=\z@ - \catcode`\{=\@ne - \catcode`\}=\tw@} - -\define@key{blx@addbib}{type}{\def\blx@tempa{#1}} -\define@key{blx@addbib}{datatype}{\def\blx@tempb{#1}} -\define@key{blx@addbib}{location}{\def\blx@tempc{#1}} -\define@key{blx@addbib}{label}{\edef\blx@tempd{\detokenize{#1}}} - -% \blx@res@type@<resource> resource -> type -% \blx@res@data@<resource> resource -> datatype -% \blx@res@loca@<resource> resource -> datatype -% \blx@res@labl@<resource> label -> resource - -\def\blx@addbib@register#1{% - \csxdef{blx@res@type@#1}{\blx@tempa}% - \csxdef{blx@res@data@#1}{\blx@tempb}% - \csxdef{blx@res@loca@#1}{\blx@tempc}% - \ifdef\blx@tempd - {\csxdef{blx@res@labl@\blx@tempd}{#1}} - {}} - -\def\blx@addbib@resource#1{% - \blx@addbib@register{#1}% - \listgadd\blx@bibfiles{#1}% - \blx@regbibfile\jobname{#1}} - -\def\blx@addbib@global#1{% - \blx@addbib@resource{#1}% - \listgadd\blx@bibfiles@global{#1}} - -\let\blx@bibfiles\@empty -\let\blx@bibfiles@global\@empty - -\def\blx@bibdata#1#2{% - \forlistloop{\blx@bibdata@i{#1}}#2} -\def\blx@bibdata@i#1#2{% - \blx@xmlsanitizeafter{\blx@bibdata@ii{#1}{#2}}{#2}} -\def\blx@bibdata@ii#1#2#3{% - \eappto#1{% - \blx@xml@datasource - {\ifcsdef{blx@res@type@#2} - {\csuse{blx@res@type@#2}} - {file}} - {\ifcsdef{blx@res@data@#2} - {\csuse{blx@res@data@#2}} - {bibtex}} - {#3}}} - -%% Citations - -\newrobustcmd*{\AtEveryCite}{\gappto\blx@hook@cite} -\newrobustcmd*{\AtEveryCitekey}{\gappto\blx@hook@citekey} -\newrobustcmd*{\AtEveryMultiCite}{\gappto\blx@hook@mcite} -\@onlypreamble\AtEveryCite -\@onlypreamble\AtEveryCitekey -\@onlypreamble\AtEveryMultiCite - -\newrobustcmd*{\AtEachCitekey}{% - \iftoggle{blx@citation}{\appto\blx@hook@citekey}{\@gobble}} - -\def\blx@imc@UseEveryCiteHook{\csuse{blx@hook@cite}} -\def\blx@imc@UseEveryCitekeyHook{\csuse{blx@hook@citekey}} -\def\blx@imc@UseEveryMultiCiteHook{\csuse{blx@hook@mcite}} - -\newrobustcmd*{\AtNextCite}{% - \ifundef\blx@hook@cite@next - {\gdef\blx@hook@cite@next{\global\undef\blx@hook@cite@next}} - {}% - \gappto\blx@hook@cite@next} - -\newrobustcmd*{\AtNextCitekey}{% - \ifundef\blx@hook@citekey@next - {\gdef\blx@hook@citekey@next{\global\undef\blx@hook@citekey@next}} - {}% - \gappto\blx@hook@citekey@next} - -\newrobustcmd*{\AtNextMultiCite}{% - \ifundef\blx@hook@mcite@next - {\gdef\blx@hook@mcite@next{\global\undef\blx@hook@mcite@next}} - {}% - \gappto\blx@hook@mcite@next} - -\def\blx@imc@UseNextCiteHook{\csuse{blx@hook@cite@next}} -\def\blx@imc@UseNextCitekeyHook{\csuse{blx@hook@citekey@next}} -\def\blx@imc@UseNextMultiCiteHook{\csuse{blx@hook@mcite@next}} - -\def\blx@imc@DeferNextCitekeyHook{\undef\blx@hook@citekey@next} - -\blx@regimcs{% - \UseEveryCiteHook \UseEveryCitekeyHook \UseEveryMultiCiteHook - \UseNextCiteHook \UseNextCitekeyHook \UseNextMultiCiteHook - \DeferNextCitekeyHook} - -% {<style>} - -\newrobustcmd*{\RequireCitationStyle}[1]{% - \blx@inputonce{#1.cbx}{citation style '#1'}{}{}{} - {\blx@error - {Style '#1' not found} - {The citation style '#1' could not be found}}} -\@onlypreamble\RequireCitationStyle - -% {<code>} - -\newrobustcmd*{\InitializeCitationStyle}{\appto\blx@hook@cbxinit} -\@onlypreamble\InitializeCitationStyle - -% {<code>} - -\newrobustcmd*{\OnManualCitation}{\appto\blx@hook@mancite} -\@onlypreamble\OnManualCitation - -\newrobustcmd*{\mancite}{% - \csuse{blx@hook@mancite}% - \blx@ibidreset - \blx@idemreset - \blx@opcitreset - \blx@loccitreset} - -% {<entrykey>}{<message>} -% Just a wrapper to suppress citation tracking in toc/lof etc. -\def\blx@citation#1#2{% - \ifbool{citerequest} - {\blx@citation@entry{#1}{#2}} - {}} - -\def\blx@citation@entry#1#2{% - \blx@bibreq{#1}% - \ifinlist{#1}{\blx@cites} - {} - {\listgadd{\blx@cites}{#1}% - \blx@auxwrite\@mainaux{}{\string\abx@aux@cite{#1}}}% - \ifinlistcs{#1}{blx@segm@\the\c@refsection @\the\c@refsegment} - {} - {\listcsgadd{blx@segm@\the\c@refsection @\the\c@refsegment}{#1}}% - \blx@ifdata{#1} - {} - {\ifcsdef{blx@miss@\the\c@refsection} - {\ifinlistcs{#1}{blx@miss@\the\c@refsection} - {} - {\blx@logreq@active{#2{#1}}}} - {\blx@logreq@active{#2{#1}}}}} - -\def\blx@citation@set#1#2{% - \blx@citation@entry{#1}{#2}% - \begingroup - \def\do##1{\blx@citation@entry{##1}\blx@msg@cundef}% - \expandafter\expandafter\expandafter\docsvlist - \expandafter\expandafter\expandafter{% - \csname blx@setp@\the\c@refsection @#1\endcsname}% - \endgroup} - -\def\blx@citation@inset#1#2{% - \blx@citation@entry{#1}{#2}% - \expandafter\expandafter\expandafter\blx@citation@inset@i - \expandafter\expandafter\expandafter{% - \csname blx@setc@\the\c@refsection @#1\endcsname}\blx@msg@cundef} - -\def\blx@citation@inset@i#1{% - \ifcsdef{blx@setp@\the\c@refsection @#1} - {\blx@citation@set{#1}} - {\blx@citation@entry{#1}}} - -\def\blx@citation@all{% - \ifbool{citerequest} - {\blx@bibreq{*}% - \global\csletcs - {blx@segm@\the\c@refsection @\the\c@refsegment} - {blx@slist@entry@\the\c@refsection @\blx@refcontext@context}% - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} - {\blx@logreq@active{}} - {}} - {}} - -\protected\def\blx@bibreq#1{% - \begingroup - \blx@xmlsanitizeafter{\def\blx@tempa}{#1}% - % citeall is always order "0" - this makes no real difference as biber - % ignores all other citekeys in the section if citeall is present - \ifstrequal{*}{#1} - {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{0}}} - {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}}}% - \endgroup} - -% {<set>}{<key1,key2,key3>} - -\newrobustcmd*{\defbibentryset}[2]{% - \@bsphack - \begingroup - \blx@xsanitizeafter{\def\blx@tempa}{#1}% - \let\blx@tempb\@empty - \let\blx@tempc\@empty - \blx@xsanitizeafter{\forcsvlist\blx@defentryset@add}{#2}% - \ifcsdef{blx@set@\the\c@refsection @\blx@tempa} - {\expandafter\ifdefequal - \csname blx@set@\the\c@refsection @\blx@tempa\endcsname - \blx@tempb - {} - {\blx@error - {Conflicting definitions of '\blx@tempa'} - {The entry set '\blx@tempa' been defined before.\MessageBreak - old: \blx@tempa\space = % - \csuse{blx@set@\the\c@refsection @\blx@tempa}\MessageBreak - new: \blx@tempa\space = \blx@tempb\MessageBreak - I'm ignoring the new definition}}} - {\global\cslet{blx@set@\the\c@refsection @\blx@tempa}\blx@tempb - \edef\blx@tempa{% - \AfterPreamble{\blx@setreq{\blx@tempa}{\blx@tempb}}}% - \blx@tempa}% - \endgroup - \@esphack} - -\def\blx@defentryset@add#1{% - \edef\blx@tempb{\blx@tempb\blx@tempc#1}% - \def\blx@tempc{,}} - -\protected\def\blx@setreq#1#2{% - \begingroup - \blx@xmlsanitizeafter{\def\blx@tempa}{#1}% - \blx@xmlsanitizeafter{\def\blx@tempb}{#2}% - \blx@auxwrite\blx@bcfout{}{\blx@xml@citeset{\blx@tempa}{\blx@tempb}}% - \endgroup} - -% {<entrykey>,...} -\protected\def\blx@citeloop#1{% - \begingroup - % Make sure this counter exists. Sometimes it might not when using, e.g: - % refsection=chapter and \includeonly to put in the chapters or when - % inserting citations into table of contents - \ifcsname blx@sectionciteorder@\the\c@refsection\endcsname\else - \expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname - \fi - \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne - \blx@tempcnta\z@ - \blx@tempcntb\z@ - \let\blx@tempa\@empty - \forcsvlist\blx@citeadd{#1}% - \blx@thenotecheck - \ifnum\blx@tempcnta>\z@ - \ifnum\blx@tempcntb>\z@ - \multicitedelim - \fi - \fi - \letcs\blx@tempb{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}% - \blx@thecitesort - \edef\blx@tempa{\endgroup - \c@citecount\z@ - \c@citetotal\the\blx@tempcnta\relax - \unexpanded{\forlistloop\blx@citeprint}{\blx@tempb}}% - \blx@tempa} - -\def\blx@notecheck{% - \ifnum\blx@tempcnta>\@ne - \blx@warning{% - Package option 'sortcites' enabled.\MessageBreak - Verify postnote placement}% - \fi} - -\def\blx@citesort{% - \ifnum\blx@tempcnta>\@ne - \blx@filtercitesort\blx@tempb{blx@tempa}% - \else - \blx@citenosort - \fi} - -\def\blx@citenosort{% - \let\blx@tempb\blx@tempa} - -% {<entrykey>} -\def\blx@citeadd#1{% - \ifcsdef{blx@keyalias@\the\c@refsection @#1} - {\edef\blx@realkey{\csuse{blx@keyalias@\the\c@refsection @#1}}} - {\def\blx@realkey{#1}}% - \expandafter\blx@citation\expandafter{\blx@realkey}\blx@msg@cundefon - \expandafter\blx@ifdata\expandafter{\blx@realkey} - {\advance\blx@tempcnta\@ne - \listeadd\blx@tempa{\blx@realkey}} - {\ifnum\blx@tempcntb>\z@\multicitedelim\fi - \expandafter\abx@missing\expandafter{\blx@realkey}% - \advance\blx@tempcntb\@ne}} - -% set refcontext for one citation key from auto-assign \assignrefcontext* -% macros, if any -% <entrykey> -\def\blx@getrefcontext#1{% - \let\blx@refcontext@context@saved\blx@refcontext@context - \ifdef\blx@assignedrefcontextkeywlist - {\def\do##1{% - \blx@imc@ifentrykeyword{#1}{##1} - {\letcs\blx@refcontext@context{blx@assignedrefcontextkeyws@\the\c@refsection @##1}} - {}}% - \dolistloop\blx@assignedrefcontextkeywlist} - {}% - \ifdef\blx@assignedrefcontextcatlist - {\def\do##1{% - \blx@imc@ifentrycategory{#1}{##1} - {\letcs\blx@refcontext@context{blx@assignedrefcontextcats@\the\c@refsection @##1}} - {}}% - \dolistloop\blx@assignedrefcontextcatlist} - {}% - \ifcsdef{blx@assignedrefcontextkeys@\the\c@refsection @#1} - {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys@\the\c@refsection @#1}} - {}} - -% {<entrykey>} -\protected\def\blx@citeprint#1{% - \blx@getrefcontext{#1}% - \advance\c@citecount\@ne - \addtocounter{instcount}\@ne - \ifnum\c@citecount=\@ne - \blx@getdata@cite{#1}% - \blx@precode - \ifnum\c@citetotal>\@ne - \blx@resetdata - \fi - \else - \blx@dlimcode - \fi - \begingroup - \ifnum\c@citetotal>\@ne - \blx@getdata@cite{#1}% - \fi - \blx@entrysetcount - \blx@setoptions@type\abx@field@entrytype - \blx@setoptions@entry - \blx@backref{#1}% - \blx@pagetracker - \csuse{blx@hook@citekey}% - \csuse{blx@hook@citekey@next}% - \blx@beglangcite - \blx@execute - \blx@loopcode - \blx@citecounter - \blx@citetracker - \blx@ibidtracker - \blx@idemtracker - \blx@opcittracker - \blx@loccittracker - \ifnum\c@citecount=\c@citetotal - \def\blx@thecheckpunct{\blx@err@nestcite\@gobble}% - \blx@postcode - \fi - \blx@endlangcite - \endgroup - \let\blx@refcontext@context\blx@refcontext@context@saved} - -% cite counter - -\def\blx@citecounter@global{% - \ifbool{@filesw} - {\ifbool{citetracker} - {\immediate\write\@mainaux{% - \string\abx@aux@count - {\the\c@refsection}{\abx@field@entrykey}}} - {}} - {}} - -\def\blx@citecounter@context{% - \ifbool{@filesw} - {\ifbool{citetracker} - {\immediate\write\@mainaux{% - \iftoggle{blx@footnote} - {\string\abx@aux@fncount} - {\string\abx@aux@count}% - {\the\c@refsection}{\abx@field@entrykey}}} - {}} - {}} - -% {<refsection>}{<entrykey>} - -\protected\def\blx@aux@count#1#2{% - \csnumgdef{blx@count@#1@\detokenize{#2}}{\csuse{blx@count@#1@\detokenize{#2}}+1}} -\protected\def\blx@aux@fncount#1#2{% - \csnumgdef{blx@fncount@#1@\detokenize{#2}}{\csuse{blx@fncount@#1@\detokenize{#2}}+1}} - -\let\abx@aux@count\@gobbletwo -\let\abx@aux@fncount\@gobbletwo - -\AtEndDocument{% - \let\abx@aux@count\@gobbletwo - \let\abx@aux@fncount\@gobbletwo} - -\protected\def\blx@setcitecounter@global{% - \c@citecounter0% - \csuse{blx@count@\the\c@refsection @\abx@field@entrykey}% - \relax} - -\protected\def\blx@setcitecounter@context{% - \c@citecounter0% - \iftoggle{blx@footnote} - {\csuse{blx@fncount@\the\c@refsection @\abx@field@entrykey}} - {\csuse{blx@count@\the\c@refsection @\abx@field@entrykey}}% - \relax} - -% cite tracker - -\def\blx@citetracker@global{% - \ifbool{citetracker} - {\xifinlistcs\abx@field@entrykey{blx@bsee@\the\c@refsection} - {} - {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@entrykey}} - {}} - -\def\blx@citetracker@context{% - \ifbool{citetracker} - {\iftoggle{blx@footnote} - {\xifinlistcs\abx@field@entrykey{blx@fsee@\the\c@refsection} - {} - {\listcsxadd{blx@fsee@\the\c@refsection}\abx@field@entrykey}} - {\xifinlistcs{\abx@field@entrykey}{blx@bsee@\the\c@refsection} - {} - {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@entrykey}}} - {}} - -\protected\appto\abx@savetrackers{% - \global\csletcs{blx@saved@bsee@\the\c@refsection}{blx@bsee@\the\c@refsection}% - \global\csletcs{blx@saved@fsee@\the\c@refsection}{blx@fsee@\the\c@refsection}} - -\protected\appto\abx@resttrackers{% - \global\csletcs{blx@bsee@\the\c@refsection}{blx@saved@bsee@\the\c@refsection}% - \global\csletcs{blx@fsee@\the\c@refsection}{blx@saved@fsee@\the\c@refsection}} - -\protected\appto\abx@cleartrackers{% - \global\cslet{blx@saved@bsee@\the\c@refsection}\@empty - \global\cslet{blx@saved@fsee@\the\c@refsection}\@empty} - -% ibidem tracker - -\def\blx@ibidtracker@global{% - \ifbool{citetracker} - {\global\let\blx@lastkey@text\abx@field@entrykey} - {}} - -\def\blx@ibidtracker@context{% - \ifbool{citetracker} - {\iftoggle{blx@footnote} - {\global\let\blx@lastkey@foot\abx@field@entrykey} - {\global\let\blx@lastkey@text\abx@field@entrykey}} - {}} - -\def\blx@ibidtracker@strict{% - \blx@ifcitesingle - {\blx@ibidtracker@global} - {\blx@ibidreset@global}}% - -\def\blx@ibidtracker@constrict{% - \blx@ifcitesingle - {\blx@mpfnsave - \blx@ibidtracker@context} - {\blx@ibidreset@context}}% - -\def\blx@ibidreset@force{% - \global\undef\blx@lastkey@text - \global\undef\blx@lastkey@foot - \blx@mpfnreset} - -\def\blx@ibidreset@global{% - \global\undef\blx@lastkey@text} - -\def\blx@ibidreset@context{% - \iftoggle{blx@footnote} - {\blx@mpfnreset - \global\undef\blx@lastkey@foot} - {\global\undef\blx@lastkey@text}} - -\protected\appto\abx@savetrackers{% - \global\let\blx@saved@lastkey@text\blx@lastkey@text - \global\let\blx@saved@lastkey@foot\blx@lastkey@foot} - -\protected\appto\abx@resttrackers{% - \global\let\blx@lastkey@text\blx@saved@lastkey@text - \global\let\blx@lastkey@foot\blx@saved@lastkey@foot} - -\protected\appto\abx@cleartrackers{% - \global\undef\blx@saved@lastkey@text - \global\undef\blx@saved@lastkey@foot} - -% idem tracker - -\def\blx@idemtracker@global{% - \ifbool{citetracker} - {\global\let\blx@lasthash@text\abx@field@fullhash} - {}} - -\def\blx@idemtracker@context{% - \ifbool{citetracker} - {\iftoggle{blx@footnote} - {\global\let\blx@lasthash@foot\abx@field@fullhash} - {\global\let\blx@lasthash@text\abx@field@fullhash}} - {}} - -\let\blx@idemtracker@strict\blx@idemtracker@global - -\def\blx@idemtracker@constrict{% - \blx@mpfnsave - \blx@idemtracker@context} - -\def\blx@idemreset@force{% - \global\undef\blx@lasthash@text - \global\undef\blx@lasthash@foot - \blx@mpfnreset} - -\def\blx@idemreset@global{% - \global\undef\blx@lasthash@text} - -\def\blx@idemreset@context{% - \iftoggle{blx@footnote} - {\blx@mpfnreset - \global\undef\blx@lasthash@foot} - {\global\undef\blx@lasthash@text}} - -\protected\appto\abx@savetrackers{% - \global\let\blx@saved@lasthash@text\blx@lasthash@text - \global\let\blx@saved@lasthash@text\blx@lasthash@text} - -\protected\appto\abx@resttrackers{% - \global\let\blx@lasthash@text\blx@saved@lasthash@text - \global\let\blx@lasthash@text\blx@saved@lasthash@text} - -\protected\appto\abx@cleartrackers{% - \global\undef\blx@saved@lasthash@text - \global\undef\blx@saved@lasthash@foot} - -% opcit tracker - -\def\blx@opcittracker@global{% - \ifbool{citetracker} - {\blx@opcit@tracker{text}} - {}} - -\def\blx@opcittracker@context{% - \ifbool{citetracker} - {\iftoggle{blx@footnote} - {\blx@opcit@tracker{foot}} - {\blx@opcit@tracker{text}}} - {}} - -\def\blx@opcittracker@strict{% - \blx@ifcitesingle - {\blx@opcittracker@global} - {\blx@opcitreset@global}}% - -\def\blx@opcittracker@constrict{% - \blx@ifcitesingle - {\blx@mpfnsave - \blx@opcittracker@context} - {\blx@opcitreset@context}}% - -\def\blx@opcit@tracker#1{% - \blx@imc@iffieldundef{namehash} - {} - {\global\cslet{blx@lastkey@#1@\abx@field@namehash}\abx@field@entrykey - \xifinlistcs\abx@field@namehash{blx@trackhash@#1} - {} - {\listcsxadd{blx@trackhash@#1}\abx@field@namehash}}} - -\def\blx@opcit@reset#1{% - \begingroup - \def\do##1{\global\csundef{blx@lastkey@#1@##1}}% - \dolistcsloop{blx@trackhash@#1}% - \global\cslet{blx@trackhash@#1}\@empty - \endgroup} - -\def\blx@opcitreset@force{% - \blx@opcit@reset{text}% - \blx@opcit@reset{foot}% - \blx@mpfnreset} - -\def\blx@opcitreset@global{% - \blx@opcit@reset{text}} - -\def\blx@opcitreset@context{% - \iftoggle{blx@footnote} - {\blx@opcit@reset{foot}% - \blx@mpfnreset} - {\blx@opcit@reset{text}}} - -\let\blx@trackhash@text\@empty -\let\blx@trackhash@foot\@empty - -\protected\appto\abx@savetrackers{% - \begingroup - \def\do#1{\global\csletcs{blx@saved@lastkey@text@#1}{blx@lastkey@text@#1}}% - \dolistloop\blx@trackhash@text - \global\let\blx@saved@trackhash@text\blx@trackhash@text - \def\do#1{\global\csletcs{blx@saved@lastkey@foot@#1}{blx@lastkey@foot@#1}}% - \dolistloop\blx@trackhash@foot - \global\let\blx@saved@trackhash@foot\blx@trackhash@foot - \endgroup} - -\protected\appto\abx@resttrackers{% - \begingroup - \blx@opcit@reset{text}% - \global\let\blx@trackhash@text\blx@saved@trackhash@text - \def\do#1{\global\csletcs{blx@lastkey@text@#1}{blx@saved@lastkey@text@#1}}% - \dolistloop\blx@trackhash@text - \blx@opcit@reset{foot}% - \global\let\blx@trackhash@foot\blx@saved@trackhash@foot - \def\do#1{\global\csletcs{blx@lastkey@foot@#1}{blx@saved@lastkey@foot@#1}}% - \dolistloop\blx@trackhash@foot - \endgroup} - -\protected\appto\abx@cleartrackers{% - \begingroup - \def\do#1{\global\csundef{blx@saved@lastkey@text@#1}}% - \dolistloop\blx@saved@trackhash@text - \global\undef\blx@saved@trackhash@text - \def\do#1{\global\csundef{blx@saved@lastkey@foot@#1}}% - \dolistloop\blx@saved@trackhash@foot - \global\undef\blx@saved@trackhash@foot - \endgroup} - -% loccit tracker - -\def\blx@loccittracker@global{% - \ifbool{citetracker} - {\blx@loccit@tracker{text}} - {}} - -\def\blx@loccittracker@context{% - \ifbool{citetracker} - {\iftoggle{blx@footnote} - {\blx@loccit@tracker{foot}} - {\blx@loccit@tracker{text}}} - {}} - -\def\blx@loccittracker@strict{% - \ifbool{citetracker} - {\blx@loccit@stricttracker{text}} - {}} - -\def\blx@loccittracker@constrict{% - \ifbool{citetracker} - {\iftoggle{blx@footnote} - {\blx@mpfnsave - \blx@loccit@stricttracker{foot}} - {\blx@loccit@stricttracker{text}}} - {}} - -\def\blx@loccit@tracker#1{% - \global\csundef{blx@lastnote@#1@\abx@field@entrykey}% - \blx@imc@iffieldundef{postnote} - {} - {\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote - \xifinlistcs\abx@field@entrykey{blx@trackkeys@#1} - {} - {\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}} - -\def\blx@loccit@stricttracker#1{% - \global\csundef{blx@lastnote@#1@\abx@field@entrykey}% - \blx@imc@iffieldundef{postnote} - {} - {\blx@ifcitesingle - {\expandafter\blx@imc@ifpages - \expandafter{\abx@field@postnote} - {\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote - \xifinlistcs\abx@field@entrykey{blx@trackkeys@#1} - {} - {\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}} - {}} - {}}} - -\def\blx@loccit@reset#1{% - \begingroup - \def\do##1{\global\csundef{blx@lastnote@#1@##1}}% - \dolistcsloop{blx@trackkeys@#1}% - \global\cslet{blx@trackkeys@#1}\@empty - \endgroup} - -\def\blx@loccitreset@force{% - \blx@loccit@reset{text}% - \blx@loccit@reset{foot}% - \blx@mpfnreset} - -\def\blx@loccitreset@global{% - \blx@loccit@reset{text}} - -\def\blx@loccitreset@context{% - \iftoggle{blx@footnote} - {\blx@loccit@reset{foot}% - \blx@mpfnreset} - {\blx@loccit@reset{text}}} - -\let\blx@trackkeys@text\@empty -\let\blx@trackkeys@foot\@empty - -\protected\appto\abx@savetrackers{% - \begingroup - \def\do#1{\global\csletcs{blx@saved@lastnote@text@#1}{blx@lastnote@text@#1}}% - \dolistloop\blx@trackkeys@text - \global\let\blx@saved@trackkeys@text\blx@trackkeys@text - \def\do#1{\global\csletcs{blx@saved@lastnote@foot@#1}{blx@lastnote@foot@#1}}% - \dolistloop\blx@trackkeys@foot - \global\let\blx@saved@trackkeys@foot\blx@trackkeys@foot - \endgroup} - -\protected\appto\abx@resttrackers{% - \begingroup - \blx@loccit@reset{text}% - \global\let\blx@trackkeys@text\blx@saved@trackkeys@text - \def\do#1{\global\csletcs{blx@lastnote@text@#1}{blx@saved@lastnote@text@#1}}% - \dolistloop\blx@trackkeys@text - \blx@loccit@reset{foot}% - \global\let\blx@trackkeys@foot\blx@saved@trackkeys@foot - \def\do#1{\global\csletcs{blx@lastnote@foot@#1}{blx@saved@lastnote@foot@#1}}% - \dolistloop\blx@trackkeys@foot - \endgroup} - -\protected\appto\abx@cleartrackers{% - \begingroup - \def\do#1{\global\csundef{blx@saved@lastnote@text@#1}}% - \dolistloop\blx@saved@trackkeys@text - \global\undef\blx@saved@trackkeys@text - \def\do#1{\global\csundef{blx@saved@lastnote@foot@#1}}% - \dolistloop\blx@saved@trackkeys@foot - \global\undef\blx@saved@trackkeys@foot - \endgroup} - -\def\blx@addbackref#1{% - \ifcsdef{blx@setp@\the\c@refsection @#1} - {\ifcase\blx@backrefsetstyle - \blx@addbackref@i{#1}% - \or - \blx@addbackref@ii{setp}{#1}% - \or - \blx@addbackref@i{#1}% - \or - \blx@addbackref@i{#1}% - \or - \blx@addbackref@i{#1}% - \blx@addbackref@ii{setp}{#1}% - \or - \blx@addbackref@i{#1}% - \blx@addbackref@ii{setp}{#1}% - \fi} - {\ifcsdef{blx@setc@\the\c@refsection @#1} - {\ifcase\blx@backrefsetstyle - \blx@addbackref@ii{setc}{#1}% - \or - \blx@addbackref@i{#1}% - \or - \blx@addbackref@i{#1}% - \or - \blx@addbackref@i{#1}% - \blx@addbackref@ii{setc}{#1}% - \or - \blx@addbackref@i{#1}% - \or - \blx@addbackref@i{#1}% - \blx@addbackref@ii{setc}{#1}% - \fi} - {\blx@addbackref@i{#1}}}} - -\def\blx@addbackref@i#1{% - \ifbacktracker - \blx@leavevmode - \if@filesw - \protected@write\@mainaux{}{\string\abx@aux@backref - {\the\c@instcount}{#1}{\the\c@refsection}% - {\thepage}{\noexpand\the\c@page}}% - \fi - \fi} - -\def\blx@addbackref@ii#1#2{% - \expandafter\expandafter\expandafter\forcsvlist - \expandafter\expandafter\expandafter\blx@addbackref@i - \expandafter\expandafter\expandafter{% - \csname blx@#1@\the\c@refsection @#2\endcsname}} - -% {<instcount>}{<entrykey>}{<refsection>}{<page>}{<page int>} -\protected\def\blx@aux@backref#1#2#3#4#5{% - \ifcsundef{blx@pref@#3@\detokenize{#2}} - {\global\cslet{blx@pref@#3@\detokenize{#2}}\@empty - \expandafter\blx@onlypreamble\csname blx@pref@#3@\detokenize{#2}\endcsname} - {}% - \ifinlistcs{#4}{blx@pref@#3@\detokenize{#2}} - {} - {\listcsgadd{blx@pref@#3@\detokenize{#2}}{#4}}% - \blx@addpagesum{#1}{#5}} - -\AtEndDocument{% - \def\abx@aux@backref#1#2#3#4#5{\blx@addpagesum{#1}{#5}}} - -% {<true>}{<false>} -\def\blx@ifcitesingle{% - \ifnum\c@citetotal=\@ne - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi} - -% hyperref interface - -\appto\blx@mkhyperref{% - \protected\def\blx@imc@bibhyperref{% - \@ifnextchar[%] - {\blx@bibhyperref} - {\blx@bibhyperref[\abx@field@entrykey]}}% - \ifundef\hyper@natanchorstart - {\long\def\blx@bibhyperref[#1]#2{% - \blx@sfsave\hyperlink{cite.\the\c@refsection @#1}{\blx@sfrest - #2% - \blx@sfsave}\blx@sfrest}% - \protected\long\def\blx@imc@bibhyperlink#1#2{% - \blx@sfsave\hyperlink{cite.\the\c@refsection:#1}{\blx@sfrest - #2% - \blx@sfsave}\blx@sfrest}% - \protected\long\def\blx@imc@bibhypertarget#1#2{% - \blx@sfsave\hypertarget{cite.\the\c@refsection:#1}{\blx@sfrest - #2% - \blx@sfsave}\blx@sfrest}}% - {\long\def\blx@bibhyperref[#1]#2{% - \blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest - #2% - \blx@sfsave\hyper@natlinkend\blx@sfrest}% - \protected\long\def\blx@imc@bibhyperlink#1#2{% - \blx@sfsave\hyper@natlinkstart{\the\c@refsection:#1}\blx@sfrest - #2% - \blx@sfsave\hyper@natlinkend\blx@sfrest}% - \protected\long\def\blx@imc@bibhypertarget#1#2{% - \blx@sfsave\hyper@natanchorstart{\the\c@refsection:#1}\blx@sfrest - #2% - \blx@sfsave\hyper@natanchorend\blx@sfrest}} - \let\blx@imc@ifhyperref\@firstoftwo - \def\blx@sf{\spacefactor}% - \def\blx@sfsave{% - \blx@leavevmode - \numgdef\blx@sf{\spacefactor}}% - \def\blx@sfrest{% - \ifhmode\spacefactor\blx@sf\relax\fi - \gdef\blx@sf{\spacefactor}}} - -\appto\blx@mknohyperref{% - \protected\def\blx@imc@bibhyperref{\@ifnextchar[\blx@nohyperref\@firstofone}% - \def\blx@nohyperref[#1]#2{#2}% - \let\blx@imc@bibhyperlink\@secondoftwo - \let\blx@imc@bibhypertarget\@secondoftwo - \let\blx@imc@ifhyperref\@secondoftwo} - -\blx@regimcs{% - \bibhyperref \bibhyperlink \bibhypertarget \ifhyperref} - -% {<entrykey>,...} -\protected\def\nocite#{\blx@nocite} - -\def\blx@nocite#1{% - \@bsphack - \AfterPreamble{% - \iftoggle{blx@bibliography} - {} - {\ifstrequal{*}{#1} - {\blx@citation@all} - {\blx@xsanitizeafter{\forcsvlist\blx@nocite@do}{#1}}}}% - \@esphack} - -\def\blx@nocite@do#1{% - % Make sure this counter exists. Sometimes it might not when using, e.g: - % refsection=chapter and \includeonly to put in the chapters or when - % inserting citations into table of contents - \ifcsname blx@sectionciteorder@\the\c@refsection\endcsname\else - \expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname - \fi - \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne - \blx@citation{#1}\blx@msg@cundef} - -% {<macro>}[<arg1>][<arg2>]{<arg3>} -% => <macro>{<arg1>}{<arg2>}{<arg3>} -\protected\def\blx@citeargs#1{% - \@ifnextchar[%] - {\blx@citeargs@i{#1}} - {\blx@citeargs@iii{#1{}{}}}} -\long\def\blx@citeargs@i#1[#2]{% - \@ifnextchar[%] - {\blx@citeargs@ii{#1{#2}}} - {\blx@citeargs@iii{#1{}{#2}}}} -\long\def\blx@citeargs@ii#1[#2]{% - \blx@citeargs@iii{#1{#2}}} -\long\def\blx@citeargs@iii#1#2{% - \blx@xsanitizeafter{#1}{#2}} - -% {<macro>}(<arg1>)(<arg2>) -% => <macro>{<arg1>}{<arg2>} -\protected\def\blx@multiargs#1{% - \@ifnextchar(%) - {\blx@multiargs@i{#1}} - {#1{}{}}} -\long\def\blx@multiargs@i#1(#2){% - \@ifnextchar(%) - {\blx@multiargs@ii{#1{#2}}} - {#1{}{#2}}} -\long\def\blx@multiargs@ii#1(#2){#1{#2}} - -% {<macro>}[<arg1>][<arg2>]{<arg3>}<punct> -% => <macro>{<arg1>}{<arg2>}{<arg3>}{<punctcmd>} -\protected\def\blx@citepunct#1{% - \blx@citeargs{\blx@citepunct@i{#1}}} -\long\def\blx@citepunct@i#1#2#3#4{% - \blx@thecheckpunct{#1{#2}{#3}{#4}}} - -% {<csname>}[<arg1>][<arg2>]{arg3}[arg4]{arg5}<punct> -% => <macro>{<arg1>}{<arg2>}{<arg3>}{<arg4>}{arg5}{<punctcmd>} -\protected\def\blx@citexpunct#1{% - \blx@citeargs{\blx@citexpunct@i{#1}}} -\long\def\blx@citexpunct@i#1#2#3#4{% - \@ifnextchar[%] - {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}} - {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}[#1]}} -\long\def\blx@citexpunct@ii#1#2[#3]#4{% - \blx@thecheckpunct{\blxcitecmd{#1}#2{#3}{#4}}} - -% {<code>}<punct> => <code>{<punctcmd>} -\long\def\blx@checkpunct#1{% - \begingroup - \def\blx@tempa{\endgroup#1}% - \futurelet\blx@tempb\blx@checkpunct@i} -\def\blx@checkpunct@i{% - \expandafter\blx@checkpunct@ii\blx@autopunct&} -\def\blx@checkpunct@ii#1{% - \ifx#1&% - \expandafter\blx@checkpunct@iii - \fi - \ifx#1\blx@tempb - \expandafter\blx@checkpunct@iv - \fi - \blx@checkpunct@ii} -\def\blx@checkpunct@iii#1\blx@checkpunct@ii{% - \global\undef\abx@field@postpunct - \blx@tempa{\blx@postpunct}} -\def\blx@checkpunct@iv#1\blx@checkpunct@ii#2{% - \gdef\abx@field@postpunct{#3}% - \edef\blx@tempa{% - \expandonce\blx@tempa{% - \ifcsdef{blx@pm@\detokenize{#3}} - {\csname blx@imc@add\csname blx@pm@\detokenize{#3}\endcsname - \endcsname} - {\noexpand#3}}}% - \blx@tempa} - -\long\def\blx@nocheckpunct#1{#1{}} - -\protected\def\blx@citeinit{% - \iftoggle{blx@bibliography} - {} - {\toggletrue{blx@citation}}% - \blx@blxinit - \blx@langstrings - \citesetup - \blx@setsfcodes - \blx@postpunct@agroup - \blx@resetdata - \blx@leavevmode - \csuse{blx@hook@cite}% - \csuse{blx@hook@cite@next}% - \let\blx@citeinit\blx@resetdata} - -\protected\def\blx@citecmdinit{% - \blx@leavevmode@cite - \iftoggle{blx@bibliography} - {} - {\blx@initunit}} - -% *{<command>}[<wrapper>]{<precode>}{<loopcode>}{<delimcode>}{<postcode>} -\newrobustcmd*{\DeclareCiteCommand}{% - \@ifstar{\blx@defcitecmd*}{\blx@defcitecmd{}}} - -\def\blx@defcitecmd#1#2{% - \begingroup - \escapechar\m@ne - \edef\blx@tempa{\endgroup - \noexpand\blx@defcitecmd@i{#1}{\string#2}}% - \blx@tempa} - -\def\blx@defcitecmd@i#1#2{% - \blx@checkcitecmd{#2}{#1}% - \protected\csdef{#2}{% - \blx@citecmdinit - \@ifstar - {\blx@citepunct{\blxcitecmd{#2*}}} - {\blx@citepunct{\blxcitecmd{#2}}}}% - \@ifnextchar[%] - {\blx@defcitecmd@iii{#2#1}} - {\blx@defcitecmd@ii{#2#1}}} - -\long\def\blx@defcitecmd@ii#1{% - \protected\csedef{blx@cite@#1}{\blxciteicmd{#1}}% - \blx@defcitecmd@iv{#1}} - -\long\def\blx@defcitecmd@iii#1[#2]{% - \protected\long\csedef{blx@cite@#1}##1##2##3##4{% - \begingroup - \blx@citeinit - \unexpanded{#2}{\blxciteicmd{#1}{##1}{##2}{##3}{}}% - ##4\endgroup}% - \blx@defcitecmd@iv{#1}} - -\long\def\blx@defcitecmd@iv#1#2#3#4#5{% - \protected\long\csdef{blx@citei@#1}##1##2##3##4{% - \ifblank{##1} - {} - {\def\abx@field@prenote{##1}}% - \ifblank{##2} - {\let\blx@thenotecheck\relax} - {\def\abx@field@postnote{##2}}% - \def\blx@precode{#2}% - \def\blx@loopcode{#3}% - \def\blx@dlimcode{#4}% - \def\blx@postcode{#5##4}% - \blx@citeloop{##3}% - \endgroup}} - -% {<type>}{<name>}{*} -\def\blx@checkcitecmd#1#2{% - \ifblank{#2} - {\ifcsdef{blx@cite@#1} - {\blx@info{Redefining '\@backslashchar#1'}} - {\ifcsundef{#1} - {} - {\blx@warning@noline{Redefining '\@backslashchar#1'}}}% - \ifcsdef{blx@cite@#1*} - {} - {\csedef{blx@cite@#1*}{% - \expandafter\noexpand\csname blx@cite@#1\endcsname}% - \csedef{blx@citei@#1*}{% - \expandafter\noexpand\csname blx@citei@#1\endcsname}}} - {\ifcsdef{blx@cite@#1} - {} - {\csdef{blx@cite@#1}{\blx@err@citecmd{#1}}% - \csdef{blx@citei@#1}{\blx@err@citecmd{#1}}}}} - -% {<name>}{prenote}{postnote}{citekey}{punct} -\newrobustcmd*{\blxcitecmd}[1]{% - \ifcsundef{blx@cite@#1} - {\blx@err@citecmd{#1}} - {\csuse{blx@cite@#1}}} - -\newrobustcmd*{\blxciteicmd}[1]{% - \begingroup - \blx@citeinit - \ifcsundef{blx@citei@#1} - {\blx@err@citecmd{#1}} - {\csuse{blx@citei@#1}}} - -% {<multicitecount>}{<name>}{prenote}{postnote}{citekey}{punct} -\protected\def\blxmciteicmd#1{% - \c@multicitecount#1\relax - \blxciteicmd} - -% {<multicitetotal>}{<multiprenote>}{<multipostnote>} -\protected\def\blxmcites#1#2#3{% - \begingroup - \blx@citeinit - \c@multicitecount\z@ - \c@multicitetotal#1\relax - \ifnum\c@multicitetotal>\@ne - \let\blx@ifcitesingle\@secondoftwo - \fi - \csuse{blx@hook@mcite}% - \csuse{blx@hook@mcite@next}% - \ifblank{#2}% - {} - {\def\abx@field@multiprenote{#2}}% - \ifblank{#3}% - {} - {\def\abx@field@multipostnote{#3}}% - \usebibmacro{multiprenote}} - -\protected\def\blxendmcites{% - \usebibmacro{multipostnote}% - \endgroup} - -% {<command>}[<wrapper>]{<cite>}{<delimiter>} -\newrobustcmd{\DeclareMultiCiteCommand}[1]{% - \ifundef#1% - {} - {\blx@info{Redefining '\string#1'}}% - \@ifnextchar[%] - {\blx@defmcitecmd{#1}} - {\blx@defmcitecmd{#1}[\@firstofone]}} - -\def\blx@defmcitecmd#1[#2]#3#4{% - \begingroup - \escapechar\m@ne - \edef\blx@tempa{\endgroup - \protected\def\noexpand#1{% - \blx@citecmdinit - \noexpand\@ifstar - {\expandafter\noexpand - \csname blx@mcite@\string#1\endcsname*% - \expandafter\noexpand - \csname blx@mcitei@\string#1\endcsname} - {\expandafter\noexpand - \csname blx@mcite@\string#1\endcsname{}% - \expandafter\noexpand - \csname blx@mcitei@\string#1\endcsname}}% - \protected\csdef{blx@mcite@\string#1}####1####2{% - \begingroup - \blx@citeinit - \noexpand\blx@multicite - ####2% - {\unexpanded{#2}}% - {\string#3####1}% - {\unexpanded{#4}}}% - \protected\long\csdef{blx@mcitei@\string#1}}% - \blx@tempa##1##2##3{##1{##2}##3\endgroup}} - -% {<command>}{<wrapper>}{<citecmd>}{<delimiter>} => -% <init><command>{<wrapper>}{<cites>}{<punct>} -\def\blx@multicite#1#2#3#4{% - \begingroup - \csuse{blx@hook@mcite@before}% - \def\blx@tempa{#1}% - \def\blx@tempb{#2}% - \def\blx@tempc{#3}% - \def\blx@tempd{#4}% - \c@multicitetotal\z@ - \blx@multiargs\blx@multicite@i} - -\def\blx@multicite@i#1#2{% - \ifblank{#1}% - {\let\abx@field@multiprenote\@empty}% - {\def\abx@field@multiprenote{#1}}% - \ifblank{#2}% - {\let\abx@field@multipostnote\@empty}% - {\def\abx@field@multipostnote{#2}}% - \let\blx@tempe\@empty - \let\blx@tempf\@empty - \togglefalse{blx@tempa}% - \blx@multiparse} - -\def\blx@multicite@add#1#2#3{% - \togglefalse{blx@tempa}% - \advance\c@multicitetotal\@ne - \eappto\blx@tempe{% - \expandonce\blx@tempf - \blxmciteicmd{\the\c@multicitetotal}% - {\expandonce\blx@tempc}\unexpanded{{#1}{#2}{#3}}{}}% - \let\blx@tempf\blx@tempd - \blx@multiparse} - -\def\blx@multicite@end#1{% - \edef\blx@tempa{\endgroup - \expandonce\blx@tempa - {\expandonce\blx@tempb}% - {\blxmcites - {\the\c@multicitetotal}% - {\expandonce\abx@field@multiprenote}% - {\expandonce\abx@field@multipostnote}% - \expandonce\blx@tempe - \blxendmcites}% - {#1}% - \iftoggle{blx@tempa}{\relax\space}{}}% - \blx@tempa} - -\def\blx@multiparse{% - \futurelet\@let@token\blx@multiparse@i} - -\def\blx@multiparse@i{% - \ifx\@let@token\relax - \blx@multiparse@ii{\blx@multicite@end{}}% - \fi - \ifx\@let@token[%] - \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}% - \fi - \ifx\@let@token\bgroup - \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}% - \fi - \ifx\@let@token\@sptoken - \blx@multiparse@ii\blx@multiparse@iii - \fi - \iftrue - \iftoggle{blx@tempa} - {\blx@multiparse@ii{\blx@multicite@end{}}} - {\blx@multiparse@ii{\blx@thecheckpunct\blx@multicite@end}}% - \fi - &} - -\def\blx@multiparse@ii#1#2&{\fi#1} -\csdef{blx@multiparse@iii} {\toggletrue{blx@tempa}\blx@multiparse} - -% {<name>}[l|i|r]{<cite>}{<multicite>} -\newrobustcmd*{\DeclareAutoCiteCommand}[1]{% - \ifcsundef{blx@acite@#1} - {} - {\blx@info{Redefining autocite command '#1'}}% - \@ifnextchar[%] - {\blx@defautocmd@i{#1}} - {\blx@defautocmd@i{#1}[r]}} - -\def\blx@defautocmd@i#1[#2]#3#4{% - \begingroup - \escapechar\m@ne - \edef\blx@tempa{\endgroup - \noexpand\blx@defautocmd@ii{#1}{#2}% - {\string#3}{\string#4}}% - \blx@tempa} - -\def\blx@defautocmd@ii#1#2#3#4{% - \protected\csedef{blx@acite@#1}{% - \blx@citecmdinit - \noexpand\@ifstar - {\blx@citepunct{\expandafter\noexpand - \csname blx@acitei@#1\endcsname*}} - {\blx@citepunct{\expandafter\noexpand - \csname blx@acitei@#1\endcsname{}}}}% - \protected\csedef{blx@acitei@#1}##1##2##3##4##5{% - \begingroup - \blx@citeinit - \if l#2\noexpand\unspace##5\fi - \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##5}\fi - \blxcitecmd{#3##1}{##2}{##3}{##4}{}% - \if r#2##5\fi - \if f#2\noexpand\iftoggle{blx@footnote}{##5}{}\fi - \endgroup}% - \protected\csedef{blx@macite@#1}{% - \blx@citecmdinit - \noexpand\@ifstar - {\expandafter\noexpand - \csname blx@mcite@#4\endcsname*% - \expandafter\noexpand - \csname blx@macitei@#1\endcsname} - {\expandafter\noexpand - \csname blx@mcite@#4\endcsname{}% - \expandafter\noexpand - \csname blx@macitei@#1\endcsname}}% - \protected\csedef{blx@macitei@#1}##1##2##3{% - \if l#2\noexpand\unspace##3\fi - \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##3}\fi - ##1{##2}% - \if r#2##3\fi - \if f#2\noexpand\iftoggle{blx@footnote}{##3}{}\fi - \endgroup}} - -% {<characters>} -\newrobustcmd*{\DeclareAutoPunctuation}[1]{% - \ifblank{#1} - {\let\blx@thecheckpunct\blx@nocheckpunct} - {\let\blx@thecheckpunct\blx@checkpunct - \def\blx@autopunct{#1}}} - -\AfterEndPreamble{% babel - \begingroup - \makeatletter - \endlinechar\m@ne - \scantokens\expandafter{% - \expandafter\gdef - \expandafter\blx@autopunct - \expandafter{\blx@autopunct}}% - \endgroup} - -% [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<namelist>}<punct> -\newrobustcmd*{\citename}{\blx@citexpunct{citename}} -\long\csdef{blx@cite@citename}#1#2#3#4#5#6{% - \begingroup - \blx@citecmdinit - \blx@citeinit - \ifblank{#1} - {} - {\def\abx@field@prenote{#1}}% - \ifblank{#2} - {\let\blx@thenotecheck\relax} - {\def\abx@field@postnote{#2}}% - \def\blx@precode{\usebibmacro{prenote}}% - \def\blx@loopcode{% - \ifnameundef{#5} - {\blx@warning@entry{'#5' undefined or not a name list}% - \abx@missing{#5}} - {\printnames[#4]{#5}}}% - \def\blx@dlimcode{\multicitedelim}% - \ifblank{#2} - {\def\blx@postcode{#6}} - {\def\blx@postcode{\usebibmacro{postnote}#6}}% - \boolfalse{citetracker}% - \boolfalse{pagetracker}% - \blx@citeloop{#3}% - \endgroup} - -% [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<list>}<punct> -\newrobustcmd*{\citelist}{\blx@citexpunct{citelist}} -\long\csdef{blx@cite@citelist}#1#2#3#4#5#6{% - \begingroup - \blx@citecmdinit - \blx@citeinit - \ifblank{#1} - {} - {\def\abx@field@prenote{#1}}% - \ifblank{#2} - {\let\blx@thenotecheck\relax} - {\def\abx@field@postnote{#2}}% - \def\blx@precode{\usebibmacro{prenote}}% - \def\blx@loopcode{% - \iflistundef{#5} - {\blx@warning@entry{'#5' undefined or not a literal list}% - \abx@missing{#5}} - {\printlist[#4]{#5}}}% - \def\blx@dlimcode{\multicitedelim}% - \ifblank{#2} - {\def\blx@postcode{#6}} - {\def\blx@postcode{\usebibmacro{postnote}#6}}% - \boolfalse{citetracker}% - \boolfalse{pagetracker}% - \blx@citeloop{#3}% - \endgroup} - -% [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<field>}<punct> - -\newrobustcmd*{\citefield}{\blx@citexpunct{citefield}} -\long\csdef{blx@cite@citefield}#1#2#3#4#5#6{% - \begingroup - \blx@citecmdinit - \blx@citeinit - \ifblank{#1} - {} - {\def\abx@field@prenote{#1}}% - \ifblank{#2} - {\let\blx@thenotecheck\relax} - {\def\abx@field@postnote{#2}}% - \def\blx@precode{\usebibmacro{prenote}}% - \def\blx@loopcode{% - \iffieldundef{#5} - {\blx@warning@entry{'#5' undefined or not a field}% - \abx@missing{#5}} - {\printfield[#4]{#5}}}% - \def\blx@dlimcode{\multicitedelim}% - \ifblank{#2} - {\def\blx@postcode{#6}} - {\def\blx@postcode{\usebibmacro{postnote}#6}}% - \boolfalse{citetracker}% - \boolfalse{pagetracker}% - \blx@citeloop{#3}% - \endgroup} - -\renewrobustcmd*{\cite}{\blx@err@citecmd\cite} -\let\blx@cite@cite\relax -\newrobustcmd*{\parencite}{\blx@warn@citecmd\parencite\cite} -\let\blx@cite@parencite\relax -\newrobustcmd*{\footcite}{\blx@warn@citecmd\footcite\cite} -\let\blx@cite@footcite\relax -\newrobustcmd*{\footcitetext}{\blx@warn@citecmd\footcitetext\cite} -\let\blx@cite@footcitetext\relax -\newrobustcmd*{\smartcite}{\blx@warn@citecmd\smartcite\cite} -\let\blx@cite@smartcite\relax -\newrobustcmd*{\textcite}{\blx@warn@citecmd\textcite\cite} -\let\blx@cite@textcite\relax -\newrobustcmd*{\supercite}{\blx@warn@citecmd\supercite\cite} -\let\blx@cite@supercite\relax - -%% ifthen interface - -\def\blx@TE#1#2{% - \TE@throw - \unexpanded{% - \iftrue\@nameuse{fi}% - #1{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2} - -\def\blx@xTE#1#2{% - \TE@throw - \unexpanded{\iftrue\@nameuse{fi}}% - #1\unexpanded{{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2} - -\let\blx@TE@hook\@empty - -\appto\blx@blxinit{% - \appto\blx@TE@hook{% - \def\ifhyperref{\blx@TE\blx@imc@ifhyperref}% - \def\ifmorenames{\blx@TE\blx@imc@ifmorenames}% - \def\ifmoreitems{\blx@TE\blx@imc@ifmoreitems}% - \def\iffirstcitekey{\blx@TE\blx@imc@iffirstcitekey}% - \def\iflastcitekey{\blx@TE\blx@imc@iflastcitekey}% - \def\ifciteseen{\blx@TE\blx@imc@ifciteseen}% - \def\ifentryseen{\blx@TE\blx@imc@ifentryseen}% - \def\ifentryinbib{\blx@TE\blx@imc@ifentryinbib}% - \def\ifciteibid{\blx@TE\blx@imc@ifciteibid}% - \def\ifciteidem{\blx@TE\blx@imc@ifciteidem}% - \def\ifopcit{\blx@TE\blx@imc@ifopcit}% - \def\ifloccit{\blx@TE\blx@imc@ifloccit}% - \def\ifsamepage{\blx@TE\blx@imc@ifsamepage}% - \def\iffirstonpage{\blx@TE\blx@imc@iffirstonpage}% - \def\ifcurrentfield#1{\blx@TE{\blx@imc@ifcurrentfield{#1}}}% - \def\ifcurrentlist#1{\blx@TE{\blx@imc@ifcurrentlist{#1}}}% - \def\ifcurrentname#1{\blx@TE{\blx@imc@ifcurrentname{#1}}}% - \def\ifentrytype#1{\blx@TE{\blx@imc@ifentrytype{#1}}}% - \def\iffieldequalcs#1#2{\blx@TE{\blx@imc@iffieldequalcs{#1}{#2}}}% - \def\iffieldequals#1#2{\blx@TE{\blx@imc@iffieldequals{#1}{#2}}}% - \def\iffieldequalstr#1#2{\blx@TE{\blx@imc@iffieldequalstr{#1}{#2}}}% - \def\iffieldsequal#1#2{\blx@TE{\blx@imc@iffieldsequal{#1}{#2}}}% - \def\ifbibmacroundef#1{\blx@TE{\blx@imc@ifbibmacroundef{#1}}}% - \def\iffieldundef#1{\blx@TE{\blx@imc@iffieldundef{#1}}}% - \def\ifnameequalcs#1#2{\blx@TE{\blx@imc@ifnameequalcs{#1}{#2}}}% - \def\ifnameequals#1#2{\blx@TE{\blx@imc@ifnameequals{#1}{#2}}}% - \def\ifnamesequal#1#2{\blx@TE{\blx@imc@ifnamesequal{#1}{#2}}}% - \def\ifnameundef#1{\blx@TE{\blx@imc@ifnameundef{#1}}}% - \def\ifcategory#1{\blx@TE{\blx@imc@ifcategory{#1}}}% - \def\ifkeyword#1{\blx@TE{\blx@imc@ifkeyword{#1}}}% - \def\ifentrycategory#1#2{\blx@TE{\blx@imc@ifentrycategory{#1}{#2}}}% - \def\ifentrykeyword#1#2{\blx@TE{\blx@imc@ifentrykeyword{#1}{#2}}}% - \def\ifcapital{\blx@TE\blx@imc@ifcapital}% - \def\ifinteger#1{\blx@TE{\blx@imc@ifinteger{#1}}}% - \def\iffieldint#1{\blx@TE{\blx@imc@iffieldint{#1}}}% - \def\ifnumeral#1{\blx@TE{\blx@imc@ifnumeral{#1}}}% - \def\ifnumerals#1{\blx@TE{\blx@imc@ifnumerals{#1}}}% - \def\ifpages#1{\blx@TE{\blx@imc@ifpages{#1}}}% - \def\iffieldnum#1{\blx@TE{\blx@imc@iffieldnum{#1}}}% - \def\iffieldnums#1{\blx@TE{\blx@imc@iffieldnums{#1}}}% - \def\iffieldpages#1{\blx@TE{\blx@imc@iffieldpages{#1}}}% - \def\ifbibstring#1{\blx@TE{\blx@imc@ifbibstring{#1}}}% - \def\iffieldbibstring#1{\blx@TE{\blx@imc@iffieldbibstring{#1}}}% - \def\ifnatbibmode{\blx@TE{\iftoggle{blx@natbib}}}% - \def\ifcitation{\blx@TE{\iftoggle{blx@citation}}}% - \def\ifbibliography{\blx@TE{\iftoggle{blx@bibliography}}}% - \def\ifciteindex{\blx@TE{\iftoggle{blx@citeindex}}}% - \def\ifbibindex{\blx@TE{\iftoggle{blx@bibindex}}}% - \def\iffootnote{\blx@TE{\iftoggle{blx@footnote}}}% - \def\ifuseprefix{\blx@TE{\iftoggle{blx@useprefix}}}% - \def\ifterseinits{\blx@TE{\iftoggle{blx@terseinits}}}% - \def\iffirstinits{\blx@TE{\iftoggle{blx@giveninits}}}% legacy name for \ifgiveninits - \def\ifgiveninits{\blx@TE{\iftoggle{blx@giveninits}}}% - \def\ifsingletitle{\blx@TE{\iftoggle{abx@bool@singletitle}}}% - \def\ifandothers#1{\blx@TE{\iftoggle{abx@bool@more#1}}}}} - -% {<listmacro>}{<filtercsname>} => matches in <listmacro> - -\protected\def\blx@bibfilter#1#2{% - \begingroup - \edef\blx@do##1{% - \def\noexpand\blx@flt@item{##1}% - \ifboolexpr{\csexpandonce{#2}}% - {\listadd\noexpand\blx@tempa{##1}}% - {}}% - \let\blx@done\relax - \edef\blx@tempa{% - \let\noexpand\blx@tempa\noexpand\@empty - \blx@listloop{#1}}% - \blx@tempa - \edef\blx@tempa{\endgroup - \def\noexpand#1{\blx@tempa}}% - \blx@tempa} - -%% Auxiliary macros - -\newrobustcmd*{\mkbibquote}{\enquote} -\protected\def\blx@imc@mkbibquote{% - \blx@ifuspunct\blx@usquote\enquote} - -\def\blx@usquote{% - \ifnum\@quotelevel>\z@ - \expandafter\blx@usiquote - \else - \expandafter\blx@usoquote - \fi} - -\long\def\blx@usoquote#1{% - \begingroup - \initoquote - \textooquote#1% - \futurelet\@let@token\blx@usoquote@i} - -\def\blx@usoquote@i{% - \blx@usqcheck - {\ifx\blx@postpunct\@empty\else\blx@dopostpunct\fi - \textcoquote\endgroup} - {\blx@setpostpunct\textcoquote\endgroup}} - -\long\def\blx@usiquote#1{% - \begingroup - \initiquote - \textoiquote#1% - \futurelet\@let@token\blx@usiquote@i} - -\def\blx@usiquote@i{% - \blx@usqcheck - {\textciquote\endgroup} - {\blx@setpostpunct\textciquote\endgroup}} - -\long\def\blx@usqcheck#1#2{% - \def\blx@tempa{#1}% - \def\blx@tempb{#2}% - \ifx\@let@token\space - \blx@usqcheck@i\blx@tempa - \fi - \ifx\@let@token\@sptoken - \blx@usqcheck@i\blx@tempa - \fi - \if\noexpand\@let@token\relax - \expandafter\blx@usqcheck@iv - \fi - \expandafter\blx@usqcheck@ii\blx@quotepunct\relax&} - -\long\def\blx@usqcheck@i#1#2&{\fi#1} - -\long\def\blx@usqcheck@ii#1{% - \if\noexpand#1\relax - \blx@usqcheck@i\blx@tempa - \fi - \if\noexpand#1\noexpand\@let@token - \blx@usqcheck@i{\blx@usqcheck@iii\blx@tempa}% - \fi - \blx@usqcheck@ii -} - -\long\def\blx@usqcheck@iii#1#2{#2#1} - -\long\def\blx@usqcheck@iv#1{% - \begingroup - \escapechar=-1 % - \edef\blx@tempa{\expandafter\@gobble\string#2}% - \expandafter\endgroup - \ifx\blx@tempa\@empty - \else - \blx@usqcheck@i\blx@tempb - \fi - #1% -} - -\newrobustcmd*{\mkbibemph}{\emph} -\protected\long\def\blx@imc@mkbibemph#1{% - \emph{#1}\blx@imc@setpunctfont\emph} - -\newrobustcmd*{\mkbibbold}{\textbf} -\protected\long\def\blx@imc@mkbibbold#1{% - \textbf{#1}\blx@imc@setpunctfont\textbf} - -\newrobustcmd*{\mkbibitalic}{\textit} -\protected\long\def\blx@imc@mkbibitalic#1{% - \textit{#1}\blx@imc@setpunctfont\textit} - -\blx@regimcs{\mkbibquote \mkbibemph \mkbibbold \mkbibitalic} - -\newcommand*{\bibleftparen}{\blx@postpunct(} -\newcommand*{\bibrightparen}{\blx@postpunct)\midsentence} -\newcommand*{\bibleftbracket}{\blx@postpunct[} -\newcommand*{\bibrightbracket}{\blx@postpunct]\midsentence} - -\def\blx@parenlevel{% - \iftoggle{blx@footnote} - {\blx@parenlevel@foot} - {\blx@parenlevel@text}} - -\newrobustcmd*{\blx@bibopenparen}{% - \blx@opencheck\bibopenparen - \blx@postpunct - \ifnum\blx@parenlevel=\z@ - \global\blx@parenlevel\@ne - \global\c@parenlevel\@ne - \expandafter\bibleftparen - \else - \expandafter\blx@openparen - \fi} - -\newrobustcmd*{\blx@bibopenbracket}{% - \blx@opencheck\bibopenbracket - \blx@postpunct - \ifnum\blx@parenlevel=\z@ - \global\blx@parenlevel1002 - \global\c@parenlevel\@ne - \expandafter\bibleftbracket - \else - \expandafter\blx@openparen - \fi} - -\newrobustcmd*{\blx@bibcloseparen}{% - \blx@closecheck\bibcloseparen - \blx@postpunct\blx@closeparen} - -\newrobustcmd*{\blx@bibclosebracket}{% - \blx@closecheck\bibclosebracket - \blx@postpunct\blx@closeparen} - -\def\blx@openparen{% - \ifodd\blx@parenlevel - \global\advance\blx@parenlevel\@ne - \global\advance\c@parenlevel\@ne - \expandafter\bibleftbracket - \else - \global\advance\blx@parenlevel\@ne - \global\advance\c@parenlevel\@ne - \expandafter\bibleftparen - \fi} - -\def\blx@closeparen{% - \ifodd\blx@parenlevel - \blx@closeparen@i - \expandafter\bibrightparen - \else - \blx@closeparen@i - \expandafter\bibrightbracket - \fi} - -\def\blx@closeparen@i{% - \ifnum\blx@parenlevel=1002 - \global\blx@parenlevel\z@ - \global\c@parenlevel\z@ - \else - \global\advance\blx@parenlevel\m@ne - \global\advance\c@parenlevel\m@ne - \fi} - -\def\blx@opencheck#1{% - \ifnum\numexpr\blx@parenlevel+\@ne - \ifnum\blx@parenlevel>\@m -1001\fi - >\c@maxparens - \blx@err@nestparen{\string#1}% - \blx@errormark - \fi} - -\def\blx@closecheck#1{% - \ifnum\numexpr\blx@parenlevel - \ifnum\blx@parenlevel>\@m -1001\fi - >\c@maxparens - \blx@err@nestparen{\string#1}% - \blx@errormark - \fi - \ifnum\blx@parenlevel<\@ne - \blx@err@matchparen{Unmatched \string#1}% - \blx@errormark - \fi} - -\protected\def\blx@errormark{% - \rule[0.25ex]{1.25ex}{1.25ex}} - -\AtEndDocument{% - \unless\ifnum\blx@parenlevel@text=\z@ - \blx@err@matchparen{% - Unbalanced parentheses or brackets in the document body}% - \fi - \unless\ifnum\blx@parenlevel@foot=\z@ - \blx@err@matchparen{% - Unbalanced parentheses or brackets in a foot or endnote}% - \fi} - -\newrobustcmd{\mkbibparens}[1]{% - \begingroup - \blx@blxinit - \blx@setsfcodes - \bibopenparen#1\bibcloseparen - \endgroup} - -\newrobustcmd{\mkbibbrackets}[1]{% - \begingroup - \blx@blxinit - \blx@setsfcodes - \bibopenbracket#1\bibclosebracket - \endgroup} - -\newrobustcmd*{\parentext}{\mkbibparens} -\newrobustcmd*{\brackettext}{\mkbibbrackets} - -\newrobustcmd{\mkbibsuperscript}[1]{% - \unspace\allowhyphens\textsuperscript{% - \begingroup - \protected\long\def\mkbibsuperscript##1{% - \blx@warning{Nested superscript}% - \mkbibbrackets{##1}}% - #1\endgroup}} - -\newrobustcmd{\mkbibfootnote}{\blx@mkbibfootnote{}} -\newrobustcmd{\mkbibfootnotetext}{\blx@mkbibfootnote{text}} -\newrobustcmd{\blx@mkbibfootnote}[2]{% - \iftoggle{blx@footnote} - {\blx@warning{Nested notes}% - \addspace\mkbibparens{#2}} - {\unspace - \ifnum\blx@notetype=\tw@ - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}} - {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}}} - -\newrobustcmd{\mkbibendnote}{\blx@mkbibendnote{}} -\newrobustcmd{\mkbibendnotetext}{\blx@mkbibendnote{text}} -\newrobustcmd{\blx@mkbibendnote}[2]{% - \iftoggle{blx@footnote} - {\blx@warning{Nested notes}% - \addspace\mkbibparens{#2}} - {\unspace - \ifnum\blx@notetype=\@ne - \expandafter\@firstoftwo - \else - \expandafter\@secondoftwo - \fi - {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}} - {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}}} - -\newrobustcmd{\blxmkbibnote}[2]{% - \begingroup - \blx@blxinit - \blx@setsfcodes - \blx@postpunct@agroup - \toggletrue{blx@footnote}% - \csuse{bib#1notewrapper}{#2}% - \endgroup} - -\newcommand{\bibfootnotewrapper}[1]{% - \bibsentence#1\addperiod} - -\newcommand{\bibendnotewrapper}[1]{% - \bibsentence#1\addperiod} - -\AtEndPreamble{% - \def\blx@theendnote{\blx@err@endnote\footnote}% - \def\blx@theendnotetext{\blx@err@endnote\footnotetext}% - \ifdef\endnote - {\def\blx@theendnote{\endnote}% - \ifdef\endnotetext - {\def\blx@theendnotetext{\endnotetext}} - {}} - {\ifdef\pagenote - {\def\blx@theendnote{\pagenote}% - \ifdef\pagenotetext - {\def\blx@theendnotetext{\pagenotetext}} - {}} - {}}} - -\newrobustcmd*{\mknumalph}[1]{% - \begingroup - \blx@tempcnta=#1\relax - \ifnum\blx@tempcnta>702 % - \else - \ifnum\blx@tempcnta>26 % - \advance\blx@tempcnta\m@ne - \divide\blx@tempcnta26\relax - \blx@numalph\blx@tempcnta - \multiply\blx@tempcnta26\relax - \blx@tempcnta=\numexpr#1-\blx@tempcnta\relax - \fi - \fi - \blx@numalph\blx@tempcnta - \endgroup} -\def\blx@numalph#1{% - \ifcase#1\relax\blx@warning@entry{Value out of range}\number#1\or - a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or - n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else - \blx@warning@entry{Value out of range}\number#1\fi} - -% {<macro>}[<pre>]{<vol>}[<post>] => <macro>{<pre>}{{<vol>}{<post>}} - -\newrobustcmd*{\volcitecmd}{% - \AtNextCite{\DeclareFieldAlias{postnote}{volcitenote}}% - \begingroup\let\blx@citeargs\blx@volciteargs} - -\protected\def\blx@volciteargs#1{% - \endgroup - \@ifnextchar[%] - {\blx@volciteargs@i{#1}} - {\blx@volciteargs@i{#1}[]}} - -\long\def\blx@volciteargs@i#1[#2]#3{% - \@ifnextchar[%] - {\blx@volciteargs@ii{#1}{#2}{#3}} - {\blx@citeargs@iii{#1{#2}{{#3}{}}}}} - -\long\def\blx@volciteargs@ii#1#2#3[#4]{% - \blx@citeargs@iii{#1{#2}{{#3}{#4}}}} - -\newrobustcmd*{\multivolcitecmd}{% - \AtNextCite{\DeclareFieldAlias{postnote}{volcitenote}}% - \def\blx@hook@mcite@before{% - \global\undef\blx@hook@mcite@before - \let\blx@citeargs\blx@volmciteargs}} - -\protected\def\blx@volmciteargs#1{% - \@ifnextchar[%] - {\blx@volciteargs@i{#1}} - {\blx@volciteargs@i{#1}[]}} - -%% Control file - -\begingroup -\let~\space -\@makeother\< -\@makeother\> -\@makeother\. -\@makeother\: -\@makeother\? -\@makeother\" -\@makeother\- -\@makeother\= -\@makeother\/ -\xdef\blx@xml@file{% - \blx@sig@bcf\blx@nl - \blx@ver@bcf\blx@nl} -\xdef\blx@xml@endfile{% - </bcf:controlfile>} -\xdef\blx@xml@comment#1{% - ~~<!-- #1 -->\blx@nl} -\xdef\blx@xml@options#1#2#3{% - ~~<bcf:options% - \noexpand\ifblank{#1}{}{ component="#1"}% - \noexpand\ifblank{#2}{}{ type="#2"}% - >\blx@nl - #3% - ~~</bcf:options>\blx@nl} -\xdef\blx@xml@option#1#2{% - ~~~~<bcf:option type="#1">\blx@nl - #2% - ~~~~</bcf:option>\blx@nl} -\xdef\blx@xml@ordered#1#2#3{% - ~~~~~~<bcf:value order="#1"#2% - >#3</bcf:value>\blx@nl} - -\xdef\blx@xml@sourcemap#1{% - ~~<bcf:sourcemap>\blx@nl - #1% - ~~</bcf:sourcemap>\blx@nl} -\xdef\blx@xml@sourcemap@maps#1#2{% - ~~~~<bcf:maps#1>\blx@nl - #2% - ~~~~</bcf:maps>\blx@nl} -\xdef\blx@xml@sourcemap@map#1#2{% - ~~~~~~<bcf:map#1>\blx@nl - #2% - ~~~~~~</bcf:map>\blx@nl} -\xdef\blx@xml@sourcemap@perdatasource#1{% - ~~~~~~~~<bcf:per\string_datasource>#1</bcf:per\string_datasource>\blx@nl} -\xdef\blx@xml@sourcemap@pertype#1{% - ~~~~~~~~<bcf:per\string_type>#1</bcf:per\string_type>\blx@nl} -\xdef\blx@xml@sourcemap@pernottype#1{% - ~~~~~~~~<bcf:per\string_nottype>#1</bcf:per\string_nottype>\blx@nl} -\xdef\blx@xml@sourcemap@step#1{% - ~~~~~~~~<bcf:map\string_step#1/>\blx@nl} - -\xdef\blx@xml@labelalphatemplate#1#2{% - ~~<bcf:labelalphatemplate type="#1">\blx@nl - #2% - ~~</bcf:labelalphatemplate>\blx@nl} -\xdef\blx@xml@labelalpha@element#1#2{% - ~~~~<bcf:labelelement order="#1">\blx@nl - #2% - ~~~~</bcf:labelelement>\blx@nl} -\xdef\blx@xml@labelalpha@part#1#2{% - ~~~~~~<bcf:labelpart#1>#2</bcf:labelpart>\blx@nl} - -\xdef\blx@xml@inheritance#1{% - ~~<bcf:inheritance>\blx@nl - #1% - ~~</bcf:inheritance>\blx@nl} -\xdef\blx@xml@inherit@defaults#1#2{% - ~~~~<bcf:defaults#1>\blx@nl - #2% - ~~~~</bcf:defaults>\blx@nl} -\xdef\blx@xml@inherit@data#1{% - ~~~~<bcf:inherit>\blx@nl - #1% - ~~~~</bcf:inherit>\blx@nl} -\xdef\blx@xml@inherit@type#1#2#3{% - ~~~~~~<bcf:type\string_pair source="#1" target="#2"#3/>\blx@nl} -\xdef\blx@xml@inherit@field#1#2#3{% - ~~~~~~<bcf:field source="#1" target="#2"#3/>\blx@nl} -\xdef\blx@xml@inherit@block#1{% - ~~~~~~<bcf:field source="#1" skip="true"/>\blx@nl} - -\xdef\blx@xml@nosorts#1{% - ~~<bcf:nosorts>\blx@nl - #1% - ~~</bcf:nosorts>\blx@nl} -\xdef\blx@xml@nosort#1#2{% - ~~~~<bcf:nosort field="#1" value="#2"/>\blx@nl} - -\xdef\blx@xml@noinits#1{% - ~~<bcf:noinits>\blx@nl - #1% - ~~</bcf:noinits>\blx@nl} -\xdef\blx@xml@noinit#1{% - ~~~~<bcf:noinit value="#1"/>\blx@nl} - -\xdef\blx@xml@nolabels#1{% - ~~<bcf:nolabels>\blx@nl - #1% - ~~</bcf:nolabels>\blx@nl} -\xdef\blx@xml@nolabel#1{% - ~~~~<bcf:nolabel value="#1"/>\blx@nl} - -\xdef\blx@xml@nolabelwidthcounts#1{% - ~~<bcf:nolabelwidthcounts>\blx@nl - #1% - ~~</bcf:nolabelwidthcounts>\blx@nl} -\xdef\blx@xml@nolabelwidthcount#1{% - ~~~~<bcf:nolabelwidthcount value="#1"/>\blx@nl} - -\xdef\blx@xml@sortingnamekey#1#2{% - ~~<bcf:sortingnamekey keyscheme="#1">\blx@nl% - #2% - ~~</bcf:sortingnamekey>\blx@nl} - -\xdef\blx@xml@sortingnamekeykeypart#1#2{% - ~~~~<bcf:keypart#1>\blx@nl - #2% - ~~~~</bcf:keypart>\blx@nl} - -\xdef\blx@xml@sortingnamekeynamepart#1#2#3{% - ~~~~~~<bcf:part type="namepart"#1#2>#3</bcf:part>\blx@nl} - -\xdef\blx@xml@sortingnamekeyliteral#1#2{% - ~~~~~~<bcf:part type="literal"#1>#2</bcf:part>\blx@nl} - -\xdef\blx@xml@sorting#1#2{% - ~~<bcf:sorting#1>\blx@nl% - #2% - ~~</bcf:sorting>\blx@nl} -\xdef\blx@xml@presort#1#2{% - ~~~~<bcf:presort\noexpand\ifblank{#1}{}{ type="#1"}>% - #2</bcf:presort>\blx@nl} - -\xdef\blx@xml@sortexclude#1#2{% - ~~~~<bcf:sortexclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl - #2% - ~~~~</bcf:sortexclusion>\blx@nl} -\xdef\blx@xml@exclude#1{% - ~~~~~~<bcf:exclusion>#1</bcf:exclusion>\blx@nl} -\xdef\blx@xml@sort#1#2{% - ~~~~<bcf:sort #1>\blx@nl - #2% - ~~~~</bcf:sort>\blx@nl} -\xdef\blx@xml@sortitem#1#2{% - ~~~~~~<bcf:sortitem #1>#2</bcf:sortitem>\blx@nl} -\xdef\blx@xml@section#1{% - ~~<bcf:section number="#1">} -\xdef\blx@xml@endsection{% - ~~</bcf:section>} - -\xdef\blx@xml@slist#1#2#3#4#5#6#7{% - ~~<bcf:sortlist section="#3" name="#1" type="#2" sortscheme="#4" sortnamekeyscheme="#5">\blx@nl - #7% - #6% - ~~</bcf:sortlist>\blx@nl} -\xdef\blx@xml@slistfilterorbegin{% - ~~~~<bcf:filteror>\blx@nl} -\xdef\blx@xml@slistfilterorend{% - ~~~~</bcf:filteror>\blx@nl} -\xdef\blx@xml@slistfilter#1#2{% - ~~~~<bcf:filter type="#1">#2</bcf:filter>\blx@nl} - -\xdef\blx@xml@bibdata#1#2{% - ~~<bcf:bibdata section="#1">\blx@nl - #2% - ~~</bcf:bibdata>\blx@nl} -\xdef\blx@xml@datasource#1#2#3{% - ~~~~<bcf:datasource type="#1" datatype="#2">#3</bcf:datasource>\blx@nl} -\xdef\blx@xml@citekey#1#2{% - ~~~~<bcf:citekey order="#2">#1</bcf:citekey>} -\xdef\blx@xml@citeset#1#2{% - ~~~~<bcf:citekey type="set" members="#2">#1</bcf:citekey>} -\xdef\blx@xml@svalue#1#2{% - \blx@xml@option{singlevalued}{% - ~~~~~~<bcf:key>#1</bcf:key>\blx@nl - ~~~~~~<bcf:value>#2</bcf:value>\blx@nl}} -\xdef\blx@xml@mvalue#1#2{% - \blx@xml@option{multivalued}{% - ~~~~~~<bcf:key>#1</bcf:key>\blx@nl - #2}} -\xdef\blx@xml@toggle#1{% - \blx@xml@svalue{#1}{\noexpand\iftoggle{blx@#1}{1}{0}}} -\xdef\blx@xml@options@scope#1#2{% - ~~<bcf:optionscope type="#1">\blx@nl - #2% - ~~</bcf:optionscope>\blx@nl} -\xdef\blx@xml@option@scope#1#2{% - ~~~~<bcf:option datatype="#1">#2</bcf:option>\blx@nl} -\endgroup - -\def\blx@bcf@options@global{% - \blx@xml@comment{GLOBAL}% - \blx@xml@options{biblatex}{global}{% - \blx@xml@svalue{alphaothers}{\labelalphaothers}% - \blx@xml@toggle{labelalpha}% - \blx@xml@mvalue{labelnamespec}{\blx@bcf@labelnamespec}% - \blx@xml@toggle{labeltitle}% - \blx@xml@mvalue{labeltitlespec}{\blx@bcf@labeltitlespec}% - \blx@xml@toggle{labeltitleyear}% - \blx@xml@toggle{labeldate}% - \blx@xml@mvalue{labeldatespec}{\blx@bcf@labeldatespec}% - \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}% - \blx@xml@svalue{maxbibnames}{\blx@maxbibnames}% - \blx@xml@svalue{maxcitenames}{\blx@maxcitenames}% - \blx@xml@svalue{maxitems}{\blx@maxitems}% - \blx@xml@svalue{minalphanames}{\blx@minalphanames}% - \blx@xml@svalue{minbibnames}{\blx@minbibnames}% - \blx@xml@svalue{mincitenames}{\blx@mincitenames}% - \blx@xml@svalue{minitems}{\blx@minitems}% - \blx@xml@toggle{singletitle}% - \blx@xml@svalue{sortalphaothers}{\sortalphaothers}% - \blx@xml@svalue{sortlocale}{\blx@sortlocale}% - \blx@xml@svalue{sortscheme}{\blx@sorting}% - \blx@xml@svalue{uniquelist}{\blx@uniquelist}% - \blx@xml@svalue{uniquename}{\blx@uniquename}% - \blx@xml@toggle{useprefix}% - \blx@xml@nametoggles - }% -} - -\def\blx@bcf@options@type#1{% - \blx@xml@comment{#1}% - \blx@xml@options{biblatex}{#1}{% - \blx@xml@toggle{labelalpha}% - \blx@xml@mvalue{labelnamespec}{% - \ifcsdef{blx@bcf@labelnamespec@#1} - {\csuse{blx@bcf@labelnamespec@#1}} - {\blx@bcf@labelnamespec}}% - \blx@xml@toggle{labeltitle}% - \blx@xml@mvalue{labeltitlespec}{% - \ifcsdef{blx@bcf@labeltitlespec@#1} - {\csuse{blx@bcf@labeltitlespec@#1}} - {\blx@bcf@labeltitlespec}}% - \blx@xml@toggle{labeltitleyear}% - \blx@xml@toggle{labeldate}% - \blx@xml@mvalue{labeldatespec}{% - \ifcsdef{blx@bcf@labeldatespec@#1} - {\csuse{blx@bcf@labeldatespec@#1}} - {\blx@bcf@labeldatespec}}% - \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}% - \blx@xml@svalue{maxbibnames}{\blx@maxbibnames@type}% - \blx@xml@svalue{maxcitenames}{\blx@maxcitenames@type}% - \blx@xml@svalue{maxitems}{\blx@maxitems@type}% - \blx@xml@svalue{minalphanames}{\blx@minalphanames}% - \blx@xml@svalue{minbibnames}{\blx@minbibnames@type}% - \blx@xml@svalue{mincitenames}{\blx@mincitenames@type}% - \blx@xml@svalue{minitems}{\blx@minitems@type}% - \blx@xml@toggle{singletitle}% - \blx@xml@toggle{skipbib}% - \blx@xml@toggle{skiplab}% - \blx@xml@toggle{skipbiblist}% - \blx@xml@svalue{uniquelist}{\blx@uniquelist}% - \blx@xml@svalue{uniquename}{\blx@uniquename}% - \blx@xml@toggle{useprefix}% - \blx@xml@nametoggles - }% -} - -\def\blx@ctrlwrite@biber{% - \begingroup - \blx@safe@actives - \let\protect\string - % options - \edef\labelalphaothers{\labelalphaothers}% - \edef\sortalphaothers{\sortalphaothers}% - \blx@xmlsanitizeafter{\def\labelalphaothers}{\labelalphaothers}% - \blx@xmlsanitizeafter{\def\sortalphaothers}{\sortalphaothers}% - % Expand the global use* name toggles - \let\blx@xml@nametoggles\@empty - \def\do##1{\eappto\blx@xml@nametoggles{\blx@xml@toggle{use##1}}}% - \dolistcsloop{blx@biber@datamodel@names} - \edef\blx@tempa{% - \blx@xml@file - \blx@xml@comment{BIBER OPTIONS}% - \blx@xml@options{biber}{global}{% - \blx@xml@svalue{output_encoding}{\blx@texencoding}% - \blx@xml@svalue{input_encoding}{\blx@bibencoding}% - \blx@xml@toggle{debug}% - \blx@xml@svalue{mincrossrefs}{\blx@mincrossrefs}% - \blx@xml@toggle{sortcase}% - \blx@xml@toggle{sortgiveninits}% - \blx@xml@toggle{sortupper}% - }% - \blx@xml@comment{BIBLATEX OPTIONS}% - \blx@bcf@options@global - }% - \ifdef\blx@opts@type - {\def\do##1{% - \begingroup - \blx@setoptions@type{##1}% - % Expand the type use* name toggles - \let\blx@xml@nametoggles\@empty - \def\do####1{\eappto\blx@xml@nametoggles{\blx@xml@toggle{use####1}}}% - \dolistcsloop{blx@biber@datamodel@names} - \begingroup - \let\protect\relax - \blx@checkoptions@type - \endgroup - \xappto\blx@tempa{\blx@bcf@options@type{##1}}% - \endgroup}% - \dolistloop\blx@opts@type} - {}% - % options scope - % GLOBAL - \def\do##1{% - \begingroup - \def\do####1{\xappto\blx@bcf@options@scope@global{\blx@xml@option@scope{##1}{####1}}}% - \dolistcsloop{blx@globalopts@##1}% - \endgroup}% - \dolistloop\blx@globalopts@datatypes - % ENTRYTYPE - \def\do##1{% - \begingroup - \def\do####1{\xappto\blx@bcf@options@scope@type{\blx@xml@option@scope{##1}{####1}}}% - \dolistcsloop{blx@typeopts@##1}% - \endgroup}% - \dolistloop\blx@typeopts@datatypes - % ENTRY - \def\do##1{% - \begingroup - \def\do####1{\xappto\blx@bcf@options@scope@entry{\blx@xml@option@scope{##1}{####1}}}% - \dolistcsloop{blx@entryopts@##1}% - \endgroup}% - \dolistloop\blx@entryopts@datatypes - % NAMELIST - \def\do##1{% - \begingroup - \def\do####1{\xappto\blx@bcf@options@scope@namelist{\blx@xml@option@scope{##1}{####1}}}% - \dolistcsloop{blx@namelistopts@##1}% - \endgroup}% - \dolistloop\blx@entryopts@datatypes - % NAME - \def\do##1{% - \begingroup - \def\do####1{\xappto\blx@bcf@options@scope@name{\blx@xml@option@scope{##1}{####1}}}% - \dolistcsloop{blx@nameopts@##1}% - \endgroup}% - \dolistloop\blx@entryopts@datatypes - - \eappto\blx@tempa{% - \blx@xml@comment{BIBLATEX OPTION SCOPE}% - \blx@xml@options@scope{GLOBAL}{\blx@bcf@options@scope@global}% - \blx@xml@options@scope{ENTRYTYPE}{\blx@bcf@options@scope@type}% - \blx@xml@options@scope{ENTRY}{\blx@bcf@options@scope@entry}% - \blx@xml@options@scope{NAMELIST}{\blx@bcf@options@scope@namelist}% - \blx@xml@options@scope{NAME}{\blx@bcf@options@scope@name}} - % sourcemap - \ifbool{sourcemap} - {\eappto\blx@tempa{% - \blx@xml@comment{SOURCEMAP}% - \blx@xml@sourcemap{% - \ifcsdef{blx@biber@sourcemap@user} - {\csuse{blx@biber@sourcemap@user}} - {}% - \ifcsdef{blx@biber@sourcemap@style} - {\csuse{blx@biber@sourcemap@style}} - {}% - \ifcsdef{blx@biber@sourcemap@defaults@bibtex} - {\csuse{blx@biber@sourcemap@defaults@bibtex}} - {}% - \ifcsdef{blx@biber@sourcemap@defaults@biblatexml} - {\csuse{blx@biber@sourcemap@defaults@biblatexml}} - {}% - \ifcsdef{blx@biber@sourcemap@defaults@endnotexml} - {\csuse{blx@biber@sourcemap@defaults@endnotexml}} - {}% - \ifcsdef{blx@biber@sourcemap@defaults@ris} - {\csuse{blx@biber@sourcemap@defaults@ris}} - {}% - \ifcsdef{blx@biber@sourcemap@defaults@zoterordfxml} - {\csuse{blx@biber@sourcemap@defaults@zoterordfxml}} - {}}}} - {}% - % labelalpha template - \eappto\blx@tempa{% - \blx@xml@comment{LABELALPHA TEMPLATE}}% - \def\do##1{% - \eappto\blx@tempa{% - \blx@xml@labelalphatemplate{##1}{% - \csuse{blx@biber@labelalphatemplate@##1}}% - }% - }% - \dolistloop\blx@biber@latem@type - % data inheritance - \eappto\blx@tempa{% - \blx@xml@comment{INHERITANCE}% - \blx@xml@inheritance{% - \csuse{blx@biber@inherit@default}% - \csuse{blx@biber@inherit@data}% - }% - }% - % noinit - \ifcsdef{blx@biber@noinit} - {\eappto\blx@tempa{% - \blx@xml@comment{NOINIT}% - \blx@xml@noinits{% - \csuse{blx@biber@noinit}% - }% - }} - {}% - % nolabel - \ifcsdef{blx@biber@nolabel} - {\eappto\blx@tempa{% - \blx@xml@comment{NOLABEL}% - \blx@xml@nolabels{% - \csuse{blx@biber@nolabel}% - }% - }} - {}% - % nolabel - \ifcsdef{blx@biber@nolabelwidthcount} - {\eappto\blx@tempa{% - \blx@xml@comment{NOLABELWIDTHCOUNT}% - \blx@xml@nolabelwidthcounts{% - \csuse{blx@biber@nolabelwidthcount}% - }% - }} - {}% - % nosort - \ifcsdef{blx@biber@nosort} - {\eappto\blx@tempa{% - \blx@xml@comment{NOSORT}% - \blx@xml@nosorts{% - \csuse{blx@biber@nosort}% - }% - }} - {}% - % sortingnamekey - \eappto\blx@tempa{\blx@xml@comment{SORTING NAME KEY}}% - \def\do##1{% - \eappto\blx@tempa{% - \blx@xml@sortingnamekey{##1}{% - \csuse{blx@biber@sortingnamekey@##1}}}}% - \dolistloop\blx@biber@sortingnamekeyspecs - % sorting - \def\do##1{% - \eappto\blx@bcf@presort{\csuse{blx@bcf@presort@##1}}% - \eappto\blx@bcf@exclude{\csuse{blx@bcf@exclude@##1}}}% - \dolistcsloop{blx@biber@datamodel@entrytypes}% - \eappto\blx@tempa{% - \blx@xml@comment{SORTING}% - \blx@xml@sorting{}{% - \blx@bcf@presort - \blx@bcf@exclude - \csuse{blx@biber@sorting@\blx@sorting}% - }% - }% - % datamodel - \eappto\blx@tempa{% - \blx@xml@comment{DATA MODEL}% - \blx@xml@datamodel{% - \blx@xml@datamodel@constants{% - \blx@bcf@datamodel@constants - }% - \blx@xml@datamodel@entrytypes{% - \blx@bcf@datamodel@entrytypes - }% - \blx@xml@datamodel@fields{% - \blx@bcf@datamodel@fields - }% - \blx@bcf@datamodel@entryfields - \blx@bcf@datamodel@constraints - }% - }% - % files - \let\blx@tempb\@empty - \blx@bibdata\blx@tempb\blx@bibfiles - \eappto\blx@tempa{% - \blx@xml@comment{CITATION DATA}% - \blx@xml@comment{SECTION 0}% - \blx@xml@bibdata{0}{\blx@tempb}% - \blx@xml@section{0}% - }% - \immediate\openout\blx@bcfout\jobname.bcf\relax - \blx@auxwrite\blx@bcfout{}{\blx@tempa}% - \global\undef\blx@tempa - \endgroup - \AfterEndDocument{% - \blx@auxwrite\blx@bcfout{}{% - \blx@xml@endsection\blx@nl - \csuse{blx@biber@slists}% - \blx@xml@endfile}% - \immediate\closeout\blx@bcfout}} - -%% Customisation - -% nolabel -\newrobustcmd*{\DeclareNolabel}[1]{% - \begingroup - \let\nolabel\blx@nolabel - \let\blx@tempa\@empty - #1% - \global\cslet{blx@biber@nolabel}\blx@tempa - \endgroup} -\@onlypreamble\DeclareNolabel - -\newcommand*{\blx@nolabel}[1]{% - \eappto\blx@tempa{% - \blx@xml@nolabel{#1}}} - -% nolabelwidthcount -\newrobustcmd*{\DeclareNolabelwidthcount}[1]{% - \begingroup - \let\nolabel\blx@nolabelwidthcount - \let\blx@tempa\@empty - #1% - \global\cslet{blx@biber@nolabelwidthcount}\blx@tempa - \endgroup} -\@onlypreamble\DeclareNolabelwidthcount - -\newcommand*{\blx@nolabelwidthcount}[1]{% - \eappto\blx@tempa{% - \blx@xml@nolabelwidthcount{#1}}} - -% nosort -\newrobustcmd*{\DeclareNosort}[1]{% - \begingroup - \let\nosort\blx@nosort - \let\blx@tempa\@empty - #1% - \global\cslet{blx@biber@nosort}\blx@tempa - \endgroup} -\@onlypreamble\DeclareNosort - -\newcommand*{\blx@nosort}[2]{% - \eappto\blx@tempa{% - \blx@xml@nosort{#1}{#2}}} - -% noinit -\newrobustcmd*{\DeclareNoinit}[1]{% - \begingroup - \let\noinit\blx@noinit - \let\blx@tempa\@empty - #1% - \global\cslet{blx@biber@noinit}\blx@tempa - \endgroup} -\@onlypreamble\DeclareNoinit - -\newcommand*{\blx@noinit}[1]{% - \eappto\blx@tempa{% - \blx@xml@noinit{#1}}} - -% sourcemap -\newrobustcmd*{\DeclareSourcemap}[1]{% - \booltrue{sourcemap}% - \begingroup - \let\maps\blx@usersourcemap@maps - \let\blx@tempa\@empty - #1% - \csxdef{blx@biber@sourcemap@user}{\blx@tempa}% - \endgroup} -\@onlypreamble\DeclareSourcemap - -\newrobustcmd*{\DeclareStyleSourcemap}[1]{% - \booltrue{sourcemap}% - \begingroup - \let\maps\blx@stylesourcemap@maps - \let\blx@tempa\@empty - #1% - \csxdef{blx@biber@sourcemap@style}{\blx@tempa}% - \endgroup} - -\@onlypreamble\DeclareStyleSourcemap - -\newrobustcmd*{\DeclareDriverSourcemap}[2][]{% - \booltrue{sourcemap}% - \begingroup - \let\blx@tempa\@empty - \let\blx@tempb\@empty - \let\blx@tempc\@empty - \let\blx@tempd\@empty - \let\map\blx@sourcemap@map - #2% - \ifblank{#1} - {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=driver}} - {\setkeys{blx@sourcemap@maps}{#1, level=driver}}% - \eappto\blx@tempa{% - \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}% - \csxdef{blx@biber@sourcemap@defaults@\blx@tempd}{\blx@tempa}% - \endgroup} -\@onlypreamble\DeclareDriverSourcemap - -\newcommand*{\blx@usersourcemap@maps}[2][]{% - \let\blx@tempb\@empty - \let\blx@tempc\@empty - \let\map\blx@sourcemap@map - \ifblank{#1} - {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=user}} - {\setkeys{blx@sourcemap@maps}{#1, level=user}}% - #2% - \eappto\blx@tempa{% - \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}} - -\newcommand*{\blx@stylesourcemap@maps}[2][]{% - \let\blx@tempb\@empty - \let\blx@tempc\@empty - \let\map\blx@sourcemap@map - \ifblank{#1} - {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=style}} - {\setkeys{blx@sourcemap@maps}{#1, level=style}}% - #2% - \eappto\blx@tempa{% - \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}} - -\define@key{blx@sourcemap@maps}{datatype}{% characters - \eappto\blx@tempb{ datatype="#1"}% - \eappto\blx@tempd{#1}} -\define@key{blx@sourcemap@maps}{overwrite}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempb{ map\string_overwrite="1"}} - {}} -\define@key{blx@sourcemap@maps}{level}{% user|style|driver - \appto\blx@tempb{ level="#1"}} - -\newcommand*{\blx@sourcemap@map}[2][]{% - \let\blx@tempm\@empty - \let\blx@tempe\@empty - \let\perdatasource\blx@sourcemap@perdatasource - \let\pertype\blx@sourcemap@pertype - \let\pernottype\blx@sourcemap@pernottype - \let\step\blx@sourcemap@step - \ifblank{#1} - {} - {\setkeys{blx@sourcemap@map}{#1}}% - #2% - \eappto\blx@tempc{% - \blx@xml@sourcemap@map{\blx@tempm}{\blx@tempe}}} - -\define@key{blx@sourcemap@map}{overwrite}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempm{ map\string_overwrite="1"}} - {}} -\define@key{blx@sourcemap@map}{foreach}{% characters - \eappto\blx@tempm{ map\string_foreach="#1"}} - -\newcommand*{\blx@sourcemap@perdatasource}[1]{% - \eappto\blx@tempe{% - \blx@xml@sourcemap@perdatasource{#1}}} - -\newcommand*{\blx@sourcemap@pertype}[1]{% - \eappto\blx@tempe{% - \blx@xml@sourcemap@pertype{#1}}} - -\newcommand*{\blx@sourcemap@pernottype}[1]{% - \eappto\blx@tempe{% - \blx@xml@sourcemap@pernottype{#1}}} - -\newcommand*{\blx@sourcemap@step}[1][2]{% - \let\blx@tempf\@empty - \setkeys{blx@sourcemap@step}{#1}% - \eappto\blx@tempe{% - \blx@xml@sourcemap@step{\blx@tempf}}} - -\define@key{blx@sourcemap@step}{typesource}{% characters - \eappto\blx@tempf{ map\string_type\string_source="#1"}} -\define@key{blx@sourcemap@step}{typetarget}{% characters - \eappto\blx@tempf{ map\string_type\string_target="#1"}} -\define@key{blx@sourcemap@step}{final}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_final="1"}} - {}} -\define@key{blx@sourcemap@step}{fieldsource}{% characters - \eappto\blx@tempf{ map\string_field\string_source="#1"}} -\define@key{blx@sourcemap@step}{fieldtarget}{% characters - \eappto\blx@tempf{ map\string_field\string_target="#1"}} -\define@key{blx@sourcemap@step}{fieldset}{% characters - \eappto\blx@tempf{ map\string_field\string_set="#1"}} -% We are sanitising the XML here as it's the value of an attribute which -% might contain quotes or ampersands (URLs, for example) -\define@key{blx@sourcemap@step}{fieldvalue}{% characters - \blx@xmlsanitizeafter{\def\blx@temps}{#1}% - \eappto\blx@tempf{ map\string_field\string_value="\blx@temps"}} -\define@key{blx@sourcemap@step}{append}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_append="1"}} - {}} -\define@key{blx@sourcemap@step}{null}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_null="1"}} - {}} -\define@key{blx@sourcemap@step}{entrynull}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_entry\string_null="1"}} - {}} -\define@key{blx@sourcemap@step}{entrynew}{% characters - \appto\blx@tempf{ map\string_entry\string_new="#1"}} -\define@key{blx@sourcemap@step}{entrynewtype}{% characters - \appto\blx@tempf{ map\string_entry\string_newtype="#1"}} -\define@key{blx@sourcemap@step}{entrytarget}{% characters - \appto\blx@tempf{ map\string_entrytarget="#1"}} -\define@key{blx@sourcemap@step}{entryclone}{% characters - \appto\blx@tempf{ map\string_entry\string_clone="#1"}} -\define@key{blx@sourcemap@step}{origfield}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_origfield="1"}} - {}} -\define@key{blx@sourcemap@step}{origfieldval}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_origfieldval="1"}} - {}} -\define@key{blx@sourcemap@step}{origentrytype}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempf{ map\string_origentrytype="1"}} - {}} -\define@key{blx@sourcemap@step}{match}{% characters - \appto\blx@tempf{ map\string_match="#1"}} -\define@key{blx@sourcemap@step}{notmatch}{% characters - \appto\blx@tempf{ map\string_notmatch="#1"}} -\define@key{blx@sourcemap@step}{replace}{% characters - \eappto\blx@tempf{ map\string_replace="#1"}} - -%%% - -\newrobustcmd*{\DeclareLabelalphaTemplate}[2][]{% - \ifblank{#1} - {\blx@biber@latem{#2}{global}} - {\forcsvlist{\blx@biber@latem{#2}}{#1}}} -\@onlypreamble\DeclareLabelalphaTemplate -\blx@collectopts{xml}{blx@globalopts}{labelalphatemplate}% for passing to the .bcf -\blx@collectopts{xml}{blx@typeopts}{labelalphatemplate}% for passing to the .bcf - -\def\blx@biber@latem#1#2{% - \begingroup - \let\labelelement\blx@latem@element - \let\field\blx@latem@field - \let\literal\blx@latem@literal - \blx@tempcnta\z@ - \let\blx@tempa\@empty - #1% - \ifdef\blx@biber@latem@type - {\ifinlist{#2}{\blx@biber@latem@type} - {\global\cslet{blx@biber@labelalphatemplate@#2}\blx@tempa} - {\listgadd\blx@biber@latem@type{#2}% - \global\cslet{blx@biber@labelalphatemplate@#2}\blx@tempa}}% - {\listgadd\blx@biber@latem@type{#2}% - \global\cslet{blx@biber@labelalphatemplate@#2}\blx@tempa}% - \endgroup} - -\newcommand*{\blx@latem@element}[1]{% - \advance\blx@tempcnta\@ne - \let\blx@tempb\@empty - #1% - \eappto\blx@tempa{% - \blx@xml@labelalpha@element{\the\blx@tempcnta}{\blx@tempb}}} - -\newcommand*{\blx@latem@literal}[1]{% - \blx@xmlsanitizeafter{\def\blx@temps}{#1}% - \eappto\blx@tempb{% - \blx@xml@labelalpha@part{}{\expandafter\regexp\expandafter{\blx@temps}}}} - -\newcommand*{\blx@latem@field}[2][]{% - \let\blx@tempc\@empty - \ifblank{#1} - {} - {\setkeys{blx@latem@field}{#1}}% - \eappto\blx@tempb{% - \blx@xml@labelalpha@part{\blx@tempc}{#2}}} - -\define@key{blx@latem@field}{uppercase}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ uppercase="1"}} - {}} -\define@key{blx@latem@field}{lowercase}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ lowercase="1"}} - {}} -\define@key{blx@latem@field}{final}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ final="1"}} - {}} -\define@key{blx@latem@field}{strwidth}{% integer - \eappto\blx@tempc{ substring\string_width="#1"}} -\define@key{blx@latem@field}{pstrwidth}{% integer - \eappto\blx@tempc{ substring\string_pwidth="#1"}} -\define@key{blx@latem@field}{varwidth}[true]{% "v" - \ifstrequal{#1}{true} - {\appto\blx@tempc{ substring\string_width="v"}} - {}} -\define@key{blx@latem@field}{varwidthnorm}[true]{% "vf" - \ifstrequal{#1}{true} - {\appto\blx@tempc{ substring\string_width="vf"}} - {}} -\define@key{blx@latem@field}{varwidthlist}[true]{% "l" - \ifstrequal{#1}{true} - {\appto\blx@tempc{ substring\string_width="l"}} - {}} -\define@key{blx@latem@field}{strfixedcount}{% - \eappto\blx@tempc{ substring\string_fixed\string_threshold="#1"}} -\define@key{blx@latem@field}{strwidthmax}{% - \eappto\blx@tempc{ substring\string_width\string_max="#1"}} -\define@key{blx@latem@field}{strside}{% left|right - \ifstrequal{#1}{right} - {\eappto\blx@tempc{ substring\string_side="right"}} - {\eappto\blx@tempc{ substring\string_side="left"}}} -\define@key{blx@latem@field}{compound}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ substring\string_compound="1"}} - {}} -\define@key{blx@latem@field}{pcompound}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ substring\string_pcompound="1"}} - {}} -\define@key{blx@latem@field}{ifnames}{% - \eappto\blx@tempc{ ifnamecount="#1"}} -\define@key{blx@latem@field}{names}{% - \eappto\blx@tempc{ namerange="#1"}} -\define@key{blx@latem@field}{noalphaothers}[true]{% - \eappto\blx@tempc{ noalphaothers="1"}} -\define@key{blx@latem@field}{padchar}{% - \blx@xmlsanitizeafter{\def\blx@temps}{#1}% - \eappto\blx@tempc{ pad\string_char="\expandafter\regexp\expandafter{\blx@temps}"}} -\define@key{blx@latem@field}{padside}{% left|right - \ifstrequal{#1}{left} - {\eappto\blx@tempc{ pad\string_side="left"}} - {\eappto\blx@tempc{ pad\string_side="right"}}} - -% [<exceptions>]{<options>} - -\newrobustcmd*{\DefaultInheritance}[2][]{% - \begingroup - \ifblank{#2} - {} - {\setkeys{blx@inherit@default}{#2}}% - \edef\blx@tempa{\space - inherit\string_all="\iftoggle{blx@inherit@all}{true}{false}"\space - override\string_target="\iftoggle{blx@inherit@override}{true}{false}"}% - \let\blx@tempb\@empty - \let\except\blx@inherit@except - #1% - \xdef\blx@biber@inherit@default{% - \blx@xml@inherit@defaults{\blx@tempa}{\blx@tempb}}% - \endgroup} -\@onlypreamble\DefaultInheritance - -\newtoggle{blx@inherit@all} -\newtoggle{blx@inherit@override} - -\define@key{blx@inherit@default}{all}[true]{% true|false - \settoggle{blx@inherit@all}{#1}} -\define@key{blx@inherit@default}{override}[true]{% true|false - \settoggle{blx@inherit@override}{#1}} - -% {<source>}{<target>}{<options>} - -\newcommand*{\blx@inherit@except}[3]{% - \let\blx@tempc\@empty - \ifblank{#3} - {} - {\setkeys{blx@inherit@except}{#3}}% - \eappto\blx@tempb{% - \blx@xml@inherit@type{#1}{#2}{\blx@tempc}}} - -\define@key{blx@inherit@except}{all}[true]{% true|false - \eappto\blx@tempc{ inherit\string_all="#1"}} -\define@key{blx@inherit@except}{override}[true]{% true|false - \eappto\blx@tempc{ override\string_target="#1"}} - -% {<type,type,...>}{<type,type,...>}{<spec>} -\newrobustcmd*{\DeclareDataInheritance}[3]{% - \begingroup - \let\blx@tempa\@empty - \forcsvlist{\blx@inherit@i{#2}}{#1}% - \let\blx@tempb\@empty - \let\inherit\blx@inherit@field - \let\noinherit\blx@inherit@block - #3% - \xappto\blx@biber@inherit@data{% - \blx@xml@inherit@data{% - \blx@tempa - \blx@tempb}}% - \endgroup} -\@onlypreamble\DeclareDataInheritance - -\def\blx@inherit@i#1#2{% - \forcsvlist{\blx@inherit@ii{#2}}{#1}} - -\def\blx@inherit@ii#1#2{% - \eappto\blx@tempa{\blx@xml@inherit@type{#1}{#2}{}}} - -\blx@collectopts{xml}{blx@globalopts}{inheritance}% for passing to the .bcf - -% [<options>]{<source>}{<target>} -\newcommand*{\blx@inherit@field}[3][]{% - \let\blx@tempc\@empty - \ifblank{#1} - {} - {\setkeys{blx@inherit@field}{#1}}% - \eappto\blx@tempb{% - \blx@xml@inherit@field{#2}{#3}{\blx@tempc}}} - -\newcommand*{\blx@inherit@block}[1]{% - \eappto\blx@tempb{\blx@xml@inherit@block{#1}}} - -\define@key{blx@inherit@field}{override}[true]{% true|false - \ifstrequal{#1}{true} - {\edef\blx@tempc{ override\string_target="true"}} - {\edef\blx@tempc{ override\string_target="false"}}} - -\newrobustcmd*{\ResetDataInheritance}{% - \global\csundef{blx@biber@inherit@data}} -\@onlypreamble\ResetDataInheritance - -% {<name>}{<spec>} -\newrobustcmd*{\DeclareBiblistFilter}[2]{% - \begingroup - \let\filteror\blx@biblistfilteror - \let\filter\blx@biblistfilter - \let\blx@tempa\@empty - #2% - \global\cslet{blx@biber@biblistfilters@#1}\blx@tempa - \endgroup} -\@onlypreamble\DeclareBiblistFilter - -\newcommand*{\blx@biblistfilteror}[1]{% - \eappto\blx@tempa{\blx@xml@slistfilterorbegin}% - #1% - \eappto\blx@tempa{\blx@xml@slistfilterorend}} - -\newcommand*{\blx@biblistfilter}[1][2]{% - \let\blx@tempc\@empty - \let\blx@tempd\@empty - \setkeys{blx@biblistfilter@filter}{#1}% - \eappto\blx@tempa{% - \blx@xml@slistfilter{\blx@tempc}{\blx@tempd}}} - -\define@key{blx@biblistfilter@filter}{type}{% - \def\blx@tempc{#1}} -\define@key{blx@biblistfilter@filter}{filter}{% - \def\blx@tempd{#1}} - -% Predefine filters for label fields -\def\do#1{\DeclareBiblistFilter{#1}{\filter[type=field,filter=#1]}} -\abx@dolabelfields - -% [<specname>]{<spec>} -\newrobustcmd*{\DeclareSortingNamekeyScheme}[2][]{% - \begingroup - \ifblank{#1} - {\def\blx@biber@snkname{global}}% default - {\def\blx@biber@snkname{#1}}% - \let\namepart\blx@sortnk@namepart - \let\keypart\blx@sortnk@keypart - \let\literal\blx@sortnk@literal - \let\blx@tempa\@empty - \blx@tempcnta\z@ - #2% - \global\cslet{blx@biber@sortingnamekey@\blx@biber@snkname}\blx@tempa - \xifinlist{\blx@biber@snkname}{\blx@biber@sortingnamekeyspecs} - {} - {\listxadd\blx@biber@sortingnamekeyspecs{\blx@biber@snkname}}% - % Add the sortnamekeyscheme to the list of sortnamekeyschemes - % so we can compare on next run - \xifinlist{\blx@biber@snkname}{\blx@sortnamekeyschemes} - {} - {\listxadd\blx@sortnamekeyschemes{\blx@biber@snkname}}% - \endgroup} -\@onlypreamble\DeclareSortingNamekeyScheme -\blx@collectopts{xml}{blx@globalopts}{sortingnamekey}% for passing to the .bcf -\DeclareEntryOption[string]{sortnamekeyscheme}{% - \def\blx@refcontext@sortingnamekey{#1}} - -% User-mode macro for checking sorting name key scheme -\def\ifsortnamekeyscheme#1{% - \expandafter\ifstrequal\expandafter{\blx@refcontext@sortingnamekey}{#1}} - -\newcommand*{\blx@sortnk@keypart}[1]{% - \advance\blx@tempcnta\@ne - \blx@tempcntb\z@ - \edef\blx@tempd{ order="\the\blx@tempcnta"}% - \let\blx@tempb\@empty - #1% - \eappto\blx@tempa{% - \blx@xml@sortingnamekeykeypart{\blx@tempd}{\blx@tempb}}} - -\newcommand*{\blx@sortnk@literal}[1]{% - \advance\blx@tempcntb\@ne - \edef\blx@tempe{ order="\the\blx@tempcntb"}% - \let\blx@tempc\@empty - \eappto\blx@tempb{% - \blx@xml@sortingnamekeyliteral{\blx@tempe}{#1}}} - -\newcommand*{\blx@sortnk@namepart}[2][]{% - \advance\blx@tempcntb\@ne - \edef\blx@tempe{ order="\the\blx@tempcntb"}% - \let\blx@tempc\@empty - \ifblank{#1} - {} - {\setkeys{blx@sortnk@namepart}{#1}}% - \eappto\blx@tempb{% - \blx@xml@sortingnamekeynamepart{\blx@tempe}{\blx@tempc}{#2}}} - -\define@key{blx@sortnk@namepart}{use}[true]{% use* option for namepart true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ use="1"}} - {\appto\blx@tempc{ use="0"}}} - -% {<name>}{<spec>} -\newrobustcmd*{\DeclareSortingScheme}[3][]{% - \ifblank{#1} - {} - {\setkeys{blx@sortdef@sorting}{#1}% - \csxdef{blx@sortdef@locale@#2}{\blx@templ}}% - \begingroup - \let\sort\blx@sortdef@sort - \let\name\blx@sortdef@field% legacy pre-biblatex 2.0 compat - \let\list\blx@sortdef@field% legacy pre-biblatex 2.0 compat - \let\field\blx@sortdef@field - \let\literal\blx@sortdef@literal - \def\citeorder{\blx@sortdef@field{citeorder}}% - \blx@tempcnta\z@ - \let\blx@tempa\@empty - #3% - \global\cslet{blx@biber@sorting@#2}\blx@tempa - \endgroup} -\@onlypreamble\DeclareSortingScheme -\blx@collectopts{xml}{blx@globalopts}{sortscheme}% for passing to the .bcf - -\define@key{blx@sortdef@sorting}{locale}{% locale name - \def\blx@templ{#1}} - -\newcommand*{\blx@sortdef@sort}[2][]{% - \advance\blx@tempcnta\@ne - \blx@tempcntb\z@ - \let\blx@tempb\@empty - \edef\blx@tempc{order="\the\blx@tempcnta"}% - \ifblank{#1} - {} - {\setkeys{blx@sortdef@sort}{#1}}% - \let\do\@firstofone - #2% - \eappto\blx@tempa{% - \blx@xml@sort{\blx@tempc}{\blx@tempb}}} - -\define@key{blx@sortdef@sort}{locale}{% locale name - \eappto\blx@tempc{ locale="#1"}} -\define@key{blx@sortdef@sort}{direction}{% ascending|descending - \ifstrequal{#1}{ascending} - {\eappto\blx@tempc{ sort\string_direction="ascending"}} - {\eappto\blx@tempc{ sort\string_direction="descending"}}} -\define@key{blx@sortdef@sort}{final}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ final="1"}} - {}} -\define@key{blx@sortdef@sort}{sortcase}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ sortcase="1"}} - {\appto\blx@tempc{ sortcase="0"}}} -\define@key{blx@sortdef@sort}{sortupper}[true]{% true|false - \ifstrequal{#1}{true} - {\appto\blx@tempc{ sortupper="1"}} - {\appto\blx@tempc{ sortupper="0"}}} - -\newcommand*{\blx@sortdef@field}[2][]{% - \advance\blx@tempcntb\@ne - \edef\blx@tempd{order="\the\blx@tempcntb"}% - \ifblank{#1} - {} - {\setkeys{blx@sortdef@field}{#1}}% - \eappto\blx@tempb{% - \blx@xml@sortitem{\blx@tempd}{#2}}} - -\define@key{blx@sortdef@field}{padside}{% left|right - \ifstrequal{#1}{right} - {\eappto\blx@tempd{ pad\string_side="right"}} - {\eappto\blx@tempd{ pad\string_side="left"}}} -\define@key{blx@sortdef@field}{padwidth}{% integer - \eappto\blx@tempd{ pad\string_width="#1"}} -\define@key{blx@sortdef@field}{padchar}{% character - \blx@xmlsanitizeafter{\def\blx@tempe}{#1}% - \eappto\blx@tempd{ pad\string_char="\blx@tempe"}} -\define@key{blx@sortdef@field}{strside}{% left|right - \ifstrequal{#1}{right} - {\eappto\blx@tempd{ substring\string_side="right"}} - {\eappto\blx@tempd{ substring\string_side="left"}}} -\define@key{blx@sortdef@field}{strwidth}{% integer - \eappto\blx@tempd{ substring\string_width="#1"}} - -\def\blx@sortdef@literal#1{% - \advance\blx@tempcntb\@ne - \blx@xmlsanitizeafter{\def\blx@tempe}{#1}% - \eappto\blx@tempb{% - \blx@xml@sortitem{order="\the\blx@tempcntb"}{\blx@tempe}}} - -% [<type,type,...>]{<string>} - -\newrobustcmd*{\DeclarePresort}[2][]{% - \begingroup - \blx@xmlsanitizeafter{\def\blx@tempa}{#2}% - \ifblank{#1} - {\xdef\blx@bcf@presort{\blx@xml@presort{}{\blx@tempa}}} - {\notblank{#2} - {\forcsvlist{\blx@defpresort\blx@tempa}{#1}} - {\forcsvlist\blx@undefpresort{#1}}}% - \endgroup} -\@onlypreamble\DeclarePresort -\blx@collectopts{string}{blx@globalopts}{presort}% for passing to the .bcf -\blx@collectopts{string}{blx@typeopts}{presort}% for passing to the .bcf -\blx@collectopts{string}{blx@entryopts}{presort}% for passing to the .bcf - -\def\blx@defpresort#1#2{% - \csxdef{blx@bcf@presort@#2}{\blx@xml@presort{#2}{#1}}} -\def\blx@undefpresort#1{% - \global\csundef{blx@bcf@presort@#1}} - -\newrobustcmd*{\DeclareSortExclusion}[2]{% - \forcsvlist{\blx@sortexlude{#2}}{#1}} -\blx@collectopts{xml}{blx@typeopts}{sortexclusion}% for passing to the .bcf - -\def\blx@sortexlude#1#2{% - \begingroup - \ifblank{#1} - {\global\csundef{blx@bcf@exclude@#2}} - {\let\blx@tempa\@empty - \forcsvlist\blx@sortexlude@i{#1}% - \csxdef{blx@bcf@exclude@#2}{% - \blx@xml@sortexclude{#2}{\blx@tempa}}} - \endgroup} - -\def\blx@sortexlude@i#1{% - \appto\blx@tempa{\blx@xml@exclude{#1}}} - -% [<type,type,...>]{<field,field,...>} - -\newrobustcmd*{\DeclareLabelname}[2][]{% - \begingroup - \let\blx@tempa\@empty - \def\blx@tempb{labelnamespec}% - \let\field\blx@ordered@field - \ifblank{#1} - {\global\cslet{blx@bcf@labelnamespec}\@empty} - {\def\blx@tempa{#1}% - \def\do##1{\global\cslet{blx@bcf@labelnamespec@##1}\@empty}% - \expandafter\docsvlist\expandafter{#1}}% - #2% - \endgroup} -\@onlypreamble\DeclareLabelname -\blx@collectopts{xml}{blx@globalopts}{labelnamespec}% for passing to the .bcf -\blx@collectopts{xml}{blx@typeopts}{labelnamespec}% for passing to the .bcf - -\newrobustcmd*{\DeclareLabeltitle}[2][]{% - \begingroup - \let\blx@tempa\@empty - \def\blx@tempb{labeltitlespec}% - \let\field\blx@ordered@field - \ifblank{#1} - {\global\cslet{blx@bcf@labeltitlespec}\@empty} - {\def\blx@tempa{#1}% - \def\do##1{\global\cslet{blx@bcf@labeltitlespec@##1}\@empty}% - \expandafter\docsvlist\expandafter{#1}}% - #2% - \endgroup} -\@onlypreamble\DeclareLabeltitle -\blx@collectopts{xml}{blx@globalopts}{labeltitlespec}% for passing to the .bcf -\blx@collectopts{xml}{blx@typeopts}{labeltitlespec}% for passing to the .bcf - -\newrobustcmd*{\DeclareLabelyear}[2][]{% - \blx@warning@noline{% - 'DeclareLabelyear' is deprecated, please use 'DeclareLabeldate'}} - -\newrobustcmd*{\DeclareLabeldate}[2][]{% - \begingroup - \let\blx@tempa\@empty - \def\blx@tempb{labeldatespec}% - \let\field\blx@orderedld@field - \let\literal\blx@orderedld@literal - \ifblank{#1} - {\global\cslet{blx@bcf@labeldatespec}\@empty} - {\def\blx@tempa{#1}% - \def\do##1{\global\cslet{blx@bcf@labeldatespec@##1}\@empty}% - \expandafter\docsvlist\expandafter{#1}}% - #2% - \endgroup} -\@onlypreamble\DeclareLabeldate -\blx@collectopts{xml}{blx@globalopts}{labeldatespec}% for passing to the .bcf -\blx@collectopts{xml}{blx@typeopts}{labeldatespec}% for passing to the .bcf - -\newcommand*{\blx@ordered@field}[2][]{% - \let\blx@tempc\@empty - \ifblank{#1} - {} - {\setkeys{blx@ordered@field}{#1}}% - \advance\blx@tempcnta\@ne - \ifdefempty{\blx@tempa} - {\csxappto{blx@bcf@\blx@tempb}{% - \noexpand\blx@xml@ordered{\the\blx@tempcnta}{\blx@tempc}{#2}}} - {\def\do##1{% - \blx@addtypeopt{##1}% - \csxappto{blx@bcf@\blx@tempb @##1}{% - \noexpand\blx@xml@ordered{\the\blx@tempcnta}{\blx@tempc}{#2}}}% - \expandafter\docsvlist\expandafter{\blx@tempa}}} - -\newcommand*{\blx@orderedld@field}[2][]{% - \let\blx@tempc\@empty - \ifblank{#1} - {} - {\setkeys{blx@ordered@field}{#1}}% - \advance\blx@tempcnta\@ne - \ifdefempty{\blx@tempa} - {\csxappto{blx@bcf@\blx@tempb}{% - \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="field"\blx@tempc}{#2}}} - {\def\do##1{% - \blx@addtypeopt{##1}% - \csxappto{blx@bcf@\blx@tempb @##1}{% - \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="field"\blx@tempc}{#2}}}% - \expandafter\docsvlist\expandafter{\blx@tempa}}} - -\newcommand*{\blx@orderedld@literal}[1]{% - \advance\blx@tempcnta\@ne - \ifdefempty{\blx@tempa} - {\csxappto{blx@bcf@\blx@tempb}{% - \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="string"}{#1}}} - {\def\do##1{% - \blx@addtypeopt{##1}% - \csxappto{blx@bcf@\blx@tempb @##1}{% - \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="string"}{#1}}}% - \expandafter\docsvlist\expandafter{\blx@tempa}}} - -%% Package options - -% [<entrytype,entrytype,...>]{<options>} - -\newrobustcmd*{\ExecuteBibliographyOptions}[2][]{% - \ifblank{#1} - {\setkeys{blx@opt@pre}{#2}} - {\forcsvlist{\blx@typeoptions{#2}}{#1}}} -\@onlypreamble\ExecuteBibliographyOptions - -\def\blx@typeoptions#1#2{% - \blx@addtypeopt{#2}% - \csappto{blx@opts@type@#2}{#1,}} - -\def\blx@addtypeopt#1{% - \notblank{#1} - {\ifdef\blx@opts@type - {\ifinlist{#1}{\blx@opts@type} - {} - {\listgadd\blx@opts@type{#1}}} - {\listgadd\blx@opts@type{#1}}} - {}} - -% load-time only - -% Have to have a dummy for this as it's set much earlier but is passed -% through to here where we just ignore it -\define@key{blx@opt@ldt}{datamodel}{} - -\define@key{blx@opt@ldt}{style}{% - \def\blx@cbxfile{#1}% - \def\blx@bbxfile{#1}} - -\define@key{blx@opt@ldt}{bibstyle}{% - \def\blx@bbxfile{#1}} - -\define@key{blx@opt@ldt}{citestyle}{% - \def\blx@cbxfile{#1}} - -\define@key{blx@opt@ldt}{natbib}[true]{% - \settoggle{blx@natbib}{#1}} - -\define@key{blx@opt@ldt}{mcite}[true]{% - \settoggle{blx@mcite}{#1}} - -% load-time and preamble - -\DeclareBibliographyOption[string]{backend}{ - \blx@error - {'backend' is load-time only option} - {The 'backend' option is load-time only and cannot - be\MessageBreak set after package loading}} - -\DeclareBibliographyOption[boolean]{debug}[true]{% - \settoggle{blx@debug}{#1}} - -\DeclareBibliographyOption[boolean]{loadfiles}[true]{% - \settoggle{blx@loadfiles}{#1}} - -\DeclareBibliographyOption[integer]{mincrossrefs}{% - \ifnum#1<\z@ - \def\blx@mincrossrefs{1}% - \def\blx@minxrefs{1}% - \else - \def\blx@mincrossrefs{#1}% - \def\blx@minxrefs{#1}% - \fi} -\def\blx@minxrefs{2} - -\DeclareBibliographyOption[string]{texencoding}{% - \ifstrequal{#1}{auto} - {\undef\blx@texencoding} - {\def\blx@texencoding{#1}}} - -\DeclareBibliographyOption[string]{bibencoding}{% - \ifcsdef{blx@bibenc@#1} - {\letcs\blx@bibencoding{blx@bibenc@#1}} - {\def\blx@bibencoding{#1}}} - -\def\abx@mapbibenc#1#2{\csdef{blx@bibenc@#1}{#2}} -\abx@mapbibenc{inputenc}{auto} -\abx@mapbibenc{x-ascii}{ascii} - -\def\abx@mapinpenc#1#2{\csdef{blx@inpenc@#1}{#2}} -\abx@mapinpenc{utf8x}{utf8} -\abx@mapinpenc{lutf8}{utf8} -\abx@mapinpenc{x-ascii}{ascii} - -\DeclareBibliographyOption[boolean]{safeinputenc}[true]{% - \settoggle{blx@safeinputenc}{#1}} -\newtoggle{blx@safeinputenc} - -\DeclareBibliographyOption[string]{sorting}{% - \def\blx@sorting{#1}% - \def\blx@refcontext@sorting{#1}} - -\AtEndPreamble{% - \ifcsdef{blx@biber@sorting@\blx@sorting} - {} - {\blx@err@invopt{sorting=\blx@sorting}{}% - \def\blx@sorting{nty}% - \def\blx@refcontext@sorting{nty}}% - \listxadd\blx@sortschemes{\blx@sorting}% - \def\blx@refcontext@sortingnamekey{global}% - \xdef\blx@refcontext@context{\blx@refcontext@sorting/\blx@refcontext@sortingnamekey}} - -\DeclareBibliographyOption[boolean]{sortcase}[true]{% - \settoggle{blx@sortcase}{#1}} - -\DeclareBibliographyOption[boolean]{sortupper}[true]{% - \settoggle{blx@sortupper}{#1}} - -\DeclareBibliographyOption[string]{sortlos}{% - \blx@warning@noline{% - sortlos option is deprecated, use 'sorting' option to \string\printbiblist}} - -\DeclareBibliographyOption[integer]{maxnames}{% - \numdef\blx@maxcitenames{#1}% - \numdef\blx@maxbibnames{#1}} -\DeclareBibliographyOption[integer]{minnames}{% - \numdef\blx@mincitenames{#1}% - \numdef\blx@minbibnames{#1}} -\DeclareTypeOption[integer]{maxnames}{% - \numdef\blx@maxcitenames@type{#1}% - \numdef\blx@maxbibnames@type{#1}% - \c@maxnames#1\relax} -\DeclareTypeOption[integer]{minnames}{% - \numdef\blx@mincitenames@type{#1}% - \numdef\blx@minbibnames@type{#1}% - \c@minnames#1\relax} -\DeclareEntryOption[integer]{maxnames}{% - \c@maxnames#1\relax} -\DeclareEntryOption[integer]{minnames}{% - \c@minnames#1\relax} - -\DeclareBibliographyOption[integer]{maxbibnames}{% - \numdef\blx@maxbibnames{#1}} -\DeclareBibliographyOption[integer]{minbibnames}{% - \numdef\blx@minbibnames{#1}} -\DeclareTypeOption[integer]{maxbibnames}{% - \numdef\blx@maxbibnames@type{#1}% - \iftoggle{blx@bibliography} - {\c@maxnames#1\relax} - {}} -\DeclareTypeOption[integer]{minbibnames}{% - \numdef\blx@minbibnames@type{#1}% - \iftoggle{blx@bibliography} - {\c@minnames#1\relax} - {}} -\DeclareEntryOption[integer]{maxbibnames}{% - \iftoggle{blx@bibliography} - {\c@maxnames#1\relax} - {}} -\DeclareEntryOption[integer]{minbibnames}{% - \iftoggle{blx@bibliography} - {\c@minnames#1\relax} - {}} - -\DeclareBibliographyOption[integer]{maxcitenames}{% - \numdef\blx@maxcitenames{#1}} -\DeclareBibliographyOption[integer]{mincitenames}{% - \numdef\blx@mincitenames{#1}} -\DeclareTypeOption[integer]{maxcitenames}{% - \numdef\blx@maxcitenames@type{#1}% - \iftoggle{blx@bibliography} - {} - {\c@maxnames#1\relax}} -\DeclareTypeOption[integer]{mincitenames}{% - \numdef\blx@mincitenames@type{#1}% - \iftoggle{blx@bibliography} - {} - {\c@minnames#1\relax}} -\DeclareEntryOption[integer]{maxcitenames}{% - \iftoggle{blx@bibliography} - {} - {\c@maxnames#1\relax}} -\DeclareEntryOption[integer]{mincitenames}{% - \iftoggle{blx@bibliography} - {} - {\c@minnames#1\relax}} - -\appto\blx@checkoptions@global{% - \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames\blx@minbibnames - \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames\blx@mincitenames} -\appto\blx@checkoptions@type{% - \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames@type\blx@minbibnames@type - \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames@type\blx@mincitenames@type} -\appto\blx@checkoptions@entry{% - \blx@maxmin@cnt{maxnames}{minnames}\c@maxnames\c@minnames} - -\DeclareBibliographyOption[integer]{maxitems}{% - \numdef\blx@maxitems{#1}} -\DeclareBibliographyOption[integer]{minitems}{% - \numdef\blx@minitems{#1}} -\DeclareTypeOption[integer]{maxitems}{% - \numdef\blx@maxitems@type{#1}% - \c@maxitems#1\relax} -\DeclareTypeOption[integer]{minitems}{% - \numdef\blx@minitems@type{#1}% - \c@minitems#1\relax} -\DeclareEntryOption[integer]{maxitems}{% - \c@maxitems#1\relax} -\DeclareEntryOption[integer]{minitems}{% - \c@minitems#1\relax} - -\appto\blx@checkoptions@global{% - \blx@maxmin@num{maxitems}{minitems}\blx@maxitems\blx@minitems} -\appto\blx@checkoptions@type{% - \blx@maxmin@num{maxitems}{minitems}\blx@maxitems@type\blx@minitems@type} -\appto\blx@checkoptions@entry{% - \blx@maxmin@cnt{maxitems}{minitems}\c@maxitems\blx@minitems} - -\DeclareBibliographyOption[integer]{maxalphanames}{% - \numdef\blx@maxalphanames{#1}} -\DeclareBibliographyOption[integer]{minalphanames}{% - \numdef\blx@minalphanames{#1}} -\DeclareTypeOption[integer]{maxalphanames}{% - \numdef\blx@maxalphanames{#1}} -\DeclareTypeOption[integer]{minalphanames}{% - \numdef\blx@minalphanames{#1}} -\DeclareEntryOption[integer]{maxalphanames}{% - \numdef\blx@maxalphanames{#1}} -\DeclareEntryOption[integer]{minalphanames}{% - \numdef\blx@minalphanames{#1}} - -\appto\blx@checkoptions@global{% - \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames} -\appto\blx@checkoptions@type{% - \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames} - -\def\blx@maxmin@num#1#2#3#4{% - \ifnumless#3\@ne - {\blx@err@invopt{#1=#3}{'#1' must be greater than zero}% - \let#3\@ne} - {}% - \ifnumless#4\@ne - {\blx@err@invopt{#2=#4}{'#2' must be greater than zero}% - \let#4\@ne} - {}% - \ifnumless#3#4 - {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}% - \let#3#4} - {}} - -\def\blx@maxmin@cnt#1#2#3#4{% - \ifnumless#3\@ne - {\blx@err@invopt{#1=\number#3}{'#1' must be greater than zero}% - #3\@ne} - {}% - \ifnumless#4\@ne - {\blx@err@invopt{#2=\number#4}{'#2' must be greater than zero}% - #4\@ne} - {}% - \ifnumless#3#4 - {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}% - #3=#4} - {}} - -\DeclareBibliographyOption[boolean]{terseinits}[true]{% - \ifstrequal{#1}{true} - {\toggletrue{blx@terseinits} - \renewrobustcmd*{\bibinitperiod}{} - \renewrobustcmd*{\bibinitdelim}{} - \renewrobustcmd*{\bibinithyphendelim}{}} - {\togglefalse{blx@terseinits} - \renewrobustcmd*{\bibinitperiod}{\adddot} - \renewrobustcmd*{\bibinitdelim}{\addnbspace} - \renewrobustcmd*{\bibinithyphendelim}{\adddot\mbox{-}}}} - -% Legacy for giveninits -\DeclareBibliographyOption[boolean]{firstinits}[true]{% - \blx@warning@noline{% - 'firstinits' option is deprecated, use 'giveninits' instead}% - \settoggle{blx@giveninits}{#1}} - -% Legacy for sortgiveninits -\DeclareBibliographyOption[boolean]{sortfirstinits}[true]{% - \blx@warning@noline{% - 'sortfirstinits' option is deprecated, use 'sortgiveninits' instead}% - \settoggle{blx@sortgiveninits}{#1}} - -\DeclareBibliographyOption[boolean]{giveninits}[true]{% - \settoggle{blx@giveninits}{#1}} - -\DeclareBibliographyOption[boolean]{sortgiveninits}[true]{% - \settoggle{blx@sortgiveninits}{#1}} - -\DeclareBibliographyOption[boolean]{abbreviate}[true]{% - \ifstrequal{#1}{true} - {\def\abx@str{abx@sstr}} - {\def\abx@str{abx@lstr}}} - -\DeclareBibliographyOption[boolean]{dateabbrev}[true]{% - \ifstrequal{#1}{true} - {\let\abx@bibmonth\blx@imc@bibsstring} - {\let\abx@bibmonth\blx@imc@biblstring}} - -\DeclareBibliographyOption[string]{sortlocale}{% - \edef\blx@sortlocale{\detokenize{#1}}} - -\DeclareBibliographyOption[string]{language}{% - \togglefalse{blx@autolangbib}% - \togglefalse{blx@autolangcite}% - \ifboolexpr{ - test {\ifstrequal{#1}{auto}} - or - test {\ifstrequal{#1}{autobib}} - or - test {\ifstrequal{#1}{autocite}} - } - {\def\blx@languagename{english}% - \ifstrequal{#1}{auto} - {\toggletrue{blx@autolangbib}% - \toggletrue{blx@autolangcite}} - {}% - \ifstrequal{#1}{autobib} - {\toggletrue{blx@autolangbib}} - {}% - \ifstrequal{#1}{autocite} - {\toggletrue{blx@autolangcite}} - {}} - {\IfFileExists{#1.lbx} - {\togglefalse{blx@autolangbib}% - \togglefalse{blx@autolangcite}% - \edef\blx@languagename{#1}} - {\blx@error - {Language '#1' not supported} - {Failed to find a matching '#1.lbx' file}}}} - -\DeclareBibliographyOption[boolean]{clearlang}[true]{% - \settoggle{blx@clearlang}{#1}} - -\DeclareBibliographyOption[string]{babel}{% - \blx@warning@noline{% - 'babel' option is deprecated, use 'autolang' instead}% - \blx@autolang@i{#1}} - -\DeclareBibliographyOption[string]{autolang}{% - \blx@autolang@i{#1}} - -\def\blx@autolang@i#1{% - \ifcsdef{blx@opt@autolang@#1} - {\csuse{blx@opt@autolang@#1}} - {\blx@err@invopt{autolang=#1}{}}} - -\def\blx@opt@autolang@none{% - \undef\blx@thelangenv - \let\blx@hook@initlang\@empty - \let\blx@hook@endlang\@empty} -\def\blx@opt@autolang@hyphen{% - \def\blx@thelangenv{hyphenrules}% - \let\blx@hook@initlang\@empty - \let\blx@hook@endlang\@empty} -\csdef{blx@opt@autolang@other*}{% - \def\blx@thelangenv{otherlanguage*}% - \def\blx@hook@initlang{\@quotereset\@ne}% - \def\blx@hook@endlang{\blx@postpunct}} -\def\blx@opt@autolang@other{% - \def\blx@thelangenv{otherlanguage}% - \def\blx@hook@initlang{\@quotereset\@ne}% - \def\blx@hook@endlang{\blx@postpunct}} -\def\blx@opt@autolang@langname{% - \@ifpackageloaded{polyglossia} - {\def\blx@thelangenv{langname}} - {\def\blx@thelangenv{otherlanguage}}% - \def\blx@hook@initlang{\@quotereset\@ne}% - \def\blx@hook@endlang{\blx@postpunct}} - -\DeclareBibliographyOption[boolean]{indexing}[true]{% - \blx@opt@index{#1}} -\DeclareTypeOption[boolean]{indexing}[true]{% - \blx@opt@index{#1}} -\DeclareEntryOption[boolean]{indexing}[true]{% - \blx@opt@index{#1}} -\def\blx@opt@index#1{% - \ifcsdef{blx@opt@index@#1} - {\csuse{blx@opt@index@#1}} - {\blx@err@invopt{indexing=#1}{}}} -\def\blx@opt@index@true{% - \toggletrue{blx@citeindex}% - \toggletrue{blx@bibindex}} -\def\blx@opt@index@false{% - \togglefalse{blx@citeindex}% - \togglefalse{blx@bibindex}} -\def\blx@opt@index@cite{% - \toggletrue{blx@citeindex}% - \togglefalse{blx@bibindex}} -\def\blx@opt@index@bib{% - \togglefalse{blx@citeindex}% - \toggletrue{blx@bibindex}} - -\DeclareBibliographyOption[boolean]{sortcites}[true]{% - \ifstrequal{#1}{true} - {\let\blx@thecitesort\blx@citesort - \let\blx@thenotecheck\blx@notecheck} - {\let\blx@thecitesort\blx@citenosort - \let\blx@thenotecheck\relax}} - -\DeclareBibliographyOption[boolean]{hyperref}[true]{% - \ifcsdef{blx@opt@hyperref@#1} - {\letcs\blx@hyperref{blx@opt@hyperref@#1}} - {\blx@err@invopt{hyperref=#1}{}}} -\def\blx@opt@hyperref@false{0} -\def\blx@opt@hyperref@true{1} -\def\blx@opt@hyperref@auto{2} - -\DeclareBibliographyOption[boolean]{backref}[true]{% - \ifstrequal{#1}{true} - {\let\blx@backref\blx@addbackref - \let\abx@aux@backref\blx@aux@backref - \booltrue{backtracker}} - {\let\blx@backref\@gobble - \let\abx@aux@backref\@gobblefive - \boolfalse{backtracker}}} - -\DeclareBibliographyOption[string]{backrefsetstyle}{% - \ifcsdef{blx@opt@backrefsetstyle@#1} - {\letcs\blx@backrefsetstyle{blx@opt@backrefsetstyle@#1}} - {\blx@err@invopt{backrefsetstyle=#1}{}}} -\def\blx@opt@backrefsetstyle@setonly{0} -\def\blx@opt@backrefsetstyle@memonly{1} -\def\blx@opt@backrefsetstyle@setormem{2} -\def\blx@opt@backrefsetstyle@setandmem{3} -\def\blx@opt@backrefsetstyle@memandset{4} -\def\blx@opt@backrefsetstyle@setplusmem{5} - -\appto\blx@mkhyperref{% - \ifHy@plainpages - \blx@warning@noline{% - hyperref package option 'plainpages' enabled.\MessageBreak - This may cause problems with hyperlinked back\MessageBreak - references. 'plainpages=false' is recommended}% - \fi - \ifHy@pageanchor\else - \blx@warning@noline{% - hyperref package option 'pageanchor' disabled.\MessageBreak - This will cause problems with hyperlinked back\MessageBreak - references. 'pageanchor=true' is required}% - \fi} - -\DeclareBibliographyOption[string]{block}{% - \ifcsdef{blx@opt@block@#1} - {\csuse{blx@opt@block@#1}} - {\blx@err@invopt{block=#1}{}}} -\def\blx@opt@block@none{% - \let\blx@bibsetup\@empty - \let\newblockpunct\@empty} -\def\blx@opt@block@par{% - \let\blx@bibsetup\@empty - \def\newblockpunct{\par}} -\def\blx@opt@block@nbpar{% - \def\blx@bibsetup{\interlinepenalty\@M}% - \def\newblockpunct{\par\nobreak}} -\def\blx@opt@block@space{% - \let\blx@bibsetup\@empty - \def\newblockpunct{% - \unspace\space - \hskip 0.11em - \@plus 0.33em - \@minus 0.07em}} -\def\blx@opt@block@ragged{% - \let\blx@bibsetup\raggedright - \def\newblockpunct{% - \unspace\penalty-9\relax\space}} - -\DeclareBibliographyOption[boolean]{pagetracker}[true]{% - \ifcsdef{blx@opt@pagetracker@#1} - {\csuse{blx@opt@pagetracker@#1}} - {\blx@err@invopt{pagetracker=#1}{}}} -\def\blx@opt@pagetracker@true{% - \if@twoside - \blx@opt@pagetracker@spread - \else - \blx@opt@pagetracker@page - \fi} -\def\blx@opt@pagetracker@false{% - \let\blx@pagetracker\relax - \let\abx@aux@page\@gobbletwo - \let\abx@aux@fnpage\@gobbletwo - \boolfalse{pagetracker}} -\def\blx@opt@pagetracker@page{% - \let\blx@pagetracker\blx@pagetracker@context - \let\abx@aux@page\blx@aux@page - \let\abx@aux@fnpage\blx@aux@fnpage - \booltrue{pagetracker}} -\def\blx@opt@pagetracker@spread{% - \if@twoside - \let\blx@pagetracker\blx@pagetracker@context - \let\abx@aux@page\blx@aux@spread - \let\abx@aux@fnpage\blx@aux@fnspread - \booltrue{pagetracker}% - \else - \blx@warning@noline{% - LaTeX not in twoside mode\MessageBreak - Falling back to 'pagetracker=page'}% - \blx@opt@pagetracker@page - \fi} - -\DeclareBibliographyOption[boolean]{citecounter}[true]{% - \ifcsdef{blx@opt@citecounter@#1} - {\csuse{blx@opt@citecounter@#1}} - {\blx@err@invopt{citecounter=#1}{}}} -\def\blx@opt@citecounter@true{% - \let\blx@setcitecounter\blx@setcitecounter@global - \let\blx@citecounter\blx@citecounter@global - \let\abx@aux@count\blx@aux@count - \let\abx@aux@fncount\blx@aux@fncount - \booltrue{citetracker}} -\def\blx@opt@citecounter@context{% - \let\blx@setcitecounter\blx@setcitecounter@context - \let\blx@citecounter\blx@citecounter@context - \let\abx@aux@count\blx@aux@count - \let\abx@aux@fncount\blx@aux@fncount - \booltrue{citetracker}} -\def\blx@opt@citecounter@false{% - \let\blx@setcitecounter\relax - \let\blx@citecounter\relax - \let\abx@aux@count\@gobbletwo - \let\abx@aux@fncount\@gobbletwo} - -\DeclareBibliographyOption[boolean]{citetracker}[true]{% - \ifcsdef{blx@opt@citetracker@#1} - {\csuse{blx@opt@citetracker@#1}} - {\blx@err@invopt{citetracker=#1}{}}} -\def\blx@opt@citetracker@true{% - \let\blx@imc@ifciteseen\blx@ifciteseen@global - \let\blx@imc@ifentryseen\blx@ifentryseen@global - \let\blx@citetracker\blx@citetracker@global - \booltrue{citetracker}} -\def\blx@opt@citetracker@false{% - \let\blx@imc@ifciteseen\@secondoftwo - \protected\long\def\blx@imc@ifentryseen##1##2##3{##3}% - \let\blx@citetracker\relax} -\def\blx@opt@citetracker@context{% - \let\blx@imc@ifciteseen\blx@ifciteseen@context - \let\blx@imc@ifentryseen\blx@ifentryseen@context - \let\blx@citetracker\blx@citetracker@context - \booltrue{citetracker}} -\def\blx@opt@citetracker@strict{% - \let\blx@imc@ifciteseen\blx@ifciteseen@global - \let\blx@imc@ifentryseen\blx@ifentryseen@global - \def\blx@citetracker{% - \blx@ifcitesingle{\blx@citetracker@global}{}}% - \booltrue{citetracker}} -\def\blx@opt@citetracker@constrict{% - \let\blx@imc@ifciteseen\blx@ifciteseen@context - \let\blx@imc@ifentryseen\blx@ifentryseen@context - \def\blx@citetracker{% - \blx@ifcitesingle{\blx@citetracker@context}{}}% - \booltrue{citetracker}} - -\DeclareBibliographyOption[boolean]{ibidtracker}[true]{% - \ifcsdef{blx@opt@ibidtracker@#1} - {\csuse{blx@opt@ibidtracker@#1}} - {\blx@err@invopt{ibidtracker=#1}{}}} -\def\blx@opt@ibidtracker@true{% - \let\blx@imc@ifciteibid\blx@ifciteibid@global - \let\blx@ibidtracker\blx@ibidtracker@global - \let\blx@ibidreset\blx@ibidreset@global - \booltrue{citetracker}} -\def\blx@opt@ibidtracker@false{% - \let\blx@imc@ifciteibid\@secondoftwo - \let\blx@ibidtracker\relax - \let\blx@ibidreset\relax} -\def\blx@opt@ibidtracker@context{% - \let\blx@imc@ifciteibid\blx@ifciteibid@context - \let\blx@ibidtracker\blx@ibidtracker@context - \let\blx@ibidreset\blx@ibidreset@context - \booltrue{citetracker}} -\def\blx@opt@ibidtracker@strict{% - \let\blx@imc@ifciteibid\blx@ifciteibid@strict - \let\blx@ibidtracker\blx@ibidtracker@strict - \let\blx@ibidreset\blx@ibidreset@global - \booltrue{citetracker}} -\def\blx@opt@ibidtracker@constrict{% - \let\blx@imc@ifciteibid\blx@ifciteibid@constrict - \let\blx@ibidtracker\blx@ibidtracker@constrict - \let\blx@ibidreset\blx@ibidreset@context - \booltrue{citetracker}} - -\DeclareBibliographyOption[boolean]{idemtracker}[true]{% - \ifcsdef{blx@opt@idemtracker@#1} - {\csuse{blx@opt@idemtracker@#1}} - {\blx@err@invopt{idemtracker=#1}{}}} -\def\blx@opt@idemtracker@true{% - \let\blx@imc@ifciteidem\blx@ifciteidem@global - \let\blx@idemtracker\blx@idemtracker@global - \let\blx@idemreset\blx@idemreset@global - \booltrue{citetracker}} -\def\blx@opt@idemtracker@false{% - \let\blx@imc@ifciteidem\@secondoftwo - \let\blx@idemtracker\relax - \let\blx@idemreset\relax} -\def\blx@opt@idemtracker@context{% - \let\blx@imc@ifciteidem\blx@ifciteidem@context - \let\blx@idemtracker\blx@idemtracker@context - \let\blx@idemreset\blx@idemreset@context - \booltrue{citetracker}} -\def\blx@opt@idemtracker@strict{% - \let\blx@imc@ifciteidem\blx@ifciteidem@strict - \let\blx@idemtracker\blx@idemtracker@strict - \let\blx@idemreset\blx@idemreset@global - \booltrue{citetracker}} -\def\blx@opt@idemtracker@constrict{% - \let\blx@imc@ifciteidem\blx@ifciteidem@constrict - \let\blx@idemtracker\blx@idemtracker@constrict - \let\blx@idemreset\blx@idemreset@context - \booltrue{citetracker}} - -\DeclareBibliographyOption[boolean]{opcittracker}[true]{% - \ifcsdef{blx@opt@opcittracker@#1} - {\csuse{blx@opt@opcittracker@#1}} - {\blx@err@invopt{opcittracker=#1}{}}} -\def\blx@opt@opcittracker@true{% - \let\blx@imc@ifopcit\blx@ifopcit@global - \let\blx@opcittracker\blx@opcittracker@global - \let\blx@opcitreset\blx@opcitreset@global - \booltrue{citetracker}} -\def\blx@opt@opcittracker@false{% - \let\blx@imc@ifopcit\@secondoftwo - \let\blx@opcittracker\relax - \let\blx@opcitreset\relax} -\def\blx@opt@opcittracker@context{% - \let\blx@imc@ifopcit\blx@ifopcit@context - \let\blx@opcittracker\blx@opcittracker@context - \let\blx@opcitreset\blx@opcitreset@context - \booltrue{citetracker}} -\def\blx@opt@opcittracker@strict{% - \let\blx@imc@ifopcit\blx@ifopcit@strict - \let\blx@opcittracker\blx@opcittracker@strict - \let\blx@opcitreset\blx@opcitreset@global - \booltrue{citetracker}} -\def\blx@opt@opcittracker@constrict{% - \let\blx@imc@ifopcit\blx@ifopcit@constrict - \let\blx@opcittracker\blx@opcittracker@constrict - \let\blx@opcitreset\blx@opcitreset@context - \booltrue{citetracker}} - -\DeclareBibliographyOption[boolean]{loccittracker}[true]{% - \ifcsdef{blx@opt@loccittracker@#1} - {\csuse{blx@opt@loccittracker@#1}} - {\blx@err@invopt{loccittracker=#1}{}}} -\def\blx@opt@loccittracker@true{% - \let\blx@imc@ifloccit\blx@ifloccit@global - \let\blx@loccittracker\blx@loccittracker@global - \let\blx@loccitreset\blx@loccitreset@global - \booltrue{citetracker}} -\def\blx@opt@loccittracker@false{% - \let\blx@imc@ifloccit\@secondoftwo - \let\blx@loccittracker\relax - \let\blx@loccitreset\relax} -\def\blx@opt@loccittracker@context{% - \let\blx@imc@ifloccit\blx@ifloccit@context - \let\blx@loccittracker\blx@loccittracker@context - \let\blx@loccitreset\blx@loccitreset@context - \booltrue{citetracker}} -\def\blx@opt@loccittracker@strict{% - \let\blx@imc@ifloccit\blx@ifloccit@strict - \let\blx@loccittracker\blx@loccittracker@strict - \let\blx@loccitreset\blx@loccitreset@global - \booltrue{citetracker}} -\def\blx@opt@loccittracker@constrict{% - \let\blx@imc@ifloccit\blx@ifloccit@constrict - \let\blx@loccittracker\blx@loccittracker@constrict - \let\blx@loccitreset\blx@loccitreset@context - \booltrue{citetracker}} - -\DeclareBibliographyOption[boolean]{parentracker}[true]{% - \ifstrequal{#1}{true} - {\let\bibopenparen\blx@bibopenparen - \let\bibcloseparen\blx@bibcloseparen - \let\bibopenbracket\blx@bibopenbracket - \let\bibclosebracket\blx@bibclosebracket} - {\protected\def\bibopenparen{\bibleftparen}% - \protected\def\bibcloseparen{\bibrightparen}% - \protected\def\bibopenbracket{\bibleftbracket}% - \protected\def\bibclosebracket{\bibrightbracket}}} - -\DeclareBibliographyOption[integer]{maxparens}{% - \ifnumless{#1}{1} - {\blx@err@invopt{maxparens=#1}{}} - {\setcounter{maxparens}{#1}}} - -\DeclareBibliographyOption[string]{date}{% - \ifcsdef{mkbibrange#1} - {\protected\def\blx@imc@printdate{\csuse{mkbibrange#1}{}}% - \protected\def\blx@imc@printdateextra{\csuse{mkbibrange#1extra}{}}} - {\blx@err@invopt{date=#1}{}}} - -\DeclareBibliographyOption[string]{datelabel}{% - \ifcsdef{mkbibrange#1} - {\protected\def\blx@imc@printdatelabel{% - \blx@imc@iffieldundef{year} - {\csuse{mkbibrange#1}{label}} - {\csuse{mkbibrange#1}{}}}% - \protected\def\blx@imc@printdateextralabel{% - \blx@imc@iffieldundef{year} - {\csuse{mkbibrange#1extra}{label}} - {\csuse{mkbibrange#1extra}{}}}} - {\blx@err@invopt{datelabel=#1}{}}} - -\DeclareBibliographyOption[string]{urldate}{% - \ifcsdef{mkbibrange#1} - {\protected\def\blx@imc@printurldate{\csuse{mkbibrange#1}{url}}} - {\blx@err@invopt{urldate=#1}{}}} - -\DeclareBibliographyOption[string]{eventdate}{% - \ifcsdef{mkbibrange#1} - {\protected\def\blx@imc@printeventdate{\csuse{mkbibrange#1}{event}}} - {\blx@err@invopt{eventdate=#1}{}}} - -\DeclareBibliographyOption[string]{origdate}{% - \ifcsdef{mkbibrange#1} - {\protected\def\blx@imc@printorigdate{\csuse{mkbibrange#1}{orig}}} - {\blx@err@invopt{origdate=#1}{}}} - -\DeclareBibliographyOption[string]{alldates}{% - \ExecuteBibliographyOptions{% - date=#1,datelabel=#1,urldate=#1,eventdate=#1,origdate=#1}} - -\DeclareBibliographyOption[boolean]{datezeros}[true]{% - \ifstrequal{#1}{true} - {\let\blx@imc@mkdatezeros\@firstofone} - {\let\blx@imc@mkdatezeros\blx@imc@stripzeros}} - -\DeclareBibliographyOption[string]{autocite}{% - \ifcsundef{blx@acite@#1} - {\blx@error - {Autocite command '#1' undefined} - {The autocite command '#1' has not been defined by - the\MessageBreak selected citation style}} - {\letcs\autocite{blx@acite@#1}% - \letcs\autocites{blx@macite@#1}}} - -\DeclareBibliographyOption[string]{notetype}{% - \ifcsdef{blx@opt@notetype@#1} - {\blx@notetype\csuse{blx@opt@notetype@#1}} - {\blx@err@invopt{notetype=#1}{}}} -\cslet{blx@opt@notetype@foot+end}\z@ -\let\blx@opt@notetype@footonly\@ne -\let\blx@opt@notetype@endonly\tw@ - -\DeclareBibliographyOption[boolean]{autopunct}[true]{% - \ifstrequal{#1}{true} - {\DeclareAutoPunctuation{.,;:!?}} - {\DeclareAutoPunctuation{}}} - -\DeclareBibliographyOption[boolean]{punctfont}[true]{% - \ifstrequal{#1}{true} - {\let\blx@ifpuncthook\@firstoftwo} - {\let\blx@ifpuncthook\@secondoftwo}} - -\DeclareBibliographyOption[boolean]{labelnumber}[true]{% - \settoggle{blx@labelnumber}{#1}% - \iftoggle{blx@labelnumber} - {} - {\setkeys{blx@opt@pre}{defernumbers=false}}} -\DeclareTypeOption[boolean]{labelnumber}[true]{% - \settoggle{blx@labelnumber}{#1}} - -\DeclareBibliographyOption[boolean]{labelalpha}[true]{% - \settoggle{blx@labelalpha}{#1}} -\DeclareTypeOption[boolean]{labelalpha}[true]{% - \settoggle{blx@labelalpha}{#1}} - -\DeclareBibliographyOption[boolean]{labeltitle}[true]{% - \settoggle{blx@labeltitle}{#1}} -\DeclareTypeOption[boolean]{labeltitle}[true]{% - \settoggle{blx@labeltitle}{#1}} - -\DeclareBibliographyOption[boolean]{labeltitleyear}[true]{% - \settoggle{blx@labeltitleyear}{#1}} -\DeclareTypeOption[boolean]{labeltitleyear}[true]{% - \settoggle{blx@labeltitleyear}{#1}} - -\DeclareBibliographyOption[boolean]{labeldate}[true]{% - \settoggle{blx@labeldate}{#1}} -\DeclareTypeOption[boolean]{labeldate}[true]{% - \settoggle{blx@labeldate}{#1}} - -\DeclareBibliographyOption[boolean]{labelyear}[true]{% - \blx@warning@noline{% - 'labelyear' option is deprecated, use 'labeldate' instead}% - \settoggle{blx@labeldate}{#1}} -\DeclareTypeOption[boolean]{labelyear}[true]{% - \blx@warning@noline{% - 'labelyear' option is deprecated, use 'labeldate' instead}% - \settoggle{blx@labeldate}{#1}} - -\DeclareBibliographyOption[boolean]{uniquelist}[true]{% - \ifcsdef{blx@opt@uniquelist@#1} - {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}} - {\blx@err@invopt{uniquelist=#1}{}}} -\DeclareTypeOption[boolean]{uniquelist}[true]{% - \ifcsdef{blx@opt@uniquelist@#1} - {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}} - {\blx@err@invopt{uniquelist=#1}{}}} -\DeclareEntryOption[boolean]{uniquelist}[true]{% - \ifcsdef{blx@opt@uniquelist@#1} - {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}} - {\blx@err@invopt{uniquelist=#1}{}}} -\def\blx@opt@uniquelist@false{0} -\def\blx@opt@uniquelist@true{1} -\def\blx@opt@uniquelist@minyear{2} - -\DeclareBibliographyOption[boolean]{uniquename}[true]{% - \ifcsdef{blx@opt@uniquename@#1} - {\letcs\blx@uniquename{blx@opt@uniquename@#1}} - {\blx@err@invopt{uniquename=#1}{}}} -\DeclareTypeOption[boolean]{uniquename}[true]{% - \ifcsdef{blx@opt@uniquename@#1} - {\letcs\blx@uniquename{blx@opt@uniquename@#1}} - {\blx@err@invopt{uniquename=#1}{}}} -\DeclareEntryOption[boolean]{uniquename}[true]{% - \ifcsdef{blx@opt@uniquename@#1} - {\letcs\blx@uniquename{blx@opt@uniquename@#1}} - {\blx@err@invopt{uniquename=#1}{}}} -\def\blx@opt@uniquename@false{0} -\def\blx@opt@uniquename@init{1} -\def\blx@opt@uniquename@true{2} -\def\blx@opt@uniquename@full{2} -\def\blx@opt@uniquename@allinit{3} -\def\blx@opt@uniquename@allfull{4} -\def\blx@opt@uniquename@mininit{5} -\def\blx@opt@uniquename@minfull{6} - -\DeclareBibliographyOption[boolean]{singletitle}[true]{% - \settoggle{blx@singletitle}{#1}} -\DeclareTypeOption[boolean]{singletitle}[true]{% - \settoggle{blx@singletitle}{#1}} - -\DeclareBibliographyOption[boolean]{defernumbers}[true]{% - \settoggle{blx@defernumbers}{#1}% - \iftoggle{blx@defernumbers} - {\setkeys{blx@opt@pre}{labelnumber}% - \let\blx@thelabelnumber\blx@addlabelnumber - \let\abx@aux@number\blx@aux@number} - {\let\blx@thelabelnumber\relax - \let\abx@aux@number\@gobblefive}} - -\DeclareBibliographyOption[string]{refsection}{% - \ifcsdef{blx@opt@refsection@#1} - {\letcs\blx@refsecreset@level{blx@opt@refsection@#1}} - {\blx@err@invopt{refsection=#1}{}}} -\def\blx@opt@refsection@none{0} -\def\blx@opt@refsection@part{1} -\def\blx@opt@refsection@chapter{2} -\def\blx@opt@refsection@section{3} -\def\blx@opt@refsection@subsection{4} - -\AtEndPreamble{% - \ifcase\blx@refsecreset@level - \or % 1 - \blx@refpatch@part\newrefsection - \or % 2 - \blx@refpatch@chapter\newrefsection - \or % 3 - \blx@refpatch@sect{section}{\newrefsection}{1}% - \or % 4 - \blx@refpatch@sect{subsection}{\newrefsection}{2}% - \fi} - -\DeclareBibliographyOption[string]{refsegment}{% - \ifcsdef{blx@opt@refsegment@#1} - {\letcs\blx@refsegreset@level{blx@opt@refsegment@#1}} - {\blx@err@invopt{refsegment=#1}{}}} -\def\blx@opt@refsegment@none{0} -\def\blx@opt@refsegment@part{1} -\def\blx@opt@refsegment@chapter{2} -\def\blx@opt@refsegment@section{3} -\def\blx@opt@refsegment@subsection{4} - -\AtEndPreamble{% - \ifnumgreater\blx@refsegreset@level\z@ - {\ifnumgreater\blx@refsegreset@level\blx@refsecreset@level - {} - {\blx@err@confopt - {refsegment/refsection} - {The 'refsegment' option must point to a - lower-level\MessageBreak document division - than 'refsection'}% - \def\blx@refsegreset@level{0}}} - {}% - \ifcase\blx@refsegreset@level - \or % 1 - \blx@refpatch@part\newrefsegment - \or % 2 - \blx@refpatch@chapter\newrefsegment - \or % 3 - \blx@refpatch@sect{section}{\newrefsegment}{1}% - \or % 4 - \blx@refpatch@sect{subsection}{\newrefsegment}{2}% - \fi} - -\DeclareBibliographyOption[string]{citereset}{% - \ifcsdef{blx@opt@citereset@#1} - {\letcs\blx@citereset@level{blx@opt@citereset@#1}} - {\blx@err@invopt{citereset=#1}{}}} -\def\blx@opt@citereset@none{0} -\def\blx@opt@citereset@part{1} -\def\blx@opt@citereset@chapter{2} -\def\blx@opt@citereset@section{3} -\def\blx@opt@citereset@subsection{4} - -\AtEndPreamble{% - \ifcase\blx@citereset@level - \or % 1 - \blx@refpatch@part{\citereset\blx@inf@creset}% - \or % 2 - \blx@refpatch@chapter{\citereset\blx@inf@creset}% - \or % 3 - \blx@refpatch@sect{section}{\citereset\blx@inf@creset}{1}% - \or % 4 - \blx@refpatch@sect{subsection}{\citereset\blx@inf@creset}{2}% - \fi} - -\DeclareBibliographyOption[boolean]{bibwarn}[true]{% - \ifstrequal{#1}{true} - {\let\blx@bbl@thewarn\blx@bbl@warn} - {\let\blx@bbl@thewarn\@gobble}} - -% Name field options -\def\do#1{% - \DeclareBibliographyOption[boolean]{use#1}[true]{% - \settoggle{blx@use#1}{##1}} - \DeclareTypeOption[boolean]{use#1}[true]{% - \settoggle{blx@use#1}{##1}} - \DeclareEntryOption[boolean]{use#1}[true]{% - \settoggle{blx@use#1}{##1}}} -\dolistcsloop{blx@biber@datamodel@names} - -% Entry options -\DeclareBibliographyOption[boolean]{useprefix}[true]{% - \settoggle{blx@useprefix}{#1}} -\DeclareTypeOption[boolean]{useprefix}[true]{% - \settoggle{blx@useprefix}{#1}} -\DeclareEntryOption[boolean]{useprefix}[true]{% - \settoggle{blx@useprefix}{#1}} - -\DeclareTypeOption[boolean]{skipbib}[true]{% - \settoggle{blx@skipbib}{#1}} -\DeclareEntryOption[boolean]{skipbib}[true]{% - \settoggle{blx@skipbib}{#1}} - -\DeclareTypeOption[boolean]{skiplos}{% - \blx@warning@noline{% - skiplos option is deprecated, use 'skipbiblist' instead}% - \settoggle{blx@skipbiblist}{#1}} -\DeclareEntryOption[boolean]{skiplos}{% - \blx@warning@noline{% - skiplos option is deprecated, use 'skipbiblist' instead}% - \settoggle{blx@skipbiblist}{#1}} - -\DeclareTypeOption[boolean]{skipbiblist}[true]{% - \settoggle{blx@skipbiblist}{#1}} -\DeclareEntryOption[boolean]{skipbiblist}[true]{% - \settoggle{blx@skipbiblist}{#1}} - -\DeclareTypeOption[boolean]{skiplab}[true]{% - \settoggle{blx@skiplab}{#1}} -\DeclareEntryOption[boolean]{skiplab}[true]{% - \settoggle{blx@skiplab}{#1}} - -\DeclareTypeOption[boolean]{dataonly}[true]{% - \settoggle{blx@skipbib}{#1}% - \settoggle{blx@skipbiblist}{#1}% - \settoggle{blx@skiplab}{#1}} -\DeclareEntryOption[boolean]{dataonly}[true]{% - \settoggle{blx@skipbib}{#1}% - \settoggle{blx@skipbiblist}{#1}% - \settoggle{blx@skiplab}{#1}} - -% Option processor/scheduler -\DeclareOption*{% - \begingroup - \def\blx@tempa#1=#2&{#1}% - \edef\blx@tempa{% - \expandafter\blx@tempa\CurrentOption=&}% - \ifcsundef{KV@blx@opt@ldt@\blx@tempa} - {\endgroup - \eappto\blx@theoptions{\CurrentOption,}} - {\edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@ldt}{\CurrentOption}}% - \blx@tempa}} - -\def\blx@processoptions{% - \ifundef\blx@theoptions - {} - {\begingroup - \edef\blx@tempa{\endgroup - \noexpand\setkeys{blx@opt@pre}{\blx@theoptions}}% - \blx@tempa}} - -%% Initial setup - -% Set defaults - -\setkeys{blx@opt@ldt}{style=numeric} -\setkeys{blx@opt@pre}{% - sorting=nty,sortlocale=auto,sortcase,sortupper,sortcites=false, - maxnames=3,minnames=1,maxalphanames=3,minalphanames=1, - maxitems=3,minitems=1,mincrossrefs=2,useauthor=true,useeditor=true, - usetranslator=false,indexing=false,abbreviate=true,dateabbrev=true, - backref=false,backrefsetstyle=setonly,pagetracker=false,ibidtracker=false, - idemtracker=false,opcittracker=false,loccittracker=false,citetracker=false, - citecounter=false,block=none,language=autobib,clearlang=true,autolang=none, - date=comp,datelabel=year,origdate=comp,eventdate=comp,urldate=short, - autopunct=true,punctfont=false,defernumbers=false, - refsection=none,refsegment=none,citereset=none,hyperref=auto, - parentracker,maxparens=3,bibencoding=auto,bibwarn} - -% Load compatibility code - -\blx@inputonce{blx-compat.def}{compatibility code}{}{}{}{} - -% Restore catcodes - -\blx@catcodes -\undef\blx@catcodes - -% Process load-time options - -\ProcessOptions* - -% Load citation and bibliography styles, configuration file - -\blx@inputonce{biblatex_.def}{generic definitions}{}{}{}{} -\iftoggle{blx@natbib} - {\blx@inputonce{blx-natbib.def}{natbib compatibility}{}{}{}{}} - {} -\iftoggle{blx@mcite} - {\blx@inputonce{blx-mcite.def}{mcite-like commands}{}{}{}{}} - {} -\RequireBibliographyStyle{\blx@bbxfile} -\RequireCitationStyle{\blx@cbxfile} -\blx@secinit -\citereset -\blx@inputonce{biblatex.cfg}{configuration file}{}{}{}{} - -% Process preamble options - -\blx@processoptions - -% Deferred setup at end of preamble - -\AtEndPreamble{% - \blx@checkoptions@global - \c@maxnames\blx@maxcitenames\relax - \c@minnames\blx@mincitenames\relax - \c@maxitems\blx@maxitems\relax - \c@minitems\blx@minitems\relax - \iftoggle{blx@giveninits} - {\ifnumequal\blx@uniquename\blx@opt@uniquename@full - {\blx@warn@conflopt{% - 'giveninits' conflicts with 'uniquename=full'.\MessageBreak - Setting 'uniquename=init'}% - \setkeys{blx@opt@pre}{uniquename=init}} - {}% - \ifnumequal\blx@uniquename\blx@opt@uniquename@allfull - {\blx@warn@conflopt{% - 'giveninits' conflicts with 'uniquename=allfull'.\MessageBreak - Setting 'uniquename=allinit}% - \setkeys{blx@opt@pre}{uniquename=allinit}} - {}% - \ifnumequal\blx@uniquename\blx@opt@uniquename@minfull - {\blx@warn@conflopt{% - 'giveninits' conflicts with 'uniquename=minfull'.\MessageBreak - Setting 'uniquename=mininit}% - \setkeys{blx@opt@pre}{uniquename=mininit}} - {}} - {}% - \nottoggle{blx@labeldate} - {\ifnumequal\blx@uniquelist\blx@opt@uniquelist@minyear - {\blx@warn@conflopt{% - 'uniquelist=minyear' requires 'labeldate'.\MessageBreak - Setting 'uniquelist=true'}% - \setkeys{blx@opt@pre}{uniquelist}} - {}} - {}} - -\def\blx@checkencoding{% - \ifdef\blx@texencoding - {\blx@info@noline{% - Input encoding '\blx@texencoding' specified}} - {\ifundef\inputencodingname - {\ifundef\XeTeXrevision - {\ifundef\luatexversion - {\def\blx@texencoding{ascii}% - \blx@info@noline{% - No input encoding detected.\MessageBreak - Assuming '\blx@texencoding'}} - {\def\blx@texencoding{utf8}% - \blx@info@noline{% - LuaTeX detected.\MessageBreak - Assuming input encoding '\blx@texencoding'}}} - {\def\blx@texencoding{utf8}% - \blx@info@noline{% - XeTeX detected.\MessageBreak - Assuming input encoding '\blx@texencoding'}}} - {\ifcsdef{blx@inpenc@\inputencodingname} - {\letcs\blx@texencoding{blx@inpenc@\inputencodingname}} - {\let\blx@texencoding\inputencodingname}% - \blx@info@noline{% - Input encoding '\blx@texencoding' detected}}}% - \ifdef\blx@bibencoding - {\ifdefstring\blx@bibencoding{ascii} - {\blx@info@noline{% - Data encoding '\blx@bibencoding' specified.\MessageBreak - No need to reencode data}} - {\ifdefstring\blx@bibencoding{auto} - {\let\blx@bibencoding\blx@texencoding - \blx@info@noline{% - Automatic encoding selection.\MessageBreak - Assuming data encoding '\blx@bibencoding'}} - {\ifdefstrequal\blx@bibencoding\blx@texencoding - {\blx@info@noline{% - Data encoding '\blx@bibencoding' specified.\MessageBreak - No need to reencode data}} - {\blx@info@noline{% - Data encoding '\blx@bibencoding' specified.\MessageBreak - Backend will reencode on the fly}}}}} - {\def\blx@bibencoding{ascii}% - \blx@info@noline{% - Data encoding not specified.\MessageBreak - Assuming '\blx@bibencoding'}}% - \ifboolexpr{% - togl {blx@safeinputenc} - and ( test {\@ifpackageloaded{inputenc}} - or - test {\@ifpackageloaded{inputenx}} ) - } - {\def\blx@texencoding{ascii}% - \blx@info@noline{% - Input encoding '\blx@texencoding' forced by\MessageBreak - 'safeinputenc' option}} - {}% -} - - -% Deferred last minute setup - -\AtBeginDocument{% - \blx@auxwrite\@mainaux{}{\string\abx@aux@sortscheme{\blx@sorting}}% - \def\do#1{% - \blx@auxwrite\@mainaux{}{\string\abx@aux@sortnamekeyscheme{#1}}} - \dolistloop\blx@sortnamekeyschemes - \blx@checkencoding - \if@filesw - \blx@ctrlwrite@biber - \blx@bblinput - \blx@maxsection\z@ - \fi - \csuse{abx@preamble}% - \blx@inf@refsec - \blx@inf@refseg} - -\AtEndOfPackage{% - % Data model macros are forbidden after package load is finished - \def\blx@warn@dm#1{\blx@warning@noline{Data model macro '#1' cannot be used in preamble}} - \def\ResetDatamodelEntrytypes{\blx@warn@dm{ResetDatamodelEntrytypes}} - \def\ResetDatamodelFields{\blx@warn@dm{ResetDatamodelFields}} - \def\ResetDatamodelEntryfields{\blx@warn@dm{ResetDatamodelEntryfields}} - \def\ResetDatamodelConstraints{\blx@warn@dm{ResetDatamodelConstraints}} - \renewcommand*{\DeclareDatamodelEntrytypes}[2][]{\blx@warn@dm{DeclareDatamodelEntrytypes}} - \renewcommand*{\DeclareDatamodelFields}[2][]{\blx@warn@dm{DeclareDatamodelFields}} - \renewcommand*{\DeclareDatamodelEntryfields}[2][]{\blx@warn@dm{DeclareDatamodelEntryfields}} - \renewcommand*{\DeclareDatamodelConstraints}[2][]{\blx@warn@dm{DeclareDatamodelConstraints}} - \renewcommand*{\DeclareDatamodelConstant}[3][]{\blx@warn@dm{DeclareDatamodelConstant}} - \AtBeginDocument{% - \let\do\undef - \blx@dopreamblecmds - \let\do\noexpand}} - -\endinput |