diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex/biblatex.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/biblatex/biblatex.sty | 8150 |
1 files changed, 8150 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex/biblatex.sty b/Master/texmf-dist/tex/latex/biblatex/biblatex.sty new file mode 100644 index 00000000000..62452d3e8c8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/biblatex/biblatex.sty @@ -0,0 +1,8150 @@ +% $Id: biblatex.sty,v 0.9 2010/02/14 15:42:33 lehman beta $ + +% Copyright (c) 2006-2010 Philipp Lehman. +% +% Permission is granted to copy, distribute and/or modify this +% software under the terms of the LaTeX Project Public License +% (LPPL), version 1.3. +% +% The LPPL maintenance status of this software is +% 'author-maintained'. +% +% 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. + +\def\abx@rcsid$#1: #2 #3 #4 #5${#4 v#3} +\def\abx@bbxid$#1: #2 #3 #4 #5${#4 v#3 biblatex bibliography style} +\def\abx@cbxid$#1: #2 #3 #4 #5${#4 v#3 biblatex citation style} +\def\abx@lbxid$#1: #2 #3 #4 #5${#4 v#3 biblatex localization} + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{biblatex} +[\abx@rcsid $Id: biblatex.sty,v 0.9 2010/02/14 15:42:33 lehman beta $ + programmable bibliographies] + +\def\blx@version$#1: #2 ${#2} +\edef\blx@version{\blx@version$Revision: 0.9 $} + +%% Compatibility and requirements + +\RequirePackage{etoolbox} +\RequirePackage{keyval} +\RequirePackage{ifthen} +\RequirePackage{url} + +\@ifpackagelater{etoolbox}{2009/08/06} + {} + {\PackageError{biblatex} + {Outdated 'etoolbox' package} + {Upgrade to etoolbox v1.8 (2009/08/06) or later.\MessageBreak + I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak + This is a fatal error. I'm aborting now.}% + \endinput} + +\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}% + \@ifpackageloaded{babel} + {\iftoggle{autolang} + {\blx@mkbabel} + {\blx@mknobabel}} + {\blx@mknobabel}% + \csuse{abx@extras@\blx@languagename}% + \csuse{abx@strings@\blx@languagename}% + \undef\blx@mkbabel + \undef\blx@mknobabel + \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 + \scr@saved@footnotetext,% koma-script 3.x + \l@dold@footnotetext,% ledmac + \l@doldold@footnotetext,% ledmac + \@fntORI}% frenchle + \@ifclassloaded{memoir}% memoir + {\togglefalse{blx@tempa}% + \def\do#1{% + \patchcmd#1% + {\color@begingroup} + {\color@begingroup\toggletrue{blx@footnote}} + {} + {\toggletrue{blx@tempa}}}% + \docsvlist{% + \m@mold@footnotetext,% + \@twocolfootnotetext,% + \@threecolfootnotetext,% + \@parafootnotetext}} + {}% + \iftoggle{blx@tempa} + {\blx@warning@noline{% + Patching footnotes failed.\MessageBreak + Will try to fork \string\@footnotetext}% + \let\blx@org@footnotetext\@footnotetext + \long\def\@footnotetext#1{% + \toggletrue{blx@footnote}% + \blx@org@footnotetext{#1}% + \togglefalse{blx@footnote}}} + {}% + \@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@ + {\ifundef\SK@cite % = 'notcite' disabled + {\AtEveryBibitem{\SK@\SK@@label{\thefield{entrykey}}}% + \AtEveryLositem{\SK@\SK@@label{\thefield{entrykey}}}% + \AtEveryCitekey{\SK@\SK@@ref{\thefield{entrykey}}}} + {}} + {}} + {}% + \@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}'}}% + \@ifpackagelater{csquotes}{2009/08/27} + {\appto\@blockquote@prehook{\abx@savetrackers}% + \appto\@blockquote@posthook{\abx@resttrackers\abx@cleartrackers}} + {\BlockquoteDisable{\let\blx@thecheckpunct\@gobble}}} + {\@ifpackageloaded{babel} + {\blx@warning@noline{% + 'babel' detected but 'csquotes' missing.\MessageBreak + Loading 'csquotes' is strongly recommended}} + {}% + \newcommand*{\@quotelevel}{}% + \newcount\@quotelevel + \newcommand*{\@setquotesfcodes}{}% + \let\@setquotesfcodes\relax + \newcommand*{\@ifquotemarker}{}% + \let\@ifquotemarker\@secondoftwo + \newrobustcmd*{\initoquote}{\@quotelevel\@ne}% + \newrobustcmd*{\initiquote}{\@quotelevel\tw@}% + \newcommand*{\textooquote}{``}% + \newcommand*{\textcoquote}{''}% + \newcommand*{\textoiquote}{`}% + \newcommand*{\textciquote}{'}% + \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@}}% + \apptocmd\@floatboxreset + {\boolfalse{citetracker}% + \boolfalse{pagetracker}} + {} + {\blx@err@patch{floats}}% + \ifdef\TX@endtabularx % tabularx/memoir + {\patchcmd\TX@endtabularx + {\edef\TX@ckpt{\cl@@ckpt}} + {\edef\TX@ckpt{\cl@@ckpt\abx@resttrackers}% + \abx@savetrackers} + {} + {\blx@err@patch{'tabularx'}}% + \apptocmd\TX@endtabularx{\abx@cleartrackers} + {} + {\blx@err@patch{'tabularx'}}} + {}% + \addtocontents{toc}{% + \string\boolfalse{citerequest}% + \string\boolfalse{citetracker}% + \string\boolfalse{pagetracker}}% + \addtocontents{lof}{% + \string\boolfalse{citerequest}% + \string\boolfalse{citetracker}% + \string\boolfalse{pagetracker}}% + \addtocontents{lot}{% + \string\boolfalse{citerequest}% + \string\boolfalse{citetracker}% + \string\boolfalse{pagetracker}}% + \let\do\noexpand} + +\begingroup +\@makeother\# +\AtEndPreamble{% + \patchcmd\addtocontents + {\string\@writefile} + {\string\@writefile{#1}{\string\defcounter{refsection}{\the\c@refsection}}\blx@nl + \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 + +% koma-script +\newcommand{\ifkomabibtotoc}[2]{#2} +\newcommand{\ifkomabibtotocnumbered}[2]{#2} +\ifdef\ds@bibtotoc + {\DeclareOption{bibtotoc}{% + \let\ifkomabibtotoc\@firstoftwo} + \DeclareOption{bibtotocnumbered}{% + \let\ifkomabibtotoc\@firstoftwo + \let\ifkomabibtotocnumbered\@firstoftwo} + \DeclareOption{bibliography=nottotoc}{% + \let\ifkomabibtotoc\@secondoftwo + \let\ifkomabibtotocnumbered\@secondoftwo} + \DeclareOption{bibliography=totoc}{% + \let\ifkomabibtotoc\@firstoftwo} + \DeclareOption{bibliography=totocnumbered}{% + \let\ifkomabibtotoc\@firstoftwo + \let\ifkomabibtotocnumbered\@firstoftwo}} + {} + +% memoir +\@ifclassloaded{memoir} + {\newcommand*{\ifmemoirbibintoc}{% + \ifnobibintoc + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi}} + {\newcommand{\ifmemoirbibintoc}[2]{#2}} + +%% Category codes + +\def\blx@docatcodes{% + \do\=\do\<\do\>\do\-\do\"\do\'\do\`\do\.% + \do\,\do\;\do\:\do\!\do\?\do\/} +\def\do#1{\noexpand\do\noexpand#1{\the\catcode`#1}} +\edef\blx@catcodes{\blx@docatcodes\do\^\do\~\do\&\do\|} + +\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} + +%% Allocation + +\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{uniquename} +\def\theuniquename{\the\c@uniquename} +\newcounter{refsection} +\def\therefsection{\the\c@refsection} +\newcounter{refsegment} +\def\therefsegment{\the\c@refsegment} +\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} + +\newcount\blx@tempcnta +\newcount\blx@tempcntb +\newcount\blx@maxsection +\newcount\blx@maxsegment +\newcount\blx@notetype + +\newlength{\labelnumberwidth} +\newlength{\labelalphawidth} +\newlength{\shorthandwidth} +\newlength{\biblabelsep} +\ifdef\bibitemsep % memoir + {} + {\newlength{\bibitemsep}} +\newlength{\bibnamesep} +\newlength{\bibinitsep} +\newlength{\bibparsep} +\newlength{\bibhang} + +\newbool{citetracker} +\newbool{pagetracker} +\newbool{citerequest} +\booltrue{citerequest} + +\newtoggle{blx@tempa} +\newtoggle{blx@tempb} +\newtoggle{blx@block} +\newtoggle{blx@unit} +\newtoggle{blx@insert} +\newtoggle{blx@lastins} +\newtoggle{blx@debug} +\newtoggle{autolang} +\newtoggle{blx@defernums} +\newtoggle{blx@footnote} +\newtoggle{blx@labelalpha} +\newtoggle{blx@labelnumber} +\newtoggle{blx@labelyear} +\newtoggle{blx@natbib} +\newtoggle{blx@loadfiles} +\newtoggle{blx@singletitle} +\newtoggle{blx@terseinits} +\newtoggle{blx@firstinits} +\newtoggle{blx@useauthor} +\newtoggle{blx@useeditor} +\newtoggle{blx@usetranslator} +\newtoggle{blx@useprefix} +\newtoggle{blx@addset} +\newtoggle{blx@setonly} +\newtoggle{blx@dataonly} +\newtoggle{blx@skipbib} +\newtoggle{blx@skiplos} +\newtoggle{blx@skiplab} +\newtoggle{blx@citation} +\newtoggle{blx@bibliography} +\newtoggle{blx@recode} +\newtoggle{blx@citeindex} +\newtoggle{blx@bibindex} + +\def\blx@backend{0} +\def\blx@uniquename{0} + +\newread\blx@auxin +\newwrite\blx@auxout + +\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} + +\edef\blx@auxfile{\jobname} +\let\blx@theauxout\@mainaux +\newcommand*{\labelalphaothers}{+} +\newcommand*{\blxauxsuffix}{-blx} + +\begingroup +\def\blx@tempa#1"#2{% + #1\ifx#2\@empty\else + \expandafter\blx@tempa + \fi#2} +\edef\blx@ctrlfile{% + \noexpand\blx@tempa + \expandafter\blx@tempa\jobname"\@empty + \space\noexpand\@empty} +\def\blx@tempa#1 #2{% + #1\ifx#2\@empty\else + \string_\expandafter\blx@tempa + \fi#2} +\xdef\blx@ctrlfile{\blx@ctrlfile} +\endgroup + +\def\blx@secinit{% + \ifcsundef{blx@sort@\the\c@refsection} + {\global\cslet{blx@sort@\the\c@refsection}\@empty} + {}% + \ifcsundef{blx@sbib@\the\c@refsection} + {\global\cslet{blx@sbib@\the\c@refsection}\@empty} + {}% + \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} + {}% + \ifcsundef{blx@losh@\the\c@refsection} + {\global\cslet{blx@losh@\the\c@refsection}\@empty} + {}% + \blx@ibidreset@force + \blx@idemreset@force + \blx@opcitreset@force + \blx@loccitreset@force + \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}}} +\blx@regimc\docsvfield + +% {<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>} => 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} + +% {<macro>}{<entrykey>,...} => <macro>{<entrykey>,...} + +\protected\def\blx@sanitizekeys#1#2{% + \begingroup + \blx@safe@actives + \let\protect\string + \edef\blx@tempa{#2}% + \edef\blx@tempa{% + \endgroup\unexpanded{#1}{% + \detokenize\expandafter{\blx@tempa}}}% + \blx@tempa} + +% {<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}% + #3\@@input\@filef@und#4#5} + {\blx@info@noline{... file '#1' not found}#6}% + \global\csdef{blx@file@#1}{}% + \@addtofilelist{#1}} + {#5}} + +% {<string>} + +\protected\def\blx@auxwrite#1#2{% + \if@filesw + \begingroup + \blx@safe@actives + \let\protect\string + \immediate\write#1{#2}% + \endgroup + \fi} + +\def\blx@auxinit#1{% + \blx@auxwrite\blx@theauxout{% + \ifx\blx@theauxout\@mainaux + \else + \blx@msg@aux + \fi + \ifnum\blx@backend=\blx@backend@biber + \expandafter\ifblank\expandafter{#1} + {} + {\string\bibdata{#1}}% + \else + \string\bibstyle{biblatex}\blx@nl + \string\bibdata{% + \blx@ctrlfile\blxauxsuffix + \expandafter\ifblank\expandafter{#1} + {} + {,#1}}\blx@nl + \string\citation{biblatex-control} + \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@auxin #1.#2\relax + \ifeof\blx@auxin + \else + \endlinechar\m@ne + \readline\blx@auxin to \blx@tempc + \ifeof\blx@auxin + \else + \ifx\blx@tempb\blx@tempc + \readline\blx@auxin 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' created\MessageBreak + by wrong version of biblatex}% + \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@auxin + \expandafter\endgroup\blx@tempa} + +\def\blx@sig@bib{@Comment{$ biblatex control file $}} +\edef\blx@ver@bib{@Comment{$ biblatex version \blx@version\space $}} +\edef\blx@sig@aux{\@percentchar\space $ biblatex auxiliary file $} +\edef\blx@ver@aux{\@percentchar\space$ biblatex version \blx@version\space $} +\let\blx@sig@bbl\blx@sig@aux +\let\blx@ver@bbl\blx@ver@aux +\edef\blx@sig@bcf{\detokenize{<?xml version="1.0" encoding="UTF-8"?>}} +\edef\blx@ver@bcf{% + \detokenize{<bcf:controlfile version="}\blx@version + \detokenize{" xmlns:bcf="https://sourceforge.net/projects/biblatex">}} + +\edef\blx@msg@aux{% + \blx@sig@aux\blx@nl + \blx@ver@aux\blx@nl + \@percentchar\space Do not modify the above lines!\blx@nl + \@percentchar\blx@nl + \@percentchar\space This is an auxiliary file + used by the 'biblatex' package.\blx@nl + \@percentchar\space This file may safely be deleted. + It will be recreated as\blx@nl + \@percentchar\space required.\blx@nl + \@percentchar\blx@nl\string\relax\blx@nl} +\edef\blx@msg@bib{% + \blx@sig@bib\blx@nl + \blx@ver@bib\blx@nl + Do not modify the above lines!\blx@nl\blx@nl + This is an auxiliary file used + by the 'biblatex' package.\blx@nl + This file may safely be deleted. + It will be recreated as\blx@nl + required.\blx@nl\blx@nl} + +%% User feedback + +\protected\def\blx@error#1#2{% + \begingroup + \blx@safe@actives + \PackageError{biblatex}{#1}{#2.}% + \endgroup} + +\protected\def\blx@warning#1{% + \begingroup + \blx@safe@actives + \PackageWarning{biblatex}{#1\blx@noline}% + \endgroup} +\protected\def\blx@warning@noline#1{% + \begingroup + \blx@safe@actives + \PackageWarning{biblatex}{#1\@gobble}% + \endgroup} +\protected\def\blx@warning@entry#1{% + \ifundef\abx@field@entrykey + {\blx@warning{#1}} + {\blx@warning{#1\MessageBreak at entry '\abx@field@entrykey'}}} + +\protected\def\blx@info#1{% + \begingroup + \blx@safe@actives + \PackageInfo{biblatex}{#1\blx@noline}% + \endgroup} +\def\blx@info@noline#1{% + \begingroup + \blx@safe@actives + \PackageInfo{biblatex}{#1\@gobble}% + \endgroup} + +\let\blx@noline\@gobble +\AtEndOfPackage{\let\blx@noline\@empty} +\def\blx@imc@BibliographyWarning{\blx@warning@entry} +\blx@regimc\BibliographyWarning + +\def\blx@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{% + \blx@error + {Argument '#1' invalid} + {The argument you have supplied is invalid.\MessageBreak + See the biblatex manual for details}} + +\def\blx@err@invopt#1{% + \blx@error + {Option '#1' invalid} + {The option you have supplied is invalid.\MessageBreak + See the biblatex manual for valid option keys and + possible values}} + +\def\blx@err@confopt#1{% + \blx@error + {Conflicting options} + {#1}} + +\def\blx@err@nodocdiv#1{% + \blx@error + {Failed to hook into \@backslashchar#1} + {There are two possible reasons for this error. + Either\MessageBreak the document class does not + support chapters or the\MessageBreak implementation + is not compatible with biblatex}} + +\def\blx@err@nosec#1{% + \blx@error + {Section '#1' not found} + {The reference section '#1' could not be found}} + +\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@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}% + \blx@missing{#1}} + +\def\blx@warn@conflopt#1{% + \blx@warning{Conflicting options.\MessageBreak#1}} + +\def\blx@warn@bibempty{% + \@latex@warning{Empty bibliography}} + +\def\blx@warn@losempty{% + \@latex@warning{Empty list of shorthands}} + +\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 \thepage\space undefined} + +\let\blx@auxlist\@empty +\def\blx@logreq#1{% + \xifinlist{\blx@auxfile.aux}{\blx@auxlist} + {} + {\listxadd\blx@auxlist{\blx@auxfile.aux}% + \blx@logreq@bibtex{\blx@auxfile}}% + \ifblank{#1} + {} + {\@latex@warning{#1}}% + \blx@reruntrue} + +\def\blx@logreq@latex{\typeout{REQ:1:latex:REQ}} +\def\blx@logreq@bibtex#1{% + \begingroup + \edef\blx@tempa{\endgroup + \noexpand\typeout{REQ:2:bibtex:\blx@nl + \ifcase\blx@backend + binary=bibtex\blx@nl + \or + binary=bibtex8\blx@nl + option=--mwizfuns 10000\blx@nl + \or + binary=biber\blx@nl + \fi + \ifundef\blx@mincrossrefs + {} + {\ifcase\blx@backend + option=-min-crossrefs=\blx@mincrossrefs\blx@nl + \or + option=--min\string_crossrefs \blx@mincrossrefs\blx@nl + \fi}% + \ifdef\blx@bibencoding + {\ifnum\blx@backend=\csuse{blx@backend@bibtex8}% + option=--csfile \blx@bibencoding.csf\blx@nl + \fi} + {}% + infile=#1\blx@nl:REQ}}% + \blx@tempa} + +\def\blx@warn@rerun{% + \blx@warning@noline{Please rerun LaTeX}} + +\def\blx@warn@auxlist{% + \begingroup + \edef\blx@tempa{% + Please (re)run + \ifnum\blx@backend=\blx@backend@biber + Biber + \else + BibTeX + \fi + on the file(s):}% + \def\do##1{\appto\blx@tempa{\MessageBreak##1}}% + \dolistloop\blx@auxlist + \blx@warning@noline{% + \blx@tempa\MessageBreak + and rerun LaTeX afterwards}% + \endgroup} + +\def\blx@reruntrue{% + \G@refundefinedtrue + \blx@logreq@latex + \global\let\blx@reruntrue\relax} + +\protected\def\blx@checksum{% + \blx@tempcnta\z@ + \ifx\blx@checksum@old\blx@checksum@new + \else + \advance\blx@tempcnta\@ne + \blx@reruntrue + \fi + \ifx\blx@auxlist\@empty + \else + \advance\blx@tempcnta\tw@ + \blx@reruntrue + \fi + \csuse{blx@rerun}% + \ifcase\blx@tempcnta + \or + \blx@warn@rerun + \else + \blx@warn@auxlist + \fi} + +\let\blx@checksum@old\@empty +\let\blx@checksum@new\@empty +\let\abx@aux@checksum\relax + +\def\blx@addchecksum#1{% + \xdef\blx@checksum@old{\blx@checksum@old#1}} + +\AtEndDocument{% + \def\blx@addchecksum#1{% + \xdef\blx@checksum@new{\blx@checksum@new#1}}} + +\AfterEndDocument{\blx@checksum} + +%% Punctuation and capitalization + +% 1001 apostrophe (\printnames only) +% 1002 abbreviation 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@apo=1001 +\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 + +\csedef{blx@sf@1250}{\the\blx@sf@comma} +\csedef{blx@sf@1500}{\the\blx@sf@semicolon} +\csedef{blx@sf@2000}{\the\blx@sf@colon} +\csedef{blx@sf@3000}{\the\blx@sf@period} +\csedef{blx@sf@3001}{\the\blx@sf@exclam} +\csedef{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 +} + +\def\blx@namecodes{% + \ifnum\sfcode`\A=\@m + \else + \blx@setazcodes + \fi + \sfcode`\'=\blx@sf@apo +} + +\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@apo + \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@apo + \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}} + +\newrobustcmd*{\unspace}{% + \ifhmode + \expandafter\blx@unspace + \fi} + +\def\blx@unspace{% + \ifdim\lastskip>\z@ + \unskip + \expandafter\blx@unspace + \else + \ifnum\lastpenalty>\z@ + \unpenalty + \expandafter\expandafter + \expandafter\blx@unspace + \fi + \fi} + +\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/\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 + +% {<type>}{<driverdef>} + +\newrobustcmd*{\DeclareBibliographyDriver}[1]{% + \long\csdef{blx@bbx@#1}} +\@onlypreamble\DeclareBibliographyDriver + +\def\blx@driver#1{% + \ifcsundef{blx@bbx@#1} + {\ifcsundef{blx@bbx@*} + {\blx@warning{% + No driver for entry type '\abx@field@entrytype'}} + {\csuse{blx@bbx@*}}} + {\csuse{blx@bbx@#1}}} + +% {<type>}{<true>}{<false>} + +\def\blx@ifdriver#1{% + \ifcsundef{blx@bbx@#1} + {\ifcsundef{blx@bbx@*} + {\@secondoftwo} + {\@firstoftwo}} + {\@firstoftwo}} + +% {<alias>}{<type>} + +\newrobustcmd*{\DeclareBibliographyAlias}[2]{% + \csedef{blx@bbx@#1}{% + \expandafter\noexpand\csname blx@bbx@#2\endcsname}} +\@onlypreamble\DeclareBibliographyAlias + +% {<key>}[<value>]{<code>} + +\newrobustcmd*{\DeclareBibliographyOption}[1]{% + \@ifnextchar[%] + {\blx@defbibopt{#1}} + {\blx@defbibopt{#1}[]}} + +\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@confopt{The package option '#1' already exists}}} + {\blx@err@confopt{The package option '#1' already exists}}} + +% {<key>}[<value>]{<code>} + +\newrobustcmd*{\DeclareEntryOption}[1]{% + \@ifnextchar[%] + {\blx@defentryopt{#1}} + {\blx@defentryopt{#1}[]}} + +\long\def\blx@defentryopt#1[#2]#3{% + \ifcsundef{KV@blx@opt@bib@#1} + {\ifblank{#2} + {\define@key{blx@opt@bib}{#1}{#3}} + {\define@key{blx@opt@bib}{#1}[#2]{#3}}} + {\blx@err@confopt{The entry option '#1' already exists}}} + +%% 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>}{<definition>} + +\newrobustcmd*{\newbibmacro}{% + \@star@or@long{\blx@defbibmacro\new@command}} + +\newrobustcmd*{\renewbibmacro}{% + \@star@or@long{\blx@defbibmacro\renew@command}} + +\def\blx@defbibmacro#1#2{% + \expandafter#1\csname abx@macro@\detokenize{#2}\endcsname} + +% {<name>} + +\newrobustcmd*{\usebibmacro}[1]{% + \ifcsundef{abx@macro@\detokenize{#1}} + {\blx@error + {Bibliography macro '\detokenize{#1}' undefined} + {Use '\string\newbibmacro' to define this macro}} + {\csuse{abx@macro@\detokenize{#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}} + {}} + +% {<plainlist>} + +\def\blx@imc@thelist#1{\csuse{abx@list@#1}} + +% {<namelist>} + +\def\blx@imc@thename#1{\csuse{abx@name@#1}} + +% {<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{% + \ifcsequal{abx@name@#1}{abx@name@#2}} + +% {<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{% + \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{% + \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>} + +\protected\def\blx@ifciteseen@global{% + \expandafter\blx@ifseen@global + \expandafter{\abx@field@entrykey}} + +\protected\def\blx@ifciteseen@context{% + \expandafter\blx@ifseen@context + \expandafter{\abx@field@entrykey}} + +% {<entrykey>}{<true>}{<false>} + +\protected\def\blx@ifentryseen@global{% + \blx@sanitizekeys\blx@ifseen@global} + +\protected\def\blx@ifentryseen@context{% + \blx@sanitizekeys\blx@ifseen@context} + +\def\blx@ifseen@global#1{% + \ifinlistcs{#1}{blx@bsee@\the\c@refsection}} + +\def\blx@ifseen@context#1{% + \iftoggle{blx@footnote} + {\ifinlistcs{#1}{blx@fsee@\the\c@refsection}} + {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}} + +% {<true>}{<false>} + +\def\blx@ifciteibid@global{% + \blx@imc@iffieldequals{entrykey}\blx@lastkey@text} + +\def\blx@ifciteibid@context{% + \iftoggle{blx@footnote} + {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot} + {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}} + +\def\blx@ifciteibid@strict{% + \blx@ifcitesingle + {\blx@ifciteibid@global} + {\@secondoftwo}}% + +\def\blx@ifciteibid@constrict{% + \blx@ifcitesingle + {\iftoggle{blx@footnote} + {\blx@ifmpfncheck + {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot} + {\@secondoftwo}} + {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}} + {\@secondoftwo}}% + +% {<true>}{<false>} + +\def\blx@ifciteidem@global{% + \blx@imc@iffieldequals{fullhash}\blx@lasthash@text} + +\def\blx@ifciteidem@context{% + \iftoggle{blx@footnote} + {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot} + {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}} + +\def\blx@ifciteidem@strict{% + \blx@ifcitesingle + {\blx@ifciteidem@global} + {\@secondoftwo}}% + +\def\blx@ifciteidem@constrict{% + \blx@ifcitesingle + {\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{% + \blx@imc@iffieldundef{namehash} + {\@secondoftwo} + {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}} + +\def\blx@ifopcit@context{% + \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}}}} + +\def\blx@ifopcit@strict{% + \blx@ifcitesingle + {\blx@ifopcit@global} + {\@secondoftwo}}% + +\def\blx@ifopcit@constrict{% + \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}}% + +% {<true>}{<false>} + +\def\blx@ifloccit@global{% + \blx@loccit@check{text}} + +\def\blx@ifloccit@context{% + \iftoggle{blx@footnote} + {\blx@loccit@check{foot}} + {\blx@loccit@check{text}}} + +\def\blx@ifloccit@strict{% + \blx@ifcitesingle + {\blx@loccit@numcheck{text}} + {\@secondoftwo}}% + +\def\blx@ifloccit@constrict{% + \blx@ifcitesingle + {\iftoggle{blx@footnote} + {\blx@ifmpfncheck + {\blx@loccit@numcheck{foot}} + {\@secondoftwo}} + {\blx@loccit@numcheck{text}}} + {\@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{% + \iftoggle{blx@footnote} + {\blx@iffirstonpage{fnpage}} + {\blx@iffirstonpage{page}}} + +\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{% + \ifcsundef{blx@page@\number\numexpr#1} + {\ifcsundef{blx@fnpage@\number\numexpr#1} + {\@secondoftwo} + {\blx@ifsamepage{#1}{#2}{fnpage}}} + {\blx@ifsamepage{#1}{#2}{page}}} + +\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{% + \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{% + \iffieldundef{#1} + {\@secondoftwo} + {\expandafter\expandafter + \expandafter\ifnumeral + \expandafter\expandafter + \expandafter{\csname abx@field@#1\endcsname}}} + +\protected\def\blx@imc@iffieldnums#1{% + \iffieldundef{#1} + {\@secondoftwo} + {\expandafter\expandafter + \expandafter\ifnumerals + \expandafter\expandafter + \expandafter{\csname abx@field@#1\endcsname}}} + +\protected\def\blx@imc@iffieldpages#1{% + \iffieldundef{#1} + {\@secondoftwo} + {\expandafter\expandafter + \expandafter\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} +\DeclarePageCommands{\pno\ppno} + +% *{<code>} + +\newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum} +\newcommand*{\NumcheckSetup}{\NumCheckSetup} + +% [<pagination>]{<string>} + +\newrobustcmd*{\blx@imc@mkpageprefix}[1][pagination]{% + \iffieldequalstr{#1}{none} + {\@firstofone} + {\begingroup + \def\blx@tempa{page}% + \iffieldundef{#1} + {} + {\iffieldbibstring{#1} + {\edef\blx@tempa{\thefield{#1}}} + {\blx@warning@entry{% + Unknown pagination type '\thefield{#1}'}}}% + \expandafter\endgroup + \expandafter\blx@mkpageprefix + \expandafter{\blx@tempa}}} + +\long\def\blx@mkpageprefix#1#2{% + \ifnumeral{#2} + {\bibstring{#1}\ppspace#2} + {\ifnumerals{#2} + {\bibstring{#1s}\ppspace#2} + {\begingroup + \def\pno{\bibstring{#1}}% + \def\ppno{\bibstring{#1s}}% + #2\endgroup}}} + +% [<pagination>]{<string>} + +\newrobustcmd*{\blx@imc@mkpagetotal}[1][bookpagination]{% + \begingroup + \def\blx@tempa{page}% + \iffieldundef{#1} + {} + {\iffieldequalstr{#1}{none} + {} + {\iffieldbibstring{#1} + {\edef\blx@tempa{\thefield{#1}}} + {\blx@warning@entry{% + Unknown pagination type '\thefield{#1}'}}}}% + \expandafter\endgroup + \expandafter\blx@mkpagetotal + \expandafter{\blx@tempa}} + +\long\def\blx@mkpagetotal#1#2{% + \begingroup + \ifnumeral{#2} + {\setbox\@tempboxa=\hbox{% + \blx@tempcnta0#2\relax + \ifnum\blx@tempcnta=\@ne + \aftergroup\@firstoftwo + \else + \aftergroup\@secondoftwo + \fi}% + {#2\ppspace\bibstring{#1}} + {#2\ppspace\bibstring{#1s}}} + {\def\pno{\bibstring{#1}}% + \def\ppno{\bibstring{#1s}}% + #2}% + \endgroup} + +% [<pagination>]{<string>} + +\protected\def\blx@imc@mkpagefirst{% + \@ifstar\blx@pagefirst@i\blx@pagefirst@ii} + +\long\def\blx@pagefirst@i#1{% + \blx@pagefirst@iii#1\bibrangedash&} + +\newcommand{\blx@pagefirst@ii}[2][pagination]{% + \begingroup + \edef\blx@tempa{\endgroup + \noexpand\mkpageprefix[#1]{% + \blx@pagefirst@iii#2\bibrangedash&}}% + \blx@tempa} + +\long\def\blx@pagefirst@iii#1\bibrangedash#2&{% + \blx@pagefirst@iv#1\textendash&} +\long\def\blx@pagefirst@iv#1\textendash#2&{% + \blx@pagefirst@v#1\textemdash&} +\long\def\blx@pagefirst@v#1\textemdash#2&{% + \blx@pagefirst@vi#1-&} +\long\def\blx@pagefirst@vi#1-#2&{#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@beglang + \blx@driver{#2}% + \blx@endlang + \endgroup} + +% Punctuation + +\protected\def\blx@initunit{% + \global\togglefalse{blx@block}% + \global\togglefalse{blx@unit}% + \global\togglefalse{blx@insert}% + \global\togglefalse{blx@lastins}% + \global\let\blx@unitpunct\newunitpunct + \blx@imc@resetpunctfont} + +\def\blx@nounit{% + \global\togglefalse{blx@lastins}} + +\def\blx@unitmark{23sp} + +\def\blx@begunit{% + \toggletrue{blx@tempa}% + \iftoggle{blx@insert} + {\iftoggle{blx@unit} + {\begingroup + \let\blx@begunit\@empty + \let\blx@endunit\@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 + \newblockpunct + \endgroup + \global\togglefalse{blx@block}% + \togglefalse{blx@tempa}} + {}} + {}% + \blx@postpunct + \blx@imc@resetpunctfont + \iftoggle{blx@tempa} + {} + {\global\togglefalse{blx@insert}}% + \blx@leavevmode + \@ifquotemarker + {} + {\penalty\@M + \hskip-\blx@unitmark\relax + \hskip\blx@unitmark\relax}% + \begingroup} + +\def\blx@endunit{% + \endgroup + \ifdim\lastskip=\blx@unitmark + \unskip\unskip\unpenalty + \global\togglefalse{blx@lastins}% + \else + \global\toggletrue{blx@insert}% + \global\toggletrue{blx@lastins}% + \fi} + +\protected\def\blx@imc@newblock{% + \global\toggletrue{blx@block}}% + +\protected\def\blx@imc@newunit{% + \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{% + \long\gdef\blx@unitpunct{#1}% + \global\toggletrue{blx@unit}}% + +\def\blx@setunit@i{% + \iftoggle{blx@lastins} + {\blx@setunit} + {\@gobble}} + +\protected\def\blx@imc@finentry{% + \unspace\finentrypunct + \blx@postpunct + \blx@initunit} + +\protected\def\blx@finentry@usedrv{% + \unspace + \blx@initunit} + +\protected\def\blx@finentry@inset{% + \blx@setunit\entrysetpunct + \global\toggletrue{blx@block}} + +\blx@regimcs{% + \thefield \strfield \thelist \thename \clearfield \clearlist + \clearname \restorefield \restorelist \restorename \ifciteseen + \ifentryseen \ifciteibid \ifciteidem \ifopcit \ifloccit + \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype + \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal + \iffieldundef \iffieldxref \iflistequalcs \iflistequals + \iflistsequal \iflistundef \iflistxref \ifmorenames \ifmoreitems + \ifnameequalcs \ifnameequals \ifnamesequal \ifnameundef \ifnamexref + \iffirstonpage \ifsamepage \savefield \savefieldcs \savelist + \savelistcs \savename \savenamecs \usedriver + \ifinteger \ifnumeral \ifnumerals \ifpages + \iffieldint \iffieldnum \iffieldnums \iffieldpages + \mkpageprefix \mkpagetotal \mkpagefirst + \newblock \newunit \setunit \finentry} + +\appto\blx@blxinit{% + \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\ifuseauthor{\iftoggle{blx@useauthor}}% + \def\ifuseeditor{\iftoggle{blx@useeditor}}% + \def\ifusetranslator{\iftoggle{blx@usetranslator}}% + \def\iffirstinits{\iftoggle{blx@firstinits}}% + \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}}} + +%% Global formatting hooks + +% capitalization + +% {<text>} + +\newcommand{\MakeCapital}{} +\begingroup +\catcode`\"=\active +\protected\long\gdef\MakeCapital#1{% + \begingroup + \def\do##1{\def##1{\blx@mkcp@single##1}}% + \abx@dosingleaccents + \def\do##1{\def##1{\blx@mkcp@double##1}}% + \abx@dodoubleaccents + \def\IeC{\blx@mkcp@single\IeC}% + \def\@tabacckludge##1{% + \expandafter\blx@mkcp@single\csname\string##1\endcsname}% + \ifnum\catcode`\"=\active + \def"##1{\blx@mkcp@single"\noexpand##1}% + \fi + \def\blx@mkcp@single{\noexpand\blx@mkcp@single\noexpand}% + \def\blx@mkcp@double{\noexpand\blx@mkcp@double\noexpand}% + \protected@edef\blx@tempa{% + \noexpand\ifblank{#1} + {\endgroup\unexpanded{#1}} + {\noexpand\blx@mkcp@parse#1}}% + \blx@tempa} +\endgroup + +\long\def\blx@mkcp@parse#1{% + \begingroup + \expandafter\def\expandafter\blx@tempa\expandafter{#1}% + \ifx\blx@tempa\IeC + \aftergroup\blx@mkcp@iec + \else\ifx\blx@tempa\blx@mkcp@single + \aftergroup\blx@mkcp@two + \else\ifx\blx@tempa\blx@mkcp@double + \aftergroup\blx@mkcp@three + \else + \aftergroup\blx@mkcp@case + \fi\fi\fi + \endgroup{#1}} + +\long\def\blx@mkcp@case#1{% + \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{#1}}% + \expandafter\endgroup\blx@tempa} + +\def\blx@mkcp@iec#1#2{\blx@mkcp@case{#1#2}} +\def\blx@mkcp@two#1#2#3{\blx@mkcp@case{#2#3}} +\def\blx@mkcp@three#1#2#3#4{\blx@mkcp@case{#2#3#4}} + +\let\blx@mkcp@single\@empty +\let\blx@mkcp@double\@empty + +\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@hyphenation + {\xifinlist\abx@field@hyphenation\blx@cmksc@lang + {\blx@mksc@ii} + {\@firstofone}} + {\blx@mksc@ii}} + +\long\def\blx@mksc@ii#1{% + \begingroup + \def\blx@tempa{\endgroup}% + \let\blx@tempb\@empty + \def\blx@tempc{\MakeCapital}% + \@tempswatrue + \blx@mksc@parse#1\blx@mksc@end} + +\def\blx@mksc@parse{% + \futurelet\@let@token\blx@mksc@eval} + +\def\blx@mksc@eval{% + \ifx\@let@token\blx@mksc@end + \blx@mksc@end + \fi + \ifx\@let@token\bgroup + \blx@mksc@group + \fi + \ifx\@let@token\@sptoken + \if@tempswa\blx@mksc@eject\fi + \blx@mksc@space + \fi + \if\relax\noexpand\@let@token + \blx@mksc@cs + \fi + \if-\noexpand\@let@token + \if@tempswa\blx@mksc@eject\fi + \fi + \blx@mksc@other&} + +\def\blx@mksc@end#1\blx@mksc@end{\fi + \blx@mksc@eject + \blx@tempa} + +\long\def\blx@mksc@group#1{\fi + \futurelet\@let@token\blx@mksc@ingroup#2&{#2}% + \blx@mksc@parse} + +\long\def\blx@mksc@ingroup#1{% + \if\relax\noexpand\@let@token + \blx@mksc@locase{{#2}}% + \else + \blx@mksc@nocase{{#2}}% + \fi} + +\def\blx@mksc@space{\def\blx@mksc@space##1&} +\@nameuse{blx@mksc@space} {\fi + \blx@mksc@anycase{ }% + \blx@mksc@parse} + +\long\def\blx@mksc@cs#1{\fi + \ifcat\noexpand~\noexpand#2% + \blx@mksc@locase{#2}% + \else + \blx@mksc@nocase{#2}% + \fi + \blx@mksc@parse} + +\long\def\blx@mksc@other{% + \blx@mksc@locase{#1}% + \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{% + \expandonce\blx@tempc{\expandonce\blx@tempb}}% + \let\blx@tempb\@empty + \fi + \if@tempswa + \def\blx@tempc{\MakeLowercase}% + \@tempswafalse + \fi} + +% {<language,language,...>} + +\newrobustcmd*{\DeclareCaseLangs}{% + \@ifstar + {\blx@defcaselangs} + {\global\let\blx@cmksc@lang\@empty + \blx@defcaselangs}} + +\def\blx@defcaselangs#1{% + \ifblank{#1} + {} + {\begingroup + \def\do##1{\listgadd\blx@cmksc@lang{##1}} + \docsvlist{#1}% + \endgroup}} + +\DeclareCaseLangs{% + american,british,canadian, + english,USenglish,UKenglish, + australian,newzealand} + +%% Main formatting commands + +% {<name>}{<definition>} + +\def\blx@defformat#1{% + \blx@safe@actives + \afterassignment\blx@rest@actives + \long\csdef{#1}} + +% {<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>}{<definiton>} + +\newrobustcmd*{\DeclareNameFormat}[2][*]{% + \blx@defformat{abx@nfd@#1@#2}##1##2##3##4##5##6##7##8} +\newrobustcmd*{\DeclareIndexNameFormat}[2][*]{% + \blx@defformat{abx@nid@#1@#2}##1##2##3##4##5##6##7##8} + +\newrobustcmd*{\DeclareListFormat}[2][*]{% + \blx@defformat{abx@lfd@#1@#2}##1} +\newrobustcmd*{\DeclareIndexListFormat}[2][*]{% + \blx@defformat{abx@lid@#1@#2}##1} + +\newrobustcmd*{\DeclareFieldFormat}[2][*]{% + \blx@defformat{abx@ffd@#1@#2}##1} +\newrobustcmd*{\DeclareIndexFieldFormat}[2][*]{% + \blx@defformat{abx@fid@#1@#2}##1} + +% [<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 + \def\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 + \def\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} + {\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{% + \c@listcount\@ne + \expandafter\c@listtotal\csname c@#3\endcsname + \ifblank{#1} + {\c@liststart\@ne} + {\ifnum#1<\@ne + \c@liststart\@ne + \else + \c@liststart#1\relax + \fi}% + \ifblank{#2} + {\ifnum\c@listtotal>\c@maxnames + \c@liststop\c@minnames + \else + \c@liststop\c@listtotal + \fi} + {\ifnum#2>\c@listtotal + \c@liststop\c@listtotal + \else + \c@liststop#2\relax + \fi}% + \def\currentname{#3}% + \letcs\blx@thedata{abx@name@#3}% + \let~\abx@btxnbspacefix + \blx@namecodes} + +\protected\def\abx@btxnbspacefix{% + \leavevmode\penalty\value{highnamepenalty}\space} + +% [<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}% + \expandafter\blx@nameparser\blx@thedata{}&% + \endgroup}}} + +% {<name1>}{<name2>}{...} + +\long\def\blx@nameparser#1{% + \ifblank{#1} + {\blx@namebreak} + {\ifnum\c@listcount<\c@liststart + \else + \blx@theformat#1% + \fi + \advance\c@listcount\@ne + \ifnum\c@listcount>\c@liststop + \expandafter\blx@namebreak + \fi + \blx@nameparser}} + +\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{% + \c@listcount\@ne + \expandafter\c@listtotal\csname c@#3\endcsname + \ifblank{#1} + {\c@liststart\@ne} + {\ifnum#1<\@ne + \c@liststart\@ne + \else + \c@liststart#1\relax + \fi}% + \ifblank{#2} + {\ifnum\c@listtotal>\c@maxitems + \c@liststop\c@minitems + \else + \c@liststop\c@listtotal + \fi} + {\ifnum#2>\c@listtotal + \c@liststop\c@listtotal + \else + \c@liststop#2\relax + \fi}% + \def\currentlist{#3}% + \letcs\blx@thedata{abx@list@#3}} + +% [<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\long\def\blx@imc@entrydata#1{% + \blx@sanitizekeys\blx@imc@entrydata@i{#1}} + +\protected\long\def\blx@imc@entrydata@i#1#2{% + \blx@ifdata{#1} + {\begingroup + \blx@resetdata + \blx@getdata{#1}% + \blx@entrysetcount + \blx@options + \addtocounter{instcount}\@ne + \blx@execute + \blx@beglang#2\blx@endlang + \endgroup} + {}} + +\protected\def\blx@imc@entryset#1#2{% + \blx@imc@iffieldundef{entrykey} + {} + {\begingroup + \long\def\blx@set@precode{#1}% + \long\def\blx@set@postcode{#2}% + \let\finentry\blx@finentry@inset + \let\do\blx@entryset + \blx@imc@docsvfield{entryset}% + \endgroup}} + +\def\blx@entryset#1{% + \blx@ifdata{#1} + {\begingroup + \begingroup + \blx@getdata{#1}% + \edef\blx@tempa{\endgroup + \def\noexpand\abx@field@entrytype{\abx@field@entrytype}}% + \blx@tempa + \def\abx@field@entrysetcount{1}% + \blx@set@precode + \blx@driver{\blx@imc@thefield{entrytype}}% + \blx@set@postcode + \endgroup} + {}% + \let\do\blx@entryset@i} + +\def\blx@entryset@i#1{% + \blx@imc@entrydata{#1}{% + \blx@set@precode + \blx@driver{\blx@imc@thefield{entrytype}} + \blx@set@postcode}} + +\blx@regimcs{% + \printtext \printfield \printlist \printnames \printfile + \indexfield \indexlist \indexnames \entrydata \entryset} + +%% Localization + +% [<wrapper>]{<string>} + +\newrobustcmd*{\blx@imc@bibstring}[2][\@firstofone]{% + \blx@begunit + \blx@hyphenreset + \let\bibstring\blx@imc@bibxstring + \lowercase{\edef\blx@tempa{#2}}% + \ifcsundef{abx@str@\blx@tempa} + {\blx@warn@nostring{\blx@tempa}} + {\blx@imc@ifcapital + {#1{\MakeCapital{\csuse{abx@str@\blx@tempa}}}} + {#1{\csuse{abx@str@\blx@tempa}}}}% + \blx@endunit} + +% [<wrapper>]{<string>} + +\newrobustcmd*{\blx@imc@bibcpstring}[2][\@firstofone]{% + \blx@begunit + \blx@hyphenreset + \let\bibstring\blx@imc@bibxstring + \lowercase{\edef\blx@tempa{#2}}% + \ifcsundef{abx@str@\blx@tempa} + {\blx@warn@nostring{\blx@tempa}} + {#1{\MakeCapital{\csuse{abx@str@\blx@tempa}}}}% + \blx@endunit} + +% [<wrapper>]{<string>} + +\newrobustcmd*{\blx@imc@biblcstring}[2][\@firstofone]{% + \blx@begunit + \blx@hyphenreset + \let\bibstring\blx@imc@bibxstring + \lowercase{\edef\blx@tempa{#2}}% + \ifcsundef{abx@str@\blx@tempa} + {\blx@warn@nostring{\blx@tempa}} + {#1{\MakeLowercase{\csuse{abx@str@\blx@tempa}}}}% + \blx@endunit} + +% [<wrapper>]{<string>} + +\newrobustcmd*{\blx@imc@bibucstring}[2][\@firstofone]{% + \blx@begunit + \blx@hyphenreset + \let\bibstring\blx@imc@bibxstring + \lowercase{\edef\blx@tempa{#2}}% + \ifcsundef{abx@str@\blx@tempa} + {\blx@warn@nostring{\blx@tempa}} + {#1{\MakeUppercase{\csuse{abx@str@\blx@tempa}}}}% + \blx@endunit} + +% {<string>} + +\def\blx@imc@bibxstring#1{% + \ifcsundef{abx@str@#1} + {\protect\blx@warn@nostring{#1}} + {\csuse{abx@str@#1}}} + +% {<string>}{<true>}{<false>} + +\def\blx@imc@ifbibstring#1{% + \ifcsundef{abx@str@\detokenize{#1}} + {\@secondoftwo} + {\@firstoftwo}} + +\def\blx@imc@ifbibxstring#1{% + \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 \bibxstring \bibcpstring \biblcstring + \bibucstring \ifbibstring \ifbibxstring \iffieldbibstring} + +\appto\blx@blxinit{% + \appto\@uclclist{% + \bibstring\bibucstring + \biblcstring\bibstring + \bibcpstring\bibucstring + \biblcstring\bibcpstring + \biblcstring\bibucstring}} + +\def\abx@dostrings{% + \do{bibliography}% + \do{references}% + \do{shorthands}% + \do{editor}% + \do{editors}% + \do{compiler}% + \do{compilers}% + \do{redactor}% + \do{redactors}% + \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{byeditor} + \do{bycompiler}% + \do{byredactor}% + \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{jourvol}% + \do{jourser}% + \do{newseries}% + \do{oldseries}% + \do{edition}% + \do{reprint}% + \do{reprintof}% + \do{reprintas}% + \do{page}% + \do{pages}% + \do{column}% + \do{columns}% + \do{line}% + \do{lines}% + \do{verse}% + \do{verses}% + \do{section}% + \do{sections}% + \do{paragraph}% + \do{paragraphs}% + \do{in}% + \do{inseries}% + \do{ofseries}% + \do{number}% + \do{chapter}% + \do{mathesis}% + \do{phdthesis}% + \do{resreport}% + \do{techreport}% + \do{software}% + \do{datacd}% + \do{audiocd}% + \do{version}% + \do{doi}% + \do{url}% + \do{urlseen}% + \do{file}% + \do{inpress}% + \do{submitted}% + \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{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{langdanish}% + \do{langdutch}% + \do{langenglish}% + \do{langfrench}% + \do{langgerman}% + \do{langgreek}% + \do{langitalian}% + \do{langlatin}% + \do{langnorwegian}% + \do{langportuguese}% + \do{langspanish}% + \do{langswedish}% + \do{fromamerican}% + \do{frombrazilian}% + \do{fromdanish}% + \do{fromdutch}% + \do{fromenglish}% + \do{fromfrench}% + \do{fromgerman}% + \do{fromgreek}% + \do{fromitalian}% + \do{fromlatin}% + \do{fromnorwegian}% + \do{fromportuguese}% + \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]{% + \begingroup + \let\do\blx@newstring + \docsvlist{#1}% + \endgroup} + +\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{\csdef{abx@str@#1}} +\def\blx@lbx@defstring#1#2{% + \expandafter\blx@lbx@thedef\csname abx@str@#1\endcsname#2} +\def\blx@lbx@longdef#1#2#3{\def#1{#2}} +\def\blx@lbx@shortdef#1#2#3{\def#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@str@##1}}% + \abx@dostrings + \csuse{abx@strings@#1}% + \setkeys{blx@lbx}{#2}% + \global\cslet{abx@strings@#1}\@empty + \def\do##1{% + \ifcsundef{abx@str@##1} + {\csxappto{abx@strings@#1}{% + \undef\expandafter\noexpand\csname abx@str@##1\endcsname}} + {\csxappto{abx@strings@#1}{% + \def\expandafter\noexpand\csname abx@str@##1\endcsname{% + \csexpandonce{abx@str@##1}}}}}% + \abx@dostrings + \csgappto{abx@strings@#1}{% + \let\bibname\abx@str@bibliography + \let\refname\abx@str@references + \let\losname\abx@str@shorthands}} + +% {<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.lbx}{language '#1'}}} + +% {<mapping>}{<language>} + +\def\blx@lbxinput@i#1#2{% + \global\csundef{blx@lng@#2}% + \IfFileExists{#1.lbx} + {\blx@lbxinput@ii{#2}{#1.lbx}{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}{#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 + \blx@lbxinput@iii{strings}{#1}% + \blx@lbxinput@iii{extras}{#1}% + \blx@lbxinput@iii{noextras}{#1}% + \blx@lbxinput@iii{hyph}{#1}} + {\aftergroup\@firstoftwo} + {\aftergroup\@secondoftwo}% + \egroup} + +\def\blx@lbxinput@iii#1#2{% + \ifcsdef{blx@hook@#1@#2} + {\csuse{blx@hook@#1@#2}% + \global\csundef{blx@hook@#1@#2}} + {}} + +% {<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]{% + \printtext{% + \csuse{mkbibdate#1}{#2year}{#2month}{#2day}% + \iffieldundef{#2endyear} + {} + {\iffieldequalstr{#2endyear}{} + {\mbox{\bibdatedash}} + {\bibdatedash + \csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}}}} + +\newrobustcmd*{\mkbibrangetrunc}[2]{% + \printtext{% + \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]{% + \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]{% + \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*{\mkbibdatelong}[3]{} +\newrobustcmd*{\mkbibdateshort}[3]{} +\newrobustcmd*{\bibrangedash}{\textendash} +\newrobustcmd*{\bibdatedash}{\bibrangedash} +\newrobustcmd*{\finalandcomma}{} +\newrobustcmd*{\mkbibordinal}[1]{#1} +\newrobustcmd*{\mkbibmascord}{\mkbibordinal} +\newrobustcmd*{\mkbibfemord}{\mkbibordinal} +\newrobustcmd*{\mkbibmonth}[1]{% + \ifcase0#1\relax + 0\blx@warning@entry{Month out of range}% + \or\bibstring{january}% + \or\bibstring{february}% + \or\bibstring{march}% + \or\bibstring{april}% + \or\bibstring{may}% + \or\bibstring{june}% + \or\bibstring{july}% + \or\bibstring{august}% + \or\bibstring{september}% + \or\bibstring{october}% + \or\bibstring{november}% + \or\bibstring{december}% + \else + #1\blx@warning@entry{Month out of range}% + \fi}% + +\protected\def\blx@imc@printdate{} +\protected\def\blx@imc@printdateextra{} +\protected\def\blx@imc@printurldate{} +\protected\def\blx@imc@printeventdate{} +\protected\def\blx@imc@printorigdate{} + +\def\blx@imc@stripzeros#1{\number\numexpr0#1\relax} +\def\blx@imc@mkdatezeros#1{#1} + +\blx@regimcs{% + \printdate \printdateextra \printurldate \printeventdate + \printorigdate \stripzeros \mkdatezeros} + +% {<language>}{<strings>} + +\def\blx@maplang#1#2{% + \csxappto{captions#1}{% + \expandafter\noexpand\csname abx@strings@#2\endcsname}% + \csxappto{extras#1}{% + \noexpand\blx@resetpunct + \expandafter\noexpand\csname abx@extras@#2\endcsname}% + \csxappto{noextras#1}{% + \noexpand\blx@resetpunct + \expandafter\noexpand\csname abx@noextras@#2\endcsname}} + +%% Babel interface + +\let\blx@beglang\begingroup +\let\blx@endlang\endgroup +\let\blx@hook@endlang\@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} + +\def\blx@mkbabel{% + \patchcmd\bbl@set@language + {\select@language} + {\blx@langsetup\languagename\select@language}% + {\ifundef\blx@thelangenv + {} + {\def\blx@beglang{% + \begingroup + \blx@imc@iffieldundef{hyphenation} + {} + {\def\blx@endlang{% + \blx@hook@endlang + \csname end\blx@thelangenv\endcsname + \endgroup}% + \csname\blx@thelangenv\expandafter\endcsname + \expandafter{\abx@field@hyphenation}}}}% + \blx@langsetup\bbl@main@language} + {\blx@err@patch{'babel' package}% + \blx@mknobabel}} + +\def\blx@mknobabel{% + \blx@lbxinput{\blx@languagename} + {} + {\blx@err@nolang{\blx@languagename}}} + +%% Bibtex data interface + +\def\abx@donames{% + \do{labelname}% + \do{author}% + \do{shortauthor}% + \do{editor}% + \do{editora}% + \do{editorb}% + \do{editorc}% + \do{shorteditor}% + \do{bookauthor}% + \do{translator}% + \do{annotator}% + \do{commentator}% + \do{introduction}% + \do{foreword}% + \do{afterword}% + \do{holder}% + \do{namea}% + \do{nameb}% + \do{namec}% +} + +\def\abx@dolists{% + \do{institution}% + \do{language}% + \do{location}% + \do{organization}% + \do{origlocation}% + \do{origpublisher}% + \do{pageref}% + \do{publisher}% + \do{lista}% + \do{listb}% + \do{listc}% + \do{listd}% + \do{liste}% + \do{listf}% +} + +\def\abx@dofields{% + \do{entrykey}% + \do{entrytype}% + \do{entrysubtype}% + \do{entryset}% + \do{entrysetcount}% + \do{crossref}% + \do{xref}% + \do{hyphenation}% + \do{keywords}% + \do{authortype}% + \do{editortype}% + \do{editoratype}% + \do{editorbtype}% + \do{editorctype}% + \do{nameatype}% + \do{namebtype}% + \do{namectype}% + \do{addendum}% + \do{booktitle}% + \do{booksubtitle}% + \do{booktitleaddon}% + \do{chapter}% + \do{doi}% + \do{edition}% + \do{eid}% + \do{eprint}% + \do{eprinttype}% + \do{file}% + \do{gender}% + \do{howpublished}% + \do{indextitle}% + \do{indexsorttitle}% + \do{isan}% + \do{isbn}% + \do{ismn}% + \do{isrn}% + \do{issn}% + \do{issue}% + \do{iswc}% + \do{issuetitle}% + \do{issuesubtitle}% + \do{journaltitle}% + \do{journalsubtitle}% + \do{label}% + \do{labelalpha}% + \do{extraalpha}% + \do{labelnumber}% + \do{labeltitle}% + \do{labelyear}% + \do{extrayear}% + \do{library}% + \do{localnumber}% + \do{mainsubtitle}% + \do{maintitle}% + \do{maintitleaddon}% + \do{nameaddon}% + \do{namehash}% + \do{fullhash}% + \do{note}% + \do{number}% + \do{day}% + \do{month}% + \do{year}% + \do{endday}% + \do{endmonth}% + \do{endyear}% + \do{origlanguage}% + \do{origtitle}% + \do{origday}% + \do{origmonth}% + \do{origyear}% + \do{origendday}% + \do{origendmonth}% + \do{origendyear}% + \do{reprinttitle}% + \do{pages}% + \do{pagetotal}% + \do{pagination}% + \do{bookpagination}% + \do{part}% + \do{pubstate}% + \do{series}% + \do{shorthand}% + \do{shorthandintro}% + \do{shortjournal}% + \do{shortseries}% + \do{shorttitle}% + \do{sortinit}% + \do{subtitle}% + \do{title}% + \do{titleaddon}% + \do{eventtitle}% + \do{eventday}% + \do{eventmonth}% + \do{eventyear}% + \do{eventendday}% + \do{eventendmonth}% + \do{eventendyear}% + \do{type}% + \do{url}% + \do{urlday}% + \do{urlmonth}% + \do{urlyear}% + \do{urlendday}% + \do{urlendmonth}% + \do{urlendyear}% + \do{venue}% + \do{version}% + \do{volume}% + \do{volumes}% + \do{abstract}% + \do{annotation}% + \do{usera}% + \do{userb}% + \do{userc}% + \do{userd}% + \do{usere}% + \do{userf}% + \do{verba}% + \do{verbb}% + \do{verbc}% +} + +\def\abx@dobooleans{% + \do{singletitle}% +} + +\def\do#1{% + \newcounter{#1}% + \csedef{the#1}{\noexpand\the\expandonce{\csname c@#1\endcsname}}% + \appto\abx@dobooleans{\do{more#1}}} +\abx@donames +\abx@dolists +\def\do#1{\newtoggle{abx@bool@#1}} +\abx@dobooleans + +\protected\def\blx@resetdata{% + \let\blx@savedo\do + \let\do\blx@imc@clearname + \abx@donames + \let\do\blx@imc@clearlist + \abx@dolists + \let\do\blx@imc@clearfield + \abx@dofields\do{execute}\do{options}% + \def\do##1{\togglefalse{abx@bool@##1}}% + \abx@dobooleans + \c@uniquename\z@ + \let\do\blx@savedo} + +% {<code>} + +\protected\long\def\blx@bbl@preamble#1{% + \gappto\abx@preamble{#1}#1} + +% {<message>} + +\protected\def\blx@bbl@warn#1{% + \begingroup + \def\item{\MessageBreak-\space}% + \def\break{\MessageBreak\space\space}% + \edef\blx@tempa{% + \ifnum\blx@backend=\blx@backend@biber + Biber + \else + BibTeX + \fi + reported the following issues% + \ifundef\abx@field@entrykey + {} + {\MessageBreak with '\abx@field@entrykey'}% + :#1}% + \blx@warning@noline{\blx@tempa}% + \endgroup} + +% {<field>}{<value>} + +\protected\long\def\blx@bbl@fielddef#1#2{% + \csxappto\blx@bbl@data{% + \def\expandonce{\csname abx@field@#1\endcsname}% + {\unexpanded{#2}}}} + +\protected\long\def\blx@bbl@fieldedef#1#2{% + \csxappto\blx@bbl@data{% + \def\expandonce{\csname abx@field@#1\endcsname}{#2}}} + +\protected\long\def\blx@bbl@stringdef#1#2{% + \csxappto\blx@bbl@data{% + \def\expandonce{\csname abx@field@#1\endcsname}% + {\detokenize{#2}}}} + +% {<field>} + +\protected\def\blx@bbl@verbdef#1{% + \begingroup + \let\verb\blx@bbl@verbadd + \def\blx@tempa{#1}% + \let\blx@tempb\@empty} + +\protected\def\blx@bbl@verbend{% + \csxappto\blx@bbl@data{% + \def\expandonce{\csname abx@field@\blx@tempa\endcsname}% + {\blx@tempb}}% + \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\blx@tempb{\blx@tempb\detokenize{#1}}} +\endgroup + +% {<counter>}{<value>} + +\protected\long\def\blx@bbl@countdef#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{% + \csxappto\blx@bbl@data{% + \csname c@#1\endcsname#2\relax + \def\expandonce{\csname abx@list@#1\endcsname}% + {\unexpanded{#3}}}} + +% {<name>}{<itemcount>}{<value>} + +\protected\def\blx@bbl@namedef#1#2#3{% + \csxappto\blx@bbl@data{% + \csname c@#1\endcsname#2\relax + \def\expandonce{\csname abx@name@#1\endcsname}% + {\unexpanded{#3}}}} + +% {<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@ + \let\do\blx@bbl@set@i + \expandafter\docsvlist\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}}} + +% {<entrykey>} + +\protected\def\blx@bbl@xref#1{% + \ifcsdef{blx@refp@\the\c@refsection @#1} + {} + {\listcsgadd{blx@refs@\the\c@refsection}{#1}}% + \listcsxadd{blx@refp@\the\c@refsection @#1}{\abx@field@entrykey}% + \csxdef{blx@refc@\the\c@refsection @\abx@field@entrykey}{#1}} + +\def\blx@addxref#1{% + \blx@ifdata{#1} + {\begingroup + \def\do##1{% + \csgappto{blx@data@\the\c@refsection @##1}{% + \def\abx@field@xref{#1}}}% + \dolistcsloop{blx@refp@\the\c@refsection @#1}% + \endgroup} + {}% + \global\csundef{blx@refp@\the\c@refsection @#1}} + +% {<keyword>,...} + +\protected\def\blx@bbl@keyw#1{% + \iftoggle{blx@skipbib} + {} + {\def\do{\blx@addkeyword{\abx@field@entrykey}}% + \docsvlist{#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 + \let\do\blx@bbl@options@i + \docsvlist{#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@bib@#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}}}}} + +% \blx@data@<section>@<entrykey> data hook +% key -> data +% \blx@sort@<section> all entries, sorted +% section -> keys [internal list] +% \blx@sbib@<section> all entries in bibliography, sorted +% section -> keys [internal list] +% \blx@bsee@<section> seen citations, document body +% section -> keys [internal list] +% \blx@fsee@<section> seen citations, footnotes +% section -> keys [internal list] +% \blx@type@<section>@<entrytype> type hash +% type -> keys [internal list] +% \blx@subt@<section>@<entrytype> subtype hash +% subtype -> keys [internal list] +% \blx@segm@<section>@<segment> segment hash +% segment -> keys [internal list] +% \blx@keyw@<section>@<keyword> keyword hash +% keyword -> keys [internal list] +% \blx@losh@<section> shorthand hash +% section -> keys [internal list] +% \blx@catg@<category> category hash, global +% category -> keys [internal list] +% \blx@setp@<section>@<entrykey> parent -> child mapping (entry sets) +% key -> key,key,... [csv list] +% \blx@setc@<section>@<entrykey> child -> parent mapping (entry sets) +% key -> key +% \blx@seti@<section>@<entrykey> child -> index mapping (entry sets) +% key -> index +% \blx@pref@<section>@<entrykey> pageref hook, temporary +% key -> pages [internal list] +% \blx@refs@<section> xref hash, temporary +% section -> parents [internal list] +% \blx@refp@<section>@<entrykey> parent -> child mapping (xrefs), temporary +% key -> keys [internal list] +% \blx@refc@<section>@<entrykey> child -> parent mapping (xrefs) +% key -> key [internal list] + +\def\blx@ifdata#1{% + \ifcsdef{blx@data@\the\c@refsection @#1}} + +\def\blx@getdata#1{% + \csuse{blx@data@\the\c@refsection @#1}} + +\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@getdata{#1}}% + \ifcsdef{blx@seti@\the\c@refsection @#1} + {\letcs\abx@field@entrysetcount{blx@seti@\the\c@refsection @#1}} + {}} + +\def\blx@getdata@cite@i#1#2{% + \blx@getdata{#1}% + \def\abx@field@entrysetcount{#2}} + +\def\blx@execute{% + \blx@imc@thefield{execute}} + +\def\blx@options{% + \blx@imc@iffieldundef{options} + {} + {\begingroup + \def\blx@tempa{\endgroup\setkeys{blx@opt@bib}}% + \expandafter\blx@tempa + \expandafter{\abx@field@options}}} + +\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}} + {}} + {}} + +% {<entrykey>}{<type>}{<options>} + +\protected\def\blx@bbl@entry#1#2#3{% + \begingroup + \edef\abx@field@entrykey{\detokenize{#1}}% + \blx@bbl@options{#3}\blx@options + \edef\blx@bbl@data{blx@data@\the\c@refsection @\abx@field@entrykey}% + \csuse\blx@bbl@data + \cslet\blx@bbl@data\@empty + \blx@bbl@fieldedef{entrykey}{\abx@field@entrykey}% + \blx@bbl@fielddef{entrytype}{#2}% + \blx@imc@iffieldundef{options} + {} + {\blx@bbl@fieldedef{options}{\expandonce\abx@field@options}}} + +\protected\def\blx@bbl@endentry{% + \csuse\blx@bbl@data + \iftoggle{blx@setonly} + {\global\toggletrue{blx@addset}% + \toggletrue{blx@skipbib}% + \toggletrue{blx@skiplos}% + \toggletrue{blx@skiplab}} + {\listcsxadd{blx@sort@\the\c@refsection}{\abx@field@entrykey}}% + \iftoggle{blx@skipbib} + {} + {\listcsxadd{blx@sbib@\the\c@refsection}{\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}} + {}% + \ifcsundef{blx@pref@\the\c@refsection @\abx@field@entrykey} + {} + {\blx@addpageref{\abx@field@entrykey}}}% + \iftoggle{blx@skiplos} + {} + {\blx@bbl@shorthand}% + \iftoggle{blx@skiplab} + {} + {\iftoggle{blx@labelnumber} + {\blx@bbl@labelnumber} + {}% + \iftoggle{blx@labelalpha} + {\blx@bbl@labelalpha} + {}% + \iftoggle{blx@labelyear} + {\blx@bbl@labelyear} + {}}% + \blx@bbl@labelname + \blx@bbl@titles + \blx@bbl@hooks + \endgroup} + +\def\blx@addset{% + \begingroup + \letcs\blx@tempa{blx@sort@\the\c@refsection}% + \global\cslet{blx@sort@\the\c@refsection}\@empty + \let\do\blx@addset@i + \dolistloop\blx@tempa + \endgroup} + +\def\blx@addset@i#1{% + \listcsgadd{blx@sort@\the\c@refsection}{#1}% + \ifcsdef{blx@setp@\the\c@refsection @#1} + {\begingroup + \let\do\blx@addset@ii + \expandafter\expandafter\expandafter\docsvlist + \expandafter\expandafter\expandafter{% + \csname blx@setp@\the\c@refsection @#1\endcsname}% + \endgroup} + {}} + +\def\blx@addset@ii#1{% + \listcsgadd{blx@sort@\the\c@refsection}{#1}} + +\def\blx@bbl@shorthand{% + \ifundef\abx@field@shorthand + {} + {\blx@setlabwidth{\shorthandwidth}{% + \csuse{abx@ffd@*@shorthandwidth}{\abx@field@shorthand}}}} + +\def\blx@bbl@labelnumber{% + \ifundef\abx@field@shorthand + {\ifundef\abx@field@localnumber + {\csnumgdef{blx@labelnumber@\the\c@refsection}{% + \csuse{blx@labelnumber@\the\c@refsection}+1}% + \edef\abx@field@localnumber{% + \csuse{blx@labelnumber@\the\c@refsection}}} + {}% + \blx@bbl@fieldedef{labelnumber}{\abx@field@localnumber}% + \iftoggle{blx@skipbib} + {} + {\blx@setlabwidth{\labelnumberwidth}{% + \csuse{abx@ffd@*@labelnumberwidth}{\abx@field@localnumber}}}} + {\csgappto\blx@bbl@data{% + \let\abx@field@labelnumber\abx@field@shorthand}% + \iftoggle{blx@skipbib} + {} + {\blx@setlabwidth{\labelnumberwidth}{% + \csuse{abx@ffd@*@labelnumberwidth}{\abx@field@shorthand}}}}} + +\def\blx@bbl@labelalpha{% + \ifundef\abx@field@shorthand + {\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}{% + \csuse{abx@ffd@*@labelalpha}{\abx@field@labelalpha}% + \ifundef\abx@field@extraalpha + {} + {\csuse{abx@ffd@*@extraalpha}{\abx@field@extraalpha}}}}}}} + {\csgappto\blx@bbl@data{% + \let\abx@field@labelalpha\abx@field@shorthand}% + \iftoggle{blx@skipbib} + {} + {\blx@setlabwidth{\labelalphawidth}{% + \csuse{abx@ffd@*@labelalphawidth}{\abx@field@shorthand}}}}} + +\def\blx@bbl@labelyear{% + \ifundef\abx@field@extrayear + {} + {\ifnum\abx@field@extrayear>\c@maxextrayear + \global\c@maxextrayear\abx@field@extrayear\relax + \fi}} + +\def\blx@bbl@labelname{% + \iftoggle{blx@useauthor} + {\ifundef\abx@name@shortauthor + {\ifundef\abx@name@author + {\blx@bbl@labelname@i} + {\csgappto\blx@bbl@data{% + \c@labelname\c@author + \let\abx@name@labelname\abx@name@author}% + \iftoggle{abx@bool@moreauthor} + {\csgappto\blx@bbl@data{% + \toggletrue{abx@bool@morelabelname}}} + {}}} + {\csgappto\blx@bbl@data{% + \c@labelname\c@shortauthor + \let\abx@name@labelname\abx@name@shortauthor}% + \iftoggle{abx@bool@moreshortauthor} + {\csgappto\blx@bbl@data{% + \toggletrue{abx@bool@morelabelname}}} + {}}} + {\blx@bbl@labelname@i}} + +\def\blx@bbl@labelname@i{% + \iftoggle{blx@useeditor} + {\ifundef\abx@name@shorteditor + {\ifundef\abx@name@editor + {\blx@bbl@labelname@ii} + {\csgappto\blx@bbl@data{% + \c@labelname\c@editor + \let\abx@name@labelname\abx@name@editor}% + \iftoggle{abx@bool@moreeditor} + {\csgappto\blx@bbl@data{% + \toggletrue{abx@bool@morelabelname}}} + {}}} + {\csgappto\blx@bbl@data{% + \c@labelname\c@shorteditor + \let\abx@name@labelname\abx@name@shorteditor}% + \iftoggle{abx@bool@moreshorteditor} + {\csgappto\blx@bbl@data{% + \toggletrue{abx@bool@morelabelname}}} + {}}} + {\blx@bbl@labelname@ii}} + +\def\blx@bbl@labelname@ii{% + \iftoggle{blx@usetranslator} + {\ifundef\abx@name@translator + {} + {\csgappto\blx@bbl@data{% + \c@labelname\c@translator + \let\abx@name@labelname\abx@name@translator}% + \iftoggle{abx@bool@moretranslator} + {\csgappto\blx@bbl@data{% + \toggletrue{abx@bool@morelabelname}}} + {}}} + {}} + +\def\blx@bbl@titles{% + \ifundef\abx@field@shorttitle + {\csgappto\blx@bbl@data{% + \let\abx@field@labeltitle\abx@field@title}} + {\csgappto\blx@bbl@data{% + \let\abx@field@labeltitle\abx@field@shorttitle}}% + \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@warn + \let\entry\blx@bbl@entry + \let\endentry\blx@bbl@endentry + \let\lossort\blx@bbl@lossort + \let\endlossort\blx@bbl@endlossort + \let\set\blx@bbl@set + \let\inset\blx@bbl@inset + \let\xref\blx@bbl@xref + \let\keyw\blx@bbl@keyw + \let\name\blx@bbl@namedef + \let\list\blx@bbl@listdef + \let\field\blx@bbl@fielddef + \let\strng\blx@bbl@stringdef + \let\count\blx@bbl@countdef + \let\true\blx@bbl@booltrue + \let\false\blx@bbl@boolfalse + \let\verb\blx@bbl@verbdef + \let\endverb\blx@bbl@verbend} + +\def\blx@bblend{% + \ifcsdef{blx@refs@\the\c@refsection} + {\begingroup + \let\do\blx@addxref + \dolistcsloop{blx@refs@\the\c@refsection}% + \endgroup + \global\csundef{blx@refs@\the\c@refsection}} + {}% + \iftoggle{blx@addset} + {\blx@addset + \global\togglefalse{blx@addset}} + {}} + +% {<instcount>}{<entrykey>}{<refsection>}{<labelnumber>} + +\protected\def\blx@aux@number#1#2#3#4{% + \begingroup + \edef\blx@bbl@data{blx@data@#3@\detokenize{#2}}% + \blx@bbl@fielddef{localnumber}{#4}% + \csgdef{blx@labelnumber@\the\c@refsection}{#4}% + \blx@addchecksum{\the\numexpr#1+#4}% + \endgroup} + +\AtEndDocument{% + \def\abx@aux@number#1#2#3#4{\blx@addchecksum{\the\numexpr#1+#4}}} + +\def\blx@addlabelnumber{% + \iftoggle{blx@skiplab} + {} + {\begingroup + \ifundef\abx@field@shorthand + {\ifundef\abx@field@localnumber + {\csnumgdef{blx@labelnumber@\the\c@refsection}{% + \csuse{blx@labelnumber@\the\c@refsection}+1}% + \blx@auxwrite\@mainaux{% + \string\abx@aux@number{\the\c@instcount}{\abx@field@entrykey}% + {\the\c@refsection}{\csuse{blx@labelnumber@\the\c@refsection}}}% + \edef\blx@bbl@data{blx@data@\the\c@refsection @\abx@field@entrykey}% + \blx@bbl@fieldedef{localnumber}{\csuse{blx@labelnumber@\the\c@refsection}}} + {}} + {}% + \endgroup}} + +\def\blx@bbl@lossort{% + \begingroup + \def\key##1{\listcsxadd{blx@losh@\the\c@refsection}{\detokenize{##1}}}} +\let\blx@bbl@endlossort\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 + \iftoggle{blx@recode} + {\ifdef\inpenc@prehook % inputenc 2006/05/05 v1.1b + {\inpenc@prehook{}% + \inpenc@posthook{}} + {}% + \inputencoding\blx@bibencoding} + {}% + \blx@info@noline{Trying to load bibliographic data..}% + \blx@blxinit + \blx@bblfile + \blx@bblsecs + \endgroup + \iftoggle{blx@recode} + {\ifdef\@enablequotes + {\@enablequotes} + {}} + {}} + +\def\blx@bblfile{% + \blx@secinit + \begingroup + \blx@bblstart + \ifnum\c@refsection>\z@ + \edef\blx@auxfile{\jobname\the\c@refsection\blxauxsuffix}% + \else + \edef\blx@auxfile{\jobname}% + \fi + \blx@ifsigned{\blx@auxfile}{bbl} + {\InputIfFileExists{\blx@auxfile.bbl} + {\blx@info@noline{... file '\blx@auxfile.bbl' found}} + {\blx@info@noline{... file '\blx@auxfile.bbl' not found}% + \typeout{No file \blx@auxfile.bbl.}}} + {}% + \blx@bblend + \endgroup + \csnumgdef{blx@labelnumber@\the\c@refsection}{0}% + \iftoggle{blx@recode}{\blx@recode}{}} + +\def\blx@bblsecs{% + \advance\c@refsection\@ne + \ifnum\c@refsection>\blx@maxsection + \else + \blx@bblfile + \expandafter\blx@bblsecs + \fi} + +\def\blx@recode{% + \begingroup + \abx@hook@recode + \let\protect\@unexpandable@protect + \def\do##1{\cslet{abx@name@##1}\relax}% + \abx@donames + \def\do##1{\cslet{abx@list@##1}\relax}% + \abx@dolists + \def\do##1{\cslet{abx@field@##1}\relax}% + \abx@dofields\do{options}% + \long\def\abx@field@execute##1{% + \unexpanded{\abx@field@execute{##1}}}% + \csuse{abx@preamble}% + \def\do##1{% + \csxdef{blx@data@\the\c@refsection @##1}{% + \csuse{blx@data@\the\c@refsection @##1}}}% + \dolistcsloop{blx@sort@\the\c@refsection}% + \endgroup} + +\def\abx@hook@recode{% + \ifdef\@enablequotes{\@enablequotes}{}% + \def\IeC##1{\unexpanded{\IeC{##1}}}% + \let~\relax +} + +%% Bibliography + +% {<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]{% + \ifblank{#2} + {\blx@error + {Invalid filter} + {The specified filter code is invalid}} + {\long\csdef{blx@filter@#1}{#2}}} + +% options + +\define@key{blx@bib}{section}{% + \ifcsundef{blx@sbib@#1} + {\blx@err@nosec{#1}} + {\c@refsection#1\relax + \iftoggle{blx@tempa} + {\letcs\blx@tempa{blx@sbib@\the\c@refsection}} + {\blx@err@secfirst}}} + +\define@key{blx@los}{section}{% + \ifcsundef{blx@sbib@#1} + {\blx@err@nosec{#1}} + {\c@refsection#1\relax + \iftoggle{blx@tempa} + {\letcs\blx@tempa{blx@losh@\the\c@refsection}} + {\blx@err@secfirst}}} + +\define@key{blx@bbg}{section}{% + \ifcsundef{blx@sbib@#1} + {\blx@err@nosec{#1}} + {\c@refsection#1\relax}} + +\define@key{blx@bbc}{section}{% + \ifcsundef{blx@sbib@#1} + {\blx@err@nosec{#1}} + {\c@refsection#1\relax}} + +\define@key{blx@bib}{segment}{\blx@key@segment{#1}} +\define@key{blx@los}{segment}{\blx@key@segment{#1}} + +\def\blx@key@segment#1{% + \ifcsundef{blx@segm@\the\c@refsection @#1} + {\blx@error + {Segment '#1' not found} + {The reference segment '#1' could not be found}} + {\c@refsegment#1\relax + \blx@printbibchecks + \blx@filter\blx@tempa{blx@segm@\the\c@refsection @#1}}} + +\define@key{blx@bib}{type}{\blx@key@type{#1}} +\define@key{blx@los}{type}{\blx@key@type{#1}} + +\def\blx@key@type#1{% + \ifcsundef{blx@type@\the\c@refsection @#1} + {\blx@warning{% + Entry type '#1' not found.\MessageBreak + Skipping this type filter}} + {\blx@printbibchecks + \iftoggle{blx@tempb} + {\togglefalse{blx@tempb}% + \blx@filter\blx@tempa{blx@type@\the\c@refsection @#1}} + {\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@bib}{nottype}{\blx@key@nottype{#1}} +\define@key{blx@los}{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@bib}{subtype}{\blx@key@subtype{#1}} +\define@key{blx@los}{subtype}{\blx@key@subtype{#1}} + +\def\blx@key@subtype#1{% + \ifcsundef{blx@subt@\the\c@refsection @#1} + {\blx@warning{% + Entry subtype '#1' not found.\MessageBreak + Skipping this subtype filter}} + {\blx@printbibchecks + \iftoggle{blx@tempb} + {\togglefalse{blx@tempb}% + \blx@filter\blx@tempa{blx@subt@\the\c@refsection @#1}} + {\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@bib}{notsubtype}{\blx@key@notsubtype{#1}} +\define@key{blx@los}{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@bib}{keyword}{\blx@key@keyword{#1}} +\define@key{blx@los}{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.\MessageBreak + Skipping this keyword filter}} + {\blx@printbibchecks + \blx@filter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}} + +\define@key{blx@bib}{notkeyword}{\blx@key@notkeyword{#1}} +\define@key{blx@los}{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@bib}{category}{\blx@key@category{#1}} +\define@key{blx@los}{category}{\blx@key@category{#1}} + +\def\blx@key@category#1{% + \ifcsundef{blx@catg@#1} + {\blx@warning{% + Category '#1' not found.\MessageBreak + Skipping this category filter}} + {\blx@printbibchecks + \blx@filter\blx@tempa{blx@catg@#1}}} + +\define@key{blx@bib}{notcategory}{\blx@key@notcategory{#1}} +\define@key{blx@los}{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@bib}{filter}{\blx@key@filter{#1}} +\define@key{blx@los}{filter}{\blx@key@filter{#1}} + +\def\blx@key@filter#1{% + \ifcsundef{blx@filter@#1} + {\blx@warning{% + Custom filter '#1' not found.\MessageBreak + Skipping this custom filter}} + {\blx@printbibchecks + \blx@bibfilter\blx@tempa{blx@filter@#1}}} + +\define@key{blx@bib}{maxnames}{\blx@key@maxnames{#1}} +\define@key{blx@los}{maxnames}{\blx@key@maxnames{#1}} +\define@key{blx@bbs}{maxnames}{\blx@key@maxnames{#1}} +\define@key{blx@bbg}{maxnames}{\blx@key@maxnames{#1}} +\define@key{blx@bbc}{maxnames}{\blx@key@maxnames{#1}} +\def\blx@key@maxnames#1{% + \ifnum#1<\c@maxnames + \blx@error + {'maxnames=#1' invalid} + {The value may not be smaller than the global setting}% + \else + \c@maxnames#1\relax + \fi} + +\define@key{blx@bib}{minnames}{\blx@key@minnames{#1}} +\define@key{blx@los}{minnames}{\blx@key@minnames{#1}} +\define@key{blx@bbs}{minnames}{\blx@key@minnames{#1}} +\define@key{blx@bbg}{minnames}{\blx@key@minnames{#1}} +\define@key{blx@bbc}{minnames}{\blx@key@minnames{#1}} +\def\blx@key@minnames#1{% + \ifnum#1<\c@minnames + \blx@error + {'minnames=#1' invalid} + {The value may not be smaller than the global setting}% + \else + \c@minnames#1\relax + \fi} + +\define@key{blx@bib}{maxitems}{\c@maxitems#1\relax} +\define@key{blx@los}{maxitems}{\c@maxitems#1\relax} +\define@key{blx@bbs}{maxitems}{\c@maxitems#1\relax} +\define@key{blx@bbg}{maxitems}{\c@maxitems#1\relax} +\define@key{blx@bbc}{maxitems}{\c@maxitems#1\relax} + +\define@key{blx@bib}{minitems}{\c@minitems#1\relax} +\define@key{blx@los}{minitems}{\c@minitems#1\relax} +\define@key{blx@bbs}{minitems}{\c@minitems#1\relax} +\define@key{blx@bbg}{minitems}{\c@minitems#1\relax} +\define@key{blx@bbc}{minitems}{\c@minitems#1\relax} + +\define@key{blx@bib}{heading}{\blx@key@heading{#1}} +\define@key{blx@los}{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' undefined} + {Use \string\defbibheading\space to define it}} + {\def\blx@tempb{#1}}} + +\define@key{blx@bib}{title}{\blx@key@title{#1}} +\define@key{blx@los}{title}{\blx@key@title{#1}} +\def\blx@key@title{\long\def\blx@tempe} + +\define@key{blx@bib}{prenote}{\blx@key@prenote{#1}} +\define@key{blx@los}{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' undefined} + {Use \string\defbibnote\space to define it}} + {\def\blx@tempc{#1}}} + +\define@key{blx@bib}{postnote}{\blx@key@postnote{#1}} +\define@key{blx@los}{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' undefined} + {Use \string\defbibnote\space to define it}} + {\def\blx@tempd{#1}}} + +% [<options>] + +\newrobustcmd*{\printbibliography}{% + \begingroup + \edef\on@line{\on@line}% + \@ifnextchar[%] + {\blx@printbibliography} + {\blx@printbibliography[]}} + +\def\blx@printbibliography[#1]{% + \toggletrue{blx@tempa}% + \toggletrue{blx@tempb}% + \letcs\blx@tempa{blx@sbib@\the\c@refsection}% + \def\blx@tempb{bibliography}% + \let\blx@tempc\@empty + \let\blx@tempd\@empty + \let\blx@tempe\@empty + \blx@safe@actives + \setkeys{blx@bib}{#1}% + \blx@rest@actives + \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@tempb{bibliography}% + \let\blx@tempc\@empty + \let\blx@tempd\@empty + \let\blx@tempe\@empty + \c@refsection\@ne + \blx@safe@actives + \setkeys{blx@bbs}{#1}% + \blx@rest@actives + \togglefalse{blx@tempa}% + \blx@refsections} + +\def\blx@refsections{% + \ifcsvoid{blx@sbib@\the\c@refsection} + {} + {\toggletrue{blx@tempa}% + \begingroup + \expandafter\blx@bibliography\csname blx@sbib@\the\c@refsection\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\blx@maxsegment=\z@ + \blx@warning{No reference segments found}% + \fi + \@ifnextchar[%] + {\blx@bibbysegment} + {\blx@bibbysegment[]}} + +\def\blx@bibbysegment[#1]{% + \def\blx@tempb{bibliography}% + \let\blx@tempc\@empty + \let\blx@tempd\@empty + \let\blx@tempe\@empty + \c@refsection\z@ + \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 + \letcs\blx@tempa{blx@sbib@\the\c@refsection}% + \blx@filter\blx@tempa{blx@segm@\the\c@refsection @\the\c@refsegment}% + \blx@bibliography\blx@tempa}% + \ifnum\c@refsegment<\blx@maxsegment + \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@tempb{bibliography}% + \let\blx@tempc\@empty + \let\blx@tempd\@empty + \let\blx@tempe\@empty + \c@refsection\z@ + \blx@safe@actives + \setkeys{blx@bbc}{#1}% + \blx@rest@actives + \togglefalse{blx@tempa}% + \let\do\blx@bibcategory + \dolistloop\blx@categories + \blx@endbibcategory} + +\def\blx@bibcategory#1{% + \ifcsvoid{blx@catg@#1} + {} + {\toggletrue{blx@tempa}% + \begingroup + \blx@key@heading{#1}% + \letcs\blx@tempa{blx@sbib@\the\c@refsection}% + \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@bibheading\blx@tempb\blx@tempe + \blx@bibnote\blx@tempc + \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 + \thebibliography\relax + \csuse{blx@hook@bibinit}% + \let\blx@do\blx@bibitem + \let\blx@done\blx@endbibliography + \blx@listloop} + +\def\blx@endbibliography{% + \endthebibliography + \par\nobreak + \blx@noitem + \endgroup + \blx@bibnote\blx@tempd + \endgroup} + +\def\blx@bibheading#1#2{% + \let\newrefsection\relax + \let\newrefsegment\relax + \ifdefempty#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 + \csuse{blx@hook@bbxinit}% + \bibsetup\bibfont + \blx@setsfcodes + \csuse{blx@bibsetup}} + +% {<entrykey>} + +\def\blx@bibitem#1{% + \blx@ifdata{#1} + {\let\blx@noitem\@empty + \begingroup + \blx@getdata{#1}% + \blx@ifdriver{\abx@field@entrytype} + {\blx@options + \blx@thelabelnumber + \addtocounter{instcount}\@ne + \thebibitem\relax + \blx@initsep + \blx@namesep + \csuse{blx@hook@bibitem}% + \blx@execute + \blx@initunit + \blx@anchor + \blx@beglang + \bibsentence + \blx@pagetracker + \blx@driver{\abx@field@entrytype}% + \blx@postpunct + \blx@endlang} + {\blx@warning{% + No driver for entry type + '\abx@field@entrytype'.\MessageBreak + Skipping entry '\abx@field@entrykey'}}% + \endgroup} + {}} + +\def\blx@initsep{% + \ifnum\c@instcount>\@ne + \blx@imc@iffieldequals{sortinit}\blx@previnit + {} + {\addvspace{\bibinitsep}}% + \fi + \global\let\blx@previnit\abx@field@sortinit} + +\def\blx@namesep{% + \ifnum\c@instcount>\@ne + \blx@imc@iffieldequals{fullhash}\blx@prevhash + {} + {\addvspace{\bibnamesep}}% + \fi + \global\let\blx@prevhash\abx@field@fullhash} + +\providecommand*{\thebibliography}{} +\renewenvironment*{thebibliography} + {\list{}{% + \leftmargin\bibhang + \itemindent-\leftmargin + \itemsep\bibitemsep + \parsep\bibparsep}} + {\endlist} +\newcommand*{\thebibitem}{\item} +\newrobustcmd*{\AtBeginBibliography}{\gappto\blx@hook@bibinit} +\newrobustcmd*{\AtEveryBibitem}{\gappto\blx@hook@bibitem} +\@onlypreamble\AtBeginBibliography +\@onlypreamble\AtEveryBibitem + +% 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@addchecksum{\the\numexpr#1+0#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@addchecksum{\the\numexpr#1+0#2}} + +\protected\def\blx@aux@fnpage#1#2{% + \csgdef{blx@fnpage@#1}{#2}% + \blx@addchecksum{\the\numexpr#1+0#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@addchecksum{\the\numexpr#1+0#2}} + +\AtEndDocument{% + \def\abx@aux@page#1#2{\blx@addchecksum{\the\numexpr#1+0#2}}% + \def\abx@aux@fnpage#1#2{\blx@addchecksum{\the\numexpr#1+0#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} + +% List of shorthands + +\newrobustcmd*{\printshorthands}{% + \begingroup + \edef\on@line{\on@line}% + \@ifnextchar[%] + {\blx@printshorthands} + {\blx@printshorthands[]}} + +\def\blx@printshorthands[#1]{% + \toggletrue{blx@tempa}% + \toggletrue{blx@tempb}% + \letcs\blx@tempa{blx@losh@\the\c@refsection}% + \def\blx@tempb{shorthands}% + \let\blx@tempc\@empty + \let\blx@tempd\@empty + \let\blx@tempe\@empty + \let\blx@printbibchecks\relax + \blx@safe@actives + \setkeys{blx@los}{#1}% + \blx@rest@actives + \ifdefvoid\blx@tempa + {\blx@warn@losempty\endgroup} + {\blx@shorthands\blx@tempa}} + +\def\blx@printbibchecks{% + \togglefalse{blx@tempa}% + \iftoggle{blx@defernums} + {\global\let\blx@printbibchecks\relax} + {\iftoggle{blx@labelnumber} + {\blx@warning{Setting 'defernums=true' recommended}} + {\global\let\blx@printbibchecks\relax}}} + +% {<entrykey>,...} + +\def\blx@shorthands{% + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \blx@bibheading\blx@tempb\blx@tempe + \blx@bibnote\blx@tempc + \begingroup + \blx@bibinit + \let\@noitemerr\@empty + \let\blx@noitem\blx@warn@losempty + \theshorthands\relax + \csuse{blx@hook@losinit}% + \let\blx@do\blx@lositem + \let\blx@done\blx@endshorthands + \blx@listloop} + +\def\blx@endshorthands{% + \endtheshorthands + \par\nobreak + \blx@noitem + \endgroup + \blx@bibnote\blx@tempd + \endgroup + \if@restonecol\twocolumn\fi} + +\newcommand*{\thelositem}{\item} +\newenvironment*{theshorthands} + {\list{\thefield{shorthand}}{% + \labelwidth\shorthandwidth + \labelsep\biblabelsep + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \itemsep\bibitemsep + \parsep\bibparsep + \def\makelabel##1{##1\hss}}} + {\endlist} +\newrobustcmd*{\AtBeginShorthands}{\gappto\blx@hook@losinit} +\newrobustcmd*{\AtEveryLositem}{\gappto\blx@hook@lositem} +\@onlypreamble\AtBeginShorthands +\@onlypreamble\AtEveryLositem + +% {<entrykey>} + +\def\blx@lositem#1{% + \blx@ifdata{#1} + {\let\blx@noitem\@empty + \begingroup + \blx@getdata{#1}% + \blx@options + \addtocounter{instcount}\@ne + \thelositem\relax + \csuse{blx@hook@lositem}% + \blx@execute + \blx@initunit + \blx@beglang + \bibsentence + \blx@pagetracker + \blx@driver{shorthands}% + \blx@postpunct + \blx@endlang + \endgroup} + {}} + +\DeclareBibliographyDriver{shorthands}{% + \iffieldundef{shorttitle} + {\printfield{title}} + {\printfield{shorttitle}}} + +% 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[\blx@bibfiles]}} + +\def\blx@refsection[#1]{% + \global\advance\blx@maxsection\@ne + \global\c@refsection\blx@maxsection + \blx@inf@refsec + \blx@secinit + \if@filesw + \blx@auxwrite\@mainaux{% + \string\abx@aux@refsection{\the\c@refsection}}% + \xdef\blx@auxfile{\jobname\the\c@refsection\blxauxsuffix}% + \blx@ifsigned{\blx@auxfile}{aux} + {\immediate\openout\blx@auxout \blx@auxfile.aux\relax + \global\let\blx@theauxout\blx@auxout + \blx@auxinit{#1}} + {}% + \fi + \blx@info{Setting label 'refsection:\the\c@refsection'}% + \label{refsection:\the\c@refsection}% + \endgroup} + +\protected\def\endrefsection{% + \blx@endrefsection + \blx@inf@refsec} + +\def\blx@endrefsection{% + \blx@endrefsegment + \ifx\blx@theauxout\blx@auxout + \immediate\closeout\blx@auxout + \fi + \global\let\blx@theauxout\@mainaux + \xdef\blx@auxfile{\jobname}% + \ifnum\c@refsection>\z@ + \global\c@refsection\z@ + \fi} + +\AtEndDocument{% + \blx@endrefsection + \def\abx@aux@refsection#1{\blx@addchecksum{[#1]}}} + +\protected\def\abx@aux@refsection#1{% + \ifnum#1>\blx@maxsection + \global\blx@maxsection#1\relax + \fi + \blx@addchecksum{[#1]}} + +% 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\blx@maxsegment\@ne + \global\c@refsegment\blx@maxsegment + \blx@inf@refseg + \blx@info{Setting label 'refsegment:\the\c@refsegment'}% + \label{refsegment:\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@} + +% 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{% + \def\do{\blx@addtocategory{#1}}% + \blx@sanitizekeys\docsvlist{#2}% + \let\do\noexpand}}} + +% {<category>}{<entrykey>,...} + +\def\blx@addtocategory#1#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} + +%% Legacy commands + +\renewrobustcmd*{\bibliography}[1]{% + \ifx\blx@bibfiles\@empty + \gdef\blx@bibfiles{#1}% + \else + \gappto\blx@bibfiles{,#1}% + \fi} +\let\blx@bibfiles\@empty + +\AtBeginDocument{% + \protected\def\bibliography#1{% + \blx@error + {'\string\bibliography' invalid at this point} + {'\string\bibliography' must be given in the + preamble.\MessageBreak I'm ignoring the command}}} + +\renewrobustcmd*{\bibliographystyle}[1]{% + \blx@error + {'\string\bibliographystyle' invalid} + {'\string\bibliographystyle' is not supported. + Use the package\MessageBreak option 'style' or + the options 'bibstyle' and 'citestyle'.\MessageBreak + I'm ignoring the command}} + +%% Citations + +\newrobustcmd*{\AtEveryCite}{\gappto\blx@hook@cite} +\newrobustcmd*{\AtEveryCitekey}{\gappto\blx@hook@citekey} +\@onlypreamble\AtEveryCite +\@onlypreamble\AtEveryCitekey + +\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} + +% {<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>} + +\def\blx@citation#1#2{% + \ifbool{citerequest} + {\ifcsdef{blx@setp@\the\c@refsection @#1} + {\blx@citation@set{#1}{#2}} + {\ifcsdef{blx@setc@\the\c@refsection @#1} + {\blx@citation@inset{#1}{#2}} + {\blx@citation@entry{#1}{#2}}}% + \ifcsdef{blx@refc@\the\c@refsection @#1} + {\blx@citation@xref{#1}} + {}} + {}} + +\def\blx@citation@entry#1#2{% + \blx@bibreq{#1}% + \ifinlistcs{#1}{blx@segm@\the\c@refsection @\the\c@refsegment} + {} + {\listcsgadd{blx@segm@\the\c@refsection @\the\c@refsegment}{#1}}% + \blx@ifdata{#1} + {} + {\blx@logreq{#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@xref#1{% + \begingroup + \edef\blx@tempa{blx@refp@\the\c@refsection @% + \csname blx@refc@\the\c@refsection @#1\endcsname}% + \ifcsdef\blx@tempa + {\ifinlistcs{#1}\blx@tempa + {} + {\listcsxadd\blx@tempa{#1}}% + \blx@tempcnta\z@ + \def\do##1{\advance\blx@tempcnta\@ne}% + \dolistcsloop\blx@tempa} + {\listcsxadd\blx@tempa{#1}% + \blx@tempcnta\@ne}% + \expandafter\endgroup\ifnum\blx@tempcnta<\blx@minxrefs\relax + \else + \expandafter\expandafter\expandafter\blx@citation@entry + \expandafter\expandafter\expandafter{% + \csname blx@refc@\the\c@refsection @#1\endcsname}\blx@msg@cundef + \fi} + +\def\blx@citation@all{% + \ifbool{citerequest} + {\blx@bibreq{*}% + \global\csletcs + {blx@segm@\the\c@refsection @\the\c@refsegment} + {blx@sbib@\the\c@refsection}% + \ifcsvoid{blx@sort@\the\c@refsection} + {\blx@logreq{}} + {}} + {}} + +\def\blx@bibreq#1{% + \blx@auxwrite\blx@theauxout{\string\citation{#1}}} + +% {<entrykey>,...} + +\protected\def\blx@citeloop#1{% + \begingroup + \blx@tempcnta\z@ + \blx@tempcntb\z@ + \let\blx@tempa\@empty + \let\do\blx@citeadd + \docsvlist{#1}% + \blx@thenotecheck + \ifnum\blx@tempcnta>\z@ + \ifnum\blx@tempcntb>\z@ + \multicitedelim + \fi + \fi + \letcs\blx@tempb{blx@sort@\the\c@refsection}% + \blx@thecitesort + \edef\blx@tempa{\endgroup + \c@citecount\z@ + \c@citetotal\the\blx@tempcnta\relax + \unexpanded{\let\do\blx@citeprint\dolistloop}{\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@filter\blx@tempb{blx@tempa}% + \else + \blx@citenosort + \fi} + +\def\blx@citenosort{% + \let\blx@tempb\blx@tempa} + +% {<entrykey>} + +\def\blx@citeadd#1{% + \blx@citation{#1}\blx@msg@cundefon + \blx@ifdata{#1} + {\advance\blx@tempcnta\@ne + \listadd\blx@tempa{#1}} + {\ifnum\blx@tempcntb>\z@\multicitedelim\fi + \blx@missing{#1}% + \advance\blx@tempcntb\@ne}} + +% {<entrykey>} + +\protected\def\blx@citeprint#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@options + \blx@backref + \blx@pagetracker + \csuse{blx@hook@citekey}% + \csuse{blx@hook@citekey@next}% + \blx@execute + \blx@loopcode + \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 + \endgroup} + +% 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@gobal{% + \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@gobal} + {\blx@ibidreset@gobal}}% + +\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@gobal{% + \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@gobal{% + \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}} + {}} + +\def\blx@idemtracker@strict{% + \blx@ifcitesingle + {\blx@idemtracker@gobal} + {\blx@idemreset@gobal}}% + +\def\blx@idemtracker@constrict{% + \blx@ifcitesingle + {\blx@mpfnsave + \blx@idemtracker@context} + {\blx@idemreset@context}}% + +\def\blx@idemreset@force{% + \global\undef\blx@lasthash@text + \global\undef\blx@lasthash@foot + \blx@mpfnreset} + +\def\blx@idemreset@gobal{% + \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@gobal{% + \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@gobal} + {\blx@opcitreset@gobal}}% + +\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@gobal{% + \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@gobal{% + \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@gobal{% + \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@backref@global{% + \blx@leavevmode + \if@filesw + \protected@write\@mainaux{}{\string\abx@aux@backref + {\the\c@instcount}{\abx@field@entrykey}% + {\the\c@refsection}{\thepage}}% + \fi} + +% {<instcount>}{<entrykey>}{<refsection>}{<page>} + +\protected\def\blx@aux@backref#1#2#3#4{% + \ifcsundef{blx@pref@#3@\detokenize{#2}} + {\global\cslet{blx@pref@#3@\detokenize{#2}}\@empty + \expandafter\blx@onlypreamble + \expandafter{\csname blx@pref@#3@\detokenize{#2}\endcsname}} + {}% + \ifinlistcs{#4}{blx@pref@#3@\detokenize{#2}} + {} + {\listcsgadd{blx@pref@#3@\detokenize{#2}}{#4}}% + \blx@addchecksum{\the\numexpr#1+0#4}} + +\AtEndDocument{% + \def\abx@aux@backref#1#2#3#4{\blx@addchecksum{\the\numexpr#1+0#4}}} + +% {<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{% + \hyperlink{cite.\the\c@refsection @#1}{#2}}% + \protected\long\def\blx@imc@bibhyperlink#1#2{% + \hyperlink{cite.\the\c@refsection:#1}{#2}}% + \protected\long\def\blx@imc@bibhypertarget#1#2{% + \hypertarget{cite.\the\c@refsection:#1}{#2}}}% + {\long\def\blx@bibhyperref[#1]#2{% + \hyper@natlinkstart{\the\c@refsection @#1}#2\hyper@natlinkend}% + \protected\long\def\blx@imc@bibhyperlink#1#2{% + \hyper@natlinkstart{\the\c@refsection:#1}#2\hyper@natlinkend}% + \protected\long\def\blx@imc@bibhypertarget#1#2{% + \@bsphack\hyper@natanchorstart{\the\c@refsection:#1}\@esphack + #2\hyper@natanchorend}} + \let\blx@imc@ifhyperref\@firstoftwo} + +\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} + {\begingroup + \let\do\blx@nocite@do + \blx@sanitizekeys\docsvlist{#1}% + \endgroup}}}% + \@esphack} + +\def\blx@nocite@do#1{\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@sanitizekeys{#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 + \if\noexpand#1\noexpand\blx@tempb + \expandafter\blx@checkpunct@iv + \fi + \blx@checkpunct@ii} +\def\blx@checkpunct@iii#1\blx@checkpunct@ii{% + \blx@tempa{\blx@postpunct}} +\def\blx@checkpunct@iv#1\blx@checkpunct@ii#2{% + \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 + \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\csedef{#2}{% + \blx@citecmdinit + \noexpand\@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 + \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 + \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{}}}}% + \csedef{blx@acitei@#1}##1##2##3##4##5{% + \begingroup + \blx@citeinit + \if l#2\unspace##5\fi + \blxcitecmd{#3##1}{##2}{##3}{##4}{}% + \if r#2##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}}% + \csedef{blx@macitei@#1}##1##2##3{% + \if l#2\unspace##3\fi + ##1{##2}% + \if r#2##3\fi + \endgroup}} + +% {<characters>} + +\newrobustcmd*{\DeclareAutoPunctuation}[1]{% + \ifblank{#1} + {\let\blx@thecheckpunct\blx@nocheckpunct} + {\let\blx@thecheckpunct\blx@checkpunct + \edef\blx@autopunct{#1}}} + +% [<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}% + \blx@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{% + \blx@imc@iflistundef{#5} + {\blx@warning@entry{'#5' undefined or not a literal list}% + \blx@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}% + \blx@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*{\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\ifciteseen{\blx@TE\blx@imc@ifciteseen}% + \def\ifentryseen{\blx@TE\blx@imc@ifentryseen}% + \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\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\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\ifbibstring#1{\blx@TE{\blx@imc@ifbibstring{#1}}}% + \def\iffieldbibstring#1{\blx@TE{\blx@imc@iffieldbibstring{#1}}}% + \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\ifuseauthor{\blx@TE{\iftoggle{blx@useauthor}}}% + \def\ifuseeditor{\blx@TE{\iftoggle{blx@useeditor}}}% + \def\ifusetranslator{\blx@TE{\iftoggle{blx@usetranslator}}}% + \def\iffirstinits{\blx@TE{\iftoggle{blx@firstinits}}}% + \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{% + \let\blx@@TE@hook\blx@TE@hook + \appto\blx@TE@hook\blx@fltinit + \edef\blx@do##1{% + \def\noexpand\blx@fltitem{##1}% + \noexpand\ifthenelse{\csexpandonce{#2}}% + {\listadd\noexpand#1{##1}}% + {}}% + \def\blx@done{\let\blx@TE@hook\blx@@TE@hook}% + \begingroup\edef#1{\endgroup + \unexpanded{\let#1\@empty}% + \blx@listloop{#1}}% + #1} + +\appto\blx@fltinit{% + \def\segment#1{\blx@xTE{% + \ifinlist + {\blx@fltitem} + {\csuse{blx@segm@\the\c@refsection @#1}}}}% + \def\type#1{\blx@xTE{% + \ifinlist + {\blx@fltitem} + {\csuse{blx@type@\the\c@refsection @#1}}}}% + \def\subtype#1{\blx@xTE{% + \ifinlist + {\blx@fltitem} + {\csuse{blx@subt@\the\c@refsection @#1}}}}% + \def\keyword#1{\blx@xTE{% + \ifinlist + {\blx@fltitem} + {\csuse{blx@keyw@\the\c@refsection @\detokenize{#1}}}}}% + \def\category#1{\blx@xTE{% + \ifinlist + {\blx@fltitem} + {\csuse{blx@catg@#1}}}}} + +%% 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% + \blx@imc@ifterm + {\textcoquote\endgroup} + {\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% + \blx@imc@ifterm + {\textciquote\endgroup} + {\futurelet\@let@token\blx@usiquote@i}} + +\def\blx@usiquote@i{% + \blx@usqcheck + {\textciquote\endgroup} + {\blx@setpostpunct\textciquote\endgroup}} + +\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 + \blx@usqcheck@i\blx@tempb + \fi + \expandafter\blx@usqcheck@ii\blx@quotepunct\relax&} + +\def\blx@usqcheck@i#1#2&{\fi#1} + +\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} + +\def\blx@usqcheck@iii#1#2{#2#1} + +\newrobustcmd*{\mkbibemph}{\emph} +\protected\long\def\blx@imc@mkbibemph#1{% + \emph{#1}\relax + \blx@imc@setpunctfont\emph} + +\blx@regimcs{\mkbibquote \mkbibemph} + +\newcommand*{\bibleftparen}{\blx@postpunct(} +\newcommand*{\bibrightparen}{\blx@postpunct)\midsentence} +\newcommand*{\bibleftbracket}{\blx@postpunct[} +\newcommand*{\bibrightbracket}{\blx@postpunct]\midsentence} + +\newrobustcmd{\mkbibparens}[1]{% + \blx@postpunct + \begingroup + \let\mkbibparens\blx@noparens + \bibleftparen#1\blx@postpunct\bibrightparen + \endgroup} + +\long\def\blx@noparens#1{% + \blx@warning{Nested parentheses}% + \mkbibbrackets{#1}} + +\newrobustcmd{\mkbibbrackets}[1]{% + \blx@postpunct + \begingroup + \let\mkbibbrackets\blx@nobrackets + \bibleftbracket#1\blx@postpunct\bibrightbracket + \endgroup} + +\long\def\blx@nobrackets#1{% + \blx@warning{Nested brackets}% + <#1\blx@postpunct>} + +\newrobustcmd{\mkbibsuperscript}[1]{% + \unspace\allowhyphens\textsuperscript{% + \begingroup + \let\mkbibsuperscript\blx@nosuperscript + #1\endgroup}} + +\long\def\blx@nosuperscript#1{% + \blx@warning{Nested superscripts}% + \mkbibbrackets{#1}} + +\newrobustcmd{\mkbibfootnote}{\blx@mkbibfootnote{}} +\newrobustcmd{\mkbibfootnotetext}{\blx@mkbibfootnote{text}} +\newrobustcmd{\blx@mkbibfootnote}[2]{% + \iftoggle{blx@footnote} + {\blx@warning{Nested notes}% + \addspace\mkbibparens{#1}} + {\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{#1}} + {\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} + +\newrobustcmd*{\volcitecmd}[1]{% + \begingroup + \def\blx@tempa{\endgroup#1}% + \@ifstar + {\appto\blx@tempa{*}% + \blx@volcitecmd@i} + {\blx@volcitecmd@i}} + +\def\blx@volcitecmd@i{% + \@ifnextchar[%] + {\blx@volcitecmd@ii} + {\blx@volcitecmd@ii[]}} + +\def\blx@volcitecmd@ii[#1]#2{% + \appto\blx@tempa{[#1]}% + \@ifnextchar[%] + {\blx@volcitecmd@iii{#2}} + {\blx@tempa[\blx@volcite@vol{#2}]}} + +\def\blx@volcitecmd@iii#1[#2]{% + \blx@tempa[\blx@volcite@vol{#1}\blx@volcite@page{#2}]} + +\protected\def\blx@volcite@vol#1{% + \bibstring{volume}\ppspace#1} +\protected\def\blx@volcite@page#1{% + \addcomma\space\mkpageprefix{#1}} + +\appto\blx@hook@ifpages{% + \let\blx@volcite@vol\@gobble + \let\blx@volcite@page\@firstofone} + +%% Package options + +% {<options>} + +\newrobustcmd*{\ExecuteBibliographyOptions}{\setkeys{blx@opt@pre}} +\@onlypreamble\ExecuteBibliographyOptions + +% load-time only + +\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}} + +% load-time and preamble + +\DeclareBibliographyOption{debug}[true]{% + \settoggle{blx@debug}{#1}} + +\DeclareBibliographyOption{backend}{% + \ifcsdef{blx@backend@#1} + {\letcs\blx@backend{blx@backend@#1}} + {\blx@err@invopt{backend=#1}}} +\chardef\blx@backend@bibtex=0 +\expandafter\chardef\csname blx@backend@bibtex8\endcsname=1 +\chardef\blx@backend@biber=2 + +\DeclareBibliographyOption{loadfiles}[true]{% + \settoggle{blx@loadfiles}{#1}} + +\DeclareBibliographyOption{mincrossrefs}{% + \ifnum#1<\z@ + \undef\blx@mincrossrefs + \def\blx@minxrefs{1}% + \else + \def\blx@mincrossrefs{#1}% + \def\blx@minxrefs{#1}% + \fi} +\def\blx@minxrefs{2} + +\DeclareBibliographyOption{bibencoding}{% + \ifstrequal{#1}{ascii} + {\undef\blx@bibencoding + \togglefalse{blx@recode}} + {\def\blx@bibencoding{#1}% + \ifstrequal{#1}{inputenc} + {\togglefalse{blx@recode}} + {\toggletrue{blx@recode}}% + \ifnum\blx@backend<\csuse{blx@backend@bibtex8}% + \letcs\blx@backend{blx@backend@bibtex8}% + \fi}} + +\DeclareBibliographyOption{sorting}{% + \ifcsdef{blx@opt@sorting@#1} + {\def\blx@sorting{#1}} + {\blx@err@invopt{sorting=#1}}} +\def\blx@opt@sorting@none{0} +\def\blx@opt@sorting@nty{1} +\def\blx@opt@sorting@nyt{2} +\def\blx@opt@sorting@nyvt{3} +\def\blx@opt@sorting@anyt{12} +\def\blx@opt@sorting@anyvt{13} +\def\blx@opt@sorting@ynt{21} +\def\blx@opt@sorting@ydnt{22} +\def\blx@opt@sorting@debug{99} + +\DeclareBibliographyOption{sortlos}{% + \ifcsdef{blx@opt@sortlos@#1} + {\letcs\blx@sortlos{blx@opt@sortlos@#1}} + {\blx@err@invopt{sortlos=#1}}} +\def\blx@opt@sortlos@bib{0} +\def\blx@opt@sortlos@los{1} + +\DeclareBibliographyOption{maxnames}{% + \ifnum#1<\@ne + \c@maxnames\@ne + \else + \c@maxnames#1\relax + \fi} + +\DeclareBibliographyOption{minnames}{% + \ifnum#1<\@ne + \c@minnames\@ne + \else + \c@minnames#1\relax + \fi} + +\DeclareBibliographyOption{maxitems}{% + \ifnum#1<\@ne + \c@maxitems\@ne + \else + \c@maxitems#1\relax + \fi} + +\DeclareBibliographyOption{minitems}{% + \ifnum#1<\@ne + \c@minitems\@ne + \else + \c@minitems#1\relax + \fi} + +\DeclareBibliographyOption{maxline}{% + \ifnum#1<49 + \def\blx@maxline{49}% + \else + \ifnum#1>79 + \def\blx@maxline{79}% + \else + \def\blx@maxline{#1}% + \fi + \fi} + +\DeclareBibliographyOption{terseinits}[true]{% + \settoggle{blx@terseinits}{#1}} + +\DeclareBibliographyOption{firstinits}[true]{% + \settoggle{blx@firstinits}{#1}} + +\DeclareBibliographyOption{abbreviate}[true]{% + \ifstrequal{#1}{true} + {\let\blx@lbx@thedef\blx@lbx@shortdef} + {\let\blx@lbx@thedef\blx@lbx@longdef}} + +\DeclareBibliographyOption{language}{% + \ifstrequal{#1}{auto} + {\toggletrue{autolang}% + \def\blx@languagename{english}} + {\IfFileExists{#1.lbx} + {\togglefalse{autolang}% + \edef\blx@languagename{#1}} + {\blx@error + {Language '#1' not supported} + {Failed to find a matching '#1.lbx' file}}}} + +\DeclareBibliographyOption{babel}{% + \ifcsdef{blx@opt@babel@#1} + {\csuse{blx@opt@babel@#1}} + {\blx@err@invopt{babel=#1}}} +\def\blx@opt@babel@none{% + \undef\blx@thelangenv + \let\blx@hook@endlang\@empty} +\def\blx@opt@babel@hyphen{% + \def\blx@thelangenv{hyphenrules}% + \let\blx@hook@endlang\@empty} +\csdef{blx@opt@babel@other*}{% + \def\blx@thelangenv{otherlanguage*}% + \def\blx@hook@endlang{\blx@postpunct}} +\def\blx@opt@babel@other{% + \def\blx@thelangenv{otherlanguage}% + \def\blx@hook@endlang{\blx@postpunct}} + +\DeclareBibliographyOption{indexing}[true]{% + \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{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{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{backref}[true]{% + \ifstrequal{#1}{true} + {\let\blx@backref\blx@backref@global + \let\abx@aux@backref\blx@aux@backref} + {\let\blx@backref\relax + \let\abx@aux@backref\@gobblefour}} + +\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{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{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{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{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@gobal + \let\blx@ibidreset\blx@ibidreset@gobal + \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@gobal + \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{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@gobal + \let\blx@idemreset\blx@idemreset@gobal + \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@gobal + \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{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@gobal + \let\blx@opcitreset\blx@opcitreset@gobal + \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@gobal + \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{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@gobal + \let\blx@loccitreset\blx@loccitreset@gobal + \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@gobal + \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{date}{% + \ifcsundef{mkbibrange#1} + {\blx@err@invopt{date=#1}} + {\protected\def\blx@imc@printdate{\csuse{mkbibrange#1}{}}% + \protected\def\blx@imc@printdateextra{\csuse{mkbibrange#1extra}{}}}} + +\DeclareBibliographyOption{urldate}{% + \ifcsundef{mkbibrange#1} + {\blx@err@invopt{urldate=#1}} + {\protected\def\blx@imc@printurldate{\csuse{mkbibrange#1}{url}}}} + +\DeclareBibliographyOption{eventdate}{% + \ifcsundef{mkbibrange#1} + {\blx@err@invopt{eventdate=#1}} + {\protected\def\blx@imc@printeventdate{\csuse{mkbibrange#1}{event}}}} + +\DeclareBibliographyOption{origdate}{% + \ifcsundef{mkbibrange#1} + {\blx@err@invopt{origdate=#1}} + {\protected\def\blx@imc@printorigdate{\csuse{mkbibrange#1}{orig}}}} + +\DeclareBibliographyOption{alldates}{% + \ExecuteBibliographyOptions{date=#1,urldate=#1,eventdate=#1,origdate=#1}} + +\DeclareBibliographyOption{datezeros}[true]{% + \ifstrequal{#1}{true} + {\let\blx@imc@mkdatezeros\@firstofone} + {\let\blx@imc@mkdatezeros\blx@imc@stripzeros}} + +\DeclareBibliographyOption{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{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{autopunct}[true]{% + \ifstrequal{#1}{true} + {\DeclareAutoPunctuation{.,;:!?}} + {\DeclareAutoPunctuation{}}} + +\DeclareBibliographyOption{punctfont}[true]{% + \ifstrequal{#1}{true} + {\let\blx@ifpuncthook\@firstoftwo} + {\let\blx@ifpuncthook\@secondoftwo}} + +\DeclareBibliographyOption{labelnumber}[true]{% + \settoggle{blx@labelnumber}{#1}% + \iftoggle{blx@labelnumber} + {} + {\KV@blx@opt@pre@defernums{false}}} + +\DeclareBibliographyOption{labelalpha}[true]{% + \settoggle{blx@labelalpha}{#1}} + +\DeclareBibliographyOption{labelyear}[true]{% + \settoggle{blx@labelyear}{#1}} + +\DeclareBibliographyOption{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@true{1} +\def\blx@opt@uniquename@init{2} + +\DeclareBibliographyOption{singletitle}[true]{% + \settoggle{blx@singletitle}{#1}} + +\DeclareBibliographyOption{defernums}[true]{% + \settoggle{blx@defernums}{#1}% + \iftoggle{blx@defernums} + {\KV@blx@opt@pre@labelnumber{true}% + \let\blx@thelabelnumber\blx@addlabelnumber + \let\abx@aux@number\blx@aux@number} + {\let\blx@thelabelnumber\relax + \let\abx@aux@number\@gobblefour}} + +\DeclareBibliographyOption{refsection}{% + \ifcsdef{blx@opt@refsection@#1} + {\letcs\blx@refhook@section{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} + +\DeclareBibliographyOption{refsegment}{% + \ifcsdef{blx@opt@refsegment@#1} + {\letcs\blx@refhook@segment{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} + +\DeclareBibliographyOption{citereset}{% + \ifcsdef{blx@opt@citereset@#1} + {\letcs\blx@resethook{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} + +% Entry options + +\DeclareBibliographyOption{useprefix}[true]{% + \settoggle{blx@useprefix}{#1}} +\DeclareEntryOption{useprefix}[true]{% + \settoggle{blx@useprefix}{#1}} + +\DeclareBibliographyOption{useauthor}[true]{% + \settoggle{blx@useauthor}{#1}} +\DeclareEntryOption{useauthor}[true]{% + \settoggle{blx@useauthor}{#1}} + +\DeclareBibliographyOption{useeditor}[true]{% + \settoggle{blx@useeditor}{#1}} +\DeclareEntryOption{useeditor}[true]{% + \settoggle{blx@useeditor}{#1}} + +\DeclareBibliographyOption{usetranslator}[true]{% + \settoggle{blx@usetranslator}{#1}} +\DeclareEntryOption{usetranslator}[true]{% + \settoggle{blx@usetranslator}{#1}} + +\DeclareEntryOption{skipbib}[true]{% + \settoggle{blx@skipbib}{#1}} +\DeclareEntryOption{skiplos}[true]{% + \settoggle{blx@skiplos}{#1}} +\DeclareEntryOption{skiplab}[true]{% + \settoggle{blx@skiplab}{#1}} +\DeclareEntryOption{dataonly}[true]{% + \settoggle{blx@skipbib}{#1}% + \settoggle{blx@skiplos}{#1}% + \settoggle{blx@skiplab}{#1}} + +% Legacy options + +\DeclareBibliographyOption{bibtex8}[true]{% + \ifstrequal{#1}{true} + {\letcs\blx@backend{blx@backend@bibtex8}} + {\letcs\blx@backend{blx@backend@bibtex}}} + +\DeclareOption{openbib}{\setkeys{blx@opt@pre}{block=par}} + +% 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}} + +% Set defaults + +\setkeys{blx@opt@ldt}{style=numeric} +\setkeys{blx@opt@pre}{% + sorting=nty,sortlos=los,sortcites=false,maxnames=3,minnames=1, + maxitems=3,minitems=1,mincrossrefs=2,useauthor=true,useeditor=true, + usetranslator=false,indexing=false,backref=false,abbreviate=true, + pagetracker=false,ibidtracker=false,idemtracker=false, + opcittracker=false,loccittracker=false,citetracker=false,block=none, + language=auto,babel=none,date=comp,origdate=comp,eventdate=comp, + urldate=short,autopunct=true,punctfont=false,defernums=false, + refsection=none,refsegment=none,citereset=none,hyperref=auto, + maxline=79} + +% Process load-time options + +\ProcessOptions* + +%% Initial setup + +% Restore catcodes + +\def\do#1#2{\catcode`#1=#2\relax}\blx@catcodes +\undef\blx@catcodes +\let\do\noexpand + +% Load citation and bibliography styles, configuration file + +\input{biblatex.def} +\iftoggle{blx@natbib} + {\blx@inputonce{bibnatex.def}{natbib compatibility}{}{}{}{}} + {} +\RequireBibliographyStyle{\blx@bbxfile} +\RequireCitationStyle{\blx@cbxfile} +\blx@secinit +\citereset +\blx@inputonce{biblatex.cfg}{configuration file}{}{}{}{} + +% Process preamble options + +\blx@processoptions + +% Deferred last minute setup + +\csdef{blx@opt@refsection@none}{0} +\csdef{blx@opt@refsection@part}{1} +\csdef{blx@opt@refsection@chapter}{2} +\csdef{blx@opt@refsection@section}{3} +\csdef{blx@opt@refsection@subsection}{4} + +\AtEndPreamble{% + \iftoggle{blx@firstinits} + {\ifx\blx@uniquename\blx@opt@uniquename@true + \setkeys{blx@opt@pre}{uniquename=init}% + \blx@warn@conflopt{% + 'firstinits' conflicts with 'uniquename=true'.\MessageBreak + Setting 'uniquename=init'}% + \fi} + {}% + \ifnum\blx@refhook@segment>\z@ + \ifnum\blx@refhook@segment>\blx@refhook@section\relax + \else + \blx@err@confopt{% + The 'refsegment' option must point to a + lower-level\MessageBreak document division + than 'refsection'}% + \def\blx@refhook@segment{0}% + \fi + \fi + \ifcase\blx@refhook@segment + \or % 1 + \ifundef\part + {\blx@err@nodocdiv{part}} + {\pretocmd\part{\newrefsegment} + {} + {\blx@err@patch{\string\part}}}% + \or % 2 + \ifundef\chapter + {\blx@err@nodocdiv{chapter}} + {\pretocmd\chapter{\newrefsegment} + {} + {\blx@err@patch{\string\part}}}% + \or % 3 + \ifundef\section + {\blx@err@nodocdiv{section}} + {\pretocmd\section{\newrefsegment} + {} + {\blx@err@patch{\string\part}}}% + \or % 4 + \ifundef\subsection + {\blx@err@nodocdiv{subsection}} + {\pretocmd\subsection{\newrefsegment} + {} + {\blx@err@patch{\string\part}}}% + \fi + \ifcase\blx@refhook@section + \or % 1 + \ifundef\part + {\blx@err@nodocdiv{part}} + {\pretocmd\part{\newrefsection} + {} + {\blx@err@patch{\string\part}}}% + \or % 2 + \ifundef\chapter + {\blx@err@nodocdiv{chapter}} + {\pretocmd\chapter{\newrefsection} + {} + {\blx@err@patch{\string\part}}}% + \or % 3 + \ifundef\section + {\blx@err@nodocdiv{section}} + {\pretocmd\section{\newrefsection} + {} + {\blx@err@patch{\string\part}}}% + \or % 4 + \ifundef\subsection + {\blx@err@nodocdiv{subsection}} + {\pretocmd\subsection{\newrefsection} + {} + {\blx@err@patch{\string\part}}}% + \fi + \ifcase\blx@resethook + \or % 1 + \ifundef\part + {\blx@err@nodocdiv{part}} + {\pretocmd\part{\citereset\blx@inf@creset} + {} + {\blx@err@patch{\string\part}}}% + \or % 2 + \ifundef\chapter + {\blx@err@nodocdiv{chapter}} + {\pretocmd\chapter{\citereset\blx@inf@creset} + {} + {\blx@err@patch{\string\part}}}% + \or % 3 + \ifundef\section + {\blx@err@nodocdiv{section}} + {\pretocmd\section{\citereset\blx@inf@creset} + {} + {\blx@err@patch{\string\part}}}% + \or % 4 + \ifundef\subsection + {\blx@err@nodocdiv{subsection}} + {\pretocmd\subsection{\citereset\blx@inf@creset} + {} + {\blx@err@patch{\string\part}}}% + \fi + \ifnum\c@minnames>\c@maxnames + \blx@err@confopt{% + The value of 'minnames' must be smaller than\MessageBreak + or equal to the value of 'maxnames'}% + \c@minnames\c@maxnames + \fi + \ifnum\c@minitems>\c@maxitems + \blx@err@confopt{% + The value of 'minitems' must be smaller than\MessageBreak + or equal to the value of 'maxitems'}% + \c@minitems\c@maxitems + \fi + \@ifpackageloaded{inputenc} + {\ifundef\inputencodingname % inputenc 2006/05/05 v1.1b + {\begingroup + \def\@inpenc@undefined@#1{\gdef\blx@inputenc{#1}}% + \@inpenc@undefined + \endgroup} + {\let\blx@inputenc\inputencodingname}% + \ifdef\blx@bibencoding + {\iftoggle{blx@recode} + {\blx@info@noline{% + Input encoding '\blx@bibencoding' specified}} + {\blx@info@noline{% + Input encoding '\blx@inputenc' detected}% + \let\blx@bibencoding\blx@inputenc}} + {}} + {\ifdef\blx@bibencoding + {\blx@error + {Package 'inputenc' not loaded} + {The 'bibencoding' option depends on 'inputenc'}% + \undef\blx@bibencoding + \togglefalse{blx@recode}} + {}}} + +\begingroup +\let~\space +\@makeother\< +\@makeother\> +\@makeother\. +\@makeother\: +\@makeother\? +\@makeother\" +\@makeother\- +\@makeother\/ +\xdef\blx@bcf@file#1{% + \blx@sig@bcf\blx@nl + \blx@ver@bcf\blx@nl + #1% + </bcf:controlfile>} +\xdef\blx@bcf@comment#1{% + ~~<!-- #1 -->\blx@nl} +\xdef\blx@bcf@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@bcf@option#1#2{% + ~~~~<bcf:option type="#1">\blx@nl + #2% + ~~~~</bcf:option>\blx@nl} +\xdef\blx@bcf@keyvalue#1#2{% + ~~~~~~<bcf:key>#1</bcf:key>\blx@nl + ~~~~~~<bcf:value>#2</bcf:value>\blx@nl +} +\xdef\blx@bcf@keymulti#1#2{% + ~~~~~~<bcf:key>#1</bcf:key>\blx@nl + #2} +\xdef\blx@bcf@ordered#1#2{% + ~~~~~~<bcf:value order="#1">#2</bcf:value>\blx@nl} +\xdef\blx@bcf@sorting#1#2{% + ~~<bcf:sorting type="#1">\blx@nl + #2% + ~~</bcf:sorting>\blx@nl} +\xdef\blx@bcf@sort#1#2{% + ~~~~<bcf:sort #1>\blx@nl + #2% + ~~~~</bcf:sort>\blx@nl} +\xdef\blx@bcf@sortitem#1#2{% + ~~~~~~<bcf:sortitem #1>#2</bcf:sortitem>\blx@nl} +\endgroup + +\newrobustcmd*{\DeclareSortingScheme}[2]{% + \begingroup + \let\item\blx@sortdef@item + \let\field\blx@sortdef@field + \let\literal\blx@sortdef@literal + \blx@tempcnta\z@ + \let\blx@tempa\@empty + #2% + \csxdef{blx@bcf@scheme@#1}{\blx@bcf@sorting{global}{\blx@tempa}}% + \endgroup} +\@onlypreamble\DeclareSortingScheme + +\def\blx@sortdef@item#1{% + \advance\blx@tempcnta\@ne + \blx@tempcntb\z@ + \let\blx@tempb\@empty + \let\do\@firstofone + #1% + \eappto\blx@tempa{% + \blx@bcf@sort{order="\the\blx@tempcnta"}{\blx@tempb}}} + +\newcommand*{\blx@sortdef@field}[2][]{% + \advance\blx@tempcntb\@ne + \edef\blx@tempc{order="\the\blx@tempcntb"}% + \ifblank{#1} + {} + {\setkeys{blx@sortdef@field}{#1}}% + \eappto\blx@tempb{% + \blx@bcf@sortitem{\blx@tempc}{#2}}} + +\define@key{blx@sortdef@field}{final}[true]{% true|false + \ifstrequal{#1}{true} + {\appto\blx@tempc{ final="1"}} + {}} +\define@key{blx@sortdef@field}{pass}{% final|label + \ifstrequal{#1}{label} + {\appto\blx@tempc{ pass="label"}} + {\appto\blx@tempc{ pass="final"}}} +\define@key{blx@sortdef@field}{direction}{% descending|ascending + \ifstrequal{#1}{ascending} + {\appto\blx@tempc{ sort_direction="ascending"}} + {\appto\blx@tempc{ sort_direction="descending"}}} +\define@key{blx@sortdef@field}{strside}{% left|right + \ifstrequal{#1}{right} + {\appto\blx@tempc{ substring_side="right"}} + {\appto\blx@tempc{ substring_side="left"}}} +\define@key{blx@sortdef@field}{padside}{% left|right + \ifstrequal{#1}{right} + {\appto\blx@tempc{ pad_side="right"}} + {\appto\blx@tempc{ pad_side="left"}}} +\define@key{blx@sortdef@field}{strwidth}{% integer + \appto\blx@tempc{ substring_width="#1"}} +\define@key{blx@sortdef@field}{padwidth}{% integer + \appto\blx@tempc{ pad_width="#1"}} +\define@key{blx@sortdef@field}{padchar}{% character + \appto\blx@tempc{ pad_char="#1"}} + +\def\blx@sortdef@literal#1{% + \advance\blx@tempcntb\@ne + \eappto\blx@tempb{% + \blx@bcf@sortitem{order="\the\blx@tempcntb"}{#1}}} + +\DeclareSortingScheme{none}{% + \item{\field{citeorder}} +} + +\DeclareSortingScheme{debug}{% + \item{\field{entrykey}} +} + +\DeclareSortingScheme{nty}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[final]{sortkey}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sorttitle} + \field{title}} + \item{\field{sortyear} + \field{year}} + \item{\field[padside=left,padwidth=4,padchar=0]{volume} + \literal{0000}} +} + +\DeclareSortingScheme{nyt}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[final]{sortkey}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sortyear} + \field{year}} + \item{\field{sorttitle} + \field{title}} + \item{\field[padside=left,padwidth=4,padchar=0]{volume} + \literal{0000}} +} + +\DeclareSortingScheme{nyvt}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[final]{sortkey}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sortyear} + \field{year}} + \item{\field[padside=left,padwidth=4,padchar=0]{volume} + \literal{0000}} + \item{\field{sorttitle} + \field{title}} +} + +\DeclareSortingScheme{anyt}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[pass=label]{labelalpha}} + \item{\field[final]{sortkey}} + \item{\field[pass=final]{labelalpha}} + \item{\field[pass=final,padside=left,padwidth=4,padchar=0]{extraalpha}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sortyear} + \field{year}} + \item{\field{sorttitle} + \field{title}} + \item{\field[padside=left,padwidth=4,padchar=0]{volume} + \literal{0000}} +} + +\DeclareSortingScheme{anyvt}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[pass=label]{labelalpha}} + \item{\field[final]{sortkey}} + \item{\field[pass=final]{labelalpha}} + \item{\field[pass=final,padside=left,padwidth=4,padchar=0]{extraalpha}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sortyear} + \field{year}} + \item{\field[padside=left,padwidth=4,padchar=0]{volume} + \literal{0000}} + \item{\field{sorttitle} + \field{title}} +} + +\DeclareSortingScheme{ynt}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[final]{sortkey}} + \item{\field{sortyear} + \field{year} + \literal{9999}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sorttitle} + \field{title}} +} + +\DeclareSortingScheme{ydnt}{% + \item{\field[strside=left,strwidth=2]{presort} + \literal{mm}} + \item{\field[final]{sortkey}} + \item{\field[strside=left,strwidth=4,direction=descending]{sortyear} + \field[strside=left,strwidth=4,direction=descending]{year} + \literal{9999}} + \item{\field{sortname} + \field{author} + \field{editor} + \field{translator} + \field{sorttitle} + \field{title}} + \item{\field{sorttitle} + \field{title}} +} + +\def\blx@deflabel#1#2{% + \begingroup + \global\let#1\@empty + \blx@tempcnta\z@ + \def\do##1{% + \advance\blx@tempcnta\@ne + \xappto#1{\noexpand\blx@bcf@ordered{\the\blx@tempcnta}{##1}}}% + \docsvlist{#2}% + \endgroup} + +\newrobustcmd*{\DeclareLabelname}{% + \blx@deflabel\blx@bcf@labelname@global} +\@onlypreamble\DeclareLabelname + +\newrobustcmd*{\DeclareLabelyear}{% + \blx@deflabel\blx@bcf@labelyear@global} +\@onlypreamble\Declarelabelyear + +\DeclareLabelname{% + shortauthor, + author, + shorteditor, + editor, + translator} + +\DeclareLabelyear{% + year, + eventyear, + origyear, + urlyear} + +\edef\blx@ctrl@bibtex{% + \blx@msg@bib + @Control\string{biblatex-control,\blx@nl + \space\space options = \string{% + \blx@version:% + \noexpand\iftoggle{blx@debug}{1}{0}:% + \noexpand\ifnum\noexpand\blx@backend=\csuse{blx@backend@bibtex8}% + 1:% + \noexpand\else + 0:% + \noexpand\fi + \noexpand\iftoggle{blx@terseinits}{1}{0}:% + \noexpand\iftoggle{blx@useprefix}{1}{0}:% + \noexpand\iftoggle{blx@useauthor}{1}{0}:% + \noexpand\iftoggle{blx@useeditor}{1}{0}:% + \noexpand\iftoggle{blx@usetranslator}{1}{0}:% + \noexpand\iftoggle{blx@labelalpha}{1}{0}:% + \noexpand\iftoggle{blx@labelyear}{1}{0}:% + \noexpand\iftoggle{blx@singletitle}{1}{0}:% + \noexpand\blx@uniquename:% + \noexpand\csuse{blx@opt@sorting@\noexpand\blx@sorting}:% + \noexpand\blx@sortlos:% + \noexpand\the\c@maxnames:% + \noexpand\the\c@minnames:% + \noexpand\blx@maxline:% + \noexpand\detokenize\noexpand\expandafter{\noexpand\labelalphaothers}% + \string},\blx@nl + \string}% +} + +\def\blx@ctrl@biber{% + \blx@bcf@file{% + \blx@bcf@comment{options: biber}% + \blx@bcf@options{biber}{global}{% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{bibencoding}{\ifdef\blx@bibencoding{\blx@bibencoding}{ascii}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{debug}{\iftoggle{blx@debug}{1}{0}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{inputenc}{\ifdef\blx@inputenc{\blx@inputenc}{ascii}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{mincrossrefs}{\blx@mincrossrefs}% + }% + }% + \blx@bcf@comment{options: biblatex}% + \blx@bcf@options{biblatex}{global}{% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{alphaothers}{\detokenize\expandafter{\labelalphaothers}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{labelalpha}{\iftoggle{blx@labelalpha}{1}{0}}% + }% + \blx@bcf@option{multivalued}{% + \blx@bcf@keymulti{labelname}{\blx@bcf@labelname@global}% + }% + \iftoggle{blx@labelyear} + {\blx@bcf@option{multivalued}{% + \blx@bcf@keymulti{labelyear}{\blx@bcf@labelyear@global}% + }% + } + {}% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{maxitems}{\the\c@maxitems}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{maxnames}{\the\c@maxnames}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{minitems}{\the\c@minitems}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{minnames}{\the\c@minnames}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{singletitle}{\iftoggle{blx@singletitle}{1}{0}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{sortalphaothers}{\detokenize\expandafter{\labelalphaothers}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{sortlos}{\blx@sortlos}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{terseinits}{\iftoggle{blx@terseinits}{1}{0}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{uniquename}{\blx@uniquename}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{useauthor}{\iftoggle{blx@useauthor}{1}{0}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{useeditor}{\iftoggle{blx@useeditor}{1}{0}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{useprefix}{\iftoggle{blx@useprefix}{1}{0}}% + }% + \blx@bcf@option{singlevalued}{% + \blx@bcf@keyvalue{usetranslator}{\iftoggle{blx@usetranslator}{1}{0}}% + }% + }% + \blx@bcf@comment{sorting}% + \csuse{blx@bcf@scheme@\blx@sorting}% + }% +} + +\AtBeginDocument{% + \if@filesw + \blx@auxinit{\blx@bibfiles}% + \ifnum\blx@backend=\blx@backend@biber + \blx@ifsigned{\jobname}{bcf} + {\immediate\openout\blx@auxout\jobname.bcf\relax + \immediate\write\blx@auxout{\blx@ctrl@biber}% + \immediate\closeout\blx@auxout} + {}% + \else + \blx@ifsigned{\blx@ctrlfile\blxauxsuffix}{bib} + {\immediate\openout\blx@auxout\blx@ctrlfile\blxauxsuffix.bib\relax + \immediate\write\blx@auxout{\blx@ctrl@bibtex}% + \immediate\closeout\blx@auxout} + {}% + \fi + \blx@bblinput + \blx@maxsection\z@ + \fi + \csuse{abx@preamble}% + \blx@inf@refsec + \blx@inf@refseg} + +\AtEndOfPackage{% + \AtBeginDocument{% + \let\do\undef + \blx@dopreamblecmds + \let\do\noexpand}} + +\endinput |