Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % Copyright (c) 2006-2011 Philipp Lehman.
- % 2012-2017 Philip Kime, Audrey Boruvka, Joseph Wright
- % 2018- Philip Kime, Moritz Wemheuer
- %
- % Permission is granted to copy, distribute and/or modify this
- % software under the terms of the LaTeX Project Public License
- % (LPPL), version 1.3c.
- %
- % This software is provided 'as is', without warranty of any kind,
- % either expressed or implied, including, but not limited to, the
- % implied warranties of merchantability and fitness for a
- % particular purpose.
- % Set up the version strings here
- \def\abx@date{2018/11/02}
- \def\abx@version{3.12}
- \def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/MW)}
- \def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/MW)}
- \def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/MW)}
- \def\abx@cptid{\abx@date\space v\abx@version\space biblatex compatibility (PK/MW)}
- % This is not updated by build script as the control file version
- % does not necessarily change with the package version.
- % This is used when writing the .bcf
- \def\blx@bcfversion{3.5}
- % This is not updated by build script as the bbl version
- % does not necessarily change with the package version.
- % This is used when checking the .bbl
- \def\blx@bblversion{3.0}
- \NeedsTeXFormat{LaTeX2e}[2005/12/01]
- \ProvidesPackage{biblatex}
- [\abx@date\space v\abx@version\space programmable bibliographies (PK/MW)]
- %% Dependencies
- \RequirePackage{pdftexcmds}[2018/01/30]
- \RequirePackage{etoolbox}
- \RequirePackage{keyval}
- \RequirePackage{kvoptions}
- \RequirePackage{logreq}
- \RequirePackage{ifthen}
- \RequirePackage{url}
- %\RequirePackage{trace}
- \@ifpackagelater{etoolbox}{2010/11/29}
- {}
- {\PackageError{biblatex}
- {Outdated 'etoolbox' package}
- {Upgrade to etoolbox v2.1 (2010/11/29) or later.\MessageBreak
- I found: '\csuse{ver@etoolbox.sty}'.\MessageBreak
- This is a fatal error. I'm aborting now}%
- \endinput}
- % polyglossia pretends to be babel, so we need to make sure
- % we are definitely talking to babel here.
- \AtEndPreamble{%
- \@ifpackageloaded{polyglossia}
- {}
- {\@ifpackageloaded{babel}
- {\@ifpackagelater{babel}{2016/04/23}
- {}
- {\PackageError{biblatex}
- {Outdated 'babel' package}
- {Upgrade to babel 3.9r (2016/04/23) or later.\MessageBreak
- I found: '\csuse{ver@babel.sty}'.\MessageBreak
- This is a fatal error. I'm aborting now}%
- \endinput}}
- {}}}
- %% Category codes
- \def\blx@docatcodes{%
- \do\=\do\<\do\>\do\-\do\"\do\'\do\`\do\.%
- \do\,\do\;\do\:\do\!\do\?\do\/}
- \def\do#1{\catcode\number`#1=\the\catcode`#1\relax}
- \edef\blx@catcodes{\blx@docatcodes\do\^\do\~\do\&\do\|}
- \let\do\noexpand
- \def\blx@saneccodes{%
- \catcode`\~=\active
- \let\do\@makeother
- \blx@docatcodes
- \let\do\noexpand}
- \blx@saneccodes
- \catcode`\&=3
- \catcode`\|=3
- \catcode`\^=7
- \def\blx@nl{^^J}
- \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}
- %% Early errors and warnings
- \protected\def\blx@error#1#2{%
- \begingroup
- \blx@safe@actives
- \PackageError{biblatex}{#1}{#2.}%
- \endgroup}
- \protected\def\blx@warning@noline#1{%
- \begingroup
- \blx@safe@actives
- \PackageWarningNoLine{biblatex}{#1}%
- \endgroup}
- \let\blx@warning\blx@warning@noline
- \AtEndOfPackage{%
- \protected\def\blx@warning#1{%
- \begingroup
- \blx@safe@actives
- \PackageWarning{biblatex}{#1}%
- \endgroup}}
- %% Compatibility
- \def\blx@packageincompatibility{%
- \def\do##1{%
- \@ifpackageloaded{##1}
- {\ifcsundef{blx@pkgloaded@##1}
- {\global\cslet{blx@pkgloaded@##1}\@empty
- \blx@error
- {Incompatible package '##1'}
- {The '##1' package and biblatex are incompatible}}
- {}}
- {}}%
- \docsvlist{%
- amsrefs,apacite,babelbib,backref,bibtopic,bibunits,chapterbib,
- cite,citeref,drftcite,footbib,inlinebib,jurabib,mcite,mciteplus,
- mlbib,multibbl,multibib,natbib,opcit,overcite,splitbib,ucs}%
- % etextools is special, it gets an option to demote the error to a warning
- % remind people to restore \forlistloop
- \ifcsdef{blx@noerroretextools}
- {\@ifpackageloaded{etextools}
- {\ifcsundef{blx@pkgloaded@etextools}
- {\global\cslet{blx@pkgloaded@etextools}\@empty
- \blx@warning@noline{%
- Incompatible package 'etextools' loaded,\MessageBreak
- no error is thrown because you defined\MessageBreak
- '\string\blx@noerroretextools'.\MessageBreak
- 'etextools' redefines '\string\forlistloop', you must\MessageBreak
- restore the definition from 'etoolbox'\MessageBreak
- before you load biblatex}}
- {}}
- {}}
- {\@ifpackageloaded{etextools}
- {\ifcsundef{blx@pkgloaded@etextools}
- {\global\cslet{blx@pkgloaded@etextools}\@empty
- \blx@error
- {Incompatible package 'etextools'}
- {The 'etextools' package and biblatex are
- incompatible.\MessageBreak
- If you must load 'etextools' at all costs, define the command%
- \MessageBreak '\string\blx@noerroretextools'}}
- {}}
- {}}}
- % Call this right here, almost immediately after loading to give sensible
- % errors for incompatibilities that arise at loading-time.
- % The macro is called again a second time in \AtEndPreamble when all packages
- % should be loaded.
- % This still can't catch all cases, \usepackage{biblatex}\usepackage{natbib}
- % still gives a weird error.
- \blx@packageincompatibility
- % people should not be abusing noerroretextools, so warn if it is not needed
- \def\blx@packageincompatibility@endpreambleonly{%
- \ifcsdef{blx@noerroretextools}
- {\@ifpackageloaded{etextools}
- {}
- {\blx@warning@noline{%
- You defined '\string\blx@noerroretextools',\MessageBreak
- but 'etextools' is not loaded.\MessageBreak
- Please do not define '\string\blx@noerroretextools'\MessageBreak
- unless you really need it}}}
- {}}
- \begingroup
- \catcode`\#=12
- \gdef\blx@patchbidifootnotes{%
- \patchcmd\@footnotetext
- {#1}
- {\toggletrue{blx@footnote}#1}
- {\togglefalse{blx@tempa}}
- {}%
- \patchcmd\@LTRfootnotetext
- {#1}
- {\toggletrue{blx@footnote}#1}
- {\togglefalse{blx@tempa}}
- {}%
- \patchcmd\@RTLfootnotetext
- {#1}
- {\toggletrue{blx@footnote}#1}
- {\togglefalse{blx@tempa}}
- {}}
- \endgroup
- \AtEndPreamble{%
- \blx@packageincompatibility
- \blx@packageincompatibility@endpreambleonly
- \def\blx@langstrings{}%
- % Set up sortlocale defaults and default language if babel/polyglossia is not loaded
- \ifdefstring\blx@sortlocale{auto}
- {\ifdef\bbl@main@language% babel or polyglossia is loaded
- {\edef\blx@sortlocale{\bbl@main@language}}
- {\def\blx@sortlocale{english}}}
- {}%
- \@ifpackageloaded{polyglossia}
- {% This is required for languages which are never explicitly selected
- % This check because \xpg@loaded is not defined in polyglossia <= v1.42.0
- \ifundef\xpg@loaded
- {\let\xpg@loaded\@empty
- \let\xpg@vloaded\@empty
- \blx@warning@noline{Upgrade package 'polyglossia' to > v1.42.0 recommended}}
- {}%
- \def\do#1{\blx@langsetup{#1}}%
- \expandafter\docsvlist\expandafter{\xpg@loaded}%
- \expandafter\docsvlist\expandafter{\xpg@vloaded}%
- \ifboolexpr{
- not togl {blx@autolangbib}
- and
- not togl {blx@autolangcite}}
- {\blx@mknoautolang}
- {\blx@mkautolangpoly}}
- {\@ifpackageloaded{babel}
- {% This is required for languages which are never explicitly selected
- \def\do#1{\blx@langsetup{#1}}%
- \expandafter\docsvlist\expandafter{\bbl@loaded}%
- \ifboolexpr{
- not togl {blx@autolangbib}
- and
- not togl {blx@autolangcite}}
- {\blx@mknoautolang}
- {\blx@mkautolangbabel}}
- {\blx@mknoautolang}}%
- % These already have defaults set to basically do nothing
- % so if the toggles are true, we need to define again since
- % mkautolang* redefines \blx@beglang
- % In turn, \blx@beglang defines \blx@endlang and so \blx@beglangcite and
- % \blx@endlangcite need redefining inside \blx@beglang after \blx@endlang
- % has been defined.
- \iftoggle{blx@autolangbib}
- {\let\blx@beglangbib\blx@beglang}
- {}%
- \iftoggle{blx@autolangcite}
- {\let\blx@beglangcite\blx@beglang}
- {}%
- \csuse{abx@extras@\blx@languagename}%
- \csuse{abx@strings@\blx@languagename}%
- \undef\blx@mkautolangbabel
- \undef\blx@mkautolangpoly
- \undef\blx@mknoautolang
- \ifnum\blx@hyperref=\thr@@
- \else
- \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
- \undef\blx@mkhyperref
- \undef\blx@mknohyperref
- \fi
- \providecommand*{\nolinkurl}{\url}%
- \ifundef\TE@hook
- {\let\TE@hook\@empty
- \toggletrue{blx@tempa}%
- \def\do#1{%
- \patchcmd#1%
- {\let\isundefined\TE@undef}
- {\let\isundefined\TE@undef\TE@hook}
- {\togglefalse{blx@tempa}\listbreak}
- {}}%
- \docsvlist{%
- \ifthenelse,% ifthen
- \org@ifthenelse,% babel
- \HyOrg@ifthenelse,% hyperref
- \NROrg@ifthenelse}% nameref
- \iftoggle{blx@tempa}
- {\blx@err@patch{'ifthen' package}}
- {}}
- {}%
- \appto\TE@hook{\blx@TE@hook}%
- \toggletrue{blx@tempa}%
- \def\do#1{%
- \patchcmd#1%
- {\color@begingroup}
- {\color@begingroup\toggletrue{blx@footnote}}
- {\togglefalse{blx@tempa}\listbreak}
- {}}%
- \docsvlist{%
- \@footnotetext,% latex
- \H@@footnotetext,% hyperref
- \V@@footnotetext,% fancyvrb
- \scr@saved@footnotetext,% koma-script 3.x
- \l@dold@footnotetext,% ledmac
- \l@doldold@footnotetext,% ledmac
- \predefinedfootnotetext,% linguex
- \@fntORI}% frenchle
- \iftoggle{blx@tempa}% ams classes ...
- {\def\do#1{%
- \patchcmd#1
- {\@makefntext}
- {\toggletrue{blx@footnote}\@makefntext}
- {\togglefalse{blx@tempa}}
- {}}%
- \docsvlist{\@footnotetext,% ams classes standard
- \H@@footnotetext}}% hyperref
- {}%
- \@ifpackageloaded{bidi}% bidi
- {\blx@patchbidifootnotes}
- {}%
- \@ifclassloaded{memoir}
- {\def\do#1{%
- \patchcmd#1%
- {\color@begingroup}
- {\color@begingroup\toggletrue{blx@footnote}}
- {}
- {}}%
- \docsvlist{%
- \m@mold@footnotetext,%
- \@plainfootnotetext,%
- \@twocolfootnotetext,%
- \@threecolfootnotetext,%
- \@parafootnotetext}%
- \def\do#1{%
- \patchcmd#1%
- {\color@begingroup\@makefntext}
- {\color@begingroup\toggletrue{blx@footnote}\@makefntext}
- {}
- {}}%
- \docsvlist{%
- \@footnotetext,% patch twice
- \H@@footnotetext,% patch twice
- \@plainfootnotetext}}
- {}%
- \@ifclassloaded{beamer}
- {\expandafter\patchcmd\csname beamerx@\string\beamer@framefootnotetext\endcsname
- {\color@begingroup}
- {\color@begingroup\toggletrue{blx@footnote}}
- {\togglefalse{blx@tempa}}
- {}%
- \expandafter\patchcmd\csname beamerx@\string\@mpfootnotetext\endcsname
- {\color@begingroup}
- {\color@begingroup\toggletrue{blx@footnote}}
- {}
- {}}
- {}%
- \iftoggle{blx@tempa}
- {\blx@warning@noline{%
- Patching footnotes failed.\MessageBreak
- Footnote detection will not work}}
- {}%
- \def\do#1{%
- \patchcmd#1%
- {\color@begingroup}
- {\color@begingroup\toggletrue{blx@footnote}}
- {\listbreak}
- {}}%
- \docsvlist{%
- \@mpfootnotetext,% minipages
- \H@@mpfootnotetext}% hyperref minipages
- \@ifpackageloaded{endnotes}
- {\patchcmd\theendnotes
- {\enoteformat}
- {\toggletrue{blx@footnote}\enoteformat}
- {}
- {\blx@err@patch{'endnotes' package}}}
- {}%
- \@ifpackageloaded{bigfoot}
- {\apptocmd\@makefnstartbox
- {\toggletrue{blx@footnote}}
- {}
- {\blx@err@patch{'bigfoot' package}}}
- {}%
- \@ifpackageloaded{showkeys}
- {\ifdef\SK@
- {\AtEveryBibitem{\SK@\SK@@label{\thefield{entrykey}}}%
- \AtEveryLositem{\SK@\SK@@label{\thefield{entrykey}}}%
- \ifundef\SK@cite % = 'notcite' disabled
- {\AtEveryCitekey{\SK@\SK@@ref{\thefield{entrykey}}}}
- {}}
- {}}
- {}%
- \apptocmd\@floatboxreset
- {\boolfalse{citetracker}%
- \boolfalse{pagetracker}}
- {}
- {\blx@err@patch{floats}}%
- \ifdef\TX@endtabularx % tabularx/memoir
- {\pretocmd\TX@endtabularx
- {\addtocounter{tabx@nest}{1}}% track nested tabularx environments
- {}
- {\blx@err@patch{'tabularx'}}%
- % no need to conditionalise on top-level tabx as the search/replace
- % will only match once anyway
- \patchcmd\TX@endtabularx
- {\edef\TX@ckpt{\cl@@ckpt}}
- {\edef\TX@ckpt{\cl@@ckpt\abx@resttrackers}%
- \abx@savetrackers}
- {}
- {\blx@err@patch{'tabularx'}}%
- \apptocmd\TX@endtabularx
- {\ifnum\value{tabx@nest}=1% only clear trackers for top-level tabularx
- \abx@cleartrackers
- \fi
- \addtocounter{tabx@nest}{-1}}
- {}
- {\blx@err@patch{'tabularx'}}}
- {}%
- \@ifpackageloaded{csquotes}
- {\@ifpackagelater{csquotes}{2009/05/30}
- {}
- {\blx@error
- {Outdated 'csquotes' package}
- {Upgrade to csquotes v4.4 (2009/05/30) or later.\MessageBreak
- I found: '\csuse{ver@csquotes.sty}'}}%
- \BlockquoteDisable{\let\blx@thecheckpunct\@gobble}%
- \@ifpackagelater{csquotes}{2009/08/27}
- {\appto\@blockquote@prehook{\abx@savetrackers}%
- \appto\@blockquote@posthook{\abx@resttrackers\abx@cleartrackers}}
- {}%
- \@ifpackagelater{csquotes}{2010/06/09}
- {}
- {\newcommand*{\@quotereset}{}\newcount\@quotereset}%
- \newcommand*{\blx@initoquote}{\initoquote}%
- \newcommand*{\blx@textooquote}{\textooquote}%
- \newcommand*{\blx@textcoquote}{\textcoquote}%
- \newcommand*{\blx@initiquote}{\initiquote}%
- \newcommand*{\blx@textoiquote}{\textoiquote}%
- \newcommand*{\blx@textciquote}{\textciquote}%
- \newcommand*{\blx@enquote}{\enquote}}
- {\@ifpackageloaded{babel}
- {\blx@warning@noline{%
- 'babel/polyglossia' detected but 'csquotes' missing.\MessageBreak
- Loading 'csquotes' recommended}}
- {}%
- \newcommand*{\@quotelevel}{}%
- \newcount\@quotelevel
- \newcommand*{\@quotereset}{}%
- \newcount\@quotereset
- \newcommand*{\@setquotesfcodes}{}%
- \let\@setquotesfcodes\relax
- \newrobustcmd*{\blx@initoquote}{\@quotelevel\@ne}%
- \newrobustcmd*{\blx@initiquote}{\@quotelevel\tw@}%
- \newrobustcmd*{\blx@textooquote}{``}%
- \newrobustcmd*{\blx@textcoquote}{''}%
- \newrobustcmd*{\blx@textoiquote}{`\relax}% block ligs
- \newrobustcmd*{\blx@textciquote}{'\relax}% block ligs
- \newrobustcmd*{\blx@enquote}
- {\@ifstar\blx@enquote@iii\blx@enquote@i}%
- \def\blx@enquote@i{%
- \ifnum\@quotelevel>\z@
- \expandafter\blx@enquote@iii
- \else
- \expandafter\blx@enquote@ii
- \fi}%
- \long\def\blx@enquote@ii#1{%
- \begingroup\blx@initoquote
- \blx@textooquote#1\blx@textcoquote
- \endgroup}%
- \long\def\blx@enquote@iii#1{%
- \begingroup\blx@initiquote
- \blx@textoiquote#1\blx@textciquote
- \endgroup}%
- \appto\blx@setsfcodes{%
- \sfcode`\`=\z@
- \sfcode`\'=\z@}}%
- \let\do\noexpand}
- \begingroup
- \@makeother\#
- % \relax: gobble newline -> titletoc.sty
- \AtEndPreamble{%
- \addtocontents{toc}{%
- \boolfalse{citerequest}%
- \boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \boolfalse{backtracker}\relax}%
- \addtocontents{lof}{%
- \boolfalse{citerequest}%
- \boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \boolfalse{backtracker}\relax}%
- \addtocontents{lot}{%
- \boolfalse{citerequest}%
- \boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \boolfalse{backtracker}\relax}%
- \patchcmd\addtocontents
- {\string\@writefile}
- {\string\@writefile{#1}{\defcounter{refsection}{\the\c@refsection}\relax}%
- \string\@writefile}
- {}
- {\blx@err@patch{\string\addtocontents}}}
- \endgroup
- % trick hyperref into believing we're natbib
- \let\NAT@parse\@empty
- % trick showkeys into believing we're havard
- \let\HAR@checkdef\@empty
- \providecommand{\@gobblefive}[5]{}
- \ifundef\pdf@mdfivesum
- {\let\blx@mdfivesum\@firstofone
- \blx@warning@noline{Command '\string\pdf@mdfivesum' undefined.\MessageBreak
- 'labelprefix' may not be able to accept all input}}
- {\let\blx@mdfivesum\pdf@mdfivesum}
- % xstring replacements
- % reverse a given string
- % idea by egreg (https://tex.stackexchange.com/users/4427/egreg)
- % from https://tex.stackexchange.com/q/36034/
- % relicensed under LPPL according to
- % https://tex.meta.stackexchange.com/a/3333/
- \def\blx@revstr#1{%
- \ifblank{#1}
- {}
- {\blx@revstr@l #1\blx@revstr@b@i\blx@revstr@b@ii}}
- \def\blx@revstr@l#1#2\blx@revstr@b@i#3\blx@revstr@b@ii{%
- \ifblank{#2}
- {#1#3}
- {\blx@revstr@l#2\blx@revstr@b@i#1#3\blx@revstr@b@ii}}
- % these tests are inspired by Stephan v. Bechtolsheim's TUGboat article
- % https://www.tug.org/TUGboat/tb09-1/tb20bechtolsheim.pdf
- % but we need to test for start and end and not for generic substring
- % start is easy, delimited arguments help there
- \protected\def\blx@ifstrstartswith#1#2{%
- \def\blx@ifstrstartswith@i ##1#2##2&{%
- \ifblank{##1}}%
- \blx@ifstrstartswith@i #1#2&}
- % end is harder, so we reverse everything and apply the start test
- \protected\def\blx@ifstrendswith#1#2{%
- \begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\blx@ifstrstartswith{\blx@revstr{#1}}{\blx@revstr{#2}}}%
- \blx@tempa}
- % not expandable, so write the result to the macro given in #3
- % {<string>}{<strip>}{<result>}
- % <result> will contain the bit of <string>
- % after the first occurrence of <strip>
- \protected\def\blx@stripfromstartinto#1#2#3{%
- \def\blx@stripfromstart@i ##1#2##2&{%
- \def#3{##2}}%
- \blx@stripfromstart@i #1&}
- % {<string>}{<strip>}{<result>}
- % <result> will contain the bit of <string>
- % before the last occurence of <strip>
- \protected\def\blx@stripfromendinto#1#2#3{%
- \begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\blx@stripfromstartinto{\blx@revstr{#1}}{\blx@revstr{#2}}}%
- \blx@tempa{#3}%
- \edef#3{\noexpand\blx@revstr{#3}}%
- \edef#3{#3}}
- %% Allocation
- % Counter to track nested tabularx environemnts so we don't
- % try to patch the commands more than once below as this undefs some
- % macros and an error is thrown
- \newcounter{tabx@nest}
- \setcounter{tabx@nest}{0}
- \newcounter{listtotal}
- \def\thelisttotal{\the\c@listtotal}
- \newcounter{listcount}
- \def\thelistcount{\the\c@listcount}
- \newcounter{liststart}
- \def\theliststart{\the\c@liststart}
- \newcounter{liststop}
- \def\theliststop{\the\c@liststop}
- \newcounter{citecount}
- \def\thecitecount{\the\c@citecount}
- \newcounter{citetotal}
- \def\thecitetotal{\the\c@citetotal}
- \newcounter{multicitecount}
- \def\themulticitecount{\the\c@multicitecount}
- \newcounter{multicitetotal}
- \def\themulticitetotal{\the\c@multicitetotal}
- \newcounter{overallcitecount}
- \def\theoverallcitecount{\the\c@overallcitecount}
- \newcounter{overallcitetotal}
- \def\theoverallcitetotal{\the\c@overallcitetotal}
- \newcounter{instcount}
- \def\theinstcount{\the\c@instcount}
- \newcounter{maxnames}
- \def\themaxnames{\the\c@maxnames}
- \newcounter{minnames}
- \def\theminnames{\the\c@minnames}
- \newcounter{maxitems}
- \def\themaxitems{\the\c@maxitems}
- \newcounter{minitems}
- \def\theminitems{\the\c@minitems}
- \newcounter{citecounter}
- \def\thecitecount{\the\c@citecounter}
- \newcounter{maxcitecounter}
- \def\themaxcitecounter{\the\c@maxcitecounter}
- \newcounter{savedcitecounter}
- \def\thecitecount{\the\c@savedcitecounter}
- \newcounter{uniquelist}
- \def\theuniquelist{\the\c@uniquelist}
- \newcounter{uniquename}
- \def\theuniquename{\the\c@uniquename}
- \newcounter{refsection}
- \def\therefsection{\the\c@refsection}
- \newcounter{refsegment}
- \def\therefsegment{\the\c@refsegment}
- \newcounter{maxextratitle}
- \def\themaxextratitle{\the\c@maxextratitle}
- \newcounter{maxextratitleyear}
- \def\themaxextratitleyear{\the\c@maxextratitleyear}
- \newcounter{maxextraname}
- \def\themaxextraname{\the\c@maxextraname}
- \newcounter{maxextradate}
- \def\themaxextradate{\the\c@maxextradate}
- \newcounter{maxextraalpha}
- \def\themaxextraalpha{\the\c@maxextraalpha}
- \newcounter{abbrvpenalty}
- \def\theabbrvpenalty{\the\c@abbrvpenalty}
- \newcounter{highnamepenalty}
- \def\thehighnamepenalty{\the\c@highnamepenalty}
- \newcounter{lownamepenalty}
- \def\thelownamepenalty{\the\c@lownamepenalty}
- \newcounter{maxparens}
- \def\themaxparens{\the\c@maxparens}
- \newcounter{parenlevel}
- \def\theparenlevel{\the\c@parenlevel}
- \newcount\blx@tempcnta
- \newcount\blx@tempcntb
- \newcount\blx@tempcntc
- \newcount\blx@maxsection
- \expandafter\newcount\csname blx@maxsegment@0\endcsname
- \newcount\blx@notetype
- \newcount\blx@parenlevel@text
- \newcount\blx@parenlevel@foot
- \expandafter\newcount\csname blx@sectionciteorder@0\endcsname
- \newcount\blx@entrysetcounter
- \def\blx@uniquename{0}
- \def\blx@uniquelist{0}
- \def\blx@maxbibnames{0}
- \def\blx@minbibnames{0}
- \def\blx@maxcitenames{0}
- \def\blx@mincitenames{0}
- \def\blx@maxsortnames{0}
- \def\blx@minsortnames{0}
- \def\blx@maxbibnames@type{\blx@maxbibnames}
- \def\blx@minbibnames@type{\blx@minbibnames}
- \def\blx@maxcitenames@type{\blx@maxcitenames}
- \def\blx@mincitenames@type{\blx@mincitenames}
- \def\blx@maxsortnames@type{\blx@maxsortnames}
- \def\blx@minsortnames@type{\blx@minsortnames}
- \def\blx@maxalphanames{0}
- \def\blx@minalphanames{0}
- \def\blx@maxitems{0}
- \def\blx@minitems{0}
- \def\blx@maxitems@type{\blx@maxitems}
- \def\blx@minitems@type{\blx@minitems}
- \newlength{\labelnumberwidth}
- \newlength{\labelalphawidth}
- \newlength{\biblabelsep}
- \ifdef\bibitemsep % memoir
- {}
- {\newlength{\bibitemsep}}
- \newlength{\bibnamesep}
- \newlength{\bibinitsep}
- \newlength{\bibparsep}
- \newlength{\bibhang}
- \newbool{refcontextdefaults}
- \booltrue{refcontextdefaults}%
- \newbool{sourcemap}
- \newbool{citetracker}
- \newbool{pagetracker}
- \newbool{backtracker}
- \newbool{citerequest}
- \booltrue{citerequest}
- \newbool{sortcites}
- \newtoggle{blx@bbldone}
- \newtoggle{blx@tempa}
- \newtoggle{blx@tempb}
- \newtoggle{blx@runltx}
- \newtoggle{blx@runbiber}
- \newtoggle{blx@block}
- \newtoggle{blx@unit}
- \newtoggle{blx@skipentry}
- \newtoggle{blx@insert}
- \newtoggle{blx@lastins}
- \newtoggle{blx@keepunit}
- \newtoggle{blx@bibtex}
- \newtoggle{blx@debug}
- \newtoggle{blx@sortcase}
- \newtoggle{blx@sortupper}
- \newtoggle{blx@autolangbib}
- \newtoggle{blx@autolangcite}
- \newtoggle{blx@clearlang}
- \newtoggle{blx@defernumbers}
- \newtoggle{blx@omitnumbers}
- \newtoggle{blx@footnote}
- \newtoggle{blx@labelalpha}
- \newtoggle{blx@labelnumber}
- \newtoggle{blx@labeltitle}
- \newtoggle{blx@labeltitleyear}
- \newtoggle{blx@labeldateparts}
- \newtoggle{blx@natbib}
- \newtoggle{blx@noroman}
- \newtoggle{blx@mcite}
- \newtoggle{blx@loadfiles}
- \newtoggle{blx@singletitle}
- \newtoggle{blx@sortsets}
- \newtoggle{blx@crossrefsource}
- \newtoggle{blx@xrefsource}
- \newtoggle{blx@uniqueprimaryauthor}
- \newtoggle{blx@uniquetitle}
- \newtoggle{blx@uniquebaretitle}
- \newtoggle{blx@uniquework}
- \newtoggle{blx@terseinits}
- \newtoggle{blx@useprefix}
- \newtoggle{blx@addset}
- \newtoggle{blx@setonly}
- \newtoggle{blx@dataonly}
- \newtoggle{blx@skipbib}
- \newtoggle{blx@skipbiblist}
- \newtoggle{blx@skiplab}
- \newtoggle{blx@citation}
- \newtoggle{blx@bibliography}
- \newtoggle{blx@citeindex}
- \newtoggle{blx@bibindex}
- \newtoggle{blx@localnumber}
- \newtoggle{blx@refcontext}
- \newcommand*{\blx@xifstrequal}[2]{%
- \begingroup
- \edef\blx@tempa{%
- \endgroup
- \noexpand\ifstrequal{#1}{#2}}%
- \blx@tempa}
- % Special fields which need resolution using the information provided by biber
- \listadd\abx@rfields{labeltitle}
- \def\abx@dorfields{%
- \dolistloop\abx@rfields%
- }
- \listadd\abx@rnames{labelname}
- \def\abx@dornames{%
- \dolistloop\abx@rnames%
- }
- % Used to track default refcontexts for citations
- \cslet{blx@defaultrefcontexts@0}\@empty
- \listadd\blx@allrefsections{0}
- % Used to track sorting name key specifications
- \global\let\blx@sortingnamekeytemplates\@empty
- % Used to track uniquename templates
- \global\let\blx@untemplatespecs\@empty
- % Used to track labelalphaname templates
- \global\let\blx@lantemplatespecs\@empty
- % Used to track transliterations
- \global\let\blx@translits\@empty
- % Use to track every entry found in .bbl
- % Used to issue defernumbers warning about missing keys because this causes
- % defernumbers labelling to fail.
- \global\let\blx@entries\@empty
- % Initialise some lists which track changing citations/sortingtemplates
- % etc. between runs
- \global\let\blx@cites\@empty
- \global\let\blx@nocites\@empty
- \global\let\blx@directcites\@empty
- \global\let\blx@refcontexts\@empty
- \global\let\blx@lastrefcontexts\@empty
- \global\let\blx@sortingtemplatenames\@empty
- \global\let\blx@dlistnames\@empty
- \global\let\blx@biblists\@empty
- \global\let\blx@lastbiblists\@empty
- \global\let\blx@lastcites\@empty
- \global\let\blx@localnumaux\@empty
- \newread\blx@bcfin
- \newwrite\blx@bcfout
- \def\blx@onlypreamble#1{%
- \gappto\blx@dopreamblecmds{\do#1}}
- \def\blx@dopreamblecmds{%
- \do\blx@dopreamblecmds
- \do\blx@onlypreamble}
- % Deprecations
- \newrobustcmd*{\DeprecateField}[2]{%
- \csdef{abx@field@#1}{%
- \ifcsundef{abx@legacywarning@field@#1}
- {\blx@warning@noline{Field '#1' is deprecated. #2}}
- {}%
- \global\cslet{abx@legacywarning@field@#1}\@empty}}%
- \newrobustcmd*{\DeprecateList}[2]{%
- \csdef{abx@list@#1}{%
- \ifcsundef{abx@legacywarning@list@#1}
- {\blx@warning@noline{List '#1' is deprecated. #2}}
- {}%
- \global\cslet{abx@legacywarning@list@#1}\@empty}}
- \newrobustcmd*{\DeprecateName}[2]{%
- \csdef{abx@name@#1}{%
- \ifcsundef{abx@legacywarning@name@#1}
- {\blx@warning@noline{Name '#1' is deprecated. #2}}
- {}%
- \global\cslet{abx@legacywarning@name@#1}\@empty}}
- \let\blx@aliasfields\@empty
- \newrobustcmd*{\DeprecateFieldWithReplacement}[2]{%
- \appto\blx@aliasfields{%
- \ifcsundef{abx@field@#2}
- {}
- {\csdef{abx@field@#1}{%
- \csuse{abx@field@#2}%
- \ifcsundef{abx@legacywarning@field@#1}
- {\blx@warning@noline{Field '#1' is deprecated.\MessageBreak
- Please use '#2' instead.\MessageBreak
- Using '#2' now}}
- {}%
- \global\cslet{abx@legacywarning@field@#1}\@empty}}}}
- \newrobustcmd*{\DeprecateListWithReplacement}[2]{%
- \appto\blx@aliasfields{%
- \ifcsundef{abx@list@#2}
- {}
- {\csdef{abx@list@#1}{%
- \csuse{abx@list@#2}%
- \ifcsundef{abx@legacywarning@list@#1}
- {\blx@warning@noline{List '#1' is deprecated.\MessageBreak
- Please use '#2' instead.\MessageBreak
- Using '#2' now}}
- {}%
- \global\cslet{abx@legacywarning@list@#1}\@empty}}}}
- \newrobustcmd*{\DeprecateNameWithReplacement}[2]{%
- \appto\blx@aliasfields{%
- \ifcsundef{abx@name@#2}
- {}
- {\csdef{abx@name@#1}{%
- \csuse{abx@name@#2}%
- \ifcsundef{abx@legacywarning@name@#1}
- {\blx@warning@noline{Name '#1' is deprecated.\MessageBreak
- Please use '#2' instead.\MessageBreak
- Using '#2' now}}
- {}%
- \global\cslet{abx@legacywarning@name@#1}\@empty}}}}
- %% Initialisation
- \def\blx@blxinit{%
- \let\blx@blxinit\relax
- \blx@initunit}
- \def\blx@secinit{%
- \csgdef{blx@sections@\the\c@refsection}{true}% just to say we have a section for tests later
- \ifcsundef{blx@bsee@\the\c@refsection}
- {\global\cslet{blx@bsee@\the\c@refsection}\@empty}
- {}%
- \ifcsundef{blx@fsee@\the\c@refsection}
- {\global\cslet{blx@fsee@\the\c@refsection}\@empty}
- {}%
- \blx@ibidreset@force
- \blx@idemreset@force
- \blx@opcitreset@force
- \blx@loccitreset@force
- % List to track all aliases in a section. We need to output all aliases
- % to the .bcf every time so that they are visible to biber
- % Reset only if undefined
- \ifcsundef{blx@keyaliases@\the\c@refsection}
- {\global\cslet{blx@keyaliases@\the\c@refsection}\@empty}
- {}%
- \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment}
- {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty}
- {}}
- %% Auxiliary commands
- \protected\def\blx@regimc#1{%
- \xappto\blx@blxinit{%
- \let\noexpand#1\expandafter\noexpand\csname
- blx@imc@\expandafter\@gobble\string#1\endcsname}}
- \protected\def\blx@regimcs#1{\blx@regimcs@i#1&}
- \def\blx@regimcs@i#1{%
- \ifx#1&\else
- \blx@regimc#1%
- \expandafter\blx@regimcs@i
- \fi}
- % {<field>} => \do{<item1>}\do{<item2>}...
- \def\blx@imc@docsvfield#1{%
- \blx@imc@iffieldundef{#1}
- {}
- {\expandafter\expandafter\expandafter\docsvlist
- \expandafter\expandafter\expandafter{%
- \csname abx@field@#1\endcsname}}}
- % {<handler>}{<field>} => <handler>{<item1>}<handler>{<item2>}...
- \def\blx@imc@forcsvfield#1#2{%
- \blx@imc@iffieldundef{#2}
- {}
- {\expandafter\expandafter\expandafter\blx@imc@forcsvfield@i
- \expandafter\expandafter\expandafter{%
- \csname abx@field@#2\endcsname}{#1}}}
- \def\blx@imc@forcsvfield@i#1#2{\forcsvlist{#2}{#1}}
- \blx@regimcs{\docsvfield \forcsvfield}
- % {<list>|<listmacro>}
- \protected\long\def\blx@listloop#1{%
- \expandafter\blx@listloop@i#1|&}
- \long\def\blx@listloop@i#1|{%
- \ifblank{#1}
- {\blx@break}
- {\blx@do{#1}\blx@listloop@i}}
- \long\def\blx@break#1&{%
- \blx@done
- \undef\blx@do
- \undef\blx@done}
- % {<listmacro>}{<listcsname>} => matches in <listmacro>
- \protected\def\blx@filter#1#2{%
- \def\do##1{%
- \ifinlistcs{##1}{#2}
- {\listadd#1{##1}}
- {}}%
- \blx@runfilter#1}
- % {<listmacro>}{<listcsname>} => matches in <listmacro>
- % Slightly odd use of filtering to do citation sorting.
- % Same as blx@filter but it keeps \tempcnta in step with the
- % resulting number of things in the filtered list. This is
- % because \tempcnta is used to set citetotal - this use
- % of filtering for cite sorting has the side-effect of stripping
- % duplicates like \cite{foo,foo} but we need then to keep citetotal
- % in sync.
- \protected\def\blx@filtercitesort#1#2{%
- \blx@tempcnta\z@
- \def\do##1{%
- \ifinlistcs{##1}{#2}
- {\listadd#1{##1}%
- \advance\blx@tempcnta\@ne}
- {}}%
- \blx@runfilter#1}
- % {<listmacro>}{<listcsname>} => neg. matches in <listmacro>
- \protected\def\blx@notfilter#1#2{%
- \def\do##1{%
- \ifinlistcs{##1}{#2}
- {}
- {\listadd#1{##1}}}%
- \blx@runfilter#1}
- \def\blx@runfilter#1{%
- \begingroup\edef#1{\endgroup
- \unexpanded{\let#1\@empty\dolistloop}{#1}}%
- #1\let\do\noexpand}
- % {<code>}{<string>} => <code>{<string>}
- \protected\def\blx@xsanitizeafter#1#2{%
- \begingroup
- \abx@hook@xsanitize
- \def\blx@tempa{\endgroup#1}%
- \edef\blx@tempb{#2}%
- \expandafter\blx@tempa
- \expandafter{\detokenize\expandafter{\blx@tempb}}}
- \def\abx@hook@xsanitize{%
- \blx@safe@actives
- \let\protect\string}
- % {<code>}{<string>} => <code>{<string>}
- \begingroup
- \catcode`\<=\active
- \catcode`\>=\active
- \catcode`\&=\active
- \catcode`\"=\active
- \catcode`\'=\active
- \protected\gdef\blx@xmlsanitizeafter#1#2{%
- \begingroup
- \abx@hook@xsanitize
- \def\blx@tempa{\endgroup#1}%
- \edef\blx@tempb{#2}%
- \let\do\@makeother
- \dospecials
- \catcode`\<=\active
- \catcode`\>=\active
- \catcode`\&=\active
- \catcode`\"=\active
- \catcode`\'=\active
- \edef<{\string<\string;}%
- \edef>{\string>\string;}%
- \edef&{\string&\string;}%
- \edef"{\string"\string;}%
- \edef'{\string&apos\string;}%
- \endlinechar\m@ne
- \everyeof{\noexpand}%
- \edef\blx@tempb{\scantokens\expandafter{\blx@tempb}}%
- \expandafter\blx@tempa
- \expandafter{\detokenize\expandafter{\blx@tempb}}}
- \endgroup
- % {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
- \protected\long\def\blx@inputonce#1#2#3#4#5#6{%
- \ifcsundef{blx@file@#1}
- {\blx@info@noline{Trying to load #2..}%
- \IfFileExists{#1}
- {\blx@info@noline{... file '#1' found}%
- #3\@@input\@filef@und#4#5%
- \listxadd\blx@list@req@stat{#1}%
- \@addtofilelist{#1}}
- {\blx@info@noline{... file '#1' not found}#6}%
- \global\cslet{blx@file@#1}\@empty}
- {#5}}
- % {<write>}{<precode>}{<string>}
- \protected\def\blx@auxwrite#1#2#3{%
- \if@filesw
- \begingroup
- \blx@safe@actives
- \let\protect\string
- #2%
- \immediate\write#1{#3}%
- \endgroup
- \fi}
- % {<file>}{<signature>}{<true>}{<false>}
- \def\blx@ifsigned#1#2{%
- \begingroup
- \let\blx@tempa\@firstoftwo
- \edef\blx@tempb{\csuse{blx@sig@#2}}%
- \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}%
- \openin\blx@bcfin #1.#2\relax
- \ifeof\blx@bcfin
- \else
- \endlinechar\m@ne
- \readline\blx@bcfin to \blx@tempc
- \ifeof\blx@bcfin
- \else
- \ifx\blx@tempb\blx@tempc
- \readline\blx@bcfin to \blx@tempc
- \edef\blx@tempb{\csuse{blx@ver@#2}}%
- \edef\blx@tempb{\detokenize\expandafter{\blx@tempb}}%
- \ifx\blx@tempb\blx@tempc
- \else
- \blx@warning@noline{%
- File '#1.#2' is wrong format version - expected \blx@bblversion}
- \fi
- \else
- \blx@error
- {File '#1.#2' not created by biblatex}
- {This file was apparently not created by biblatex.
- Rename it or\MessageBreak move it to a location were
- TeX will not find it. If this error\MessageBreak
- persists, consider redefining \string\blxauxsuffix.%
- See the biblatex\MessageBreak manual for details}%
- \let\blx@tempa\@secondoftwo
- \fi
- \fi
- \fi
- \closein\blx@bcfin
- \expandafter\endgroup\blx@tempa}
- \edef\blx@sig@bbl{\@percentchar\space $ biblatex auxiliary file $}
- \edef\blx@ver@bbl{\@percentchar\space $ biblatex bbl format version \blx@bblversion\space $}
- \edef\blx@sig@bcf{\detokenize{<?xml version="1.0" encoding="UTF-8"?>}}
- \edef\blx@ver@bcf{%
- \detokenize{<bcf:controlfile version="}\blx@bcfversion
- \detokenize{" bltxversion="}\abx@version
- \detokenize{" xmlns:bcf="https://sourceforge.net/projects/biblatex">}}
- % {<true>}{<false>}
- \newrobustcmd*{\lbx@ifutfinput}{\ifboolexpr{%
- test {\ifdefstring\inputencodingname{utf8}}
- or
- test {\ifdefstring\inputencodingname{utf8x}}
- or
- test {\ifdefstring\inputencodingname{lutf8}}
- or
- ( test {\ifundef\inputencodingname}
- and
- ( not test {\ifundef\XeTeXrevision}
- or
- not test {\ifundef\luatexversion}
- )
- )
- }}
- %% More user feedback
- \protected\def\blx@warning@entry#1{%
- \ifdef\abx@field@entrykey
- {\blx@warning{#1\MessageBreak at entry '\abx@field@entrykey'}}
- {\blx@warning{#1}}}
- \protected\def\blx@info@noline#1{%
- \begingroup
- \blx@safe@actives
- \PackageInfo{biblatex}{#1\@gobble}%
- \endgroup}
- \let\blx@info\blx@info@noline
- \AtEndOfPackage{%
- \protected\def\blx@info#1{%
- \begingroup
- \blx@safe@actives
- \PackageInfo{biblatex}{#1}%
- \endgroup}}
- \let\blx@noline\@gobble
- \AtEndOfPackage{\let\blx@noline\@empty}
- \def\blx@imc@BibliographyWarning{\blx@warning@entry}
- \blx@regimc\BibliographyWarning
- \protected\def\abx@missing#1{%
- \mbox{\reset@font\bfseries#1}}
- \def\blx@err@patch#1{%
- \blx@error
- {Patching #1 failed}
- {This is an internal issue typically caused by a
- conflict\MessageBreak between biblatex and some
- other package. Modifying\MessageBreak the package
- loading order may fix the problem}}
- \def\blx@err@nolang#1{%
- \blx@error
- {Language '#1' not found}
- {The localization module for '#1' could not be found}}
- \def\blx@err@invarg#1#2{%
- \blx@error
- {Argument '#1' invalid}
- {\ifblank{#2}
- {The argument you have supplied is invalid.\MessageBreak
- See the biblatex manual for details}
- {#2}}}
- \def\blx@err@invopt#1#2{%
- \blx@error
- {Option '#1' invalid}
- {\ifblank{#2}
- {The option you have supplied is invalid.\MessageBreak
- See the biblatex manual for valid option keys and
- possible values}
- {#2}}}
- \def\blx@err@confopt#1#2{%
- \blx@error
- {Conflicting options\ifblank{#1}{}{ (#1)}}
- {\ifblank{#2}
- {The option you have supplied conflicts with another one.\MessageBreak
- See the biblatex manual for valid option keys and possible values}
- {#2}}}
- \def\blx@err@optdef#1{%
- \blx@error
- {Conflicting options}
- {The option '#1' is already defined}}
- \def\blx@err@nodocdiv#1{%
- \blx@error
- {\@backslashchar#1 not provided by class}
- {The document class does not seems to support #1s}}
- \def\blx@err@nosec#1{%
- \blx@error
- {Section '#1' not found}
- {The reference section '#1' could not be found}}
- \def\blx@err@nosort#1{%
- \blx@error
- {Sorting template '#1' not found}
- {The sorting template '#1' does not seem to have been defined anywhere}}
- \def\blx@err@secfirst{%
- \blx@error
- {'section' not first filter}
- {When passing multiple filter options,
- the 'section' filter must be given first}}
- \protected\def\blx@err@nestcite{%
- \blx@error
- {Nested citation command}
- {Citation commands may not be nested}}
- \def\blx@err@nestenv#1{%
- \blx@error
- {Nested '#1' environment}
- {This environment may not be nested}}
- \protected\def\blx@err@citecmd#1{%
- \begingroup
- \escapechar\m@ne
- \blx@error
- {Command '\@backslashchar\string#1' undefined}
- {The citation command '\@backslashchar\string#1'
- has not been defined\MessageBreak by the
- selected citation style}%
- \endgroup}
- \def\blx@err@endnote#1{%
- \blx@error
- {Missing or incomplete endnote support}
- {There does not seem to be endnote support available\MessageBreak
- or the available support is incomplete.\MessageBreak
- If you continue, I will fall back to '\string#1'}%
- #1}
- \def\blx@err@matchparen#1{%
- \blx@error
- {Unbalanced parentheses or brackets}
- {\iftoggle{blx@footnote}{#1 in foot or endnote}{#1}.\MessageBreak
- This error is triggered if \string\bibopenparen\space and
- \string\bibcloseparen\MessageBreak or
- \string\bibopenbracket\space and \string\bibclosebracket\space
- are unbalanced\MessageBreak or mismatched}}
- \def\blx@err@nestparen#1{%
- \blx@error
- {Too deeply nested parentheses or brackets}
- {#1 nested too deeply%
- \iftoggle{blx@footnote}{\space in foot or endnote}{}.\MessageBreak
- This error may also be triggered if \string\mkbibparens\MessageBreak
- or \string\mkbibbrackets\space are nested too deeply}}
- \def\blx@err@filter{%
- \blx@error
- {Invalid filter expression}
- {The filter expression you have supplied is invalid.\MessageBreak
- See the biblatex manual for details}}
- \def\blx@warn@nohyph#1{%
- \blx@warning{No hyphenation patterns for '#1'}}
- \protected\def\blx@warn@citecmd#1#2{%
- \blx@warning{%
- '\string#1' not defined by citation style.\MessageBreak
- Falling back to '\string#2'}%
- #2}
- \protected\def\blx@warn@nostring#1{%
- \blx@warning@entry{Bibliography string '#1'
- \ifcsundef{KV@blx@lbx@#1}{undefined}{untranslated}}%
- \abx@missing{#1}}
- \def\blx@warn@conflopt#1{%
- \blx@warning{Conflicting options.\MessageBreak#1}}
- \def\blx@warn@badoptdt#1{%
- \blx@warning{Invalid option datatype '#1'.\MessageBreak
- Defaulting to 'boolean'}}
- \def\blx@warn@depropt#1{%
- \blx@warning{Deprecated option.\MessageBreak Ignoring '#1'}}
- \def\blx@warn@bibempty{%
- \@latex@warning{Empty bibliography}}
- \def\blx@warn@biblistempty#1{%
- \@latex@warning{Empty biblist '#1'}}
- \def\blx@inf@refsec{%
- \blx@info{Reference section=\the\c@refsection}}%
- \def\blx@inf@delimdeclare#1#2{%
- \blx@info{Delimiter '#1' in context '#2' already defined, overwriting}}
- \def\blx@warn@delimuse#1#2{%
- \blx@warning{Delimiter '#1' in context '#2' undefined}}
- \def\blx@inf@refseg{%
- \ifnum\c@refsection=\z@
- \blx@info{Reference segment=\the\c@refsegment}%
- \else
- \blx@info{%
- Reference section/segment=%
- \the\c@refsection/\the\c@refsegment}%
- \fi}
- \def\blx@inf@creset{%
- \blx@info{Resetting trackers}}%
- \def\blx@msg@cundef#1{%
- Citation '#1' undefined}
- \def\blx@msg@cundefon#1{%
- Citation '#1' on page \the\c@page\space undefined}
- % Dummy as backend is biber by default. Some style may still use this to
- % check though.
- \newrobustcmd*{\RequireBiber}[1][2]{}
- % \blx@list@active active aux files (basename)
- % [internal list]
- % \blx@list@inactive inactive aux files (basename)
- % [internal list]
- % \blx@list@bibfiles@<auxfile> aux file -> bib file mapping (refsections)
- % aux file (basename) -> bib files (full)
- % [internal list]
- \let\blx@list@active\@empty
- \let\blx@list@inactive\@empty
- \listeadd\blx@list@inactive{\jobname}
- \protected\def\blx@regbibfiles#1#2{%
- \forlistloop{\blx@regbibfile{#1}}{#2}}
- \def\blx@regbibfile#1#2{%
- \ifcsundef{blx@res@loca@#2}
- {\blx@regbibfile@i{#1}{#2}}
- {\ifcsstring{blx@res@loca@#2}{local}
- {\blx@regbibfile@i{#1}{#2}}
- {}}}
- \def\blx@regbibfile@i#1#2{%
- \ifinlistcs{#2}{blx@list@bibfiles@#1}
- {}
- {\listcsxadd{blx@list@bibfiles@#1}{#2}}}
- \def\blx@check@logreq{%
- \begingroup
- \ltxrequest{biblatex}{{\iftoggle{blx@runltx}{1}{0}}}{%
- \provides[type=dynamic]{
- \file{\jobname.bcf}
- }
- \requires[type=dynamic]{
- \file{\jobname.bbl}
- }
- \ifdef\blx@list@req@edit
- {\requires[type=editable]{
- \forlistloop\file\blx@list@req@edit
- }}
- {}
- \ifdef\blx@list@req@stat
- {\requires[type=static]{
- \forlistloop\file\blx@list@req@stat
- }}
- {}
- }%
- \logrequest[package=biblatex,priority=5,active={{\iftoggle{blx@runbiber}{1}{0}}}]{%
- \generic{biber}
- \cmdline{
- \binary{biber}
- \infile{\jobname}
- }
- \input{
- \file{\jobname.bcf}
- }
- \output{
- \file{\jobname.bbl}
- }
- \provides[type=dynamic]{
- \file{\jobname.bbl}
- }
- \requires[type=dynamic]{
- \file{\jobname.bcf}
- }
- \ifcsdef{blx@list@bibfiles@\jobname}
- {\requires[type=editable]{
- \def\do{\file}
- \dolistcsloop{blx@list@bibfiles@\jobname}
- }}
- {}
- }%
- \endgroup}
- \def\blx@logreq@active#1{%
- \ifblank{#1}
- {}
- {\@latex@warning{#1}}%
- \blx@rerun@latex
- \blx@rerun@biber}
- \def\blx@rerun@latex{%
- \G@refundefinedtrue
- \global\toggletrue{blx@runltx}%
- \global\let\blx@rerun@latex\relax}
- \def\blx@rerun@biber{%
- \global\toggletrue{blx@runbiber}%
- \global\let\blx@rerun@biber\relax}
- \let\blx@checksum@old\@empty
- \let\blx@checksum@new\@empty
- \let\blx@pagesum@old\@empty
- \let\blx@pagesum@new\@empty
- \def\blx@checksum#1#2#3{%
- \begingroup
- \blx@tempcnta\the\numexpr0#2*0#3\relax
- \blx@tempcntb\blx@tempcnta
- \divide\blx@tempcntb10
- \multiply\blx@tempcntb10
- \advance\blx@tempcnta-\blx@tempcntb
- \xdef#1{#1\the\blx@tempcnta}%
- \endgroup}
- \def\blx@addchecksum{\blx@checksum\blx@checksum@old}
- \def\blx@addpagesum{\blx@checksum\blx@pagesum@old}
- \AtEndDocument{%
- \def\blx@addchecksum{\blx@checksum\blx@checksum@new}%
- \def\blx@addpagesum{\blx@checksum\blx@pagesum@new}}
- \protected\def\blx@check@rerun{%
- \begingroup
- \blx@tempcnta\z@
- \iftoggle{blx@runltx}
- {\blx@tempcnta\@ne}
- {\ifx\blx@checksum@old\blx@checksum@new
- \ifx\blx@pagesum@old\blx@pagesum@new
- \else
- \blx@tempcnta\@ne
- \fi
- \else
- \blx@tempcnta\@ne
- \fi}%
- \iftoggle{blx@runbiber}
- {\advance\blx@tempcnta\tw@}
- {}%
- \ifcase\blx@tempcnta
- \or
- \blx@rerun@latex
- \blx@warning@noline{%
- Please rerun LaTeX%
- \ifx\blx@pagesum@old\blx@pagesum@new\else
- .\MessageBreak Page breaks have changed%
- \fi}%
- \else
- \blx@rerun@latex
- \blx@warn@auxlist
- \fi
- \endgroup}
- \def\blx@warn@auxlist{%
- \begingroup
- \edef\blx@tempa{%
- Please (re)run Biber on the file:\MessageBreak
- \jobname}%
- \blx@warning@noline{%
- \blx@tempa\MessageBreak
- and rerun LaTeX afterwards}%
- \endgroup}
- \AfterEndDocument{%
- \blx@check@rerun
- \blx@check@logreq}
- %% Punctuation and capitalization
- % 1001 prefix sep for names (e.g. d'Argent ... \printnames only)
- % 1002 abbreviation period (dot)
- % 1003/1250 comma
- % 1004/1500 semicolon
- % 1005/2000 colon
- % 1006/3000 period
- % 1007/3001 exclamation mark
- % 1008/3002 question mark
- % 1009 suppress punctuation
- % 1010 new paragaph
- \mathchardef\blx@sf@prefixchar=1001% e.g. apostrophe or equivalent for prefix handling
- \mathchardef\blx@sf@dot=1002
- \mathchardef\blx@sf@comma=1003
- \mathchardef\blx@sf@semicolon=1004
- \mathchardef\blx@sf@colon=1005
- \mathchardef\blx@sf@period=1006
- \mathchardef\blx@sf@exclam=1007
- \mathchardef\blx@sf@question=1008
- \mathchardef\blx@sf@nopunct=1009
- \mathchardef\blx@sf@par=1010
- \mathchardef\blx@sf@threshold@low=1002
- \mathchardef\blx@sf@threshold@high=1009
- \csdef{blx@sf@1250}{\the\blx@sf@comma}
- \csdef{blx@sf@1500}{\the\blx@sf@semicolon}
- \csdef{blx@sf@2000}{\the\blx@sf@colon}
- \csdef{blx@sf@3000}{\the\blx@sf@period}
- \csdef{blx@sf@3001}{\the\blx@sf@exclam}
- \csdef{blx@sf@3002}{\the\blx@sf@question}
- \csdef{blx@pm@,}{comma}
- \csdef{blx@pm@;}{semicolon}
- \csdef{blx@pm@:}{colon}
- \csdef{blx@pm@.}{period}
- \csdef{blx@pm@!}{exclam}
- \csdef{blx@pm@?}{question}
- \def\blx@setsfcodes{%
- \let\blx@setsfcodes\relax
- \let\frenchspacing\blx@setfrcodes
- \let\nonfrenchspacing\blx@setencodes
- \ifnum\sfcode`\.>2000
- \blx@setencodes
- \else
- \blx@setfrcodes
- \fi
- \@setquotesfcodes
- \sfcode`\(=\z@
- \sfcode`\)=\z@
- \sfcode`\[=\z@
- \sfcode`\]=\z@
- \sfcode`\<=\z@
- \sfcode`\>=\z@}
- \def\blx@setfrcodes{%
- \ifnum\sfcode`\A=\@m
- \else
- \blx@setazcodes
- \fi
- \sfcode`\,=\blx@sf@comma
- \sfcode`\;=\blx@sf@semicolon
- \sfcode`\:=\blx@sf@colon
- \sfcode`\.=\blx@sf@period
- \sfcode`\!=\blx@sf@exclam
- \sfcode`\?=\blx@sf@question
- }
- \def\blx@setencodes{%
- \sfcode`\,=1250
- \sfcode`\;=1500
- \sfcode`\:=2000
- \sfcode`\.=3000
- \sfcode`\!=3001
- \sfcode`\?=3002
- }
- % Defining characters that count as prefices in names like d'Argent
- % Code from moewe
- \let\blx@prefchars\@empty
- \def\blx@defprefchars@loop#1{%
- \ifx#1\relax
- \else
- \listadd{\blx@prefchars}{#1}%
- \expandafter\blx@defprefchars@loop
- \fi}
- \def\blx@defprefchars#1{%
- \expandafter\blx@defprefchars@loop\detokenize{#1}\relax}
- \newrobustcmd*{\DeclarePrefChars}{%
- \@ifstar
- {\blx@defprefchars}
- {\global\let\blx@prefchars\@empty
- \blx@defprefchars}}
- \DeclarePrefChars{'-}
- \protected\def\blx@imc@ifprefchar{%
- \ifhmode
- \begingroup
- \ifnum\spacefactor=\blx@sf@prefixchar
- \endgroup
- \expandafter\expandafter
- \expandafter\@firstoftwo
- \else
- \endgroup
- \expandafter\expandafter
- \expandafter\@secondoftwo
- \fi
- \else
- \expandafter\@secondoftwo
- \fi}
- \blx@regimcs{\ifprefchar}
- \def\blx@namecodes{%
- \ifnum\sfcode`\A=\@m
- \else
- \blx@setazcodes
- \fi
- \def\do##1{\sfcode`##1=\blx@sf@prefixchar}%
- \dolistloop\blx@prefchars
- }
- \begingroup
- \let\blx@setazcodes\@empty
- \def\blx@tempa{%
- \xdef\blx@setazcodes{%
- \blx@setazcodes
- \sfcode\the\blx@tempcnta=\@m}
- \ifnum\blx@tempcnta<\blx@tempcntb
- \advance\blx@tempcnta\@ne
- \expandafter\blx@tempa
- \fi}
- \blx@tempcnta`\A
- \blx@tempcntb`\Z
- \blx@tempa
- \ifnum\inputlineno=\m@ne\else
- \blx@tempcnta"80
- \blx@tempcntb"9C
- \blx@tempa
- \blx@tempcnta"C0
- \blx@tempcntb"DF
- \blx@tempa
- \fi
- \endgroup
- \def\blx@spacefactor{%
- \ifhmode
- \ifcsundef{blx@sf@\the\spacefactor}
- {\the\spacefactor}
- {\csname blx@sf@\the\spacefactor\endcsname}%
- \else
- \the\blx@sf@par
- \fi}
- \protected\def\blx@leavevmode{%
- \ifhmode
- \else
- \leavevmode\spacefactor\blx@sf@par
- \fi}
- \protected\def\blx@leavevmode@cite{%
- \ifhmode
- \ifnum\spacefactor=\blx@sf@par
- \else
- \spacefactor\@m
- \fi
- \else
- \leavevmode
- \fi}
- \protected\def\blx@imc@setpunctfont#1{%
- \blx@ifpuncthook
- {\gdef\abx@puncthook{%
- \ifdim\lastkern>\z@\unkern\fi
- \blx@imc@resetpunctfont#1}}
- {}}
- \protected\def\blx@imc@resetpunctfont{%
- \blx@ifpuncthook
- {\global\let\abx@puncthook\@firstofone}
- {}}
- \protected\def\blx@setpostpunct#1{%
- \blx@ifuspunct
- {\global\let\blx@postpunct\blx@dopostpunct
- \ifdef\blx@thepostpunct
- {\gappto\blx@thepostpunct{#1}}
- {\gdef\blx@thepostpunct{#1}}}
- {}}
- \def\blx@dopostpunct{%
- \blx@thepostpunct
- \global\let\blx@postpunct\@empty
- \global\undef\blx@thepostpunct}
- \protected\def\blx@postpunct@agroup{%
- \aftergroup\blx@postpunct
- \let\blx@postpunct@agroup\@empty}
- % {<characters>}
- \newrobustcmd*{\DeclareCapitalPunctuation}[1]{%
- \cslet{blx@cap@\the\blx@sf@par}\@empty
- \csundef{blx@cap@\the\blx@sf@comma}%
- \csundef{blx@cap@\the\blx@sf@semicolon}%
- \csundef{blx@cap@\the\blx@sf@colon}%
- \csundef{blx@cap@\the\blx@sf@period}%
- \csundef{blx@cap@\the\blx@sf@exclam}%
- \csundef{blx@cap@\the\blx@sf@question}%
- \ifblank{#1}
- {}
- {\expandafter\blx@defcapstring\detokenize{#1}\relax}}
- \def\blx@defcapstring#1{%
- \ifx#1\relax
- \else
- \begingroup
- \blx@setfrcodes
- \ifcsdef{blx@pm@#1}
- {\expandafter\endgroup
- \expandafter\let
- \csname blx@cap@\the\sfcode`#1\endcsname\@empty}
- {\blx@warning{Ignoring invalid punctuation mark '#1'}%
- \endgroup}%
- \expandafter\blx@defcapstring
- \fi}
- % {<characters>}
- \newrobustcmd*{\DeclareQuotePunctuation}[1]{%
- \csdef{blx@qp@comma}{\blx@postpunct}%
- \csdef{blx@qp@semicolon}{\blx@postpunct}%
- \csdef{blx@qp@colon}{\blx@postpunct}%
- \csdef{blx@qp@period}{\blx@postpunct}%
- \csdef{blx@qp@exclam}{\blx@postpunct}%
- \csdef{blx@qp@question}{\blx@postpunct}%
- \cslet{blx@pq@comma}\@empty
- \cslet{blx@pq@semicolon}\@empty
- \cslet{blx@pq@colon}\@empty
- \cslet{blx@pq@period}\@empty
- \cslet{blx@pq@exclam}\@empty
- \cslet{blx@pq@question}\@empty
- \let\blx@quotepunct\@empty
- \ifblank{#1}
- {\let\blx@ifuspunct\@secondoftwo}
- {\let\blx@ifuspunct\@firstoftwo
- \expandafter\blx@defquotepunct\detokenize{#1}&}}
- \def\blx@defquotepunct#1{%
- \ifx\relax
- \else
- \ifcsdef{blx@pm@#1}
- {\appto\blx@quotepunct{#1}%
- \cslet{blx@qp@\csuse{blx@pm@#1}}\@empty
- \csdef{blx@pq@\csuse{blx@pm@#1}}{\blx@postpunct}}
- {\blx@warning{Ignoring invalid punctuation mark '#1'}}%
- \expandafter\blx@defquotepunct
- \fi}
- % {<mark>}{<characters>}
- \newrobustcmd*{\DeclarePunctuationPairs}[2]{%
- \ifcsdef{blx@sf@\detokenize{#1}}
- {\ifnum\csname blx@sf@\detokenize{#1}\endcsname>\blx@sf@prefixchar
- \ifnum\csname blx@sf@\detokenize{#1}\endcsname<\blx@sf@nopunct
- \expandafter\blx@defpunctpairs
- \expandafter{\the\csname blx@sf@\detokenize{#1}\endcsname}{#2}%
- \else
- \blx@err@invarg{\detokenize{#1}{}}%
- \fi
- \else
- \blx@err@invarg{\detokenize{#1}{}}%
- \fi}
- {\blx@err@invarg{\detokenize{#1}{}}}}
- \def\blx@defpunctpairs#1#2{%
- \blx@undefpair{#1}{\the\blx@sf@dot}%
- \blx@undefpair{#1}{\the\blx@sf@comma}%
- \blx@undefpair{#1}{\the\blx@sf@semicolon}%
- \blx@undefpair{#1}{\the\blx@sf@colon}%
- \blx@undefpair{#1}{\the\blx@sf@period}%
- \blx@undefpair{#1}{\the\blx@sf@exclam}%
- \blx@undefpair{#1}{\the\blx@sf@question}%
- \ifblank{#2}
- {}
- {\begingroup
- \def\blx@tempa{#1}%
- \let\blx@tempb\@empty
- \blx@setfrcodes
- \sfcode`\*=\blx@sf@dot
- \expandafter\blx@defpair\detokenize{#2}&%
- \expandafter\endgroup\blx@tempb}}
- \def\blx@defpair#1{%
- \ifx%
- \else
- \ifnum\the\sfcode`#1>\blx@sf@prefixchar
- \ifnum\the\sfcode`#1<\blx@sf@nopunct
- \eappto\blx@tempb{%
- \cslet{blx@pp@\blx@tempa @\the\sfcode`#1}\noexpand\@empty}%
- \else
- \blx@err@invarg{#1}{}%
- \fi
- \else
- \blx@err@invarg{#1}{}%
- \fi
- \expandafter\blx@defpair
- \fi}
- \def\blx@undefpair#1#2{%
- \ifcsdef{blx@pp@#1@#2}
- {\csundef{blx@pp@#1@#2}}
- {}}
- \protected\def\blx@resetpunct{%
- \DeclareCapitalPunctuation{.!?}%
- \DeclarePunctuationPairs{dot}{}%
- \DeclarePunctuationPairs{comma}{*!?}%
- \DeclarePunctuationPairs{semicolon}{*!?}%
- \DeclarePunctuationPairs{colon}{*!?}%
- \DeclarePunctuationPairs{period}{}%
- \DeclarePunctuationPairs{exclam}{*}%
- \DeclarePunctuationPairs{question}{*}%
- \DeclareQuotePunctuation{}%
- \def\abx@dot{\ifdim\lastkern>\z@\unkern\fi.\spacefactor\blx@sf@dot}%
- \def\abx@comma{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{,}}%
- \def\abx@semicolon{\abx@puncthook{;}}%
- \def\abx@colon{\abx@puncthook{:}}%
- \def\abx@period{\ifdim\lastkern>\z@\unkern\fi\abx@puncthook{.}}%
- \def\abx@exclam{\abx@puncthook{!}}%
- \def\abx@question{\abx@puncthook{?}}%
- \global\let\abx@puncthook\@firstofone
- \global\let\blx@postpunct\@empty}
- \blx@resetpunct
- % {<character>}{<true>}{<false>}
- \protected\def\blx@imc@ifpunctmark#1{%
- \ifhmode
- \begingroup
- \sfcode`\*=\blx@sf@dot
- \ifnum\sfcode`#1=\spacefactor
- \endgroup
- \expandafter\expandafter
- \expandafter\@firstoftwo
- \else
- \endgroup
- \expandafter\expandafter
- \expandafter\@secondoftwo
- \fi
- \else
- \expandafter\@secondoftwo
- \fi}
- % {<true>}{<false>}
- \protected\def\blx@imc@ifterm{%
- \ifhmode
- \expandafter\blx@imc@ifcapital
- \else
- \expandafter\@secondoftwo
- \fi}
- % {<true>}{<false>}
- \protected\def\blx@imc@ifcapital{%
- \ifcsdef{blx@cap@\blx@spacefactor}}
- % {<true>}{<false>}
- \protected\def\blx@imc@ifpunct{%
- \ifnum\blx@spacefactor>\blx@sf@threshold@low
- \ifnum\blx@spacefactor<\blx@sf@threshold@high
- \expandafter\expandafter
- \expandafter\@firstoftwo
- \else
- \expandafter\expandafter
- \expandafter\@secondoftwo
- \fi
- \else
- \expandafter\@secondoftwo
- \fi}
- % {<character>}
- \newrobustcmd*{\autocap}[1]{#1}
- \protected\def\blx@imc@autocap{%
- \blx@imc@ifcapital\MakeUppercase\@firstofone}
- \protected\def\blx@imc@nopunct{%
- \leavevmode\spacefactor\blx@sf@nopunct}
- \protected\def\blx@imc@isdot{%
- \ifnum\blx@spacefactor=\blx@sf@period
- \spacefactor\blx@sf@dot
- \fi}
- \protected\def\blx@imc@adddot{%
- \blx@addpunct{dot}%
- \ifnum\blx@spacefactor=\blx@sf@period
- \spacefactor\blx@sf@dot
- \fi}
- \protected\def\blx@imc@addperiod{%
- \blx@addpunct{period}%
- \ifnum\blx@spacefactor=\blx@sf@dot
- \spacefactor\blx@sf@period
- \fi}
- \protected\def\blx@imc@addcomma{\blx@addpunct{comma}}
- \protected\def\blx@imc@addsemicolon{\blx@addpunct{semicolon}}
- \protected\def\blx@imc@addcolon{\blx@addpunct{colon}}
- \protected\def\blx@imc@addexclam{\blx@addpunct{exclam}}
- \protected\def\blx@imc@addquestion{\blx@addpunct{question}}
- \def\blx@addpunct#1{%
- \unspace
- \ifnum\blx@spacefactor<\blx@sf@threshold@low
- \csuse{blx@qp@#1}\csuse{abx@#1}%
- \else
- \ifnum\blx@spacefactor>\blx@sf@threshold@high
- \csuse{blx@qp@#1}\csuse{abx@#1}%
- \else
- \ifcsdef{blx@pp@\the\csname blx@sf@#1\endcsname @\blx@spacefactor}
- {\csuse{blx@qp@#1}\csuse{abx@#1}}
- {\csuse{blx@qp@#1}}%
- \fi
- \fi
- \csuse{blx@pq@#1}}
- \providerobustcmd*{\unspace}{%
- \ifbool{hmode}
- {\ifdimgreater\lastskip\z@
- {\unskip\unspace}
- {\ifnumgreater\lastpenalty\z@
- {\unpenalty\unspace}
- {}}}
- {}}
- \newrobustcmd*{\bibsentence}{%
- \leavevmode\spacefactor\blx@sf@par
- \ignorespaces}
- \newrobustcmd*{\midsentence}{%
- \leavevmode
- \@ifstar
- {\ifnum\spacefactor=\blx@sf@dot
- \else
- \spacefactor\@m
- \fi}
- {\spacefactor\@m}}
- \newrobustcmd*{\addslash}{%
- \unspace/\penalty\hyphenpenalty\hskip\z@skip}
- \newrobustcmd*{\addspace}{%
- \unspace\blx@postpunct
- \space\blx@imc@resetpunctfont}
- \newrobustcmd*{\addnbspace}{%
- \unspace\blx@postpunct
- \nobreak\space\blx@imc@resetpunctfont}
- \newrobustcmd*{\addthinspace}{%
- \unspace\blx@postpunct
- \hskip0.16667em\relax
- \blx@imc@resetpunctfont}
- \newrobustcmd*{\addnbthinspace}{%
- \unspace\blx@postpunct
- \nobreak\hskip0.16667em\relax
- \blx@imc@resetpunctfont}
- \newrobustcmd*{\addlowpenspace}{%
- \unspace\blx@postpunct
- \penalty\value{lownamepenalty}\space
- \blx@imc@resetpunctfont}
- \newrobustcmd*{\addhighpenspace}{%
- \unspace\blx@postpunct
- \penalty\value{highnamepenalty}\space
- \blx@imc@resetpunctfont}
- \newrobustcmd*{\addlpthinspace}{%
- \unspace\blx@postpunct
- \penalty\value{lownamepenalty}%
- \hskip0.16667em\relax\blx@imc@resetpunctfont}
- \newrobustcmd*{\addhpthinspace}{%
- \unspace\blx@postpunct
- \penalty\value{highnamepenalty}%
- \hskip0.16667em\relax\blx@imc@resetpunctfont}
- \newrobustcmd*{\addabbrvspace}{%
- \unspace\blx@postpunct
- \penalty\value{abbrvpenalty}%
- \space\blx@imc@resetpunctfont}
- \newrobustcmd*{\addabthinspace}{%
- \unspace\blx@postpunct
- \penalty\value{abbrvpenalty}%
- \hskip0.16667em\relax
- \blx@imc@resetpunctfont}
- \newrobustcmd*{\adddotspace}{%
- \unspace\adddot\blx@postpunct
- \penalty\value{abbrvpenalty}%
- \space\blx@imc@resetpunctfont}
- \providerobustcmd*{\noligature}{%
- \penalty\@M\discretionary{-}{}{\kern0.03em}%
- \nobreak\hskip\z@skip}
- \providerobustcmd*{\hyphen}{%
- \nobreak-\nobreak\hskip\z@skip}
- \providerobustcmd*{\nbhyphen}{%
- \nobreak\mbox{-}\nobreak\hskip\z@skip}
- \providerobustcmd*{\hyphenate}{%
- \nobreak\-\nobreak\hskip\z@skip}
- \providerobustcmd*{\allowhyphens}{%
- \nobreak\hskip\z@skip}
- \providerobustcmd*{\nohyphenation}{%
- \lefthyphenmin\@m}
- \providerobustcmd*{\textnohyphenation}[1]{%
- \bgroup\nohyphenation#1\egroup}
- \blx@regimcs{%
- \setpunctfont \resetpunctfont \ifcapital \autocap \ifpunctmark
- \ifpunct \ifterm \nopunct \isdot \adddot \addperiod \addcomma
- \addsemicolon \addcolon \addexclam \addquestion}
- \appto\blx@blxinit{%
- \appto\nocorrlist{\isdot\adddot\addperiod\addcomma}}
- %% Style definition
- % {<bibstyle>}
- \newrobustcmd*{\RequireBibliographyStyle}[1]{%
- \blx@inputonce{#1.bbx}{bibliography style '#1'}{}{}{}
- {\blx@error
- {Style '#1' not found}
- {The bibliography style '#1' could not be found}}}
- \@onlypreamble\RequireBibliographyStyle
- % {<code>}
- \newrobustcmd*{\InitializeBibliographyStyle}{\appto\blx@hook@bbxinit}
- \@onlypreamble\InitializeBibliographyStyle
- % {<entry type>}{<driverdef>}
- \newrobustcmd*{\DeclareBibliographyDriver}[1]{%
- \long\csdef{blx@bbx@#1}}
- \@onlypreamble\DeclareBibliographyDriver
- % {<entry type>}
- \def\blx@driver#1{%
- \ifcsdef{blx@bbx@#1}
- {\csuse{blx@bbx@#1}}
- {\ifcsdef{blx@bbx@*}
- {\blx@warning{%
- No driver for entry type '#1'.\MessageBreak
- Using fallback driver}%
- \csuse{blx@bbx@*}}
- {\blx@error
- {No driver found}
- {I can't find a driver for the entry type
- '\abx@field@entrytype'\MessageBreak
- and there is no fallback driver either}}}}
- % {<type>}{<true>}{<false>}
- \def\blx@imc@ifdriver#1{\ifcsdef{blx@bbx@#1}}
- % {<alias>}{<type>}
- \newrobustcmd*{\DeclareBibliographyAlias}[2]{%
- \csedef{blx@bbx@#1}{%
- \expandafter\noexpand\csname blx@bbx@#2\endcsname}}
- \@onlypreamble\DeclareBibliographyAlias
- %% Auxiliary commands
- \newrobustcmd*{\citereset}{%
- \csuse{blx@hook@cbxinit}%
- \@ifstar
- {}
- {\global\cslet{blx@bsee@\the\c@refsection}\@empty
- \global\cslet{blx@fsee@\the\c@refsection}\@empty
- \blx@ibidreset@force
- \blx@idemreset@force
- \blx@opcitreset@force
- \blx@loccitreset@force}}
- \def\blx@save#1{%
- \ifcsdef{blx@saved@#1}
- {}
- {\blx@safe@actives
- \csletcs{blx@saved@#1}{#1}%
- \blx@rest@actives}}
- \def\blx@restore#1{%
- \ifcsdef{blx@saved@#1}
- {\blx@safe@actives
- \csletcs{#1}{blx@saved@#1}%
- \csundef{blx@saved@#1}%
- \blx@rest@actives}
- {}}
- \newrobustcmd*{\savecommand}[1]{%
- \ifcsdef{blx@saved@cmd@\detokenize{#1}}
- {}
- {\cslet{blx@saved@cmd@\detokenize{#1}}{#1}}}
- \newrobustcmd*{\restorecommand}[1]{%
- \ifcsdef{blx@saved@cmd@\detokenize{#1}}
- {\letcs{#1}{blx@saved@cmd@\detokenize{#1}}%
- \csundef{blx@saved@cmd@\detokenize{#1}}}
- {}}
- % {<name>}
- \newrobustcmd*{\savebibmacro}[1]{%
- \blx@save{abx@macro@\detokenize{#1}}}
- \newrobustcmd*{\restorebibmacro}[1]{%
- \blx@restore{abx@macro@\detokenize{#1}}}
- % {<name>}[<args>][<optarg>]{<definition>}
- \newrobustcmd*{\newbibmacro}{%
- \@star@or@long\blx@newbibmacro}
- \def\blx@newbibmacro#1{%
- \ifcsundef{abx@macro@\detokenize{#1}}
- {\blx@defbibmacro\new@command{#1}}
- {\blx@warning{%
- Macro '\detokenize{#1}' already defined.\MessageBreak
- Using \string\renewbibmacro}
- \blx@defbibmacro\renew@command{#1}}}
- \newrobustcmd*{\renewbibmacro}{%
- \@star@or@long\blx@renewbibmacro}
- \def\blx@renewbibmacro#1{%
- \ifcsundef{abx@macro@\detokenize{#1}}
- {\blx@warning{%
- Macro '\detokenize{#1}' undefined.\MessageBreak
- Using \string\newbibmacro}
- \blx@defbibmacro\new@command{#1}}
- {\blx@defbibmacro\renew@command{#1}}}
- \newrobustcmd*{\providebibmacro}{%
- \@star@or@long{\blx@defbibmacro\provide@command}}
- \def\blx@defbibmacro#1#2{%
- \expandafter#1\csname abx@macro@\detokenize{#2}\endcsname}
- % {<alias>}{<name>}
- \newrobustcmd*{\letbibmacro}{%
- \@ifstar
- {\blx@letbibmacro@i}
- {\blx@letbibmacro}}
- \def\blx@letbibmacro#1#2{%
- \blx@letbibmacro@i{\detokenize{#1}}{\detokenize{#2}}}
- \def\blx@letbibmacro@i#1#2{%
- \ifcsundef{abx@macro@#2}
- {\blx@error
- {Bibliography macro '#2' undefined}
- {Use '\string\newbibmacro' to define this macro}}
- {\csletcs{abx@macro@#1}{abx@macro@#2}}}
- % {<name>}
- \newrobustcmd*{\usebibmacro}{%
- \@ifstar
- {\blx@usebibmacro@i}
- {\blx@usebibmacro}}
- \def\blx@usebibmacro#1{%
- \blx@usebibmacro@i{\detokenize{#1}}}
- \def\blx@usebibmacro@i#1{%
- \ifcsundef{abx@macro@#1}
- {\blx@error
- {Bibliography macro '#1' undefined}
- {Use '\string\newbibmacro' to define this macro}}
- {\csuse{abx@macro@#1}}}
- % {<name>}{<true>}{<false>}
- \def\blx@imc@ifbibmacroundef#1{%
- \ifcsundef{abx@macro@#1}}
- \def\ifbibmacroundef{\blx@imc@ifbibmacroundef}
- % {<field>}
- \def\blx@imc@thefield#1{\csuse{abx@field@#1}}
- \def\blx@imc@strfield#1{%
- \ifcsdef{abx@field@#1}
- {\detokenize\expandafter\expandafter\expandafter
- {\csname abx@field@#1\endcsname}}
- {}}
- \def\blx@imc@csfield#1{\usefield{\unexpanded}{#1}}
- % {<command>}{<field>}
- \def\blx@imc@usefield#1#2{%
- \expandafter\expandafter\expandafter#1%
- \expandafter\expandafter\expandafter{\csname abx@field@#2\endcsname}}
- % {<plainlist>}
- \def\blx@imc@thelist#1{\csuse{abx@list@#1}}
- \def\blx@imc@strlist#1{%
- \ifcsdef{abx@list@#1}
- {\detokenize\expandafter\expandafter\expandafter
- {\csname abx@list@#1\endcsname}}
- {}}
- % {<namelist>}
- \def\blx@imc@thename#1{\csuse{abx@name@#1}}
- \def\blx@imc@strname#1{%
- \ifcsdef{abx@name@#1}
- {\detokenize\expandafter\expandafter\expandafter
- {\csname abx@name@#1\endcsname}}
- {}}
- % We have to save cleared fields/lists/names in case a related entry
- % needs them for tests
- \let\abx@dorelfields\@empty
- \let\abx@dorellists\@empty
- \let\abx@dorelnames\@empty
- % {<field>}
- % If there is a related field in the entry, save a special copy in case
- % the related entry needs it for tests. See the corresponding tests in
- % \blx@save{field,list,name}
- \protected\def\blx@imc@clearfield#1{%
- \ifdef\abx@field@related
- {\csletcs{abx@field@relsaved#1}{abx@field@#1}%
- \listadd\abx@dorelfields{#1}}
- {}%
- \csundef{abx@field@#1}}
- % {<plainlist>}
- % If there is a related field in the entry, save a special copy in case
- % the related entry needs it for tests. See the corresponding tests in
- % \blx@save{field,list,name}
- \protected\def\blx@imc@clearlist#1{%
- \ifcsundef{abx@list@#1}
- {}
- {\ifdef\abx@field@related
- {\csletcs{abx@list@relsaved#1}{abx@list@#1}%
- \csletcs{etb@tgl@abx@bool@morerelsaved#1}{etb@tgl@abx@bool@more#1}%
- \csletcs{c@relsaved#1}{c@#1}%
- \listadd\abx@dorellists{#1}}
- {}%
- \togglefalse{abx@bool@more#1}%
- \csundef{abx@list@#1}%
- \csname c@#1\endcsname\z@}}
- % {<namelist>}
- % If there is a related field in the entry, save a special copy in case
- % the related entry needs it for tests. See the corresponding tests in
- % \blx@save{field,list,name}
- \protected\def\blx@imc@clearname#1{%
- \ifcsundef{abx@name@#1}
- {}
- {\ifdef\abx@field@related
- {\csletcs{abx@name@relsaved#1}{abx@name@#1}%
- \csletcs{etb@tgl@abx@bool@morerelsaved#1}{etb@tgl@abx@bool@more#1}%
- \csletcs{c@relsaved#1}{c@#1}%
- \listadd\abx@dorelnames{#1}}
- {}%
- \togglefalse{abx@bool@more#1}%
- \csundef{abx@name@#1}%
- \csname c@#1\endcsname\z@}}
- % {<field>}{<macro>}
- \protected\def\blx@imc@restorefield#1{\cslet{abx@field@#1}}
- % {<plainlist>}{<macro>}
- \protected\def\blx@imc@restorelist#1{\cslet{abx@list@#1}}
- % {<namelist>}{<macro>}
- \protected\def\blx@imc@restorename#1{\cslet{abx@name@#1}}
- % {<field>}{<macro>}
- \protected\def\blx@imc@savefield{%
- \@ifstar{\blx@savedata{field}}{\global\blx@savedata{field}}}
- \def\blx@savedata#1#2#3{\letcs#3{abx@#1@#2}}
- % {<plainlist>}{<macro>}
- \protected\def\blx@imc@savelist{%
- \@ifstar{\blx@savedata{list}}{\global\blx@savedata{list}}}
- % {<namelist>}{<macro>}
- \protected\def\blx@imc@savename{%
- \@ifstar{\blx@savedata{name}}{\global\blx@savedata{name}}}
- % {<field>}{<csname>}
- \protected\def\blx@imc@savefieldcs{%
- \@ifstar{\blx@savedatacs{field}}{\global\blx@savedatacs{field}}}
- \def\blx@savedatacs#1#2#3{\csletcs{#3}{abx@#1@#2}}
- % {<plainlist>}{<csname>}
- \protected\def\blx@imc@savelistcs{%
- \@ifstar{\blx@savedatacs{list}}{\global\blx@savedatacs{list}}}
- % {<namelist>}{<csname>}
- \protected\def\blx@imc@savenamecs{%
- \@ifstar{\blx@savedatacs{name}}{\global\blx@savedatacs{name}}}
- % {<field>}{<true>}{<false>}
- \def\blx@imc@iffieldundef#1{%
- \ifcsundef{abx@field@#1}}
- % {<plainlist>}{<true>}{<false>}
- \def\blx@imc@iflistundef#1{%
- \ifcsundef{abx@list@#1}}
- % {<namelist>}{<true>}{<false>}
- \def\blx@imc@ifnameundef#1{%
- \ifcsundef{abx@name@#1}}
- % {<field1>}{<field2>}{<true>}{<false>}
- \def\blx@imc@iffieldsequal#1#2{%
- \ifcsequal{abx@field@#1}{abx@field@#2}}
- % {<plainlist1>}{<plainlist2>}{<true>}{<false>}
- \def\blx@imc@iflistsequal#1#2{%
- \ifcsequal{abx@list@#1}{abx@list@#2}}
- % {<namelist1>}{<namelist2>}{<true>}{<false>}
- \def\blx@imc@ifnamesequal#1#2{%
- \ifcsundef{abx@name@#1}
- {\@secondoftwo}
- {\ifcsundef{abx@name@#2}
- {\@secondoftwo}
- {\blx@ifnamesequal{#1}{#2}}}}
- \def\blx@ifnamesequal#1#2{%
- \begingroup
- \let\blx@tempa\@empty
- \expandafter\expandafter
- \expandafter\blx@ifnamesequal@i\csname abx@name@#2\endcsname
- \let\blx@tempb\blx@tempa
- \let\blx@tempa\@empty
- \expandafter\expandafter
- \expandafter\blx@ifnamesequal@i\csname abx@name@#1\endcsname
- \expandafter\endgroup
- \ifx\blx@tempa\blx@tempb
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}
- \def\blx@ifnamesequal@i#1#2{%
- \expandafter\blx@ifnamesequal@ii#2{}&}
- \def\blx@ifnamesequal@ii#1{%
- \ifblank{#1}
- {\blx@namebreak}
- {\blx@ifnamesequal@iii#1%
- \blx@ifnamesequal@ii}}
- % These explicit nameparts are alright as they are for bibtex only
- % biber names will always have a hash generated from all nameparts in datamodel
- \def\blx@ifnamesequal@iii#1#2{%
- \setkeys{blx@opt@name}{#1}%
- \setkeys{blx@opt@namepart}{#2}%
- \ifdef\abx@field@hash
- {\eappto\blx@tempa{{\abx@field@hash}}}
- {\eappto\blx@tempa{{{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}}}}}
- % {<field>}{<macro>}{<true>}{<false>}
- \def\blx@imc@iffieldequals#1#2{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\ifundef#2%
- {\@secondoftwo}
- {\expandafter\ifx\csname abx@field@#1\endcsname#2%
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}}}
- % {<plainlist>}{<macro>}{<true>}{<false>}
- \def\blx@imc@iflistequals#1#2{%
- \blx@imc@iflistundef{#1}
- {\@secondoftwo}
- {\ifundef#2%
- {\@secondoftwo}
- {\expandafter\ifx\csname abx@list@#1\endcsname#2%
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}}}
- % {<namelist>}{<macro>}{<true>}{<false>}
- \def\blx@imc@ifnameequals#1#2{% FIXME
- \blx@imc@ifnameundef{#1}
- {\@secondoftwo}
- {\ifundef#2%
- {\@secondoftwo}
- {\expandafter\ifx\csname abx@name@#1\endcsname#2%
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}}}
- % {<field>}{<csname>}{<true>}{<false>}
- \def\blx@imc@iffieldequalcs#1{%
- \ifcsequal{abx@field@#1}}
- % {<plainlist>}{<csname>}{<true>}{<false>}
- \def\blx@imc@iflistequalcs#1{%
- \ifcsequal{abx@list@#1}}
- % {<namelist>}{<csname>}{<true>}{<false>}
- \def\blx@imc@ifnameequalcs#1{% FIXME
- \ifcsequal{abx@name@#1}}
- % {<field>}{<string>}{<true>}{<false>}
- \protected\long\def\blx@imc@iffieldequalstr#1#2{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\expandafter\expandafter\expandafter\ifstrequal
- \expandafter\expandafter\expandafter{%
- \csname abx@field@#1\endcsname}{#2}}}
- % {<field>}{<true>}{<false>}
- \protected\def\blx@imc@iffieldxref#1{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\blx@whichxref
- {\blx@iffieldxref{#1}}
- {\@secondoftwo}}}
- \def\blx@iffieldxref#1#2{%
- \begingroup
- \letcs\blx@tempa{abx@field@#2}%
- \letcs\blx@tempb{abx@field@#1}%
- \blx@resetdata
- \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}%
- \blx@resetdata
- \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}%
- \blx@resetdata
- \blx@getdata{\blx@tempa}%
- \blx@imc@ifnameequals{#1}\blx@tempb
- {\aftergroup\@firstoftwo}
- {\aftergroup\@secondoftwo}%
- \endgroup}
- % {<string>}{<true>}{<false>}
- \protected\def\blx@imc@ifcurrentfield#1{%
- \begingroup
- \def\blx@tempa{#1}%
- \ifx\currentfield\blx@tempa
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi
- \endgroup}
- % {<string>}{<true>}{<false>}
- \protected\def\blx@imc@ifcurrentlist#1{%
- \begingroup
- \def\blx@tempa{#1}%
- \ifx\currentlist\blx@tempa
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi
- \endgroup}
- % {<string>}{<true>}{<false>}
- \protected\def\blx@imc@ifcurrentname#1{%
- \begingroup
- \def\blx@tempa{#1}%
- \ifx\currentname\blx@tempa
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi
- \endgroup}
- % {<string>}{<true>}{<false>}
- \protected\def\blx@imc@ifentrytype#1{%
- \begingroup
- \def\blx@tempa{#1}%
- \ifx\abx@field@entrytype\blx@tempa
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi
- \endgroup}
- % {<true>}{<false>}
- \def\blx@imc@ifmorenames{%
- \ifundef\currentname
- {\@secondoftwo}
- {\iftoggle{abx@bool@more\currentname}
- {\@firstoftwo}
- {\ifnum\c@listtotal>\c@liststop
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}}}
- % {<true>}{<false>}
- \def\blx@imc@ifmoreitems{%
- \ifundef\currentlist
- {\@secondoftwo}
- {\iftoggle{abx@bool@more\currentlist}
- {\@firstoftwo}
- {\ifnum\c@listtotal>\c@liststop
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}}}
- % {<true>}{<false>}
- \def\blx@imc@iffirstcitekey{%
- \ifboolexpr{ ( test {\ifnumequal\c@multicitetotal\z@}
- and test {\ifnumequal\c@citecount\@ne} )
- or ( test {\ifnumgreater\c@multicitetotal\z@}
- and test {\ifnumequal\c@multicitecount\@ne}
- and test {\ifnumequal\c@citecount\@ne} ) }}
- \def\blx@imc@iflastcitekey{%
- \ifboolexpr{ test {\ifnumequal\c@citecount\c@citetotal}
- and test {\ifnumequal\c@multicitecount\c@multicitetotal} }}
- % {<category>}{<true>}{<false>}
- \protected\def\blx@imc@ifcategory{%
- \ifdef\abx@field@entrykey
- {\blx@imc@ifentrycategory\abx@field@entrykey}
- {\expandafter\@secondoftwo\@gobble}}
- % {<entrykey>}{<category>}{<true>}{<false>}
- \protected\def\blx@imc@ifentrycategory{%
- \blx@xsanitizeafter\blx@imc@ifentrycategory@i}
- \def\blx@imc@ifentrycategory@i#1#2{%
- \ifcsdef{blx@catg@\detokenize{#2}}
- {\ifinlistcs{#1}{blx@catg@\detokenize{#2}}}
- {\@secondoftwo}}
- % {<keyword>}{<true>}{<false>}
- \protected\def\blx@imc@ifkeyword{%
- \ifdef\abx@field@entrykey
- {\blx@imc@ifentrykeyword\abx@field@entrykey}
- {\expandafter\@secondoftwo\@gobble}}
- % {<entrykey>}{<keyword>}{<true>}{<false>}
- \protected\def\blx@imc@ifentrykeyword{%
- \blx@xsanitizeafter\blx@imc@ifentrykeyword@i}
- \def\blx@imc@ifentrykeyword@i#1#2{%
- \ifcsdef{blx@keyw@\the\c@refsection @\detokenize{#2}}
- {\ifinlistcs{#1}{blx@keyw@\the\c@refsection @\detokenize{#2}}}
- {\@secondoftwo}}
- % {<true>}{<false>}
- \protected\def\blx@ifciteseen@global{%
- \ifbool{citetracker}
- {\ifdef\abx@field@entrykey
- {\expandafter\blx@ifseen@global
- \expandafter{\abx@field@entrykey}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- \protected\def\blx@ifciteseen@context{%
- \ifbool{citetracker}
- {\ifdef\abx@field@entrykey
- {\expandafter\blx@ifseen@context
- \expandafter{\abx@field@entrykey}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- \protected\def\blx@ifciteseen@context{%
- \ifbool{citetracker}
- {\ifdef\abx@field@entrykey
- {\expandafter\blx@ifseen@context
- \expandafter{\abx@field@entrykey}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- % {<entrykey>}{<true>}{<false>}
- \protected\def\blx@ifentryseen@global{%
- \blx@xsanitizeafter\blx@ifseen@global}
- \protected\def\blx@ifentryseen@context{%
- \blx@xsanitizeafter\blx@ifseen@context}
- \def\blx@ifseen@global#1{%
- \ifbool{citetracker}
- {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}
- {\@secondoftwo}}
- \def\blx@ifseen@context#1{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\ifinlistcs{#1}{blx@fsee@\the\c@refsection}}
- {\ifinlistcs{#1}{blx@bsee@\the\c@refsection}}}
- {\@secondoftwo}}
- % {<true>}{<false>}
- \def\blx@ifciteibid@global{%
- \ifbool{citetracker}
- {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}
- {\@secondoftwo}}
- \def\blx@ifciteibid@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
- {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
- {\@secondoftwo}}
- \def\blx@ifciteibid@strict{%
- \ifbool{citetracker}
- {\blx@ifcitesingle
- {\blx@ifciteibid@global}
- {\@secondoftwo}}
- {\@secondoftwo}}
- \def\blx@ifciteibid@constrict{%
- \ifbool{citetracker}
- {\blx@ifcitesingle
- {\iftoggle{blx@footnote}
- {\blx@ifmpfncheck
- {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
- {\@secondoftwo}}
- {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- % {<true>}{<false>}
- \def\blx@ifciteidem@global{%
- \ifbool{citetracker}
- {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}
- {\@secondoftwo}}
- \def\blx@ifciteidem@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot}
- {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}}
- {\@secondoftwo}}
- \let\blx@ifciteidem@strict\blx@ifciteidem@global
- \def\blx@ifciteidem@constrict{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@ifmpfncheck
- {\blx@imc@iffieldequals{fullhash}\blx@lasthash@foot}
- {\@secondoftwo}}
- {\blx@imc@iffieldequals{fullhash}\blx@lasthash@text}}
- {\@secondoftwo}}
- % {<true>}{<false>}
- \def\blx@ifopcit@global{%
- \ifbool{citetracker}
- {\blx@imc@iffieldundef{namehash}
- {\@secondoftwo}
- {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}
- {\@secondoftwo}}
- \def\blx@ifopcit@context{%
- \ifbool{citetracker}
- {\blx@imc@iffieldundef{namehash}
- {\@secondoftwo}
- {\iftoggle{blx@footnote}
- {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@namehash}}
- {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}}
- {\@secondoftwo}}
- \def\blx@ifopcit@strict{%
- \ifbool{citetracker}
- {\blx@ifcitesingle
- {\blx@ifopcit@global}
- {\@secondoftwo}}
- {\@secondoftwo}}
- \def\blx@ifopcit@constrict{%
- \ifbool{citetracker}
- {\blx@ifcitesingle
- {\blx@imc@iffieldundef{namehash}
- {\@secondoftwo}
- {\iftoggle{blx@footnote}
- {\blx@ifmpfncheck
- {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@foot@\abx@field@namehash}}
- {\@secondoftwo}}
- {\blx@imc@iffieldequalcs{entrykey}{blx@lastkey@text@\abx@field@namehash}}}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- % {<true>}{<false>}
- \def\blx@ifloccit@global{%
- \ifbool{citetracker}
- {\blx@loccit@check{text}}
- {\@secondoftwo}}
- \def\blx@ifloccit@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@loccit@check{foot}}
- {\blx@loccit@check{text}}}
- {\@secondoftwo}}
- \def\blx@ifloccit@strict{%
- \ifbool{citetracker}
- {\blx@ifcitesingle
- {\blx@loccit@numcheck{text}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- \def\blx@ifloccit@constrict{%
- \ifbool{citetracker}
- {\blx@ifcitesingle
- {\iftoggle{blx@footnote}
- {\blx@ifmpfncheck
- {\blx@loccit@numcheck{foot}}
- {\@secondoftwo}}
- {\blx@loccit@numcheck{text}}}
- {\@secondoftwo}}
- {\@secondoftwo}}
- \def\blx@loccit@check#1{%
- \blx@imc@iffieldundef{postnote}
- {\@secondoftwo}
- {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}}
- \def\blx@loccit@numcheck#1{%
- \blx@imc@iffieldundef{postnote}
- {\@secondoftwo}
- {\expandafter\blx@imc@ifpages
- \expandafter{\abx@field@postnote}
- {\blx@imc@iffieldequalcs{postnote}{blx@lastnote@#1@\abx@field@entrykey}}
- {\@secondoftwo}}}
- % {<true>}{<false>}
- \def\blx@ifmpfncheck{%
- \ifnum\numexpr\value\@mpfn-\blx@lastmpfn<\tw@
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}
- \def\blx@mpfnsave{%
- \xdef\blx@lastmpfn{\the\value\@mpfn}}
- \def\blx@mpfnreset{%
- \global\let\blx@lastmpfn\z@}
- \blx@mpfnreset
- % {<true>}{<false>}
- \def\blx@imc@iffirstonpage{%
- \ifbool{pagetracker}
- {\iftoggle{blx@footnote}
- {\blx@iffirstonpage{fnpage}}
- {\blx@iffirstonpage{page}}}
- {\@secondoftwo}}
- \def\blx@iffirstonpage#1{%
- \ifcsundef{blx@#1@\number\c@instcount}
- {\@secondoftwo}
- {\expandafter\blx@iffirstonpage@i
- \expandafter{\number\numexpr\c@instcount-1}{#1}}}
- \def\blx@iffirstonpage@i#1#2{%
- \ifcsundef{blx@#2@#1}
- {\ifnum#1>\@ne
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi
- {\expandafter\blx@iffirstonpage@i
- \expandafter{\number\numexpr#1-1}{#2}}
- {\@firstoftwo}}
- {\ifnum\csuse{blx@#2@\number\c@instcount}=%
- \csuse{blx@#2@#1} %
- \expandafter\@secondoftwo
- \else
- \expandafter\@firstoftwo
- \fi}}
- % {<count1>}{<count2>}{<true>}{<false>}
- \def\blx@imc@ifsamepage#1#2{%
- \ifbool{pagetracker}
- {\ifcsundef{blx@page@\number\numexpr#1}
- {\ifcsundef{blx@fnpage@\number\numexpr#1}
- {\@secondoftwo}
- {\blx@ifsamepage{#1}{#2}{fnpage}}}
- {\blx@ifsamepage{#1}{#2}{page}}}
- {\@secondoftwo}}
- \def\blx@ifsamepage#1#2#3{%
- \ifcsundef{blx@page@\number\numexpr#2}
- {\ifcsundef{blx@fnpage@\number\numexpr#2}
- {\@secondoftwo}
- {\blx@ifsamepage@i{#1}{#2}{#3}{fnpage}}}
- {\blx@ifsamepage@i{#1}{#2}{#3}{page}}}
- \def\blx@ifsamepage@i#1#2#3#4{%
- \ifnum\csuse{blx@#3@\number\numexpr#1}=%
- \csuse{blx@#4@\number\numexpr#2} %
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}
- % {<string>}{<true>}{<false>}
- \protected\long\def\blx@imc@ifinteger#1{%
- \begingroup
- \def\do##1{\uccode`##1=`\%}%
- \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9%
- \makeatletter
- \catcode`\%=9
- \endlinechar\m@ne
- \uppercase{\scantokens{\def\blx@tempa{#1}}}%
- \ifx\blx@tempa\@empty
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi
- \endgroup}
- % {<field>}{<true>}{<false>}
- \protected\def\blx@imc@iffieldint#1{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\expandafter\expandafter
- \expandafter\blx@imc@ifinteger
- \expandafter\expandafter
- \expandafter{\csname abx@field@#1\endcsname}}}
- % {<string>}{<true>}{<false>}
- \protected\def\blx@imc@ifnumeral{%
- \blx@ifnum\blx@hook@ifnum}
- \protected\def\blx@imc@ifnumerals{%
- \blx@ifnum\blx@hook@ifnums}
- \protected\def\blx@imc@ifpages{%
- \blx@ifnum\blx@hook@ifpages}
- \long\def\blx@ifnum#1#2{%
- \begingroup
- \let\protect\@unexpandable@protect
- \uppercase{\edef\blx@tempa{#2}}%
- \ifx\blx@tempa\@empty
- \aftergroup\@secondoftwo
- \else
- \makeatletter
- \catcode`\%=9
- \endlinechar\m@ne
- \everyeof{\noexpand}#1%
- \uppercase{\edef\blx@tempa{\scantokens{#2}}}%
- \ifx\blx@tempa\@empty
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi
- \fi
- \endgroup}
- \def\blx@hook@ifnum{%
- \def\do##1{\uccode`##1=`\%}%
- \do\ \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9%
- \do\i\do\v\do\x\do\l\do\c\do\d\do\m
- \do\I\do\V\do\X\do\L\do\C\do\D\do\M
- \blx@donumchars
- \let\RN\@firstofone
- \let\Rn\@firstofone}
- \def\blx@hook@ifnums{%
- \blx@hook@ifnum
- \def\do##1{\uccode`##1=`\%}%
- \blx@dorangechars
- \def\do##1{\let##1\@empty}%
- \blx@dorangecmds}
- \def\blx@hook@ifpages{%
- \blx@hook@ifnum
- \blx@hook@ifnums
- \def\do##1{\let##1\@empty}%
- \blx@dopagecmds}
- % {<field>}{<true>}{<false>}
- \protected\def\blx@imc@iffieldnum#1{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\expandafter\expandafter
- \expandafter\blx@imc@ifnumeral
- \expandafter\expandafter
- \expandafter{\csname abx@field@#1\endcsname}}}
- \protected\def\blx@imc@iffieldnums#1{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\expandafter\expandafter
- \expandafter\blx@imc@ifnumerals
- \expandafter\expandafter
- \expandafter{\csname abx@field@#1\endcsname}}}
- \protected\def\blx@imc@iffieldpages#1{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\expandafter\expandafter
- \expandafter\blx@imc@ifpages
- \expandafter\expandafter
- \expandafter{\csname abx@field@#1\endcsname}}}
- % {<chars>}
- \newrobustcmd*{\DeclareNumChars}{%
- \@ifstar
- {\blx@defnumchars}
- {\global\let\blx@donumchars\@empty
- \blx@defnumchars}}
- \def\blx@defnumchars#1{%
- \ifblank{#1}
- {}
- {\expandafter\blx@defdochars
- \expandafter\blx@donumchars
- \detokenize{#1}\relax}}
- % {<chars>}
- \newrobustcmd*{\DeclareRangeChars}{%
- \@ifstar
- {\blx@defrangechars}
- {\global\let\blx@dorangechars\@empty
- \blx@defrangechars}}
- \def\blx@defrangechars#1{%
- \ifblank{#1}
- {}
- {\expandafter\blx@defdochars
- \expandafter\blx@dorangechars
- \detokenize{#1}\relax}}
- \def\blx@defdochars#1#2{%
- \ifx#2\relax
- \else
- \xdef#1{%
- \expandonce#1\noexpand\do
- \expandafter\noexpand\csname#2\endcsname}%
- \expandafter\blx@defdochars
- \expandafter#1%
- \fi}
- % {<cstokens>}
- \newrobustcmd*{\DeclareRangeCommands}{%
- \@ifstar
- {\blx@defrangecmds}
- {\global\let\blx@dorangecmds\@empty
- \blx@defrangecmds}}
- \def\blx@defrangecmds#1{%
- \ifblank{#1}
- {}
- {\blx@defrangecmds@i#1&}}
- \def\blx@defrangecmds@i#1{%
- \ifx%
- \else
- \gappto\blx@dorangecmds{\do#1}%
- \expandafter\blx@defrangecmds@i
- \fi}
- % {<cstokens>}
- \newrobustcmd*{\DeclarePageCommands}{%
- \@ifstar
- {\blx@defpagecmds}
- {\global\let\blx@dopagecmds\@empty
- \blx@defpagecmds}}
- \def\blx@defpagecmds#1{%
- \ifblank{#1}
- {}
- {\blx@defpagecmds@i#1&}}
- \def\blx@defpagecmds@i#1{%
- \ifx%
- \else
- \gappto\blx@dopagecmds{\do#1}%
- \expandafter\blx@defpagecmds@i
- \fi}
- \DeclareNumChars{.}
- \DeclareRangeChars{~,;-+/}
- \DeclareRangeCommands{%
- \ \,\space\nobreakspace\addspace\addnbspace
- \addthinspace\addnbthinspace\addlowpenspace
- \addhighpenspace\addlpthinspace\addhpthinspace
- \adddotspace\addabbrvspace\&\psq\psqq
- \bibrangedash\bibdaterangesep\bibtimerangesep\textendash\textemdash\bibrangessep}
- \DeclarePageCommands{\pno\ppno}
- % *{<code>}
- \newrobustcmd*{\NumCheckSetup}{\appto\blx@hook@ifnum}
- \newcommand*{\NumcheckSetup}{\NumCheckSetup}
- % [<pagination>][<postpro>]{<string>}
- \newrobustcmd*{\blx@imc@mkpageprefix}[1][pagination]{%
- \begingroup
- \def\blx@tempa{\blx@mkpageprefix{page}}%
- \iffieldundef{#1}
- {}
- {\iffieldequalstr{#1}{none}
- {\def\blx@tempa{\blx@mkpageprefix@i}}
- {\iffieldbibstring{#1}
- {\edef\blx@tempa{\blx@mkpageprefix{\thefield{#1}}}}
- {\blx@warning@entry{%
- Unknown pagination type '\strfield{#1}'}}}}%
- \@ifnextchar[%]
- {\blx@tempa}
- {\blx@tempa[\@firstofone]}}
- \protected\long\def\blx@mkpageprefix#1[#2]#3{%
- \ifnumeral{#3}
- {\bibstring{#1}\ppspace}
- {\ifnumerals{#3}
- {\bibstring{#1s}\ppspace}
- {\def\pno{\bibstring{#1}}%
- \def\ppno{\bibstring{#1s}}}}%
- \blx@mkpageprefix@i[#2]{#3}}
- \long\def\blx@mkpageprefix@i[#1]#2{#1{#2}\endgroup}
- % [<pagination>][<postpro>]{<string>}
- \newrobustcmd*{\blx@imc@mkpagetotal}[1][bookpagination]{%
- \begingroup
- \def\blx@tempa{\blx@mkpagetotal{pagetotal}}%
- \iffieldundef{#1}
- {}
- {\iffieldequalstr{#1}{none}
- {\def\blx@tempa{\blx@mkpagetotal@i}}
- {\iffieldplusstringbibstring{#1}{total}
- {\edef\blx@tempa{\blx@mkpagetotal{\thefield{#1}total}}}
- {\blx@warning@entry{%
- Unknown pagination type '\strfield{#1}total'}}}}%
- \@ifnextchar[%]
- {\blx@tempa}
- {\blx@tempa[\@firstofone]}}
- \protected\long\def\blx@mkpagetotal#1[#2]#3{%
- \ifnumeral{#3}
- {\setbox\@tempboxa=\hbox{%
- \blx@tempcnta0#3\relax
- \ifnum\blx@tempcnta=\@ne
- \aftergroup\@firstoftwo
- \else
- \aftergroup\@secondoftwo
- \fi}%
- {#2{#3}\ppspace\bibstring{#1}}
- {#2{#3}\ppspace\bibstring{#1s}}}
- {\def\pno{\bibstring{#1}}%
- \def\ppno{\bibstring{#1s}}%
- #2{#3}}%
- \endgroup}
- \long\def\blx@mkpagetotal@i[#1]#2{#1{#2}\endgroup}
- \newcounter{mincomprange}
- \newcounter{maxcomprange}
- \newcounter{mincompwidth}
- \setcounter{mincomprange}{10}
- \setcounter{maxcomprange}{100000}
- \setcounter{mincompwidth}{1}
- \def\abx@rangeproclimit{100000}
- % {<rangefield>}
- \newcommand*{\rangelen}[1]{%
- \ifcsdef{abx@range@#1}
- {\csuse{abx@range@#1}}
- {}}
- % <*>[<postpro>]{<string>}
- \newrobustcmd*{\mknormrange}{%
- \begingroup
- \@ifstar
- {\blx@range@aux\blx@normrange@ii}
- {\blx@range@aux\blx@normrange@i}}
- \def\blx@range@aux#1{%
- \@ifnextchar[{#1}{#1[\@firstofone]}}
- \def\blx@normrange@i[#1]#2{%
- \let\blx@tempa\@empty
- \protected\def\blx@range@out@value{\appto\blx@tempa}%
- \let\blx@range@out@delim\blx@range@out@value
- \let\blx@range@split\blx@normrange@split
- \let\blx@range@process\blx@normrange@process
- \blx@range@chunk{#2}%
- \edef\blx@tempa{\endgroup
- \unexpanded{#1}{\expandonce\blx@tempa}}%
- \blx@tempa}
- \def\blx@normrange@ii[#1]#2{%
- \protected\def\blx@range@out@value{#1}%
- \let\blx@range@out@delim\@firstofone
- \let\blx@range@split\blx@normrange@split
- \let\blx@range@process\blx@normrange@process
- \blx@range@chunk{#2}%
- \endgroup}
- \def\blx@range@chunk#1{%
- \blx@range@chunk@semcol#1;&}
- \def\blx@range@chunk@semcol#1;#2&{%
- \notblank{#1}
- {\blx@range@chunk@comma#1,&}
- {}%
- \notblank{#2}
- {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
- \blx@range@chunk@semcol#2&}
- {}}
- \def\blx@range@chunk@comma#1,#2&{%
- \notblank{#1}
- {\blx@range@chunk@sep#1\bibrangessep&}
- {}%
- \notblank{#2}
- {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
- \blx@range@chunk@comma#2&}
- {}}
- \def\blx@range@chunk@sep#1\bibrangessep#2&{%
- \notblank{#1}
- {\expandafter\blx@range@split
- \expandafter{\@firstofone#1}}
- {}%
- \notblank{#2}
- {\notblank{#1}{\blx@range@out@delim{\bibrangessep}}{}%
- \blx@range@chunk@sep#2&}
- {}}
- % Unicode en-dashes are supported in blx-unicode.def
- \def\blx@normrange@split#1{%
- \def\blx@normrange@abort{\blx@range@out@value{#1}}%
- \blx@imc@ifpages{#1}
- {\blx@normrange@range#1\bibrangedash\bibrangedash&}
- {\blx@normrange@abort}}
- \def\blx@normrange@range#1\bibrangedash#2\bibrangedash#3&{%
- \ifblank{#3}
- {\blx@normrange@hyphen#1--&}
- {\ifblank{#2}
- {\blx@range@out@value{#1\bibrangedash}}
- {\ifblank{#1}
- {\blx@range@out@value{\bibrangedash#2}}
- {\blx@range@process{#1}{#2}}}}}
- \def\blx@normrange@hyphen#1-#2-#3&{%
- \ifblank{#3}
- {\blx@normrange@abort}
- {\ifblank{#2}
- {\ifblank{#1}
- {\let\blx@tempb\@empty}
- {\def\blx@tempb{#1}}%
- \blx@normrange@hyphen@i#3&}
- {\ifblank{#1}
- {\blx@range@out@value{\bibrangedash#2}}
- {\blx@range@process{#1}{#2}}}}}
- \def\blx@normrange@hyphen@i#1-#2&{%
- \ifblank{#1#2}
- {\expandafter\blx@range@out@value
- \expandafter{\blx@tempb\bibrangedash}}
- {\notblank{#1}
- {\ifdefempty\blx@tempb
- {\blx@range@out@value{\bibrangedash#1}}
- {\expandafter\blx@range@process
- \expandafter{\blx@tempb}{#1}}}
- {\blx@normrange@hyphen@i#2&}}}
- \def\blx@normrange@process#1#2{%
- \blx@range@out@value{#1\bibrangedash#2}}
- % <*>[<postpro>]{<string>}
- \newrobustcmd*{\mkcomprange}{%
- \begingroup
- \@ifstar
- {\blx@range@aux\blx@comprange@ii}
- {\blx@range@aux\blx@comprange@i}}
- \def\blx@comprange@i[#1]#2{%
- \let\blx@tempa\@empty
- \protected\def\blx@range@out@value{\appto\blx@tempa}%
- \let\blx@range@out@delim\blx@range@out@value
- \let\blx@range@split\blx@normrange@split
- \let\blx@range@process\blx@comprange@check
- \blx@range@chunk{#2}%
- \edef\blx@tempa{\endgroup
- \unexpanded{#1}{\expandonce\blx@tempa}}%
- \blx@tempa}
- \def\blx@comprange@ii[#1]#2{%
- \protected\def\blx@range@out@value{#1}%
- \let\blx@range@out@delim\@firstofone
- \let\blx@range@split\blx@normrange@split
- \let\blx@range@process\blx@comprange@check
- \blx@range@chunk{#2}%
- \endgroup}
- \def\blx@comprange@check#1#2{%
- \blx@imc@ifinteger{#1}
- {\blx@imc@ifinteger{#2}
- {\blx@comprange@comp{#1}{#2}}
- {\blx@range@out@value{#1\bibrangedash#2}}}
- {\blx@range@out@value{#1\bibrangedash#2}}}
- \def\blx@comprange@comp#1#2{%
- \def\blx@tempb{#1}%
- \def\blx@tempc{#2}%
- \let\blx@tempd\blx@tempc
- \ifnum\c@maxcomprange<\abx@rangeproclimit\relax
- \numdef\blx@tempe\abx@rangeproclimit
- \else
- \numdef\blx@tempe\c@maxcomprange
- \fi
- \blx@tempcntc=\blx@tempe\relax
- \ifnum
- \ifnum\c@mincompwidth<1\space1\fi
- \ifnum\c@maxcomprange<10\space1\fi
- \ifnum\c@mincomprange<\blx@tempb\space\else1\fi
- \ifnum\blx@tempb<\numexpr\blx@tempcntc*10\relax\else1\fi
- 0=\z@
- \expandafter\blx@comprange@comp@div
- \else
- \expandafter\blx@comprange@end
- \fi}
- \def\blx@comprange@end{%
- \numdef\blx@tempb\blx@tempb
- \ifnum\blx@tempe>\c@maxcomprange\relax
- \numdef\blx@tempc\blx@tempc
- \else
- \numdef\blx@tempc\blx@tempd
- \fi
- \edef\blx@tempb{%
- \blx@range@out@value{\blx@tempb\noexpand\bibrangedash\blx@tempc}}%
- \blx@tempb}
- \def\blx@comprange@comp@div{%
- \unless\ifnum\blx@tempb<\blx@tempcntc
- \blx@tempcnta\blx@tempb\relax
- \blx@tempcntb\blx@tempc\relax
- \divide\blx@tempcnta\blx@tempcntc
- \divide\blx@tempcntb\blx@tempcntc
- \ifnum\blx@tempcnta=\blx@tempcntb
- \edef\blx@tempd{\expandafter\@gobble\blx@tempd}%
- \numdef\blx@tempe\blx@tempcntc
- \fi
- \fi
- \divide\blx@tempcntc10\relax
- \ifnum
- \ifnum\blx@tempcntc<10 1\fi
- \ifnum\blx@tempcntc>\c@mincompwidth\else 1\fi
- 0=\z@
- \expandafter\blx@comprange@comp@div
- \else
- \expandafter\blx@comprange@end
- \fi}
- % <*>[<postpro>]{<string>}
- \newrobustcmd*{\mkfirstpage}{%
- \begingroup
- \@ifstar
- {\blx@firstpage\blx@firstpage@ii}
- {\blx@firstpage\blx@firstpage@i}}
- \def\blx@firstpage#1{%
- \@ifnextchar[{#1}{#1[\@firstofone]}}
- \def\blx@firstpage@i[#1]#2{%
- \let\blx@tempa\@empty
- \protected\def\blx@range@out@value{\appto\blx@tempa}%
- \let\blx@range@out@delim\blx@range@out@value
- \let\blx@range@split\blx@firstpage@split
- \blx@range@chunk{#2}%
- \edef\blx@tempa{\endgroup
- \unexpanded{#1}{\expandonce\blx@tempa}}%
- \blx@tempa}
- \def\blx@firstpage@ii[#1]#2{%
- \protected\def\blx@range@out@value{#1}%
- \let\blx@range@out@delim\@firstofone
- \let\blx@range@split\blx@firstpage@split
- \blx@range@chunk{#2}%
- \endgroup}
- % Unicode en-dashes are supported in blx-unicode.def
- \def\blx@firstpage@split#1{%
- \def\blx@firstpage@abort{\blx@range@out@value{#1}}%
- \blx@firstpage@range#1\bibrangedash\bibrangedash&}
- \def\blx@firstpage@range#1\bibrangedash#2\bibrangedash#3&{%
- \ifblank{#3}
- {\blx@firstpage@hyphen#1--&}
- {\ifblank{#1}
- {\blx@range@out@value{\bibrangedash#2}}
- {\blx@range@out@value{#1}}}}
- \def\blx@firstpage@hyphen#1-#2-#3&{%
- \ifblank{#3}
- {\blx@firstpage@abort}
- {\ifblank{#1}
- {\ifblank{#2}
- {\blx@firstpage@hyphen@i#3&}
- {\blx@range@out@value{\bibrangedash#2}}}
- {\blx@range@out@value{#1}}}}
- \def\blx@firstpage@hyphen@i#1-#2&{%
- \ifblank{#1}
- {\ifblank{#2}
- {\blx@firstpage@abort}
- {\blx@firstpage@hyphen@i#2&}}
- {\blx@range@out@value{\bibrangedash#1}}}
- \newcommand*{\ppspace}{\addnbspace}
- \newcommand*{\sqspace}{\addnbspace}
- \newrobustcmd*{\RN}[1]{%
- \begingroup
- \expandafter\RNfont
- \expandafter{\romannumeral#1}%
- \endgroup}
- \newrobustcmd*{\Rn}[1]{%
- \begingroup
- \expandafter\Rnfont
- \expandafter{\romannumeral#1}%
- \endgroup}
- \newcommand*{\RNfont}{\uppercase}
- \newcommand*{\Rnfont}{}
- % Delimiter interface
- % [<contextname, ...>]{<name, ...>}{<code>}
- \newrobustcmd*{\DeclareDelimFormat}{%
- \@ifstar
- {\blx@declaredelimclear}
- {\blx@declaredelim}}
- \def\blx@cleardelim#1{%
- \ifcsvoid{blx@declaredelimcontexts@#1}
- {}
- {\def\do##1{\csundef{blx@printdelim@##1@#1}}%
- \dolistcsloop{blx@declaredelimcontexts@#1}}%
- \cslet{blx@declaredelimcontexts@#1}\@empty}
- \newrobustcmd*{\blx@declaredelimclear}[3][]{%
- \blx@cleardelim{#2}%
- \ifblank{#1}
- {\blx@declaredelim{#2}{#3}}
- {\blx@declaredelim[#1]{#2}{#3}}}
- \newrobustcmd*{\blx@declaredelim}[3][]{%
- \ifblank{#1}
- {\blx@declaredelim@i{}{}{#2}{#3}}
- {\def\do##1{%
- \listcsadd{blx@declaredelimcontexts@#2}{##1}%
- \blx@declaredelim@i{blx@printdelim@##1@}{##1}{#2}{#3}}%
- \docsvlist{#1}}}%
- \def\blx@declaredelim@i#1#2#3#4{%
- \def\do@i##1{%
- \ifcsdef{#1##1}
- {\blx@inf@delimdeclare{##1}{#2}}
- {}%
- \csdef{#1##1}{#4}}%
- \forcsvlist{\do@i}{#3}}
- % *[<alias context, ...>]{<alias>}[<delim context>]{<delim>}
- \newrobustcmd*{\DeclareDelimAlias}{%
- \@ifstar
- {\blx@declaredelimalias@expl}
- {\blx@declaredelimalias@auto}}
- \newrobustcmd*{\blx@declaredelimalias@auto}[2]{%
- \blx@cleardelim{#1}%
- \blx@declaredelimalias@def{}{#1}{}{#2}%
- \ifcsvoid{blx@declaredelimcontexts@#2}
- {}
- {\def\do##1{%
- \blx@declaredelimalias@def
- {blx@printdelim@##1@}{#1}{blx@printdelim@##1@}{#2}}%
- \dolistcsloop{blx@declaredelimcontexts@#2}}}
- \def\blx@declaredelimalias@expl{%
- \@ifnextchar[%]
- {\blx@declaredelimalias@expl@i}
- {\blx@declaredelimalias@expl@i[]}}
- \def\blx@declaredelimalias@expl@i[#1]#2{%
- \@ifnextchar[%]
- {\blx@declaredelimalias@expl@iii{#1}{#2}}
- {\blx@declaredelimalias@expl@ii{#1}{#2}}}
- \def\blx@declaredelimalias@expl@ii#1#2#3{%
- \ifblank{#1}
- {\blx@declaredelimalias@def{}{#2}{}{#3}}
- {\def\do##1{%
- \blx@declaredelimalias@def
- {blx@printdelim@##1@}{#2}{blx@printdelim@##1@}{#3}}%
- \docsvlist{#1}}}
- \def\blx@declaredelimalias@expl@iii#1#2[#3]#4{%
- \ifblank{#1}
- {\ifblank{#3}
- {\blx@declaredelimalias@def{}{#2}{}{#4}}
- {\blx@declaredelimalias@def{}{#2}{blx@printdelim@#3@}{#4}}}
- {\ifblank{#3}
- {\def\do##1{%
- \blx@declaredelimalias@def
- {blx@printdelim@##1@}{#2}{}{#4}}}
- {\def\do##1{%
- \blx@declaredelimalias@def
- {blx@printdelim@##1@}{#2}{blx@printdelim@#3@}{#4}}}%
- \docsvlist{#1}}}
- \def\blx@declaredelimalias@def#1#2#3#4{%
- \ifcsdef{#1#2}
- {\blx@inf@delimdeclare{#2}{#1}}
- {}%
- \ifblank{#1}
- {}
- {\ifinlistcs{#1}{blx@declaredelimcontexts@#2}
- {}
- {\listcsadd{blx@declaredelimcontexts@#2}{#1}}}%
- \csdef{#1#2}{\ifcsundef{#3#4}{\csuse{#4}}{\csuse{#3#4}}}}
- \def\blx@delimcontext{none}
- \newcommand*{\printdelim}[2][]{%
- \ifblank{#1}
- {\ifcsdef{blx@printdelim@\blx@delimcontext @#2}
- {\csuse{blx@printdelim@\blx@delimcontext @#2}}
- {\ifcsdef{#2}% fall back on legacy macros
- {\csuse{#2}}
- {\blx@warn@delimuse{#2}{*}}}}
- {\ifcsdef{blx@printdelim@#1@#2}
- {\csuse{blx@printdelim@#1@#2}}
- {\blx@warn@delimuse{#2}{#1}}}}
- \newcommand*{\delimcontext}[1]{%
- \edef\blx@delimcontext{\blx@delimcontextalias{#1}}}
- \def\blx@delimcontextalias#1{%
- \ifcsdef{blx@delimcontextalias@#1}
- {\csuse{blx@delimcontextalias@#1}}
- {#1}}
- \newcommand*{\DeclareDelimcontextAlias}[2]{%
- \csdef{blx@delimcontextalias@#1}{#2}}
- \newrobustcmd*{\AtUsedriver}{%
- \@ifstar
- {\global\undef\blx@hook@usedriver
- \gappto\blx@hook@usedriver}
- {\gappto\blx@hook@usedriver}}
- \@onlypreamble\AtUsedriver
- \def\blx@imc@UseUsedriverHook{\csuse{blx@hook@usedriver}}
- \blx@regimcs{\UseUsedriverHook}
- \AtUsedriver{%
- \let\finentry\blx@finentry@usedrv
- \let\newblock\relax
- \let\abx@macro@bibindex\@empty
- \let\abx@macro@pageref\@empty}
- % {<init>}{<entrytype>}
- \protected\def\blx@imc@usedriver#1#2{%
- \begingroup
- \csuse{blx@hook@usedriver}%
- \csuse{blx@hook@bbxinit}#1%
- \delimcontext{bib}%
- \blx@beglangbib
- \blx@driver{#2}%
- \blx@endlangbib
- \endgroup}
- % Punctuation
- \protected\def\blx@initunit{%
- \global\togglefalse{blx@block}%
- \global\togglefalse{blx@unit}%
- \global\togglefalse{blx@insert}%
- \global\togglefalse{blx@lastins}%
- \global\togglefalse{blx@keepunit}%
- \global\let\blx@unitpunct\newunitpunct
- \blx@imc@resetpunctfont}
- \def\blx@begunit{%
- \toggletrue{blx@tempa}%
- \iftoggle{blx@insert}
- {\iftoggle{blx@unit}
- {\begingroup
- \let\blx@begunit\@empty
- \let\blx@endunit\@empty
- \let\blx@endnounit\@empty
- \blx@unitpunct\blx@postpunct
- \endgroup
- \global\togglefalse{blx@unit}%
- \togglefalse{blx@tempa}}
- {\blx@postpunct}%
- \iftoggle{blx@block}
- {\begingroup
- \let\blx@begunit\@empty
- \let\blx@endunit\@empty
- \let\blx@endnounit\@empty
- \newblockpunct
- \endgroup
- \global\togglefalse{blx@block}%
- \togglefalse{blx@tempa}}
- {}}
- {}%
- \blx@postpunct
- \blx@imc@resetpunctfont
- \iftoggle{blx@tempa}
- {}
- {\global\togglefalse{blx@insert}}%
- \blx@leavevmode
- \begingroup}
- \def\blx@endunit{%
- \endgroup
- \global\toggletrue{blx@insert}%
- \global\toggletrue{blx@lastins}}
- \def\blx@nounit{%
- \global\togglefalse{blx@lastins}}
- \def\blx@endnounit{%
- \endgroup\blx@nounit}
- \protected\def\blx@imc@newblock{%
- \global\toggletrue{blx@block}}%
- \protected\def\blx@imc@newunit{%
- \iftoggle{blx@keepunit}
- {}
- {\global\let\blx@unitpunct\newunitpunct
- \global\toggletrue{blx@unit}}}
- \protected\def\blx@imc@setunit{%
- \@ifstar\blx@setunit@i\blx@setunit}
- \long\def\blx@setunit#1{%
- \iftoggle{blx@keepunit}
- {}
- {\long\gdef\blx@unitpunct{#1}%
- \global\toggletrue{blx@unit}}}
- \def\blx@setunit@i{%
- \iftoggle{blx@lastins}
- {\blx@setunit}
- {\@gobble}}
- \protected\def\blx@imc@printunit{%
- \@ifstar\blx@printunit@i\blx@printunit}
- \def\blx@printunit#1{%
- \long\gdef\blx@unitpunct{#1\global\togglefalse{blx@keepunit}}%
- \global\toggletrue{blx@keepunit}%
- \global\toggletrue{blx@unit}}
- \def\blx@printunit@i{%
- \iftoggle{blx@lastins}
- {\blx@printunit}
- {\@gobble}}
- \protected\def\blx@imc@finentry{%
- \unspace\finentrypunct
- \blx@postpunct
- \blx@initunit}
- \protected\def\blx@finentry@usedrv{%
- \blx@setunit\relax}
- \protected\def\blx@finentry@inset{%
- \blx@setunit\entrysetpunct
- \global\toggletrue{blx@block}}
- \def\ifentryseen{\blx@imc@ifentryseen}
- \def\ifentryinbib{\blx@imc@ifentryinbib}
- \def\ifentrycategory{\blx@imc@ifentrycategory}
- \def\ifentrykeyword{\blx@imc@ifentrykeyword}
- \def\blx@imc@iflabeldateisdate{%
- \ifboolexpr{%
- togl {blx@labeldateparts}
- and not test {\iffieldundef{labeldatesource}}
- and
- (test {\iffieldequalstr{labeldatesource}{}}
- or test {\iffieldequalstr{labeldatesource}{year}})}}
- \def\blx@imc@ifdatehasyearonlyprecision#1{%
- \ifboolexpr{not test {\iffieldundef{#1year}}
- and (test {\ifcsstring{blx@dateformat@#1date}{year}}
- or (test {\iffieldundef{#1month}}
- and test {\iffieldundef{#1season}}))}}
- \def\blx@imc@ifdatehastime#1{%
- \ifboolexpr{togl {blx@#1dateusetime}
- and not test {\iffieldundef{#1hour}}}}
- \def\blx@imc@ifdateshavedifferentprecision#1#2{%
- \ifboolexpr{ (test {\ifdatehasyearonlyprecision{#1}}
- and not test {\ifdatehasyearonlyprecision{#2}})
- or (not test {\ifdatehasyearonlyprecision{#1}}
- and test {\ifdatehasyearonlyprecision{#2}})
- or (test {\ifdatehastime{#1}}
- and not test {\ifdatehastime{#2}})
- or (not test {\ifdatehastime{#1}}
- and test {\ifdatehastime{#2}})}}
- \def\blx@imc@ifdateyearsequal#1#2{%
- \ifboolexpr{ test {\iffieldsequal{#1year}{#2year}}
- and test {\iffieldsequal{#1dateera}{#2dateera}}}}
- \blx@regimcs{%
- \ifdriver \thefield \strfield \csfield \usefield \thelist \strlist \thename \strname
- \clearfield \clearlist \clearname \restorefield \restorelist \restorename
- \ifcategory \ifkeyword
- \ifciteseen \ifciteibid \ifciteidem \ifopcit \ifloccit
- \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype
- \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal
- \iffieldundef \iffieldxref \iflistequalcs \iflistequals
- \iflistsequal \iflistundef \iflistxref
- \ifmorenames \ifmoreitems \iffirstcitekey \iflastcitekey
- \ifnameequalcs \ifnameequals \ifnamesequal \ifnameundef \ifnamexref
- \iffirstonpage \ifsamepage \savefield \savefieldcs \savelist
- \savelistcs \savename \savenamecs \usedriver
- \ifinteger \ifnumeral \ifnumerals \ifpages
- \iffieldint \iffieldnum \iffieldnums \iffieldpages
- \iflabeldateisdate \ifdatehasyearonlyprecision \ifdatehastime
- \ifdateshavedifferentprecision
- \ifdateyearsequal
- \mkpageprefix \mkpagetotal
- \newblock \newunit \setunit \printunit \finentry}
- \appto\blx@blxinit{%
- \def\ifnatbibmode{\iftoggle{blx@natbib}}%
- \def\ifcitation{\iftoggle{blx@citation}}%
- \def\ifbibliography{\iftoggle{blx@bibliography}}%
- \def\ifciteindex{\iftoggle{blx@citeindex}}%
- \def\ifbibindex{\iftoggle{blx@bibindex}}%
- \def\iffootnote{\iftoggle{blx@footnote}}%
- \def\ifuseprefix{\iftoggle{blx@useprefix}}%
- \def\ifterseinits{\iftoggle{blx@terseinits}}%
- \def\ifcrossrefsource{\iftoggle{abx@bool@crossrefsource}}%
- \def\ifxrefsource{\iftoggle{abx@bool@xrefsource}}%
- \def\ifsingletitle{\iftoggle{abx@bool@singletitle}}%
- \def\ifnocite{\iftoggle{abx@bool@nocite}}%
- \def\ifuniquetitle{\iftoggle{abx@bool@uniquetitle}}%
- \def\ifuniquebaretitle{\iftoggle{abx@bool@uniquebaretitle}}%
- \def\ifuniquework{\iftoggle{abx@bool@uniquework}}%
- \def\ifuniqueprimaryauthor{\iftoggle{abx@bool@uniqueprimaryauthor}}%
- \def\ifandothers#1{\iftoggle{abx@bool@more#1}}%
- \protected\def\pno{\bibstring{page}}%
- \protected\def\ppno{\bibstring{pages}}%
- \let\nopp\relax
- \protected\def\psq{\sqspace\bibstring{sequens}}%
- \protected\def\psqq{\sqspace\bibstring{sequentes}}}
- % Make sure that commands which might pop up inside an \edef will be defined
- % as something. If they are taken \AtBeginDocument then we assume that all will
- % be well. If not, then provide a definition which will give an error outside
- % of a citation context.
- \AtBeginDocument{%
- \protected\def\do#1{%
- \ifdefined#1%
- \else
- \protected\def#1{\ERROR}%
- \fi
- }%
- \docsvlist{\pno,\ppno,\nopp,\psq,\psqq}%
- }
- %% Global formatting hooks
- % capitalization
- % {<text>}
- \newrobustcmd{\MakeCapital}[1]{%
- \begingroup
- \blx@mkcp@init
- \protected@edef\blx@tempa{#1}%
- \expandafter\blx@mkcp@parse\blx@tempa\@empty\blx@mkcp@end}
- \def\blx@mkcp@init{%
- \def\blx@mkcp@iec{\noexpand\blx@mkcp@iec\noexpand}%
- \def\blx@mkcp@bbl{\noexpand\blx@mkcp@bbl\noexpand}%
- \def\blx@mkcp@sgl{\noexpand\blx@mkcp@sgl\noexpand}%
- \def\blx@mkcp@dbl{\noexpand\blx@mkcp@dbl\noexpand}%
- \def\do##1{\def##1{\blx@mkcp@sgl##1}}\abx@dosingleaccents
- \def\do##1{\def##1{\blx@mkcp@dbl##1}}\abx@dodoubleaccents
- \def\IeC##1{\blx@mkcp@iec\IeC{##1}}%
- \def\@tabacckludge##1{%
- \expandafter\blx@mkcp@sgl\csname\string##1\endcsname}}
- \begingroup
- \catcode`\"=\active
- \gappto\blx@mkcp@init{%
- \ifnum\catcode`\"=\active
- \def"#1{\blx@mkcp@bbl"\noexpand#1}%
- \fi}
- \endgroup
- \def\blx@mkcp@parse{%
- \futurelet\@let@token\blx@mkcp@eval}
- \long\def\blx@mkcp@eval{%
- \ifx\@let@token\blx@mkcp@iec
- \expandafter\blx@mkcp@getiec
- \fi
- \ifx\@let@token\blx@mkcp@bbl
- \expandafter\blx@mkcp@gettwo
- \fi
- \ifx\@let@token\blx@mkcp@sgl
- \expandafter\blx@mkcp@gettwo
- \fi
- \ifx\@let@token\blx@mkcp@dbl
- \expandafter\blx@mkcp@getthree
- \fi
- \blx@mkcp@case}
- \def\blx@mkcp@getiec#1\blx@mkcp@case#2#3#4{%
- \blx@mkcp@case{#2#3{#4}}}
- \def\blx@mkcp@gettwo#1\blx@mkcp@case#2#3#4{%
- \blx@mkcp@case{#2#3#4}}
- \def\blx@mkcp@getthree#1\blx@mkcp@case#2#3#4#5{%
- \blx@mkcp@case{#2#3#4#5}}
- \long\def\blx@mkcp@case#1{%
- \begingroup
- \def\i{I}\def\j{J}%
- \def\do##1##2{\let##1##2\do}%
- \expandafter\do\@uclclist\relax{\relax\@gobble}%
- \uppercase{\protected@edef\blx@tempa{\endgroup\blx@mkcp@end#1}}%
- \blx@tempa}
- \protected\long\def\blx@mkcp@end#1\blx@mkcp@end{%
- \let\blx@mkcp@iec\noexpand
- \let\blx@mkcp@bbl\noexpand
- \let\blx@mkcp@sgl\noexpand
- \let\blx@mkcp@dbl\noexpand
- \protected@edef\blx@tempa{\endgroup#1}%
- \blx@tempa}
- \def\abx@dosingleaccents{%
- \do\"\do\'\do\`\do\^\do\~\do\=\do\.%
- \do\H\do\b\do\c\do\d\do\r\do\u\do\v}
- \def\abx@dodoubleaccents{%
- \do\t}
- % {<text>}
- \newrobustcmd*{\MakeSentenceCase}{%
- \@ifstar\blx@mksc@i\blx@mksc@ii}
- % Check, in order:
- % * explicit option language=<lang>, which overrides everything
- % * langid field of entry
- % * babel/polyglossia lang
- % * main document lang
- \def\blx@mksc@i{%
- \ifdef\blx@forcelanguagename
- {\xifinlist\blx@forcelanguagename\blx@cmksc@lang
- {\blx@mksc@ii}
- {\@firstofone}}
- {\ifdef\abx@field@langid
- {\xifinlist\abx@field@langid\blx@cmksc@lang
- {\blx@mksc@ii}
- {\@firstofone}}
- {\ifdef\bbl@main@language
- {\xifinlist\bbl@main@language\blx@cmksc@lang
- {\blx@mksc@ii}
- {\@firstofone}}
- {\xifinlist\blx@languagename\blx@cmksc@lang
- {\blx@mksc@ii}
- {\@firstofone}}}}}
- \long\def\blx@mksc@ii#1{%
- \begingroup
- \let\blx@tempa\@empty
- \let\blx@tempb\@empty
- \blx@mksc@init
- \protected@edef\@tempa{#1}%
- \expandafter\blx@mksc@parse\@tempa\blx@mksc@end}
- \def\blx@mksc@init{%
- \blx@mkcp@init
- \def\blx@mkcp@nil{\noexpand\blx@mkcp@nil\noexpand}%
- \def\i{\blx@mkcp@nil\i}\def\j{\blx@mkcp@nil\j}%
- \def\do##1{%
- \ifx##1\relax
- \else
- \def##1{\blx@mkcp@nil##1}%
- \expandafter\do
- \fi}%
- \expandafter\do\@uclclist\relax}
- \def\blx@mksc@parse{%
- \futurelet\@let@token\blx@mksc@eval}
- \def\blx@mksc@eval{%
- \ifx\@let@token\blx@mksc@end
- \expandafter\blx@mksc@end
- \fi
- \ifx\@let@token\bgroup
- \expandafter\blx@mksc@group
- \fi
- \ifx\@let@token\@sptoken
- \expandafter\blx@mksc@space
- \fi
- \ifx\@let@token\blx@mkcp@nil
- \expandafter\blx@mksc@getone
- \fi
- \ifx\@let@token\blx@mkcp@iec
- \expandafter\blx@mksc@getiec
- \fi
- \ifx\@let@token\blx@mkcp@bbl
- \expandafter\blx@mksc@gettwo
- \fi
- \ifx\@let@token\blx@mkcp@sgl
- \expandafter\blx@mksc@gettwo
- \fi
- \ifx\@let@token\blx@mkcp@dbl
- \expandafter\blx@mksc@getthree
- \fi
- \if\noexpand\@let@token\relax
- \expandafter\blx@mksc@cs
- \fi
- \blx@mksc@other}
- \def\blx@mksc@end#1\blx@mksc@end{%
- \blx@mksc@eject
- \let\blx@mkcp@nil\noexpand
- \let\blx@mkcp@iec\noexpand
- \let\blx@mkcp@bbl\noexpand
- \let\blx@mkcp@sgl\noexpand
- \let\blx@mkcp@dbl\noexpand
- \let\MakeUppercase\relax
- \let\MakeLowercase\relax
- \protected@edef\blx@tempa{\endgroup\blx@tempa}%
- \blx@tempa}
- \long\def\blx@mksc@group#1\blx@mksc@other#2{%
- \futurelet\@let@token\blx@mksc@ingroup#2&{#2}%
- \blx@mksc@endhead
- \blx@mksc@parse}
- \long\def\blx@mksc@ingroup#1{%
- \if\noexpand\@let@token\relax
- \ifx\@let@token\blx@mkcp@sgl
- \blx@mksc@nocase{{#2}}%
- \else
- \ifx\@let@token\blx@mkcp@dbl
- \blx@mksc@nocase{{#2}}%
- \else
- \blx@mksc@locase{{#2}}%
- \fi
- \fi
- \else
- \blx@mksc@nocase{{#2}}%
- \fi}
- \def\blx@mksc@space{\def\blx@mksc@space##1\blx@mksc@other}
- \csuse{blx@mksc@space} {%
- \blx@mksc@anycase{ }%
- \blx@mksc@endhead
- \blx@mksc@parse}
- \long\def\blx@mksc@cs#1\blx@mksc@other#2{%
- \ifcat\noexpand~\noexpand#2%
- \blx@mksc@locase{#2}%
- \else
- \blx@mksc@nocase{#2}%
- \fi
- \blx@mksc@endhead
- \blx@mksc@parse}
- \def\blx@mksc@getiec#1\blx@mksc@other#2#3#4{%
- \blx@mksc@other{#2#3{#4}}}
- \def\blx@mksc@getone#1\blx@mksc@other#2#3{%
- \blx@mksc@other{#2#3}}
- \def\blx@mksc@gettwo#1\blx@mksc@other#2#3#4{%
- \blx@mksc@other{#2#3#4}}
- \def\blx@mksc@getthree#1\blx@mksc@other#2#3#4#5{%
- \blx@mksc@other{#2#3#4#5}}
- \long\def\blx@mksc@other#1{%
- \blx@mksc@locase{#1}%
- \blx@mksc@endhead
- \blx@mksc@parse}
- \def\blx@mksc@locase{%
- \appto\blx@tempb}
- \def\blx@mksc@nocase{%
- \blx@mksc@eject
- \appto\blx@tempa}
- \def\blx@mksc@anycase{%
- \ifx\blx@tempb\@empty
- \expandafter\appto
- \expandafter\blx@tempa
- \else
- \expandafter\appto
- \expandafter\blx@tempb
- \fi}
- \def\blx@mksc@eject{%
- \ifx\blx@tempb\@empty
- \else
- \eappto\blx@tempa{\noexpand\MakeLowercase{\expandonce\blx@tempb}}%
- \let\blx@tempb\@empty
- \fi}
- \def\blx@mksc@endhead{%
- \ifx\blx@tempb\@empty
- \else
- \eappto\blx@tempa{\noexpand\MakeCapital{\expandonce\blx@tempb}}%
- \let\blx@tempb\@empty
- \fi
- \let\blx@mksc@endhead\relax}
- % {<language,language,...>}
- \newrobustcmd*{\DeclareCaseLangs}{%
- \@ifstar
- {\blx@defcaselangs}
- {\global\let\blx@cmksc@lang\@empty
- \blx@defcaselangs}}
- \def\blx@defcaselangs#1{%
- \ifblank{#1}
- {}
- {\forcsvlist{\listgadd\blx@cmksc@lang}{#1}}}
- \DeclareCaseLangs{%
- american,british,canadian,
- english,USenglish,UKenglish,
- australian,newzealand}
- \newrobustcmd*{\ifcaselang}[1][]{%
- \ifblank{#1}
- {\xifinlist\blx@languagename\blx@cmksc@lang}
- {\xifinlist{#1}\blx@cmksc@lang}}
- %% Main formatting commands
- % They work by creating a \let alias:
- % \abx@<class>@<entrytype>@<formatname> -> \blx@defformat@d
- % for later use in \print*
- % Then, \blx@defformat@d is defined by calling
- % \def\blx@defformat@d#1{format body}
- % [<entrytype>]{<name>}{<definiton>}
- \newrobustcmd*{\DeclareNameFormat}{%
- \@ifstar
- {\blx@defformat\blx@defnameformat{nfd}*}
- {\blx@defformat\blx@defnameformat{nfd}{}}}
- \newrobustcmd*{\DeclareIndexNameFormat}{%
- \@ifstar
- {\blx@defformat\blx@defnameformat{nid}*}
- {\blx@defformat\blx@defnameformat{nid}{}}}
- \newrobustcmd*{\DeclareListFormat}{%
- \@ifstar
- {\blx@defformat\blx@defplainformat{lfd}*}
- {\blx@defformat\blx@defplainformat{lfd}{}}}
- \newrobustcmd*{\DeclareIndexListFormat}{%
- \@ifstar
- {\blx@defformat\blx@defplainformat{lid}*}
- {\blx@defformat\blx@defplainformat{lid}{}}}
- \newrobustcmd*{\DeclareFieldFormat}{%
- \@ifstar
- {\blx@defformat\blx@defplainformat{ffd}*}
- {\blx@defformat\blx@defplainformat{ffd}{}}}
- \newrobustcmd*{\DeclareIndexFieldFormat}{%
- \@ifstar
- {\blx@defformat\blx@defplainformat{fid}*}
- {\blx@defformat\blx@defplainformat{fid}{}}}
- \newrobustcmd*{\DeclareNameWrapperFormat}{%
- \@ifstar
- {\blx@defformat\blx@defnameformat{nwd}*}
- {\blx@defformat\blx@defnameformat{nwd}{}}}
- \newrobustcmd*{\DeclareIndexNameWrapperFormat}{%
- \@ifstar
- {\blx@defformat\blx@defnameformat{nxd}*}
- {\blx@defformat\blx@defnameformat{nxd}{}}}
- \newrobustcmd*{\DeclareListWrapperFormat}{%
- \@ifstar
- {\blx@defformat\blx@defplainformat{lwd}*}
- {\blx@defformat\blx@defplainformat{lwd}{}}}
- \newrobustcmd*{\DeclareIndexListWrapperFormat}{%
- \@ifstar
- {\blx@defformat\blx@defplainformat{lxd}*}
- {\blx@defformat\blx@defplainformat{lxd}{}}}
- % {<macro>}{<class>}{<*>}
- \def\blx@defformat#1#2#3{%
- \@ifnextchar[%]
- {\blx@defformat@i{#1}{#2}{#3}}
- {\blx@defformat@i{#1}{#2}{#3}[*]}}
- % {<macro>}{<class>}{<*>}[<entrytype>]{<name>}
- \def\blx@defformat@i#1#2#3[#4]#5{%
- \notblank{#3}
- {\blx@resetformat{#2}{#5}}
- {}%
- \def\blx@defformat@a{#2}%
- \def\blx@defformat@b{#4}%
- \blx@xsanitizeafter{\def\blx@defformat@c}{#5}%
- \afterassignment\blx@defformat@ii
- #1}
- \def\blx@defformat@ii{%
- \expandafter\forcsvlist
- \expandafter\blx@defformat@iii
- \expandafter{\blx@defformat@b}}
- \def\blx@defformat@iii#1{%
- \cslet{abx@\blx@defformat@a @#1@\blx@defformat@c}\blx@defformat@d}
- \def\blx@defplainformat{%
- \long\def\blx@defformat@d##1}
- \def\blx@defnameformat{%
- \long\def\blx@defformat@d##1}
- \def\blx@resetformat#1#2{%
- \let\blx@saved@do\do
- \def\do##1{\blx@resetformat@i{#1}{#2}{##1}}%
- \blx@safe@actives
- \abx@doentrytypes
- \blx@rest@actives
- \let\do\blx@saved@do}
- \def\blx@resetformat@i#1#2#3{%
- \ifcsdef{abx@#1@#3@#2}
- {\csundef{abx@#1@#3@#2}}
- {}}
- % {<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>}{<class>}{<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*{\savelistwrapperformat}[2][*]{\blx@save{abx@lwd@#1@#2}}
- \newrobustcmd*{\savenamewrapperformat}[2][*]{\blx@save{abx@nwd@#1@#2}}
- \newrobustcmd*{\restorefieldformat}[2][*]{\blx@restore{abx@ffd@#1@#2}}
- \newrobustcmd*{\restorelistformat}[2][*]{\blx@restore{abx@lfd@#1@#2}}
- \newrobustcmd*{\restorenameformat}[2][*]{\blx@restore{abx@nfd@#1@#2}}
- \newrobustcmd*{\restorelistwrapperformat}[2][*]{\blx@restore{abx@lwd@#1@#2}}
- \newrobustcmd*{\restorenamewrapperformat}[2][*]{\blx@restore{abx@nwd@#1@#2}}
- % [<entrytype>]{<name>}{<true>}{<false>}
- \newrobustcmd*{\iffieldformatundef}[2][*]{\ifcsundef{abx@ffd@#1@#2}}
- \newrobustcmd*{\iflistformatundef}[2][*]{\ifcsundef{abx@lfd@#1@#2}}
- \newrobustcmd*{\ifnameformatundef}[2][*]{\ifcsundef{abx@nfd@#1@#2}}
- \newrobustcmd*{\iflistwrapperformatundef}[2][*]{\ifcsundef{abx@lwd@#1@#2}}
- \newrobustcmd*{\ifnamewrapperformatundef}[2][*]{\ifcsundef{abx@nwd@#1@#2}}
- % [<entrytype>]{<alias>}[<entrytype>]{<name>}
- \newrobustcmd*{\DeclareNameAlias}{\blx@defalias{nfd}}
- \newrobustcmd*{\DeclareIndexNameAlias}{\blx@defalias{nid}}
- \newrobustcmd*{\DeclareListAlias}{\blx@defalias{lfd}}
- \newrobustcmd*{\DeclareIndexListAlias}{\blx@defalias{lid}}
- \newrobustcmd*{\DeclareFieldAlias}{\blx@defalias{ffd}}
- \newrobustcmd*{\DeclareIndexFieldAlias}{\blx@defalias{fid}}
- \newrobustcmd*{\DeclareNameWrapperAlias}{\blx@defalias{nwd}}
- \newrobustcmd*{\DeclareIndexNameWrapperAlias}{\blx@defalias{nxd}}
- \newrobustcmd*{\DeclareListWrapperAlias}{\blx@defalias{lwd}}
- \newrobustcmd*{\DeclareIndexListWrapperAlias}{\blx@defalias{lxd}}
- % #1: internal type signature, #2: type text for warning
- % #3 #4 #5 #6
- % [aliastype]{aliasname}[formattype]{formatname}
- \def\blx@deprecateformat#1#2{%
- \@ifnextchar[%]
- {\blx@deprecateformat@i{#1}{#2}}
- {\blx@deprecateformat@i{#1}{#2}[*]}}
- \def\blx@deprecateformat@i#1#2[#3]#4{%
- \@ifnextchar[%]
- {\blx@deprecateformat@ii{#1}{#2}{#3}{#4}}
- {\blx@deprecateformat@ii{#1}{#2}{#3}{#4}[*]}}
- \def\blx@deprecateformat@ii#1#2#3#4[#5]#6{%
- \blx@safe@actives
- \afterassignment\blx@rest@actives
- \csdef{abx@#1@#3@#4}{%
- \ifcsundef{abx@legacywarning@#1@#3@#4}
- {\global\cslet{abx@legacywarning@#1@#3@#4}\@empty
- \blx@warning@noline{%
- #2 '#4' deprecated.\MessageBreak
- Please use '#6' instead.\MessageBreak
- Using '#6' now}}
- {}%
- \csname abx@#1@#5@#6\endcsname}}
- % [<entrytype>]{<alias>}[<entrytype>]{<name>}
- \newrobustcmd*{\DeprecateNameFormatWithReplacement}{%
- \blx@deprecateformat{nfd}{Name format}}
- \newrobustcmd*{\DeprecateIndexNameFormatWithReplacement}{%
- \blx@deprecateformat{nid}{Index name format}}
- \newrobustcmd*{\DeprecateListFormatWithReplacement}{%
- \blx@deprecateformat{lfd}{List format}}
- \newrobustcmd*{\DeprecateIndexListFormatWithReplacement}{%
- \blx@deprecateformat{lid}{Index list format}}
- \newrobustcmd*{\DeprecateFieldFormatWithReplacement}{%
- \blx@deprecateformat{ffd}{Field format}}
- \newrobustcmd*{\DeprecateIndexFieldFormatWithReplacement}{%
- \blx@deprecateformat{fid}{Index field format}}
- \newrobustcmd*{\DeprecateNameWrapperFormatWithReplacement}{%
- \blx@deprecateformat{nwd}{Name wrapper format}}
- \newrobustcmd*{\DeprecateIndexNameWrapperFormatWithReplacement}{%
- \blx@deprecateformat{nxd}{Index name wrapper format}}
- \newrobustcmd*{\DeprecateListWrapperFormatWithReplacement}{%
- \blx@deprecateformat{lwd}{List wrapper format}}
- \newrobustcmd*{\DeprecateIndexListWrapperFormatWithReplacement}{%
- \blx@deprecateformat{lxd}{Index list wrapper format}}
- % [<format>]{<text>}
- \newrobustcmd{\blx@imc@printtext}[2][]{%
- \ifblank{#2}
- {\blx@nounit}
- {\ifblank{#1}
- {\let\blx@theformat\@firstofone}
- {\blx@getformat\blx@theformat{ffd}{#1}{}}%
- \ifdefvoid\blx@theformat
- {\blx@nounit}
- {\blx@begunit
- \blx@theformat{#2}%
- \blx@endunit}}}
- % [<format>]{<field>}
- \newrobustcmd*{\blx@imc@printfield}[2][]{%
- \blx@imc@iffieldundef{#2}
- {\blx@nounit}
- {\blx@getformat\blx@theformat{ffd}{#1}{#2}%
- \ifdefvoid\blx@theformat
- {\blx@nounit}
- {\blx@begunit
- \edef\currentfield{#2}%
- \expandafter\expandafter
- \expandafter\blx@theformat
- \expandafter\expandafter
- \expandafter{\csname abx@field@#2\endcsname}%
- \blx@endunit}}}
- % [<format>]{<field>}
- \newcommand*{\blx@imc@indexfield}[2][]{%
- \blx@imc@iffieldundef{#2}
- {}
- {\blx@getformat\blx@theformat{fid}{#1}{#2}%
- \ifdefvoid\blx@theformat
- {}
- {\begingroup
- \edef\currentfield{#2}%
- \letcs\blx@tempa{abx@field@#2}%
- \expandafter\blx@theformat\expandafter{\blx@tempa}%
- \endgroup}}}
- % [<format>]{<file>}
- \newrobustcmd*{\blx@imc@printfile}[2][]{%
- \iftoggle{blx@loadfiles}
- {\IfFileExists{#2}
- {\listxadd\blx@list@req@edit{#2}%
- \blx@imc@printtext[#1]{\input{#2}\unspace}}
- {\blx@nounit}}
- {\blx@nounit}}
- % {<macro>}[<format>][<start>-<stop>]
- % => <macro>{<format>}{<start>}{<stop>}
- \def\blx@listargs#1{%
- \@ifnextchar[%]
- {\blx@listargs@i{#1}}
- {#1{}{}{}}}
- \def\blx@listargs@i#1[#2]{%
- \@ifnextchar[%]
- {\blx@listargs@ii{#1}{#2}}
- {#1{#2}{}{}}}
- \def\blx@listargs@ii#1#2[#3]{%
- \blx@listargs@iii{#1}{#2}#3&}
- \def\blx@listargs@iii#1#2#3-#4&{%
- #1{#2}{#3}{#4}}
- % [<format>][<start>-<stop>]{<namelist>}
- \protected\def\blx@imc@printnames{%
- \blx@listargs\blx@printnames}
- % {<format>}{<start>}{<stop>}{<namelist>}
- \def\blx@printnames#1#2#3#4{%
- \blx@imc@ifnameundef{#4}
- {\blx@nounit}
- {\blx@getformat\blx@thewrapperformat{nwd}{#1}{#4}%
- \ifdefvoid\blx@thewrapperformat
- {\blx@nounit}
- {\blx@getformat\blx@theformat{nfd}{#1}{#4}%
- \ifdefvoid\blx@theformat
- {\blx@nounit}
- {\blx@begunit
- \blx@namesetup{#2}{#3}{#4}%
- \blx@thewrapperformat{\expandafter\blx@nameparser\blx@thedata{}&}%
- \blx@endunit}}}}
- \def\blx@namesetup#1#2#3{%
- \def\currentname{#3}%
- \c@listcount\@ne
- \c@listtotal\csname c@#3\endcsname
- \blx@namesetup@i{#3}%
- \ifblank{#1}
- {\c@liststart\@ne}
- {\ifnum#1<\@ne
- \c@liststart\@ne
- \else
- \c@liststart#1\relax
- \fi}%
- \ifblank{#2}
- {\c@liststop\c@listtotal
- \ifnum\c@liststop>\c@maxnames
- \c@liststop\c@minnames
- \ifnum\c@uniquelist>\c@liststop
- \c@liststop\c@uniquelist
- \fi
- \fi}
- {\ifnum#2>\c@listtotal
- \c@liststop\c@listtotal
- \else
- \ifnum#2<\@ne
- \c@liststop\@ne
- \else
- \c@liststop#2\relax
- \fi
- \fi}%
- \blx@namecodes}
- \def\blx@namesetup@i#1{%
- \expandafter\expandafter
- \expandafter\blx@namesetup@ii\csname abx@name@#1\endcsname}
- \def\blx@namesetup@ii#1#2{%
- \c@uniquelist\z@
- \ifblank{#1}
- {}
- {\setkeys{blx@opt@namelist}{#1}}%
- \def\blx@thedata{#2}}
- % These are options in the .bbl that biber makes explicit as they are needed in biblatex
- % for various reasons. Not all namelist/name scope options are necessary in the .bbl as
- % some are used by biber only and are not needed by biblatex after biber has finished
- % generating the .bbl
- % Per-namelist options
- \define@key{blx@opt@namelist}{uniquelist}{\c@uniquelist#1\relax}
- \define@key{blx@opt@namelist}{useprefix}{\settoggle{blx@useprefix}{#1}}
- \define@key{blx@opt@namelist}{sortingnamekeytemplatename}{\def\blx@refcontext@sortingnamekeytemplatename{#1}}
- \define@key{blx@opt@namelist}{uniquenametemplatename}{\def\blx@refcontext@uniquenametemplatename{#1}}
- \define@key{blx@opt@namelist}{labelalphanametemplatename}{\def\blx@refcontext@labelalphanametemplatename{#1}}
- % Per-name options
- \define@key{blx@opt@name}{uniquename}{\c@uniquename#1\relax}
- \define@key{blx@opt@name}{uniquepart}{\def\abx@field@uniquepart{#1}}
- \define@key{blx@opt@name}{hash}{\edef\abx@field@hash{\detokenize{#1}}}
- \define@key{blx@opt@name}{useprefix}{\settoggle{blx@useprefix}{#1}}
- \define@key{blx@opt@name}{sortingnamekeytemplatename}{\def\blx@refcontext@sortingnamekeytemplatename{#1}}
- \define@key{blx@opt@name}{uniquenametemplatename}{\def\blx@refcontext@uniquenametemplatename{#1}}
- \define@key{blx@opt@name}{labelalphanametemplatename}{\def\blx@refcontext@labelalphanametemplatename{#1}}
- \newrobustcmd*{\bibinitperiod}{\adddot}
- \newrobustcmd*{\bibinitdelim}{\addnbspace}
- \newrobustcmd*{\bibinithyphendelim}{.\mbox{-}}
- \newrobustcmd*{\bibnamedelima}{\addhighpenspace}
- \newrobustcmd*{\bibnamedelimb}{\addlowpenspace}
- \newrobustcmd*{\bibnamedelimc}{\addhighpenspace}
- \newrobustcmd*{\bibnamedelimd}{\addlowpenspace}
- \newrobustcmd*{\bibnamedelimi}{\addnbspace}
- % [<format>][<start>-<stop>]{<namelist>}
- \protected\def\blx@imc@indexnames{%
- \blx@listargs\blx@indexnames}
- % {<format>}{<start>}{<stop>}{<namelist>}
- \def\blx@indexnames#1#2#3#4{%
- \blx@imc@ifnameundef{#4}
- {}
- {\blx@getformat\blx@thewrapperformat{nxd}{#1}{#4}%
- \ifdefvoid\blx@thewrapperformat
- {}
- {\blx@getformat\blx@theformat{nid}{#1}{#4}%
- \ifdefvoid\blx@theformat
- {}
- {\begingroup
- \blx@namesetup{#2}{#3}{#4}%
- \blx@indexnamesetup
- \expandafter\blx@nameparser\blx@thedata{}&%
- \endgroup}}}}
- \def\blx@indexnamesetup{%
- \let\bibinitperiod\bibindexinitperiod
- \let\bibinitdelim\bibindexinitdelim
- \let\bibinithyphendelim\bibindexinithyphendelim
- \let\bibnamedelima\bibindexnamedelima
- \let\bibnamedelimb\bibindexnamedelimb
- \let\bibnamedelimc\bibindexnamedelimc
- \let\bibnamedelimd\bibindexnamedelimd
- \let\bibnamedelimi\bibindexnamedelimi}
- % {<name1>}{<name2>}{...}
- \long\def\blx@nameparser#1{%
- \ifblank{#1}
- {\blx@namebreak}
- {\ifnum\c@listcount<\c@liststart
- \else
- \blx@nameparser@i#1%
- \fi
- \advance\c@listcount\@ne
- \ifnum\c@listcount>\c@liststop
- \expandafter\blx@namebreak
- \fi
- \blx@nameparser}}
- % {name opts}{nameparts}
- \long\def\blx@nameparser@i#1#2{%
- \begingroup
- \ifblank{#1}
- {}
- {\setkeys{blx@opt@name}{#1}}%
- % reset all the nameparts to empty between names
- \def\do##1{%
- \cslet{namepart##1}\@empty
- \cslet{namepart##1i}\@empty}%
- \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}%
- \setkeys{blx@opt@namepart}{#2}% Extract nameparts information
- % Still pass the nameparts forward for backwards compat
- % When \nameparts is finally removed, remove the "{2}" and remove the
- % arg to \blx@defformat@d in def of \blx@defnameformat
- \blx@theformat{#2}%
- \endgroup}
- \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@thewrapperformat{lwd}{#1}{#4}%
- \ifdefvoid\blx@thewrapperformat
- {\blx@nounit}
- {\blx@getformat\blx@theformat{lfd}{#1}{#4}%
- \ifdefvoid\blx@theformat
- {\blx@nounit}
- {\blx@begunit
- \blx@listsetup{#2}{#3}{#4}%
- \blx@thewrapperformat{\expandafter\blx@listparser\blx@thedata{}&}%
- \blx@endunit}}}}
- \def\blx@listsetup#1#2#3{%
- \def\currentlist{#3}%
- \c@listcount\@ne
- \expandafter\c@listtotal\csname c@#3\endcsname
- \letcs\blx@thedata{abx@list@#3}%
- \ifblank{#1}
- {\c@liststart\@ne}
- {\ifnum#1<\@ne
- \c@liststart\@ne
- \else
- \c@liststart#1\relax
- \fi}%
- \ifblank{#2}
- {\c@liststop\c@listtotal
- \ifnum\c@listtotal>\c@maxitems
- \c@liststop\c@minitems
- \fi}
- {\ifnum#2>\c@listtotal
- \c@liststop\c@listtotal
- \else
- \ifnum#2<\@ne
- \c@liststop\@ne
- \else
- \c@liststop#2\relax
- \fi
- \fi}}
- % [<format>][<start>-<stop>]{<plainlist>}
- \protected\def\blx@imc@indexlist{%
- \blx@listargs\blx@indexlist}
- % {<format>}{<start>}{<stop>}{<plainlist>}
- \def\blx@indexlist#1#2#3#4{%
- \blx@imc@iflistundef{#4}
- {}
- {\blx@getformat\blx@thewrapperformat{lxd}{#1}{#4}%
- \ifdefvoid\blx@thewrapperformat
- {}
- {\blx@getformat\blx@theformat{lid}{#1}{#4}%
- \ifdefvoid\blx@theformat
- {}
- {\begingroup
- \blx@listsetup{#2}{#3}{#4}%
- \expandafter\blx@listparser\blx@thedata{}&%
- \endgroup}}}}
- % {<item1>}{<item2>}{...}
- \long\def\blx@listparser#1{%
- \ifblank{#1}
- {\blx@listbreak}
- {\ifnum\c@listcount<\c@liststart
- \else
- \blx@theformat{#1}%
- \fi
- \advance\c@listcount\@ne
- \ifnum\c@listcount>\c@liststop
- \expandafter\blx@listbreak
- \fi
- \blx@listparser}}
- \long\def\blx@listbreak#1&{}
- % <*>{<key>}{<code>}
- \protected\def\blx@imc@entrydata{%
- \@ifstar
- {\blx@xsanitizeafter{\blx@imc@entrydata@i\blx@saveentry}}
- {\blx@xsanitizeafter{\blx@imc@entrydata@i{}}}}
- \long\def\blx@imc@entrydata@i#1#2#3{%
- \blx@getrefcontext{#2}%
- \blx@ifdata{#2}
- {\begingroup
- #1%
- \blx@resetdata
- \blx@getdata{#2}%
- \blx@entrysetcount
- \blx@setoptions@type\abx@field@entrytype
- \blx@setoptions@entry
- \addtocounter{instcount}\@ne
- \blx@execute
- \blx@beglangbib#3\blx@endlangbib
- \endgroup}
- {}}
- \protected\def\blx@imc@entryset#1#2{%
- \blx@imc@iffieldundef{entrykey}
- {}
- {\begingroup
- \long\def\blx@entryset@precode{#1}%
- \long\def\blx@entryset@postcode{#2}%
- \let\finentry\blx@finentry@inset
- \let\do\blx@entryset
- \blx@imc@docsvfield{entryset}%
- \endgroup}}
- \def\blx@entryset#1{%
- \blx@ifdata{#1}
- {\begingroup
- \blx@imc@clearlist{pageref}%
- \blx@getdata{#1}%
- \blx@setoptions@type\abx@field@entrytype
- \blx@setoptions@entry
- \global\blx@entrysetcounter\@ne
- \edef\abx@field@entrysetcount{\the\blx@entrysetcounter}%
- \blx@execute
- \blx@beglangbib
- \blx@begunit
- \blx@anchor
- \blx@entryset@precode
- \blx@driver{\blx@imc@thefield{entrytype}}%
- \blx@entryset@postcode
- \blx@endunit
- \blx@endlangbib
- \endgroup}
- {}%
- \let\do\blx@entryset@i}
- \def\blx@entryset@i#1{%
- \blx@ifdata{#1}
- {\begingroup
- \blx@resetdata
- \blx@getdata{#1}%
- \blx@setoptions@type\abx@field@entrytype
- \blx@setoptions@entry
- \global\advance\blx@entrysetcounter\@ne
- \edef\abx@field@entrysetcount{\the\blx@entrysetcounter}%
- \addtocounter{instcount}\@ne
- \blx@execute
- \blx@beglangbib
- \blx@begunit
- \blx@anchor
- \blx@entryset@precode
- \blx@driver{\blx@imc@thefield{entrytype}}%
- \blx@entryset@postcode
- \blx@endunit
- \blx@endlangbib
- \endgroup}
- {\blx@nounit}}
- \blx@regimcs{%
- \printtext \printfield \printlist \printnames \printfile
- \indexfield \indexlist \indexnames \entrydata \entryset}
- %% Localization
- % [<wrapper>]{<string>}
- \newrobustcmd*{\blx@imc@bibstring}[2][\@firstofone]{%
- \blx@bibstring{#1}{\abx@str}{#2}}
- \newrobustcmd*{\blx@imc@biblstring}[2][\@firstofone]{%
- \blx@bibstring{#1}{abx@lstr}{#2}}
- \newrobustcmd*{\blx@imc@bibsstring}[2][\@firstofone]{%
- \blx@bibstring{#1}{abx@sstr}{#2}}
- \def\blx@bibstringsimple{%
- \let\bibstring\blx@imc@bibxstring
- \let\biblstring\blx@imc@bibxlstring
- \let\bibsstring\blx@imc@bibxsstring}
- \def\blx@bibstringnormal{%
- \let\bibstring\blx@imc@bibstring
- \let\biblstring\blx@imc@biblstring
- \let\bibsstring\blx@imc@bibsstring}
- \protected\def\blx@bibstring#1#2#3{%
- \blx@begunit
- \blx@hyphenreset
- \blx@bibstringsimple
- \lowercase{\edef\blx@tempa{#3}}%
- \ifcsundef{#2@\blx@tempa}
- {\blx@warn@nostring\blx@tempa
- \blx@endnounit}
- {\blx@imc@ifcapital
- {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}}
- {#1{\csuse{#2@\blx@tempa}}}%
- \blx@endunit}}
- % [<wrapper>]{<string>}
- \newrobustcmd*{\blx@imc@bibcpstring}[2][\@firstofone]{%
- \blx@bibcpstring{#1}{\abx@str}{#2}}
- \newrobustcmd*{\blx@imc@bibcplstring}[2][\@firstofone]{%
- \blx@bibcpstring{#1}{abx@lstr}{#2}}
- \newrobustcmd*{\blx@imc@bibcpsstring}[2][\@firstofone]{%
- \blx@bibcpstring{#1}{abx@sstr}{#2}}
- \protected\def\blx@bibcpstring#1#2#3{%
- \blx@begunit
- \blx@hyphenreset
- \blx@bibstringsimple
- \lowercase{\edef\blx@tempa{#3}}%
- \ifcsundef{#2@\blx@tempa}
- {\blx@warn@nostring\blx@tempa
- \blx@endnounit}
- {#1{\MakeCapital{\csuse{#2@\blx@tempa}}}%
- \blx@endunit}}
- % [<wrapper>]{<string>}
- \newrobustcmd*{\blx@imc@biblcstring}[2][\@firstofone]{%
- \blx@biblcstring{#1}{\abx@str}{#2}}
- \newrobustcmd*{\blx@imc@biblclstring}[2][\@firstofone]{%
- \blx@biblcstring{#1}{abx@lstr}{#2}}
- \newrobustcmd*{\blx@imc@biblcsstring}[2][\@firstofone]{%
- \blx@biblcstring{#1}{abx@sstr}{#2}}
- \protected\def\blx@biblcstring#1#2#3{%
- \blx@begunit
- \blx@hyphenreset
- \blx@bibstringsimple
- \lowercase{\edef\blx@tempa{#3}}%
- \ifcsundef{#2@\blx@tempa}
- {\blx@warn@nostring\blx@tempa
- \blx@endnounit}
- {#1{\MakeLowercase{\csuse{#2@\blx@tempa}}}%
- \blx@endunit}}
- % [<wrapper>]{<string>}
- \newrobustcmd*{\blx@imc@bibucstring}[2][\@firstofone]{%
- \blx@bibucstring{#1}{\abx@str}{#2}}
- \newrobustcmd*{\blx@imc@bibuclstring}[2][\@firstofone]{%
- \blx@bibucstring{#1}{abx@lstr}{#2}}
- \newrobustcmd*{\blx@imc@bibucsstring}[2][\@firstofone]{%
- \blx@bibucstring{#1}{abx@sstr}{#2}}
- \protected\def\blx@bibucstring#1#2#3{%
- \blx@begunit
- \blx@hyphenreset
- \blx@bibstringsimple
- \lowercase{\edef\blx@tempa{#3}}%
- \ifcsundef{#2@\blx@tempa}
- {\blx@warn@nostring\blx@tempa
- \blx@endnounit}
- {#1{\MakeUppercase{\csuse{#2@\blx@tempa}}}%
- \blx@endunit}}
- % {<string>}
- \def\blx@imc@bibxstring#1{%
- \blx@bibxstring{\abx@str}{#1}}
- \def\blx@imc@bibxlstring#1{%
- \blx@bibxstring{abx@lstr}{#1}}
- \def\blx@imc@bibxsstring#1{%
- \blx@bibxstring{abx@sstr}{#1}}
- \def\blx@bibxstring#1#2{%
- \ifcsundef{#1@#2}
- {\protect\blx@warn@nostring{#2}}
- {\csuse{#1@#2}}}
- % {<string>}{<true>}{<false>}
- \def\blx@imc@ifbibstring#1{%
- \ifcsundef{\abx@str @\detokenize{#1}}
- {\@secondoftwo}
- {\@firstoftwo}}
- \def\blx@imc@ifbibxstring#1{%
- \blx@xsanitizeafter\ifcsundef{\abx@str @#1}
- {\@secondoftwo}
- {\@firstoftwo}}
- % {<field>}{<true>}{<false>}
- \def\blx@imc@iffieldbibstring#1{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\ifcsundef{\abx@str @\detokenize\expandafter
- \expandafter\expandafter{%
- \csname abx@field@#1\endcsname}}
- {\@secondoftwo}
- {\@firstoftwo}}}
- % {<field>}{<string>}{<true>}{<false>}
- \def\blx@imc@iffieldplusstringbibstring#1#2{%
- \blx@imc@iffieldundef{#1}
- {\@secondoftwo}
- {\ifcsundef{\abx@str @\detokenize\expandafter
- \expandafter\expandafter{%
- \csname abx@field@#1\endcsname}#2}
- {\@secondoftwo}
- {\@firstoftwo}}}
- \blx@regimcs{%
- \bibstring \biblstring \bibsstring
- \bibxstring \bibxlstring \bibxsstring
- \bibcpstring \bibcplstring \bibcpsstring
- \biblcstring \biblclstring \biblcsstring
- \bibucstring \bibuclstring \bibucsstring
- \ifbibstring \ifbibxstring \iffieldbibstring
- \iffieldplusstringbibstring}
- \let\blx@hook@uc\relax
- \let\blx@hook@lc\relax
- \AtEndPreamble{%
- \toggletrue{blx@tempa}%
- \toggletrue{blx@tempb}%
- \expandafter\patchcmd\csname MakeUppercase \endcsname
- {\protected@edef}
- {\blx@hook@uc\protected@edef}
- {\togglefalse{blx@tempa}}
- {}%
- \expandafter\patchcmd\csname MakeLowercase \endcsname
- {\protected@edef}
- {\blx@hook@lc\protected@edef}
- {\togglefalse{blx@tempb}}
- {}%
- \@ifpackageloaded{textcase}
- {\expandafter\patchcmd\csname MakeUppercase \endcsname
- {\def\i}
- {\blx@hook@uc\def\i}
- {\togglefalse{blx@tempa}}
- {}%
- \expandafter\patchcmd\csname MakeLowercase \endcsname
- {\@uclcnotmath{}}
- {\@uclcnotmath{\blx@hook@lc}}
- {\togglefalse{blx@tempb}}
- {}%
- \expandafter\patchcmd\csname MakeTextUppercase \endcsname
- {\def\i}
- {\blx@hook@uc\def\i}
- {}
- {}%
- \expandafter\patchcmd\csname MakeTextLowercase \endcsname
- {\@uclcnotmath{}}
- {\@uclcnotmath{\blx@hook@lc}}
- {}
- {}}
- {}%
- \iftoggle{blx@tempa}{\blx@err@patch{\string\MakeUppercase}}{}%
- \iftoggle{blx@tempb}{\blx@err@patch{\string\MakeLowercase}}{}%
- }
- \appto\blx@blxinit{%
- \def\blx@hook@uc{%
- \def\bibstring{\blx@imc@bibucstring}%
- \def\biblstring{\blx@imc@bibuclstring}%
- \def\bibsstring{\blx@imc@bibucsstring}%
- \def\biblcstring{\blx@imc@bibucstring}%
- \def\biblclstring{\blx@imc@bibuclstring}%
- \def\biblcsstring{\blx@imc@bibucsstring}%
- \def\bibcpstring{\blx@imc@bibucstring}%
- \def\bibcplstring{\blx@imc@bibuclstring}%
- \def\bibcpsstring{\blx@imc@bibucsstring}}%
- \def\blx@hook@lc{%
- \def\bibstring{\blx@imc@biblcstring}%
- \def\biblstring{\blx@imc@biblclstring}%
- \def\bibsstring{\blx@imc@biblcsstring}%
- \def\bibucstring{\blx@imc@biblcstring}%
- \def\bibuclstring{\blx@imc@biblclstring}%
- \def\bibucsstring{\blx@imc@biblcsstring}%
- \def\bibcpstring{\blx@imc@biblcstring}%
- \def\bibcplstring{\blx@imc@biblclstring}%
- \def\bibcpsstring{\blx@imc@biblcsstring}}}
- \def\abx@dostrings{%
- \do{bibliography}%
- \do{references}%
- \do{shorthands}%
- \do{editor}%
- \do{editors}%
- \do{compiler}%
- \do{compilers}%
- \do{redactor}%
- \do{redactors}%
- \do{reviser}%
- \do{revisers}%
- \do{founder}%
- \do{founders}%
- \do{continuator}%
- \do{continuators}%
- \do{collaborator}%
- \do{collaborators}%
- \do{translator}%
- \do{translators}%
- \do{commentator}%
- \do{commentators}%
- \do{annotator}%
- \do{annotators}%
- \do{commentary}%
- \do{annotations}%
- \do{introduction}%
- \do{foreword}%
- \do{afterword}%
- \do{editortr}%
- \do{editorstr}%
- \do{editorco}%
- \do{editorsco}%
- \do{editoran}%
- \do{editorsan}%
- \do{editorin}%
- \do{editorsin}%
- \do{editorfo}%
- \do{editorsfo}%
- \do{editoraf}%
- \do{editorsaf}%
- \do{editortrco}%
- \do{editorstrco}%
- \do{editortran}%
- \do{editorstran}%
- \do{editortrin}%
- \do{editorstrin}%
- \do{editortrfo}%
- \do{editorstrfo}%
- \do{editortraf}%
- \do{editorstraf}%
- \do{editorcoin}%
- \do{editorscoin}%
- \do{editorcofo}%
- \do{editorscofo}%
- \do{editorcoaf}%
- \do{editorscoaf}%
- \do{editoranin}%
- \do{editorsanin}%
- \do{editoranfo}%
- \do{editorsanfo}%
- \do{editoranaf}%
- \do{editorsanaf}%
- \do{editortrcoin}%
- \do{editorstrcoin}%
- \do{editortrcofo}%
- \do{editorstrcofo}%
- \do{editortrcoaf}%
- \do{editorstrcoaf}%
- \do{editortranin}%
- \do{editorstranin}%
- \do{editortranfo}%
- \do{editorstranfo}%
- \do{editortranaf}%
- \do{editorstranaf}%
- \do{translatorco}%
- \do{translatorsco}%
- \do{translatoran}%
- \do{translatorsan}%
- \do{translatorin}%
- \do{translatorsin}%
- \do{translatorfo}%
- \do{translatorsfo}%
- \do{translatoraf}%
- \do{translatorsaf}%
- \do{translatorcoin}%
- \do{translatorscoin}%
- \do{translatorcofo}%
- \do{translatorscofo}%
- \do{translatorcoaf}%
- \do{translatorscoaf}%
- \do{translatoranin}%
- \do{translatorsanin}%
- \do{translatoranfo}%
- \do{translatorsanfo}%
- \do{translatoranaf}%
- \do{translatorsanaf}%
- \do{byauthor}%
- \do{byeditor}%
- \do{bycompiler}%
- \do{byredactor}%
- \do{byreviser}%
- \do{byreviewer}%
- \do{byfounder}%
- \do{bycontinuator}%
- \do{bycollaborator}%
- \do{bytranslator}%
- \do{bycommentator}%
- \do{byannotator}%
- \do{withcommentator}%
- \do{withannotator}%
- \do{withintroduction}%
- \do{withforeword}%
- \do{withafterword}%
- \do{organizer}%
- \do{organizers}%
- \do{byorganizer}%
- \do{byeditortr}%
- \do{byeditorco}%
- \do{byeditoran}%
- \do{byeditorin}%
- \do{byeditorfo}%
- \do{byeditoraf}%
- \do{byeditortrco}%
- \do{byeditortran}%
- \do{byeditortrin}%
- \do{byeditortrfo}%
- \do{byeditortraf}%
- \do{byeditorcoin}%
- \do{byeditorcofo}%
- \do{byeditorcoaf}%
- \do{byeditoranin}%
- \do{byeditoranfo}%
- \do{byeditoranaf}%
- \do{byeditortrcoin}%
- \do{byeditortrcofo}%
- \do{byeditortrcoaf}%
- \do{byeditortranin}%
- \do{byeditortranfo}%
- \do{byeditortranaf}%
- \do{bytranslatorco}%
- \do{bytranslatoran}%
- \do{bytranslatorin}%
- \do{bytranslatorfo}%
- \do{bytranslatoraf}%
- \do{bytranslatorcoin}%
- \do{bytranslatorcofo}%
- \do{bytranslatorcoaf}%
- \do{bytranslatoranin}%
- \do{bytranslatoranfo}%
- \do{bytranslatoranaf}%
- \do{and}%
- \do{andothers}%
- \do{andmore}%
- \do{volume}%
- \do{volumes}%
- \do{involumes}%
- \do{part}%
- \do{jourvol}%
- \do{jourser}%
- \do{newseries}%
- \do{oldseries}%
- \do{edition}%
- \do{reprint}%
- \do{reprintof}%
- \do{reprintas}%
- \do{reprintfrom}%
- \do{reviewof}%
- \do{translationof}%
- \do{translationas}%
- \do{translationfrom}%
- \do{origpubas}%
- \do{origpubin}%
- \do{astitle}%
- \do{bypublisher}%
- \do{nodate}%
- \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{pagetotal}%
- \do{pagetotals}%
- \do{columntotal}%
- \do{columntotals}%
- \do{linetotal}%
- \do{linetotals}%
- \do{versetotal}%
- \do{versetotals}%
- \do{sectiontotal}%
- \do{sectiontotals}%
- \do{paragraphtotal}%
- \do{paragraphtotals}%
- \do{in}%
- \do{inseries}%
- \do{ofseries}%
- \do{book}%
- \do{issue}%
- \do{number}%
- \do{chapter}%
- \do{bathesis}%
- \do{mathesis}%
- \do{phdthesis}%
- \do{candthesis}%
- \do{resreport}%
- \do{techreport}%
- \do{software}%
- \do{datacd}%
- \do{audiocd}%
- \do{version}%
- \do{url}%
- \do{urlfrom}%
- \do{urlseen}%
- \do{file}%
- \do{inpreparation}%
- \do{submitted}%
- \do{inpress}%
- \do{prepublished}%
- \do{forthcoming}%
- \do{library}%
- \do{abstract}%
- \do{annotation}%
- \do{citedas}%
- \do{seenote}%
- \do{quotedin}%
- \do{opcit}%
- \do{loccit}%
- \do{ibidem}%
- \do{idem}%
- \do{idemsf}%
- \do{idemsm}%
- \do{idemsn}%
- \do{idempf}%
- \do{idempm}%
- \do{idempn}%
- \do{idempp}%
- \do{confer}%
- \do{sequens}%
- \do{sequentes}%
- \do{passim}%
- \do{see}%
- \do{seealso}%
- \do{backrefpage}%
- \do{backrefpages}%
- \do{thiscite}%
- \do{january}%
- \do{february}%
- \do{march}%
- \do{april}%
- \do{may}%
- \do{june}%
- \do{july}%
- \do{august}%
- \do{september}%
- \do{october}%
- \do{november}%
- \do{december}%
- \do{langamerican}%
- \do{langbrazilian}%
- \do{langbulgarian}%
- \do{langcatalan}%
- \do{langcroatian}%
- \do{langczech}%
- \do{langdanish}%
- \do{langdutch}%
- \do{langenglish}%
- \do{langestonian}%
- \do{langfinnish}%
- \do{langfrench}%
- \do{langgalician}%
- \do{langgerman}%
- \do{langgreek}%
- \do{langhungarian}%
- \do{langitalian}%
- \do{langjapanese}%
- \do{langlatin}%
- \do{langlatvian}%
- \do{langnorwegian}%
- \do{langpolish}%
- \do{langportuguese}%
- \do{langrussian}%
- \do{langslovak}%
- \do{langslovene}%
- \do{langspanish}%
- \do{langswedish}%
- \do{langukrainian}%
- \do{fromamerican}%
- \do{frombrazilian}%
- \do{frombulgarian}%
- \do{fromcatalan}%
- \do{fromcroatian}%
- \do{fromczech}%
- \do{fromdanish}%
- \do{fromdutch}%
- \do{fromenglish}%
- \do{fromestonian}%
- \do{fromfinnish}%
- \do{fromfrench}%
- \do{fromgalician}%
- \do{fromgerman}%
- \do{fromgreek}%
- \do{fromhungarian}%
- \do{fromitalian}%
- \do{fromjapanese}%
- \do{fromlatin}%
- \do{fromlatvian}%
- \do{fromnorwegian}%
- \do{frompolish}%
- \do{fromportuguese}%
- \do{fromrussian}%
- \do{fromslovak}%
- \do{fromslovene}%
- \do{fromspanish}%
- \do{fromswedish}%
- \do{fromukrainian}%
- \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}%
- \do{commonera}%
- \do{beforecommonera}%
- \do{annodomini}%
- \do{beforechrist}%
- \do{circa}%
- \do{spring}%
- \do{summer}%
- \do{autumn}%
- \do{winter}%
- \do{am}%
- \do{pm}%
- }
- \newrobustcmd*{\NewBibliographyString}[1]{%
- \forcsvlist\blx@newstring{#1}}
- \def\blx@newstring#1{%
- \ifcsundef{KV@blx@lbx@#1}
- {\gappto\abx@dostrings{\do{#1}}%
- \csgdef{KV@blx@lbx@#1}##1{\blx@defstring{#1}{##1}}}
- {}}
- % in *.cbx/bbx/tex: <key> = {<string>},
- % in *.lbx: <key> = {{<longstring>}{<abbrevstring>}},
- \def\do#1{\define@key{blx@lbx}{#1}{\blx@defstring{#1}{##1}}}
- \abx@dostrings
- % in *.cbx/bbx/tex: (implicit)
- % in *.lbx: inherit = {<language>},
- \define@key{blx@lbx}{inherit}{%
- \blx@lbxinput@strings{#1}{}{\blx@err@nolang{#1}}%
- \csuse{abx@strings@#1}}
- \def\blx@cfg@defstring#1#2{%
- \csdef{abx@lstr@#1}{#2}%
- \csdef{abx@sstr@#1}{#2}}
- \def\blx@lbx@defstring#1#2{%
- \blx@lbx@defstring@i{#1}#2}
- \def\blx@lbx@defstring@i#1#2#3{%
- \csdef{abx@lstr@#1}{#2}%
- \csdef{abx@sstr@#1}{#3}}
- % {<language>}
- \def\blx@lbxcheck#1{%
- \ifcsdef{blx@lng@#1}
- {\expandafter\expandafter\expandafter\IfFileExists
- \expandafter\expandafter\expandafter{%
- \csname blx@lng@#1\endcsname.lbx}
- {}
- {\blx@err@nolang{#1}}}
- {\IfFileExists{#1.lbx}
- {}
- {\blx@err@nolang{#1}}}}
- % {<language>}{<definitions>}
- \newrobustcmd*{\DefineBibliographyExtras}[2]{%
- \blx@lbxcheck{#1}%
- \csgappto{blx@hook@extras@#1}{%
- \blx@defbibextras{#1}{#2}}}
- \@onlypreamble\DefineBibliographyExtras
- \newrobustcmd*{\UndefineBibliographyExtras}[2]{%
- \blx@lbxcheck{#1}%
- \csgappto{blx@hook@noextras@#1}{%
- \blx@undefbibextras{#1}{#2}}}
- \@onlypreamble\UndefineBibliographyExtras
- \def\blx@defbibextras#1{\csgappto{abx@extras@#1}}
- \def\blx@undefbibextras#1{\csgappto{abx@noextras@#1}}
- % {<language>}{<language>}
- \def\blx@letbibextras#1#2{%
- \blx@lbxinput@extras{#2}{}{\blx@err@nolang{#2}}%
- \global\csletcs{abx@extras@#1}{abx@extras@#2}
- \global\csletcs{abx@noextras@#1}{abx@noextras@#2}}%
- % {<language>}{<strings>}
- \newrobustcmd*{\DefineBibliographyStrings}[2]{%
- \blx@lbxcheck{#1}%
- \csgappto{blx@hook@strings@#1}{%
- \begingroup
- \let\blx@defstring\blx@cfg@defstring
- \blx@defbibstrings{#1}{#2}%
- \endgroup}}
- \@onlypreamble\DefineBibliographyStrings
- \def\blx@defbibstrings#1#2{%
- \def\do##1{\csundef{abx@lstr@##1}\csundef{abx@sstr@##1}}%
- \abx@dostrings
- \csuse{abx@strings@#1}%
- \setkeys{blx@lbx}{#2}%
- \let\do\blx@defbibstrings@i
- \csxdef{abx@strings@#1}{\abx@dostrings}%
- \csgappto{abx@strings@#1}{%
- \ifcsdef{\abx@str @bibliography}
- {\letcs\bibname{\abx@str @bibliography}}
- {\let\bibname\@empty}%
- \ifcsdef{\abx@str @references}
- {\letcs\refname{\abx@str @references}}
- {\let\refname\@empty}%
- \ifcsdef{\abx@str @shorthands}
- {\letcs\biblistname{\abx@str @shorthands}}
- {\let\biblistname\@empty}}}
- \def\blx@defbibstrings@i#1{%
- \ifcsdef{abx@lstr@#1}
- {\def\expandafter\noexpand\csname abx@lstr@#1\endcsname{%
- \csexpandonce{abx@lstr@#1}}}
- {\undef\expandafter\noexpand\csname abx@lstr@#1\endcsname}%
- \ifcsdef{abx@sstr@#1}
- {\def\expandafter\noexpand\csname abx@sstr@#1\endcsname{%
- \csexpandonce{abx@sstr@#1}}}
- {\undef\expandafter\noexpand\csname abx@sstr@#1\endcsname}}
- % {<language>}{<language>}
- \def\blx@letbibstrings#1#2{%
- \blx@lbxinput@strings{#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}}
- % {<mapping suffix>}
- \newrobustcmd*{\DeclareLanguageMappingSuffix}[1]{%
- \gdef\blx@lng@suff{#1}}
- \@onlypreamble\DeclareLanguageMappingSuffix
- \let\blx@lng@suff\@empty
- % {<language>}{<mapping>}
- \newrobustcmd*{\DeclareLanguageMapping}[2]{%
- \csgdef{blx@lng@#1}{#2}%
- \csgdef{blx@lng@explicit@#1}{#2}}
- \@onlypreamble\DeclareLanguageMapping
- % to avoid copying, these commands simply redefine the input handlers and
- % process and postprocess code
- % {<language>}{<success>}{<failure>}
- \def\blx@lbxinput#1{%
- \csletcs{blx@lbx@input@handler}{blx@lbx@input@handler@once}%
- \csletcs{blx@lbx@input@process}{blx@lbx@input@process@all}%
- \csletcs{blx@lbx@input@postprocess}{blx@lbx@input@postprocess@all}%
- \blx@lbxinput@i{#1}}
- \def\blx@lbxinput@strings#1{%
- \csletcs{blx@lbx@input@handler}{blx@lbx@input@handler@simple}%
- \csletcs{blx@lbx@input@process}{blx@lbx@input@process@strings}%
- \csletcs{blx@lbx@input@postprocess}{blx@lbx@input@postprocess@strings}%
- \blx@lbxinput@i{#1}}
- \def\blx@lbxinput@extras#1{%
- \csletcs{blx@lbx@input@handler}{blx@lbx@input@handler@simple}%
- \csletcs{blx@lbx@input@process}{blx@lbx@input@process@extras}%
- \csletcs{blx@lbx@input@postprocess}{blx@lbx@input@postprocess@extras}%
- \blx@lbxinput@i{#1}}
- \def\blx@lbxinput@i#1{%
- \ifcsundef{blx@nolbxrecurse@#1}
- {\ifcsdef{blx@lng@explicit@#1}
- {\global\csletcs{blx@lng@#1}{blx@lng@explicit@#1}}
- {\ifdefempty\blx@lng@suff
- {}
- {\csgdef{blx@lng@#1}{#1\blx@lng@suff}}}}
- {}%
- \blx@lbxinput@ii{#1}}
- \def\blx@lbxinput@ii#1{%
- \ifcsdef{blx@lng@#1}
- {\expandafter\expandafter\expandafter\blx@lbxinput@iii
- \expandafter\expandafter\expandafter{%
- \csname blx@lng@#1\endcsname}{#1}}
- {\blx@lbxinput@iv{#1}{#1}{language '#1'}}}
- % {<mapping>}{<language>}
- \def\blx@lbxinput@iii#1#2{%
- \global\csundef{blx@lng@#2}%
- \IfFileExists{#1.lbx}
- {\blx@lbxinput@iv{#2}{#1}{language '#2' -> '#1'}}
- {\ifcsdef{blx@suffmaptried@#2}
- {}
- {\blx@warning@noline{%
- File '#1.lbx' not found!\MessageBreak
- Ignoring mapping '#2' -> '#1'}%
- \global\cslet{blx@suffmaptried@#2}\@empty}%
- \blx@lbxinput@iv{#2}{#2}{language '#2'}}}
- % .lbx files must be read with one of the two following commands,
- % do not use \blx@inputonce. Only the commands here make sure that the file
- % is read as many times as necessary.
- % blx@file@lbx@simple@#1 only blocks the file being added to the file list
- % blx@file@lbx@once@#1 blocks a file from being loaded again by the input-once
- % routine
- % {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
- \protected\long\def\blx@lbx@input@handler@simple#1#2#3#4#5#6{%
- \blx@info@noline{Trying to load #2..}%
- \IfFileExists{#1}
- {\blx@info@noline{... file '#1' found}%
- #3\@@input\@filef@und#4#5%
- \ifcsundef{blx@file@lbx@simple@#1}
- {\listxadd\blx@list@req@stat{#1}%
- \@addtofilelist{#1}%
- \global\cslet{blx@file@lbx@simple@#1}\@empty}
- {}}
- {\blx@info@noline{... file '#1' not found}#6}}
- % {<file>}{<message>}{<preload>}{<postload>}{<success>}{<failure>}
- \protected\long\def\blx@lbx@input@handler@once#1#2#3#4#5#6{%
- \ifcsundef{blx@file@lbx@once@#1}
- {\blx@info@noline{Trying to load #2..}%
- \IfFileExists{#1}
- {\blx@info@noline{... file '#1' found}%
- #3\@@input\@filef@und#4#5%
- \ifcsundef{blx@file@lbx@simple@#1}
- {\listxadd\blx@list@req@stat{#1}%
- \@addtofilelist{#1}}
- {}}
- {\blx@info@noline{... file '#1' not found}#6}%
- \global\cslet{blx@file@lbx@once@#1}\@empty
- \global\cslet{blx@file@lbx@simple@#1}\@empty}
- {#5}}
- \def\blx@lbx@input@process@strings#1{%
- \global\cslet{abx@strings@#1}\@empty
- \def\InheritBibliographyStrings{%
- \blx@letbibstrings{#1}}%
- \def\DeclareBibliographyStrings##1{%
- \begingroup
- \let\blx@defstring\blx@lbx@defstring
- \blx@defbibstrings{#1}{##1}%
- \endgroup}}
- \def\blx@lbx@input@process@extras#1{%
- \global\cslet{abx@extras@#1}\@empty
- \global\cslet{abx@noextras@#1}\@empty
- \def\InheritBibliographyExtras{\blx@letbibextras{#1}}%
- \def\DeclareBibliographyExtras{\blx@defbibextras{#1}}%
- \def\UndeclareBibliographyExtras{\blx@undefbibextras{#1}}}
- \def\blx@lbx@input@process@all#1{%
- \blx@lbx@input@process@strings{#1}%
- \blx@lbx@input@process@extras{#1}%
- \def\DeclareHyphenationExceptions{\blx@hyphexcept{#1}}}
- \def\blx@lbx@input@postprocess@strings#1{%
- \csuse{blx@hook@strings@#1}}
- \def\blx@lbx@input@postprocess@extras#1{%
- \csuse{blx@hook@extras@#1}%
- \csuse{blx@hook@noextras@#1}}
- \def\blx@lbx@input@postprocess@all#1{%
- \blx@lbx@input@postprocess@strings{#1}%
- \blx@lbx@input@postprocess@extras{#1}%
- \csuse{blx@hook@hyph@#1}}
- % {<language>}{<lbxfile>}{<message>}
- \def\blx@lbxinput@iv#1#2#3{%
- \begingroup
- \blx@lbx@input@handler{#2.lbx}{#3}
- {\blx@maplang{#1}{#1}%
- \let\InheritBibliographyStrings\@gobble
- \let\DeclareBibliographyStrings\@gobble
- \let\InheritBibliographyExtras\@gobble
- \let\DeclareBibliographyExtras\@gobble
- \let\UndeclareBibliographyExtras\@gobble
- \blx@lbx@input@process{#1}%
- \begingroup
- \cslet{blx@nolbxrecurse@#1}\@empty
- \blx@saneccodes
- \makeatletter}
- {\endgroup
- \blx@lbx@input@postprocess{#1}}
- {\aftergroup\@firstoftwo}
- {\aftergroup\@secondoftwo}%
- \endgroup}
- % {<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*{\mkdaterangeshort}{%
- \mkdaterangefull{short}}
- \newrobustcmd*{\mkdaterangelong}{%
- \mkdaterangefull{long}}
- \newrobustcmd*{\mkdaterangeterse}{%
- \mkdaterangetrunc{short}}
- \newrobustcmd*{\mkdaterangecomp}{%
- \mkdaterangetrunc{long}}
- \newrobustcmd*{\mkdaterangeshortextra}{%
- \mkdaterangefullextra{short}}
- \newrobustcmd*{\mkdaterangelongextra}{%
- \mkdaterangefullextra{long}}
- \newrobustcmd*{\mkdaterangeterseextra}{%
- \mkdaterangetruncextra{short}}
- \newrobustcmd*{\mkdaterangecompextra}{%
- \mkdaterangetruncextra{long}}
- % calls to \blx@metadateinfo should be grouped to avoid name clashes
- \def\blx@metadateinfo#1{%
- \letcs\ifdateera{if#1dateera}%
- \letcs\ifenddateera{if#1enddateera}%
- \letcs\ifdatecirca{if#1datecirca}%
- \letcs\ifenddatecirca{if#1enddatecirca}%
- \letcs\ifdatejulian{if#1datejulian}%
- \letcs\ifenddatejulian{if#1enddatejulian}%
- \letcs\ifdateuncertain{if#1dateuncertain}%
- \letcs\ifenddateuncertain{if#1enddateuncertain}%
- \letcs\ifdateunknown{if#1dateunknown}%
- \letcs\ifenddateunknown{if#1enddateunknown}}
- \expandafter\newrobustcmd\expandafter*\csname mktimerange24h\endcsname{%
- \mktimerange{24h}}
- \expandafter\newrobustcmd\expandafter*\csname mktimerange12h\endcsname{%
- \mktimerange{12h}}
- \expandafter\newrobustcmd\expandafter*\csname mktimerange24hcomp\endcsname[1]{%
- \iffieldundef{#1hour}
- {}
- {\ifboolexpr{test {\iffieldundef{#1endhour}}
- or
- test {\iffieldequalstr{#1endhour}{}}}
- {\mktimerange{24h}{#1}}
- {\iffieldsequal{#1hour}{#1endhour}
- % 14:xx:xx 14:xx:xx
- {\iffieldsequal{#1minute}{#1endminute}
- % 14:13:xx 14:13:xx
- {\toggletrue{blx@seconds}%
- \printtext[#1time]{%
- \csuse{mkbibtime24h}{#1hour}{#1minute}{#1second}{}%
- \bibtimerangesep
- \csuse{mkbibtime24h}{}{}{#1endsecond}{}}}
- % 14:13:xx 14:14:xx
- {\toggletrue{blx@seconds}%
- \printtext[#1time]{\csuse{mkbibtime24h}{#1hour}{#1minute}{}{}%
- \bibtimerangesep
- \csuse{mkbibtime24h}{}{#1endminute}{}{}}}}
- % 14:xx:xx 15:xx:xx
- {\mktimerange{24h}{#1}}}}}
- % {<24h|24hcomp|12h>}{<datetype>}
- \newrobustcmd*{\mktimerange}[2]{%
- \iffieldundef{#2hour}
- {\blx@nounit}
- {\blx@timepre{#2}{}%
- \printtext[#2time]{\csuse{mkbibtime#1}{#2hour}{#2minute}{#2second}{#2timezone}%
- \iffieldundef{#2endhour}
- {}
- {\blx@timepre{#2}{end}%
- \iffieldequalstr{#2endhour}{}
- {\mbox{\bibtimerangesep}}
- {\bibtimerangesep
- \csuse{mkbibtime#1}{#2endhour}{#2endminute}{#2endsecond}{#2endtimezone}}}}}}
- % {<datetype>}{''|end}
- \newrobustcmd*{\blx@timepre}[2]{%
- \iftoggle{blx@timezones}{}
- {\blx@imc@clearfield{#1#2timezone}}%
- \iftoggle{blx@seconds}{}
- {\blx@imc@clearfield{#1#2second}}}
- % {<short|long>}{<datetype>}
- \newrobustcmd*{\mkdaterangefull}[2]{%
- \begingroup
- \blx@metadateinfo{#2}%
- \iffieldundef{#2year}
- {\blx@nounit}
- {\printtext[#2date]{%
- \datecircaprint
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#2season}
- {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
- % Optionally print the time after the date
- \blx@printtime{#2}{}}
- {\csuse{mkbibseasondate#1}{#2year}{#2season}}%
- \dateuncertainprint
- \dateeraprint{#2year}%
- \iffieldundef{#2endyear}
- {}
- {\iffieldequalstr{#2endyear}{}
- {\mbox{\bibdaterangesep}}
- {\bibdaterangesep
- \enddatecircaprint
- \iffieldundef{#2season}
- {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
- % Optionally print the time after the date
- \blx@printtime{#2}{end}}
- {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}%
- \enddateuncertainprint
- \dateeraprint{#2endyear}}}}}%
- \endgroup}
- \newrobustcmd*{\mkdaterangetrunc}[2]{%
- \begingroup
- \blx@metadateinfo{#2}%
- \iffieldundef{#2year}
- {\blx@nounit}
- {\printtext[#2date]{%
- \datecircaprint
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#2season}
- {\ifdateyearsequal{#2}{#2end}
- {\iffieldsequal{#2month}{#2endmonth}
- {\csuse{mkbibdate#1}{}{}{#2day}}
- {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
- {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
- \iffieldsequal{#2dateera}{#2enddateera}{}
- {\dateeraprint{#2year}}}}
- {\ifdateyearsequal{#2}{#2end}
- {\csuse{mkbibseasondate#1}{}{#2season}}
- {\csuse{mkbibseasondate#1}{#2year}{#2season}%
- \iffieldsequal{#2dateera}{#2enddateera}{}
- {\dateeraprint{#2year}}}}%
- \dateuncertainprint
- \iffieldundef{#2endyear}
- {}
- {\iffieldequalstr{#2endyear}{}
- {\mbox{\bibdaterangesep}}
- {\bibdaterangesep
- \enddatecircaprint
- \iffieldundef{#2season}
- {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
- {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}%
- \enddateuncertainprint
- \dateeraprint{#2endyear}}}}}%
- \endgroup}
- \newrobustcmd*{\mkdaterangefullextra}[2]{%
- \begingroup
- \blx@metadateinfo{#2}%
- \iffieldundef{#2year}
- {\blx@nounit}
- {\printtext[#2date]{%
- \datecircaprint
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#2season}
- {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
- % Optionally print the time after the date
- \blx@printtime{#2}{}}
- {\csuse{mkbibseasondate#1}{#2year}{#2season}}%
- \dateuncertainprint
- \dateeraprint{#2year}%
- \iffieldundef{#2endyear}
- {\printfield{extradate}}
- {\iffieldequalstr{#2endyear}{}
- {\printfield{extradate}%
- \printtext{\mbox{\bibdaterangesep}}}
- {\printtext{%
- \bibdaterangesep
- \enddatecircaprint
- \iffieldundef{#2season}
- {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}%
- % Optionally print the time after the date
- \blx@printtime{#2}{end}}
- {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}%
- \printfield{extradate}%
- \enddateuncertainprint
- \dateeraprint{#2endyear}}}}}%
- \endgroup}
- \newrobustcmd*{\mkdaterangetruncextra}[2]{%
- \begingroup
- \blx@metadateinfo{#2}%
- \iffieldundef{#2year}
- {\blx@nounit}
- {\printtext[#2date]{%
- \datecircaprint
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#2season}
- {\ifdateyearsequal{#2}{#2end}
- {\iffieldsequal{#2month}{#2endmonth}
- {\csuse{mkbibdate#1}{}{}{#2day}}
- {\csuse{mkbibdate#1}{}{#2month}{#2day}}}
- {\csuse{mkbibdate#1}{#2year}{#2month}{#2day}%
- \iffieldsequal{#2dateera}{#2enddateera}{}
- {\dateeraprint{#2year}}}}
- {\ifdateyearsequal{#2}{#2end}
- {\csuse{mkbibseasondate#1}{}{#2season}}
- {\csuse{mkbibseasondate#1}{#2year}{#2season}%
- \iffieldsequal{#2dateera}{#2enddateera}{}
- {\dateeraprint{#2year}}}}%
- \dateuncertainprint
- \iffieldundef{#2endyear}
- {\printfield{extradate}}
- {\iffieldequalstr{#2endyear}{}
- {\printfield{extradate}%
- \printtext{\mbox{\bibdaterangesep}}}
- {\printtext{%
- \bibdaterangesep
- \enddatecircaprint
- \iffieldundef{#2season}
- {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}}
- {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}%
- \printfield{extradate}%
- \enddateuncertainprint
- \dateeraprint{#2endyear}}}}}%
- \endgroup}
- \newrobustcmd*{\mkdaterangeyear}[1]{%
- \blx@imc@clearfield{#1season}%
- \blx@imc@clearfield{#1month}%
- \blx@imc@clearfield{#1day}%
- \blx@imc@clearfield{#1hour}%
- \blx@imc@clearfield{#1minute}%
- \blx@imc@clearfield{#1second}%
- \blx@imc@clearfield{#1timezone}%
- \blx@imc@clearfield{#1endseason}%
- \blx@imc@clearfield{#1endmonth}%
- \blx@imc@clearfield{#1endday}%
- \blx@imc@clearfield{#1endhour}%
- \blx@imc@clearfield{#1endminute}%
- \blx@imc@clearfield{#1endsecond}%
- \blx@imc@clearfield{#1endtimezone}%
- \ifdateyearsequal{#1}{#1end}
- {\blx@imc@clearfield{#1endyear}}
- {}%
- \mkdaterangefull{short}{#1}}
- % {<datetype>}
- \newrobustcmd*{\mkdaterangeymd}[1]{%
- \begingroup
- \blx@metadateinfo{#1}%
- \iffieldundef{#1year}
- {\blx@nounit}
- {\printtext[#1date]{%
- \datecircaprint
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#1season}
- {\blx@ymddate{#1}{}%
- % Optionally print the time after the date
- \blx@printtime{#1}{}}
- {\csuse{mkbibseasondateshort}{#1year}{#1season}}%
- \dateuncertainprint
- \dateeraprint{#1year}%
- \iffieldundef{#1endyear}
- {}
- {\iffieldequalstr{#1endyear}{}
- {\mbox{\bibdaterangesep}}
- {\bibdaterangesep
- \enddatecircaprint
- \iffieldundef{#1season}
- {\blx@ymddate{#1}{end}%
- % Optionally print the time after the date
- \blx@printtime{#1}{end}}
- {\csuse{mkbibseasondateshort}{#1endyear}{#1endseason}}%
- \enddateuncertainprint
- \dateeraprint{#1endyear}}}}}%
- \endgroup}
- % {<datetype>}
- \newrobustcmd*{\mkdaterangeymdextra}[1]{%
- \begingroup
- \blx@metadateinfo{#1}%
- \iffieldundef{#1year}
- {\blx@nounit}
- {\printtext[#1date]{%
- \datecircaprint
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#1season}
- {\blx@ymddate[extradate]{#1}{}%
- % Optionally print the time after the date
- \blx@printtime{#1}{}}
- {\csuse{mkbibseasondateshort}{#1year}{#1season}}%
- \dateuncertainprint
- \dateeraprint{#1year}%
- \iffieldundef{#1endyear}
- {}
- {\iffieldequalstr{#1endyear}{}
- {\mbox{\bibdaterangesep}}
- {\printtext{%
- \bibdaterangesep
- \enddatecircaprint
- \iffieldundef{#1season}
- {\blx@ymddate{#1}{end}%
- % Optionally print the time after the date
- \blx@printtime{#1}{end}}
- {\csuse{mkbibseasondateshort}{#1endyear}{#1endseason}}}%
- \enddateuncertainprint
- \dateeraprint{#1endyear}}}}}%
- \endgroup}
- % [extradate]{<datetype>}{''|end}
- \newrobustcmd*{\blx@ymddate}[3][]{%
- \dateeraprintpre{#2#3year}%
- \mkyearzeros{\thefield{#2#3year}}\ifblank{#1}{}{\printfield{#1}}%
- \iffieldundef{#2#3month}{}{\bibdatesep\mkmonthzeros{\thefield{#2#3month}}}%
- \iffieldundef{#2#3day}{}{\bibdatesep\mkdayzeros{\thefield{#2#3day}}}}
- \newrobustcmd*{\mkdaterangeyearextra}[1]{%
- \blx@imc@clearfield{#1season}%
- \blx@imc@clearfield{#1month}%
- \blx@imc@clearfield{#1day}%
- \blx@imc@clearfield{#1hour}%
- \blx@imc@clearfield{#1minute}%
- \blx@imc@clearfield{#1second}%
- \blx@imc@clearfield{#1timezone}%
- \blx@imc@clearfield{#1endseason}%
- \blx@imc@clearfield{#1endmonth}%
- \blx@imc@clearfield{#1endday}%
- \blx@imc@clearfield{#1endhour}%
- \blx@imc@clearfield{#1endminute}%
- \blx@imc@clearfield{#1endsecond}%
- \blx@imc@clearfield{#1endtimezone}%
- \ifdateyearsequal{#1}{#1end}
- {\blx@imc@clearfield{#1endyear}}
- {}%
- \mkdaterangefullextra{short}{#1}}
- % {<datetype>}{'' | end}
- \newrobustcmd*{\blx@printtime}[2]{%
- \ifboolexpr{%
- togl {blx@#1dateusetime}
- and
- not test {\iffieldundef{#1#2hour}}}
- {\blx@timepre{#1}{#2}%
- \printtext{\bibdatetimesep}%
- \printtext[#1time]{\csuse{mkbibtime\csuse{blx@timeformat@#1time}}{#1#2hour}{#1#2minute}{#1#2second}{#1#2timezone}}}
- {}}
- \newrobustcmd*{\mkdaterangeiso}[1]{%
- \begingroup
- \blx@metadateinfo{#1}%
- \def\bibdatetimesep{T}%
- \iffieldundef{#1year}
- {\blx@nounit}
- {\printtext[#1date]{%
- \blx@isodate{#1}{}%
- \ifboolexpr{%
- togl {blx@#1dateusetime}
- and
- not test {\iffieldundef{#1hour}}}
- {\printtext{\bibdatetimesep}%
- \blx@isotime{#1}{}}
- {}%
- \dateuncertainprint
- \datecircaprintiso
- \iffieldundef{#1endyear}
- {}
- {\addslash
- \blx@isodate{#1}{end}%
- \ifboolexpr{%
- togl {blx@#1dateusetime}
- and
- not test {\iffieldundef{#1endhour}}}
- {\printtext{\bibdatetimesep}%
- \blx@isotime{#1}{end}}
- {}%
- \enddateuncertainprint
- \enddatecircaprintiso}}}%
- \endgroup}
- \newrobustcmd*{\mkdaterangeisoextra}[1]{%
- \begingroup
- \blx@metadateinfo{#1}%
- \def\bibdatetimesep{T}%
- \iffieldundef{#1year}
- {\blx@nounit}
- {\printtext[#1date]{%
- \blx@isodate[extradate]{#1}{}%
- \ifboolexpr{%
- togl {blx@#1dateusetime}
- and
- not test {\iffieldundef{#1hour}}}
- {\printtext{\bibdatetimesep}%
- \blx@isotime{#1}{}}
- {}%
- \dateuncertainprint
- \datecircaprintiso
- \iffieldundef{#1endyear}
- {}
- {\addslash
- \blx@isodate{#1}{end}}%
- \ifboolexpr{%
- togl {blx@#1dateusetime}
- and
- not test {\iffieldundef{#1endhour}}}
- {\printtext{\bibdatetimesep}%
- \blx@isotime{#1}{end}}
- {}%
- \enddateuncertainprint
- \enddatecircaprintiso}}%
- \endgroup}
- % [extradate]{<datetype>}{''|end}
- \newrobustcmd*{\blx@isodate}[3][]{%
- \dateeraprintpre{#2#3year}%
- \blx@imc@forcezerosy{\thefield{#2#3year}}\ifblank{#1}{}{\printfield{#1}}%
- % Such a season component can only come from an ISO8601 season which replaces
- % a normal month so if it exists, we know that a normal date print is ruled out
- \iffieldundef{#2#3season}
- {\iffieldundef{#2#3month}{}{\hyphen\blx@imc@forcezerosmdt{\thefield{#2#3month}}}%
- \iffieldundef{#2#3day}{}{\hyphen\blx@imc@forcezerosmdt{\thefield{#2#3day}}}}
- {\hyphen\blx@seasonmap{\thefield{#2#3season}}}}
- \def\blx@seasonmap#1{%
- \blx@xifstrequal{#1}{spring}{21}
- {\blx@xifstrequal{#1}{summer}{22}
- {\blx@xifstrequal{#1}{autumn}{23}
- {\blx@xifstrequal{#1}{winter}{24}{}}}}}
- \newrobustcmd*{\blx@isotime}[2]{%
- \blx@imc@forcezerosmdt{\thefield{#1#2hour}}%
- :\blx@imc@forcezerosmdt{\thefield{#1#2minute}}%
- :\blx@imc@forcezerosmdt{\thefield{#1#2second}}%
- \iftoggle{blx@timezones}
- {\mkbibtimezone{\thefield{#1#2timezone}}}
- {}}
- % some sane defaults for bibliography extras
- % many of these should be redefined in the .lbx files
- % all .lbx files should have date and time handling, so the fallback values
- % issue a warning to make people aware of the deficiency in their file
- % \mkbibordinal should also only be used if it is defined, so it warns as well
- % times
- \newrobustcmd*{\bibtimesep}{:}
- \newrobustcmd*{\bibtimerangesep}{\textendash}
- \newrobustcmd*{\bibutctimezone}{Z}
- \newrobustcmd*{\bibtimezonesep}{}
- \newrobustcmd*{\bibtzminsep}{\bibtimesep}
- % dates
- \newrobustcmd*{\bibdateuncertain}{?}
- % \textminus is only guaranteed for non-PDFTeX
- \newrobustcmd*{\bibdateeraprefix}{\ifdef\textminus\textminus\textendash}
- \newrobustcmd*{\bibdateeraendprefix}{\,\bibdateeraprefix}
- \newrobustcmd*{\bibdatesep}{\hyphen}
- \newrobustcmd*{\bibdaterangesep}{\bibrangedash}
- % date+times
- \newrobustcmd*{\bibdatetimesep}{\space}
- % ranges
- \newrobustcmd*{\bibrangedash}{\textendash}
- \newrobustcmd*{\bibrangessep}{,\space}
- % formatters
- \newrobustcmd*{\mkbibtimezone}[1]{\blx@xifstrequal{#1}{Z}{\bibutctimezone}{#1}}
- % you should never end up needing the next few definitions
- % but it is safer to do something than just swallow the input
- \newrobustcmd*{\mkbibdatelong}[3]{%
- \blx@warning@noline{%
- Using fallback definition for \string\mkbibdatelong.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \string\mkbibdatelong
- }%
- \iffieldundef{#3}
- {}
- {\mkbibordinal{\thefield{#3}}%
- \iffieldundef{#2}{}{\nobreakspace}}%
- \iffieldundef{#2}
- {}
- {\mkbibmonth{\thefield{#2}}%
- \iffieldundef{#1}{}{\space}}%
- \iffieldbibstring{#1}
- {\bibstring{\thefield{#1}}}
- {\dateeraprintpre{#1}\stripzeros{\thefield{#1}}}}
- \newrobustcmd*{\mkbibdateshort}[3]{%
- \blx@warning@noline{%
- Using fallback definition for \string\mkbibdateshort.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \string\mkbibdateshort
- }%
- \iffieldundef{#3}
- {}
- {\mkdayzeros{\thefield{#3}}%
- \iffieldundef{#2}{}{/}}%
- \iffieldundef{#2}
- {}
- {\mkmonthzeros{\thefield{#2}}%
- \iffieldundef{#1}{}{/}}%
- \iffieldbibstring{#1}
- {\bibstring{\thefield{#1}}}
- {\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}
- \expandafter\newrobustcmd\expandafter*\csname mkbibtime24h\endcsname[4]{%
- \blx@warning@noline{%
- Using fallback definition for
- \expandafter\string\csname mkbibtime24h\endcsname.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \expandafter\string\csname mkbibtime24h\endcsname
- }%
- \iffieldundef{#1}{}
- {\printtext{\mktimezeros{\thefield{#1}}}\setunit{\bibtimesep}}%
- \iffieldundef{#2}{}
- {\printtext{\mktimezeros{\thefield{#2}}}\setunit{\bibtimesep}}%
- \iffieldundef{#3}{}
- {\printtext{\mktimezeros{\thefield{#3}}}}%
- \setunit{}%
- \iffieldundef{#4}{}
- {\bibtimezonesep
- \mkbibtimezone{\thefield{#4}}}}
- \expandafter\newrobustcmd\expandafter*\csname mkbibtime12h\endcsname[4]{%
- \blx@warning@noline{%
- Using fallback definition for
- \expandafter\string\csname mkbibtime12h\endcsname.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \expandafter\string\csname mkbibtime12h\endcsname
- }%
- \stripzeros{\mktimehh{\thefield{#1}}}%
- \bibtimesep
- \forcezerosmdt{\thefield{#2}}%
- \iffieldundef{#3}{}
- {\bibtimesep
- \forcezeros{\thefield{#3}}}%
- \space
- \ifnumless{\thefield{#1}}{12}
- {\bibstring{am}}
- {\bibstring{pm}}%
- \iffieldundef{#4}{}
- {\space\bibtimezonesep
- \parentext{\mkbibtimezone{\thefield{#4}}}}}
- \newrobustcmd*{\mkbibseasondateshort}[2]{%
- \blx@warning@noline{%
- Using fallback definition for \string\mkbibseasondateshort.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \string\mkbibseasondateshort
- }%
- \mkbibseason{\thefield{#2}}%
- \iffieldundef{#1}{}{\space}%
- \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}
- \newrobustcmd*{\mkbibseasondatelong}[2]{%
- \blx@warning@noline{%
- Using fallback definition for \string\mkbibseasondatelong.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \string\mkbibseasondatelong
- }%
- \mkbibseason{\thefield{#2}}%
- \iffieldundef{#1}{}{\space}%
- \dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}
- \newrobustcmd*{\finalandcomma}{}
- \newrobustcmd*{\finalandsemicolon}{}
- \newrobustcmd*{\mkbibordinal}[1]{%
- \blx@warning@noline{%
- Using fallback definition for \string\mkbibordinal.\MessageBreak
- The command should be defined in the .lbx file.\MessageBreak
- If you see this message, the .lbx file could not be\MessageBreak
- loaded, is faulty or does not contain a definition\MessageBreak
- for \string\mkbibordinal
- }%
- #1%
- }
- \newrobustcmd*{\mkbibmascord}{\mkbibordinal}
- \newrobustcmd*{\mkbibfemord}{\mkbibordinal}
- \newrobustcmd*{\mkbibneutord}{\mkbibordinal}
- % the following is usually not redefined in an .lbx
- \newrobustcmd*{\mkbibseason}[1]{\abx@bibseason{#1}}
- \newrobustcmd*{\mkbibmonth}[1]{%
- \ifcase0#1\relax
- \blx@warning@entry{Month out of range or not an integer}%
- \or\abx@bibmonth{january}%
- \or\abx@bibmonth{february}%
- \or\abx@bibmonth{march}%
- \or\abx@bibmonth{april}%
- \or\abx@bibmonth{may}%
- \or\abx@bibmonth{june}%
- \or\abx@bibmonth{july}%
- \or\abx@bibmonth{august}%
- \or\abx@bibmonth{september}%
- \or\abx@bibmonth{october}%
- \or\abx@bibmonth{november}%
- \or\abx@bibmonth{december}%
- \else
- \blx@warning@entry{Month out of range}#1%
- \fi}
- % strip leading zeros and prepend zero for month/day/timeparts
- % Allow for non numeric labelyear values
- \protected\def\blx@imc@forcezerosmdt#1{%
- \protected@edef\blx@tempa{#1}%
- \expandafter\blx@imc@forcezerosmdt@i\expandafter{\blx@tempa}}
- \protected\def\blx@imc@forcezerosmdt@i#1{%
- \notblank{#1}
- {\blx@imc@ifinteger{#1}
- {\ifnumless{#1}{10}
- {0\the\numexpr(#1)\relax}
- {#1}}
- {#1}}
- {#1}}
- % strip leading zeros and prepend zero(s) for year
- % Allow for non numeric labelyear values
- \protected\def\blx@imc@forcezerosy#1{%
- \protected@edef\blx@tempa{#1}%
- \expandafter\blx@imc@forcezerosy@i\expandafter{\blx@tempa}}
- \protected\def\blx@imc@forcezerosy@i#1{%
- \notblank{#1}
- {\blx@imc@ifinteger{#1}
- {\ifnumless{#1}{10}% 1-digit year
- {000\the\numexpr(#1)\relax}
- {\ifnumless{#1}{100}% 2-digit year
- {00\the\numexpr(#1)\relax}
- {\ifnumless{#1}{1000}% 3-digit year
- {0\the\numexpr(#1)\relax}
- {#1}}}}
- {#1}}
- {#1}}%
- \let\blx@imc@mkyearzeros\blx@imc@forcezerosy
- \let\blx@imc@mkmonthzeros\blx@imc@forcezerosmdt
- \let\blx@imc@mkdayzeros\blx@imc@forcezerosmdt
- \protected\def\blx@imc@stripzeros#1{%
- \begingroup
- \setbox\@tempboxa=\hbox\bgroup
- \aftergroup\endgroup
- \abx@hook@xsanitize
- \if0#1\relax
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi
- {\@tempcnta#1\relax
- \expandafter\egroup
- \number\@tempcnta
- \@tempcnta#1\relax}
- {\egroup#1}}
- \let\blx@imc@printlabeldate\@empty
- \let\blx@imc@printlabeltime\@empty
- \let\blx@imc@printlabeldateextra\@empty
- \blx@regimcs{\printlabeldate \printlabeltime \printlabeldateextra
- \stripzeros \forcezerosy \forcezerosmdt
- \mkyearzeros \mkmonthzeros \mkdayzeros \mktimezeros}
- % User macro for retrieving currrent language
- \def\currentlang{\blx@languagename}
- % {<language>}{<strings>}
- \def\blx@maplang#1#2{%
- \csxappto{extras#1}{%
- \noexpand\blx@resetpunct
- \expandafter\noexpand\csname abx@extras@#2\endcsname
- \expandafter\noexpand\csname abx@strings@#2\endcsname}%
- \csxappto{noextras#1}{%
- \noexpand\blx@resetpunct
- \expandafter\noexpand\csname abx@noextras@#2\endcsname}}
- %% babel/polyglossia interface
- \def\blx@beglang{\blx@clearlang\begingroup}
- \def\blx@endlang{\endgroup}
- \let\blx@beglangbib\blx@beglang
- \let\blx@endlangbib\blx@endlang
- \let\blx@beglangcite\blx@beglang
- \let\blx@endlangcite\blx@endlang
- \let\blx@hook@endlang\@empty
- \let\blx@hook@initlang\@empty
- \let\blx@imc@mainlang\@empty
- \def\blx@hyphenreset{%
- \ifcsundef{l@\blx@languagename}
- {}
- {\language\csname l@\blx@languagename\endcsname\relax}%
- \ifcsundef{\blx@languagename hyphenmins}
- {\blx@sethyphenmins\tw@\thr@@}
- {\expandafter\expandafter\expandafter\blx@sethyphenmins
- \csname\blx@languagename hyphenmins\endcsname}}
- \def\blx@sethyphenmins#1#2{%
- \lefthyphenmin#1\relax
- \righthyphenmin#2\relax}
- \begingroup
- \@makeother\#
- \gdef\blx@mkautolangbabel{%
- \ifundef\bbl@main@language
- {\blx@error
- {No default 'babel' language defined}
- {You must define a default language for 'babel'}}
- {}%
- \pretocmd\select@language{\blx@langsetup{#1}}
- {\ifdef\blx@thelangenv
- {\def\blx@beglang{%
- \blx@clearlang
- \begingroup
- % Need to override all entries, regardless of if there is a langid
- % if language=<language> option is given
- \ifboolexpr { test {\ifdef\abx@field@langid }
- or
- test {\ifdef\blx@forcelanguagename} }
- % override local langid if we forced it with
- % language=<language> option
- {\ifdef\blx@forcelanguagename
- {\let\abx@field@langid\blx@forcelanguagename}
- {}%
- \let\blx@languagename\abx@field@langid% track global language
- \ifcsundef{l@\abx@field@langid}
- {\blx@warn@nohyph{\abx@field@langid}}
- {\blx@hook@initlang
- \def\blx@endlang{%
- \blx@hook@endlang
- \csname end\blx@thelangenv\endcsname
- \endgroup}%
- \iftoggle{blx@autolangbib}
- {\let\blx@endlangbib\blx@endlang}
- {}%
- \iftoggle{blx@autolangcite}
- {\let\blx@endlangcite\blx@endlang}
- {}%
- \csname\blx@thelangenv\expandafter\endcsname
- \expandafter{\abx@field@langid}}}
- {}}}
- {}%
- \def\blx@langstrings{}%
- \def\blx@imc@mainlang{\select@language{\bbl@main@language}}%
- \blx@langsetup\bbl@main@language}
- {\blx@err@patch{'babel' package}%
- \blx@mknoautolang}}
- \gdef\blx@mkautolangpoly{%
- \ifundef\bbl@main@language
- {\blx@error
- {No default 'polyglossia' language defined}
- {You must define a default language for 'polyglossia'}}
- {}%
- \edef\blx@saved@underscore@catcode{\the\catcode`\_}%
- \catcode`\_=11% polyglossia uses "_" as a letter
- \pretocmd\select@language{\blx@langsetup{#1}}
- {\ifdef\blx@thelangenv
- {\def\blx@beglang{%
- \blx@clearlang
- \begingroup
- % Need to override all entries, regardless of if there is a langid
- % if language=<language> option is given
- \ifboolexpr { test {\ifdef\abx@field@langid }
- or
- test {\ifdef\blx@forcelanguagename} }
- % override local langid if we forced it with
- % language=<language> option
- {\ifdef\blx@forcelanguagename
- {\let\abx@field@langid\blx@forcelanguagename}
- {}%
- \let\blx@languagename\abx@field@langid% track global language
- \ifcsundef{l@\abx@field@langid}
- {\blx@warn@nohyph{\abx@field@langid}}
- {\blx@hook@initlang
- \def\blx@endlang{%
- \blx@hook@endlang
- % Polyglossia language envs are \<lang>[]
- \ifcsstring{blx@thelangenv}{langname}
- {\csname end\abx@field@langid\endcsname}
- {\csname end\blx@thelangenv\endcsname}%
- \endgroup}%
- \iftoggle{blx@autolangbib}
- {\let\blx@endlangbib\blx@endlang}
- {}%
- \iftoggle{blx@autolangcite}
- {\let\blx@endlangcite\blx@endlang}
- {}%
- \ifcsstring{blx@thelangenv}{langname}
- {\ifdef\abx@field@langidopts
- {\csname\abx@field@langid\expandafter\endcsname\expandafter[\abx@field@langidopts]}
- {\csname\abx@field@langid\endcsname}}
- {\csname\blx@thelangenv\expandafter\endcsname\expandafter{\abx@field@langid}}%
- % These lines are equal to \blx@maplang
- \ifcsstring{blx@thelangenv}{hyphenrules}
- {}
- {\blx@resetpunct
- \csuse{abx@extras@\abx@field@langid}%
- \csuse{abx@strings@\abx@field@langid}}}}
- {}}}
- {}%
- % polyglossia needs this - it doesn't get the
- % strings automatically set for some reason
- \def\blx@langstrings{%
- \csuse{abx@extras@\languagename}%
- \csuse{abx@strings@\languagename}}%
- \def\blx@imc@mainlang{%
- \select@language{\bbl@main@language}%
- % These lines are equal to \blx@maplang
- \blx@resetpunct
- \csuse{abx@extras@\bbl@main@language}%
- \csuse{abx@strings@\bbl@main@language}}%
- \blx@langsetup\bbl@main@language}
- {\blx@err@patch{'polyglossia' package}%
- \blx@mknoautolang}%
- \catcode`\_=\blx@saved@underscore@catcode\relax}
- \endgroup
- \def\blx@mknoautolang{%
- \blx@lbxinput{\blx@languagename}
- {}
- {\blx@err@nolang{\blx@languagename}}}
- \blx@regimcs{\mainlang}
- \newrobustcmd*{\DeclareRedundantLanguages}[2]{%
- \begingroup
- \ifblank{#2}
- {\def\do##1{%
- \global\csundef{blx@rlm@##1}%
- \global\csundef{blx@rlm@lang##1}}}
- {\def\do##1{%
- \csxdef{blx@rlm@##1}{#2}%
- \csxdef{blx@rlm@lang##1}{#2}}}%
- \docsvlist{#1}%
- \endgroup}
- \def\blx@clearlang{%
- \iftoggle{blx@clearlang}
- {\iflistundef{language}
- {}
- {\ifnumgreater{\value{language}}{1}
- {}
- {\expandafter\blx@clearlang@i\abx@list@language}}}
- {}}
- \def\blx@clearlang@i#1{%
- \ifcsdef{blx@rlm@#1}
- {\expandafter\expandafter\expandafter\forcsvlist
- \expandafter\expandafter\expandafter\blx@clearlang@ii
- \expandafter\expandafter\expandafter{%
- \csname blx@rlm@#1\endcsname}}
- {}}
- \def\blx@clearlang@ii#1{%
- \ifdefstring\languagename{#1}
- {\clearlist{language}}
- {}}
- %% Biber equivalents to bibtex data interface
- \def\abx@doentrytypes{\dolistloop\blx@datamodel@entrytypes}
- % fields which can be used as labels - we auto-create some macros for these
- \def\abx@dolabelfields{\dolistloop\blx@datamodel@labelfields}
- \def\abx@donames{\dolistloop\blx@datamodel@names}
- \def\abx@donameparts{\expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts}}
- \def\abx@dofields{\dolistloop\blx@datamodel@fields}
- \def\abx@dolists{%
- \dolistloop\blx@datamodel@lists%
- \do{pageref}}
- % Used to pass regexps to .bcf
- \def\regexp#1{\expandafter\zap@space\detokenize{#1} \@empty}
- % Have to do this otherwise the '~'s in the .bcf strings are not expanded
- % This is done for the .bcf later but since we have to do all the
- % data model things much earlier, have to set this here and reset on finishing
- \let\blx@tsave~
- \let~\space
- % Data model and supporting macros must be loaded early
- \blx@inputonce{blx-dm.def}{biblatex default data model}{}{}{}{}
- \let~\blx@tsave
- % We need to now load any style data model
- % Order of precedence is:
- % <datamodel option>.dbx
- % <style option>.dbx
- % <citestyle option>.dbx and <bibstyle option>.dbx
- % This has to be done before the real options processing so we need to
- % pick out just these four options to look at. You can't do this with keyval,
- % you have to use kvoptions. So, pick out these four, pass through all
- % others and delete datamodel option as we don't care about it when we come
- % to really set options below
- \SetupKeyvalOptions{
- family=blx@opt@eldt,
- prefix=blx@opt@eldt@}
- \DeclareStringOption{datamodel}
- \DeclareStringOption{style}
- \DeclareStringOption{citestyle}
- \DeclareStringOption{bibstyle}
- \DeclareDefaultOption{}
- \ProcessLocalKeyvalOptions{blx@opt@eldt}
- \ifx\blx@opt@eldt@datamodel\@empty
- \ifx\blx@opt@eldt@style\@empty
- \ifx\blx@opt@eldt@citestyle\@empty
- \else
- \blx@inputonce{\blx@opt@eldt@citestyle.dbx}{biblatex citestyle data model}{}{}{}{}
- \fi
- \ifx\blx@opt@eldt@bibstyle\@empty
- \else
- \blx@inputonce{\blx@opt@eldt@bibstyle.dbx}{biblatex bibstyle data model}{}{}{}{}
- \fi
- \else
- \blx@inputonce{\blx@opt@eldt@style.dbx}{biblatex style data model}{}{}{}{}
- \fi
- \else
- \blx@inputonce{\blx@opt@eldt@datamodel.dbx}{biblatex style data model}{}{}{}{}
- \fi
- \DisableKeyvalOption[action=undef,local]{blx@opt@eldt}{datamodel}
- % Override with user-defined data model if there is one
- \blx@inputonce{biblatex-dm.cfg}{biblatex custom data model}{}{}{}{}
- % Initialise option datatypes lists
- \global\let\blx@bcf@options@scope@global\@empty
- \global\let\blx@bcf@options@scope@type\@empty
- \global\let\blx@bcf@options@scope@entry\@empty
- \global\let\blx@bcf@options@scope@namelist\@empty
- \global\let\blx@bcf@options@scope@name\@empty
- \global\let\blx@globalopts@datatypes\@empty
- \global\let\blx@typeopts@datatypes\@empty
- \global\let\blx@entryopts@datatypes\@empty
- \global\let\blx@namelistopts@datatypes\@empty
- \global\let\blx@nameopts@datatypes\@empty
- \def\do#1{%
- \global\cslet{blx@globalopts@#1}\@empty
- \global\cslet{blx@typeopts@#1}\@empty
- \global\cslet{blx@entryopts@#1}\@empty
- \global\cslet{blx@namelistopts@#1}\@empty
- \global\cslet{blx@nameopts@#1}\@empty}
- \expandafter\expandafter\expandafter\docsvlist\expandafter\expandafter\expandafter{\csname blx@datamodel@constant@optiondatatypes\endcsname}
- % Helper for collecting options and datatypes
- % {<datatype>}{<scope>}{<name>}
- \def\blx@collectopts#1#2#3{%
- \ifinlistcs{#1}{#2@datatypes}
- {}
- {\listcsgadd{#2@datatypes}{#1}}%
- \ifinlistcs{#3}{#2@#1}
- {}
- {\listcsgadd{#2@#1}{#3}}}
- % date, eventdate, urldate etc.
- \def\abx@dodates{\dolistloop\blx@datamodel@dates}
- % year, endyear, month, endmonth etc.
- \def\abx@dodateparts{\expandafter\docsvlist\expandafter{\blx@dateparts}}
- % '', event, url, orig etc.
- \def\do#1{%
- \blx@stripfromendinto{#1}{date}\blx@datetype
- \listxadd\blx@datetypes{\blx@datetype}}
- \abx@dodates
- % main date field has an empty prefix (''date) which can't be added to a list
- % and so do it explicity
- % This is one of the few (only?) hard-coded datamodel assumptions but it is
- % very unlikely that anyone would *remove* the main date field in a custom application ...
- \def\abx@dodatetypes{\do{}\dolistloop\blx@datetypes}
- % per-entry inheritance blocking option for biber
- \blx@collectopts{string}{blx@entryopts}{noinherit}
- % useprefix namelist/name scope
- \blx@collectopts{boolean}{blx@namelistopts}{useprefix}% for passing to bcf
- \blx@collectopts{boolean}{blx@nameopts}{useprefix}% for passing to the .bcf
- % nametemplates meta-option entry/namelist/name scope
- \blx@collectopts{string}{blx@entryopts}{nametemplates}
- \blx@collectopts{string}{blx@namelistopts}{nametemplates}% for passing to bcf
- \blx@collectopts{string}{blx@nameopts}{nametemplates}% for passing to the .bcf
- % sortingnamekeytemplate namelist/name scope
- \blx@collectopts{string}{blx@namelistopts}{sortingnamekeytemplatename}% for passing to bcf
- \blx@collectopts{string}{blx@nameopts}{sortingnamekeytemplatename}% for passing to the .bcf
- % uniquenametemplate namelist/name scope
- \blx@collectopts{string}{blx@namelistopts}{uniquenametemplatename}% for passing to bcf
- \blx@collectopts{string}{blx@nameopts}{uniquenametemplatename}% for passing to the .bcf
- % labelalphanametemplate namelist/name scope
- \blx@collectopts{string}{blx@namelistopts}{labelalphanametemplatename}% for passing to bcf
- \blx@collectopts{string}{blx@nameopts}{labelalphanametemplatename}% for passing to the .bcf
- % Misc globalopts
- \blx@collectopts{xml}{blx@globalopts}{datamodel}% for passing to the .bcf
- \blx@collectopts{string}{blx@globalopts}{controlversion}% for passing to the .bcf
- \newcommand*{\labelalphaothers}{+}
- \newcommand*{\sortalphaothers}{\labelalphaothers}
- \blx@collectopts{string}{blx@globalopts}{alphaothers}% for passing to the .bcf
- \blx@collectopts{string}{blx@typeopts}{alphaothers}% for passing to the .bcf
- \blx@collectopts{string}{blx@globalopts}{sortalphaothers}% for passing to the .bcf
- \blx@collectopts{string}{blx@typeopts}{sortalphaothers}% for passing to the .bcf
- % The Declare*Option macros are for options which need to be visible
- % to biblatex. For options which only biber needs to see, they can be
- % passed to the .bcf directly using \blx@collectopts
- % [<datatype>]{<key>}[<value>]{<code>}
- \newrobustcmd*{\DeclareBibliographyOption}[2][]{%
- \ifblank{#1}
- {\def\blx@tempa{boolean}}
- {\ifcsundef{blx@globalopts@#1}
- {\blx@warn@badoptdt{#1}%
- \def\blx@tempa{boolean}}
- {\def\blx@tempa{#1}}}%
- \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@globalopts}{#2}%
- \@ifnextchar[%]
- {\blx@defbibopt{#2}}
- {\blx@defbibopt{#2}[]}}
- \long\def\blx@defbibopt#1[#2]#3{%
- \ifcsundef{KV@blx@opt@ldt@#1}
- {\ifcsundef{KV@blx@opt@pre@#1}
- {\ifblank{#2}
- {\define@key{blx@opt@pre}{#1}{#3}}
- {\define@key{blx@opt@pre}{#1}[#2]{#3}}}
- {\blx@err@optdef{#1}}}
- {\blx@err@optdef{#1}}}
- % [<datatype>]{<key>}[<value>]{<code>}
- \newrobustcmd*{\DeclareTypeOption}[2][]{%
- \ifblank{#1}
- {\def\blx@tempa{boolean}}
- {\ifcsundef{blx@typeopts@#1}
- {\blx@warn@badoptdt{#1}%
- \def\blx@tempa{boolean}}
- {\def\blx@tempa{#1}}}%
- \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@typeopts}{#2}%
- \@ifnextchar[%]
- {\blx@deftypeopt{#2}}
- {\blx@deftypeopt{#2}[]}}
- \long\def\blx@deftypeopt#1[#2]#3{%
- \ifcsundef{KV@blx@opt@typ@#1}
- {\ifblank{#2}
- {\define@key{blx@opt@typ}{#1}{#3}}
- {\define@key{blx@opt@typ}{#1}[#2]{#3}}}
- {\blx@err@optdef{#1}}}
- % [<datatype>]{<key>}[<value>]{<code>}
- \newrobustcmd*{\DeclareEntryOption}[2][]{%
- \ifblank{#1}
- {\def\blx@tempa{boolean}}
- {\ifcsundef{blx@entryopts@#1}
- {\blx@warn@badoptdt{#1}%
- \def\blx@tempa{boolean}}
- {\def\blx@tempa{#1}}}%
- \expandafter\blx@collectopts\expandafter{\blx@tempa}{blx@entryopts}{#2}%
- \@ifnextchar[%]
- {\blx@defentryopt{#2}}
- {\blx@defentryopt{#2}[]}}
- \long\def\blx@defentryopt#1[#2]#3{%
- \ifcsundef{KV@blx@opt@ent@#1}
- {\ifblank{#2}
- {\define@key{blx@opt@ent}{#1}{#3}}
- {\define@key{blx@opt@ent}{#1}[#2]{#3}}}
- {\blx@err@optdef{#1}}}
- % Sanity check on date field names - they *must* end in 'date' to make things easier/possible later
- \def\do#1{%
- \blx@ifstrendswith{#1}{date}
- {}
- {\blx@error
- {Invalid date field name '#1'}
- {Date fields in the datemodel must end in the string 'date' but '#1' doesn't}}}
- \abx@dodates
- % date meta-information option fallbacks
- \def\do#1{%
- \cslet{#1datecircaprint}\@empty
- \cslet{#1enddatecircaprint}\@empty
- \cslet{#1datecircaprintiso}\@empty
- \cslet{#1enddatecircaprintiso}\@empty
- \cslet{#1dateuncertainprint}\@empty
- \cslet{#1enddateuncertainprint}\@empty
- \cslet{#1dateeraprint}\@gobble
- \cslet{#1dateeraprintpre}\@gobble
- \csdef{if#1dateera}##1{\@secondoftwo}%
- \csdef{if#1enddateera}##1{\@secondoftwo}%
- \cslet{if#1datecirca}\@secondoftwo
- \cslet{if#1enddatecirca}\@secondoftwo
- \cslet{if#1datejulian}\@secondoftwo
- \cslet{if#1enddatejulian}\@secondoftwo
- \cslet{if#1dateuncertain}\@secondoftwo
- \cslet{if#1enddateuncertain}\@secondoftwo
- \cslet{if#1dateunknown}\@secondoftwo
- \cslet{if#1enddateunknown}\@secondoftwo}
- \abx@dodatetypes
- \do{labeldate}
- % These are internal fields/booleans which are not part of the data model but
- % which need to be dealt with along with data model fields in places
- \def\do#1{%
- \listxadd\blx@datemetafields{#1dateera}%
- \listxadd\blx@datemetafields{#1enddateera}%
- \listxadd\blx@datemetafields{#1dateunspecified}}
- \abx@dodatetypes
- \def\do#1{%
- \listxadd\blx@datemetabooleans{#1datecirca}%
- \listxadd\blx@datemetabooleans{#1enddatecirca}%
- \listxadd\blx@datemetabooleans{#1datejulian}%
- \listxadd\blx@datemetabooleans{#1enddatejulian}%
- \listxadd\blx@datemetabooleans{#1dateuncertain}%
- \listxadd\blx@datemetabooleans{#1enddateuncertain}%
- \listxadd\blx@datemetabooleans{#1dateunknown}%
- \listxadd\blx@datemetabooleans{#1enddateunknown}}
- \abx@dodatetypes
- \def\do#1{%
- \listxadd\blx@namepartmetafields{#1namehash}%
- \listxadd\blx@namepartmetafields{#1fullhash}%
- \listxadd\blx@namepartmetafields{#1bibnamehash}}
- \abx@donameparts
- \def\do#1{%
- \listxadd\blx@labeldatepartfields{label#1}}
- \abx@dodateparts
- \def\abx@dointernalfields{%
- \do{clonesourcekey}%
- \do{labeldate}%
- \do{labeldatesource}%
- \do{labeldateera}%
- \do{labelenddateera}%
- \do{labelyear}%
- \do{labelendyear}%
- \do{labelmonth}%
- \do{labelendmonth}%
- \do{labelday}%
- \do{labelendday}%
- \do{labelhour}%
- \do{labelendhour}%
- \do{labelminute}%
- \do{labelendminute}%
- \do{labelsecond}%
- \do{labelendsecond}%
- \do{labeltimezone}%
- \do{labelendtimezone}%
- \do{labelseason}%
- \do{labelendseason}%
- \do{entrykey}%
- \do{entryset}%
- \do{entrysetcount}%
- \do{entrytype}%
- \do{extraalpha}%
- \do{extraname}%
- \do{extratitle}%
- \do{extratitleyear}%
- \do{extradate}%
- \do{fullhash}%
- \do{labelalpha}%
- \do{labelnumber}%
- \do{labelprefix}%
- \do{labeltitleyear}%
- \do{localnumber}%
- \do{namehash}%
- \do{bibnamehash}%
- \do{options}%
- \do{sortinit}%
- \do{sortinithash}%
- \dolistloop\blx@datemetafields
- \dolistloop\blx@namepartmetafields
- \dolistloop\blx@labeldatepartfields}
- \def\abx@dobooleans{%
- \do{crossrefsource}%
- \do{xrefsource}%
- \do{singletitle}%
- \do{uniquetitle}%
- \do{uniquebaretitle}%
- \do{uniquework}%
- \do{uniqueprimaryauthor}%
- \do{nocite}%
- \dolistloop\blx@datemetabooleans}
- % Date datatype fields
- \def\do#1{%
- \protected\csdef{blx@imc@print#1date}{}%
- \protected\csdef{blx@imc@print#1dateextra}{}%
- \protected\csdef{blx@imc@print#1time}{}}
- \abx@dodatetypes
- % \blx@regimcs doesn't work in do-lists nicely so use internal macro it calls
- \def\do#1{%
- \xappto\blx@blxinit{\csletcs{print#1date}{blx@imc@print#1date}}%
- \xappto\blx@blxinit{\csletcs{print#1time}{blx@imc@print#1time}}%
- \xappto\blx@blxinit{\csletcs{print#1dateextra}{blx@imc@print#1dateextra}}}
- \abx@dodatetypes
- % Set up circa, julian and uncertain date internals
- \def\blx@makeifdatemeta@bools@i#1#2{%
- \appto\blx@blxinit{%
- \blx@makeifdatemeta@bools{#1}{#2}}}
- \def\blx@makeifdatemeta@bools#1#2{%
- \csdef{if#1date#2}{\iftoggle{abx@bool@#1date#2}}%
- \csdef{if#1enddate#2}{\iftoggle{abx@bool@#1enddate#2}}%
- \appto\blx@TE@hook{%
- \csdef{if#1date#2}{\blx@TE{\iftoggle{abx@bool@#1date#2}}}%
- \csdef{if#1enddate#2}{\blx@TE{\iftoggle{abx@bool@#1enddate#2}}}}}
- % Set up date era internals
- \def\blx@makeifdatemeta@fields@i#1{%
- \appto\blx@blxinit{%
- \blx@makeifdatemeta@fields{#1}}}
- \def\blx@makeifdatemeta@fields#1{%
- \csdef{if#1dateera}##1{\ifcsstring{abx@field@#1dateera}{##1}}%
- \csdef{if#1enddateera}##1{\ifcsstring{abx@field@#1enddateera}{##1}}%
- \appto\blx@TE@hook{%
- \csdef{if#1dateera}##1{\blx@TE{\ifcsstring{abx@field@#1dateera}{##1}}}%
- \csdef{if#1enddateera}##1{\blx@TE{\ifcsstring{abx@field@#1enddateera}{##1}}}}}
- % Create date meta information boolean tests
- \def\do#1{%
- \blx@makeifdatemeta@bools@i{#1}{circa}%
- \blx@makeifdatemeta@bools@i{#1}{julian}%
- \blx@makeifdatemeta@bools@i{#1}{uncertain}%
- \blx@makeifdatemeta@bools@i{#1}{unknown}}
- \abx@dodatetypes
- % Create date meta information field tests
- \def\do#1{%
- \blx@makeifdatemeta@fields@i{#1}}
- \abx@dodatetypes
- % Resolve date meta information tests and print routines for labeldate
- % We have to test here, in each \def, whether the labeldatesource
- % is a real date field or not. If it's not, then we don't want to use
- % any of the meta-information and so make the conditionals always return false
- % This can't be neater by testing for the \abx@field@labeldatesource value
- % earlier because its not available until the tests are in scope.
- \appto\blx@blxinit{%
- \ifdefstring\blx@dateera{astronomical}
- {\protected\def\dateeraprintpre#1{%
- \iffieldnum{#1}
- {\begingroup
- \let\blx@tempa\@empty
- \blx@ifstrendswith{#1}{endyear}
- {\blx@stripfromendinto{#1}{endyear}\blx@datetype
- \def\blx@tempa{end}}
- {\blx@stripfromendinto{#1}{year}\blx@datetype}%
- \csuse{if\blx@datetype\blx@tempa dateera}{bce}
- {\ifnumless{0-\thefield{#1}}{0}
- {\printtext{\csuse{bibdateera\blx@tempa prefix}}}
- {}}
- {}%
- \endgroup}
- {}}}
- {\protected\def\dateeraprint#1{%
- \iffieldnum{#1}
- {\begingroup
- \let\blx@tempa\@empty
- \blx@ifstrendswith{#1}{endyear}
- {\blx@stripfromendinto{#1}{endyear}\blx@datetype
- \def\blx@tempa{end}}
- {\blx@stripfromendinto{#1}{year}\blx@datetype}%
- \csuse{if\blx@datetype\blx@tempa dateera}{bce}
- {\ifnum\numexpr0-\thefield{#1}\relax<\blx@dateeraauto
- % \midsentence is to suppress automatic capitalisation
- \printtext{\printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@bce}}\relax
- \fi}
- {\ifnumless{\thefield{#1}}\blx@dateeraauto
- {\printtext{\printdelim{dateeradelim}\midsentence\bibstring{\blx@dateera@ce}}}
- {}}%
- \endgroup}
- {}}}%
- \iftoggle{blx@labeldateparts}
- {\def\iflabeldateera#1{% start era
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\ifcsstring{abx@field@\abx@field@labeldatesource dateera}{#1}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabeldateera#1{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\ifcsstring{abx@field@\abx@field@labeldatesource dateera}{#1}}}
- {\@secondoftwo}}}%
- % end era
- \def\iflabelenddateera#1{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\ifcsstring{abx@field@\abx@field@labeldatesource enddateera}{#1}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabelenddateera#1{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\ifcsstring{abx@field@\abx@field@labeldatesource enddateera}{#1}}}
- {\@secondoftwo}}}%
- % start circa
- \def\iflabeldatecirca{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\iftoggle{abx@bool@\abx@field@labeldatesource datecirca}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabeldatecirca{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\iftoggle{abx@bool@\abx@field@labeldatesource datecirca}}}
- {\@secondoftwo}}}%
- % end circa
- \def\iflabelenddatecirca{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\iftoggle{abx@bool@\abx@field@labeldatesource enddatecirca}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabelenddatecirca{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\iftoggle{abx@bool@\abx@field@labeldatesource enddatecirca}}}
- {\@secondoftwo}}}%
- % start julian
- \def\iflabeldatejulian{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\iftoggle{abx@bool@\abx@field@labeldatesource datejulian}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabeldatejulian{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\iftoggle{abx@bool@\abx@field@labeldatesource datejulian}}}
- {\@secondoftwo}}}%
- % end julian
- \def\iflabelenddatejulian{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\iftoggle{abx@bool@\abx@field@labeldatesource enddatejulian}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabelenddatejulian{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\iftoggle{abx@bool@\abx@field@labeldatesource enddatejulian}}}
- {\@secondoftwo}}}%
- % start uncertain
- \def\iflabeldateuncertain{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\iftoggle{abx@bool@\abx@field@labeldatesource dateuncertain}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabeldateuncertain{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\iftoggle{abx@bool@\abx@field@labeldatesource dateuncertain}}}
- {\@secondoftwo}}}%
- % end uncertain
- \def\iflabelenddateuncertain{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\iftoggle{abx@bool@\abx@field@labeldatesource enddateuncertain}}
- {\@secondoftwo}}%
- \appto\blx@TE@hook{\def\iflabelenddateuncertain{%
- \xifinlist{\abx@field@labeldatesource date}\blx@datamodel@dates
- {\blx@TE{\iftoggle{abx@bool@\abx@field@labeldatesource enddateuncertain}}}
- {\@secondoftwo}}}}%
- {}}
- % Name toggles like \ifauthor etc. need to be dynamically created for all
- % name datatypes in the data model and we have to do this here after the
- % datamodel is available. Need to be careful about expansions here as these
- % go into hooks to be executed later
- % toggle to say if we have set any <name>inits to true. Used for conflict
- % tests with uniquename settings (see \AtEndPreamble below)
- \newtoggle{abx@bool@xinits}
- % define <name>inits options and tests (terseinits is global for all initials)
- \def\do#1{%
- \newtoggle{abx@bool@#1inits}%
- \appto\blx@blxinit{%
- \csdef{if#1inits}{\iftoggle{abx@bool@#1inits}}%
- \appto\blx@TE@hook{%
- \csdef{if#1inits}{\blx@TE{\iftoggle{abx@bool@#1inits}}}}}%
- \DeclareBibliographyOption[boolean]{#1inits}[true]{%
- \settoggle{abx@bool@#1inits}{##1}}}
- \abx@donameparts
- \def\do#1{%
- % Define use<name> options scope for biber
- \blx@collectopts{boolean}{blx@globalopts}{use#1}%
- \blx@collectopts{boolean}{blx@typeopts}{use#1}%
- \blx@collectopts{boolean}{blx@entryopts}{use#1}%
- % Define name toggles
- \newtoggle{blx@use#1}\toggletrue{blx@use#1}%
- % Define tests
- \appto\blx@blxinit{%
- \csdef{ifuse#1}{\iftoggle{blx@use#1}}%
- \appto\blx@TE@hook{%
- \csdef{ifuse#1}{\blx@TE{\iftoggle{blx@use#1}}}}}}
- \abx@donames
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Since these are bare counters which define \the<string>, save any current values
- % (memoir, titling, koma etc. have a \theauthor macro, for example) and restore at
- % end of package
- \def\do#1{%
- \csletcs{blx@compat@the#1}{the#1}%
- \newcounter{#1}%
- \newcounter{saved#1}%
- \appto\abx@dobooleans{\do{more#1}}}
- \abx@donames
- \abx@dornames
- \abx@dolists
- %\abx@dorlists
- \AtEndOfPackage{%
- \def\do#1{\csletcs{the#1}{blx@compat@the#1}}%
- \abx@donames
- \abx@dornames
- \abx@dolists}
- \def\do#1{\newtoggle{abx@bool@#1}}
- \abx@dobooleans
- \def\do#1{\expandafter\newlength\expandafter{\csname #1width\endcsname}}
- \abx@dolabelfields
- \newlength{\locallabelnumberwidth}
- \newlength{\locallabelalphawidth}
- \def\do#1{\expandafter\newlength\expandafter{\csname local#1width\endcsname}}
- \abx@dolabelfields
- \protected\def\blx@resetdata{%
- \let\blx@saved@do\do
- \let\do\blx@imc@clearname
- \abx@donames
- \let\do\blx@imc@clearlist
- \abx@dolists
- \let\do\blx@imc@clearfield
- \abx@dofields
- \abx@dointernalfields
- \ifundef\abx@annotation@defined
- {}
- {\def\do##1{\csundef{abx@annotation@##1}}%
- \dolistloop\abx@annotation@defined}%
- \let\abx@annotation@defined\@empty
- \def\do##1{\togglefalse{abx@bool@##1}}%
- \abx@dobooleans
- \let\do\blx@saved@do
- \c@citecounter\z@
- \iftoggle{blx@bibliography}
- {\c@maxnames\blx@maxbibnames\relax
- \c@minnames\blx@minbibnames\relax}
- {\c@maxnames\blx@maxcitenames\relax
- \c@minnames\blx@mincitenames\relax}%
- \c@maxitems\blx@maxitems\relax
- \c@minitems\blx@minitems\relax}
- \protected\def\blx@saveentry{%
- \let\blx@saved@do\do
- \let\do\blx@savename
- \abx@donames
- \let\do\blx@saverelname
- \dolistloop\abx@dorelnames
- \let\do\blx@savelist
- \abx@dolists
- \let\do\blx@saverellist
- \dolistloop\abx@dorellists
- \let\do\blx@savefield
- \abx@dofields
- \abx@dointernalfields
- \let\do\blx@saverelfield
- \dolistloop\abx@dorelfields
- \ifundef\abx@savedannotation@defined
- {}
- {\def\do##1{\csundef{abx@annotation@\blx@saveannotations@makesaved##1}}%
- \dolistloop\abx@savedannotation@defined}%
- \let\abx@savedannotation@defined\@empty
- \ifundef\abx@annotation@defined
- {}
- {\let\do\blx@saveannotations
- \dolistloop\abx@annotation@defined}%
- \let\abx@savedannotation@defined\abx@annotation@defined
- \let\do\blx@savebool
- \abx@dobooleans
- \let\do\blx@savedatetype
- \abx@dodatetypes
- \do{label}%
- \c@savedcitecounter\c@citecounter
- \let\do\blx@saved@do}
- \protected\def\blx@savename#1{%
- \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}%
- \csletcs{abx@name@saved#1}{abx@name@#1}%
- \csname c@saved#1\endcsname\csname c@#1\endcsname}
- % override with name saved from \clearfield for related processing
- \protected\def\blx@saverelname#1{%
- \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@morerelsaved#1}%
- \csletcs{abx@name@saved#1}{abx@name@relsaved#1}%
- \csname c@saved#1\endcsname\csname c@relsaved#1\endcsname}
- \protected\def\blx@savelist#1{%
- \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@more#1}%
- \csletcs{abx@list@saved#1}{abx@list@#1}%
- \csname c@saved#1\endcsname\csname c@#1\endcsname}
- % override with list saved from \clearfield for related processing
- \protected\def\blx@saverellist#1{%
- \csletcs{etb@tgl@abx@bool@moresaved#1}{etb@tgl@abx@bool@morerelsaved#1}%
- \csletcs{abx@list@saved#1}{abx@list@relsaved#1}%
- \csname c@saved#1\endcsname\csname c@relsaved#1\endcsname}
- \protected\def\blx@savefield#1{%
- \csletcs{abx@field@saved#1}{abx@field@#1}}
- % override with field saved from \clearfield for related processing
- \protected\def\blx@saverelfield#1{%
- \csletcs{abx@field@saved@#1}{abx@field@relsaved#1}}
- \protected\def\blx@savebool#1{%
- \csletcs{etb@tgl@abx@bool@saved#1}{etb@tgl@abx@bool@#1}}
- \protected\def\blx@savedatetype#1{%
- \csletcs{blx@dateformat@saved#1date}{blx@dateformat@#1date}%
- \protected\csedef{blx@imc@printsaved#1date}{%
- \noexpand\csuse{mkdaterange\csuse{blx@dateformat@saved#1date}}
- {saved#1}}%
- \protected\csedef{blx@imc@printsaved#1dateextra}{%
- \begingroup
- % extradate is hard-coded in date macros, so reset it temporarily
- \csletcs{abx@field@extradate}{abx@field@savedextradate}%
- \noexpand\csuse{mkdaterange\csuse{blx@dateformat@saved#1date}extra}
- {saved#1}%
- \endgroup}%
- \csletcs{blx@timeformat@saved#1time}{blx@timeformat@#1time}%
- \protected\csedef{blx@imc@printsaved#1time}{%
- \noexpand\csuse{mktimerange\csuse{blx@timeformat@saved#1time}}
- {saved#1}}%
- \csletcs{etb@tgl@blx@saved#1dateusetime}{etb@tgl@blx@#1dateusetime}%
- % the datemetabooleans are here again for labeldate
- \blx@savebool{#1datecirca}%
- \blx@savebool{#1enddatecirca}%
- \blx@savebool{#1datejulian}%
- \blx@savebool{#1enddatejulian}%
- \blx@savebool{#1dateuncertain}%
- \blx@savebool{#1enddateuncertain}%
- \blx@savebool{#1dateunknown}%
- \blx@savebool{#1enddateunknown}%
- \blx@makeifdatemeta@bools{saved#1}{circa}%
- \blx@makeifdatemeta@bools{saved#1}{julian}%
- \blx@makeifdatemeta@bools{saved#1}{uncertain}%
- \blx@makeifdatemeta@bools{saved#1}{unknown}%
- \blx@makeifdatemeta@fields{saved#1}%
- \csletcs{printsaved#1date}{blx@imc@printsaved#1date}%
- \csletcs{printsaved#1time}{blx@imc@printsaved#1time}%
- \csletcs{printsaved#1dateextra}{blx@imc@printsaved#1dateextra}}
- \def\blx@saveannotations@makesaved#1@#2{#1@saved#2}
- \protected\def\blx@saveannotations#1{%
- \csletcs{abx@annotation@\blx@saveannotations@makesaved#1}{abx@annotation@#1}}
- % {<code>}
- \protected\long\def\blx@bbl@preamble#1{%
- \gappto\abx@preamble{#1}}
- % {<message>}
- \protected\def\blx@bbl@warn#1{%
- \begingroup
- \def\item{\MessageBreak-\space}%
- \def\break{\MessageBreak\space\space}%
- \edef\blx@tempa{%
- Biber reported the following issues%
- \ifdef\abx@field@entrykey
- {\MessageBreak with '\abx@field@entrykey'}
- {}%
- :#1}%
- \blx@warning@noline{\blx@tempa}%
- \endgroup}
- % {<field>}{<code>}
- \newrobustcmd{\DeclareFieldInputHandler}[2]{%
- \ifblank{#2}
- {\csundef{blx@fih@#1}}
- {\long\csdef{blx@fih@#1}##1{#2}}}
- \@onlypreamble\DeclareFieldInputHandler
- % {<list>}{<code>}
- \newrobustcmd*{\DeclareListInputHandler}[2]{%
- \ifblank{#2}
- {\csundef{blx@lih@#1}}
- {\csdef{blx@lih@#1}##1{#2}}}
- \@onlypreamble\DeclareListInputHandler
- % {<name>}{<code>}
- \newrobustcmd*{\DeclareNameInputHandler}[2]{%
- \ifblank{#2}
- {\csundef{blx@nih@#1}}
- {\csdef{blx@nih@#1}##1{#2}}}
- \@onlypreamble\DeclareNameInputHandler
- % {<entrykey>}{<refsection>}{<field>}{<refcontext>}{<value>}
- \long\def\blx@bbl@addentryfield#1#2#3#4#5{%
- \csxappto{blx@data@#2@#4@#1}{%
- \def\expandafter\noexpand\csname abx@field@#3\endcsname{#5}}}
- % {<rangefield>}{<value>}
- \protected\def\blx@bbl@rangedef#1#2{%
- \csxappto\blx@bbl@data{%
- \def\expandafter\noexpand\csname abx@range@#1\endcsname{#2}}}
- % {<field>}{<value>}
- \long\def\blx@bbl@addfield#1#2{%
- \csxappto\blx@bbl@data{%
- \def\expandafter\noexpand\csname abx@field@#1\endcsname{#2}}}
- \protected\long\def\blx@bbl@fielddef#1#2{%
- \def\NewValue{#2}%
- \ifcsdef{blx@fih@#1}
- {\csname blx@fih@#1\endcsname{#2}%
- \ifdefvoid\NewValue}
- {\@secondoftwo}
- {}
- {\blx@bbl@addfield{#1}{\expandonce\NewValue}}}
- \protected\long\def\blx@bbl@fieldedef#1#2{%
- \edef\NewValue{#2}%
- \ifcsdef{blx@fih@#1}
- {\csname blx@fih@#1\expandafter
- \endcsname\expandafter{\NewValue}%
- \ifdefvoid\NewValue}
- {\@secondoftwo}
- {}
- {\blx@bbl@addfield{#1}{\NewValue}}}
- \protected\long\def\blx@bbl@stringdef#1#2{%
- \begingroup
- \edef\blx@tempa{\endgroup
- \blx@bbl@fielddef{#1}{\detokenize{#2}}}%
- \blx@tempa}
- % Verbatim lists
- % {<list>}{<listcount>}
- \protected\def\blx@bbl@verbldef#1#2{%
- \begingroup
- \let\lverb\blx@bbl@verbladd
- \def\blx@tempa{#1}%
- \def\blx@tempb{#2}%
- \let\blx@tempc\@empty
- \let\NewValue\@empty}
- \protected\def\blx@bbl@verblend{%
- \expandafter\blx@bbl@listdef\expandafter{\expandafter\blx@tempa\expandafter}\expandafter{\expandafter\blx@tempb\expandafter}\expandafter{\blx@tempc}%
- \endgroup}
- \protected\def\blx@bbl@verbladd{%
- \begingroup
- \let\do\@makeother
- \dospecials
- \catcode\endlinechar=12\relax
- \blx@bbl@verbladd@i}
- % Verbatim fields
- % {<field>}
- \protected\def\blx@bbl@verbdef#1{%
- \begingroup
- \let\verb\blx@bbl@verbadd
- \def\blx@tempa{#1}%
- \let\NewValue\@empty}
- \protected\def\blx@bbl@verbend{%
- \ifcsdef{blx@fih@\blx@tempa}
- {\csname blx@fih@\blx@tempa\expandafter
- \endcsname\expandafter{\NewValue}%
- \ifdefvoid\NewValue}
- {\@secondoftwo}
- {}
- {\blx@bbl@addfield{\blx@tempa}{\NewValue}}%
- \endgroup}
- \protected\def\blx@bbl@verbadd{%
- \begingroup
- \let\do\@makeother
- \dospecials
- \catcode\endlinechar=12\relax
- \blx@bbl@verbadd@i}
- % {<scope>}{<field>}{<name>}{<itemcount>}{<part>}{<isliteral>}{<value>}
- \protected\def\blx@bbl@annotationdef#1#2#3#4#5#6#7{%
- \ifstrequal{#1}{field}
- {\csxappto\blx@bbl@data{%
- \listadd\noexpand\abx@annotation@defined{field@#2@#3}}%
- \ifstrequal{#6}{1}
- {\csgappto\blx@bbl@data{%
- \csdef{abx@annotation@literal@field@#2@#3}{#7}}}
- {\csxappto\blx@bbl@data{%
- \def\do####1{\listcsadd{abx@annotation@field@#2@#3}{####1}}%
- \docsvlist{#7}}}}
- {}%
- \ifstrequal{#1}{item}
- {\csxappto\blx@bbl@data{%
- \listadd\noexpand\abx@annotation@defined{item@#2@#3@#4}}%
- \ifstrequal{#6}{1}
- {\csgappto\blx@bbl@data{%
- \csdef{abx@annotation@literal@item@#2@#3@#4}{#7}}}
- {\csxappto\blx@bbl@data{%
- \def\do####1{\listcsadd{abx@annotation@item@#2@#3@#4}{####1}}%
- \docsvlist{#7}}}}
- {}%
- \ifstrequal{#1}{part}
- {\csxappto\blx@bbl@data{%
- \listadd\noexpand\abx@annotation@defined{part@#2@#3@#4@#5}}%
- \ifstrequal{#6}{1}
- {\csgappto\blx@bbl@data{%
- \csdef{abx@annotation@literal@part@#2@#3@#4@#5}{#7}}}
- {\csxappto\blx@bbl@data{%
- \def\do####1{\listcsadd{abx@annotation@part@#2@#3@#4@#5}{####1}}%
- \docsvlist{#7}}}}
- {}}
- % [<field>][<annotationname>]
- \def\blx@imc@getfieldannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@getfieldannotation@i}
- {\blx@imc@getfieldannotation@i[\blx@tempa]}}
- \def\blx@imc@getfieldannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@getfieldannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@getfieldannotation@ii{#1}}
- {\blx@imc@getfieldannotation@ii{#1}[default]}}}
- \def\blx@imc@getfieldannotation@ii#1[#2]{%
- \def\blx@tempb{#1}%
- \blx@resolve@annotation@label{\blx@tempb}%
- \ifcsdef{abx@annotation@literal@field@\blx@tempb @#2}
- {\csuse{abx@annotation@literal@field@\blx@tempb @#2}}
- {}}
- % [<field>][<annotationname>][<item>]
- \def\blx@imc@getitemannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@getitemannotation@i}
- {\blx@imc@getitemannotation@i[\blx@tempa]}}
- \def\blx@imc@getitemannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@getitemannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@getitemannotation@ii{#1}}
- {\blx@imc@getitemannotation@ii{#1}[default]}}}
- \def\blx@imc@getitemannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \@ifnextchar[%]
- {\blx@imc@getitemannotation@iii{#1}{\blx@tempb}}
- {\blx@imc@getitemannotation@iii{#1}{\blx@tempb}[\the\value{listcount}]}}
- \def\blx@imc@getitemannotation@iii#1#2[#3]{%
- \def\blx@tempc{#1}%
- \blx@resolve@annotation@label{\blx@tempc}%
- \ifcsdef{abx@annotation@literal@item@\blx@tempc @#2@#3}
- {\csuse{abx@annotation@literal@item@\blx@tempc @#2@#3}}
- {}}
- % [<field>][<annotationname>][<item>]{<part>}
- \def\blx@imc@getpartannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@getpartannotation@i}
- {\blx@imc@getpartannotation@i[\blx@tempa]}}
- \def\blx@imc@getpartannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@getpartannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@getpartannotation@ii{#1}}
- {\blx@imc@getpartannotation@ii{#1}[default]}}}
- \def\blx@imc@getpartannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \@ifnextchar[%]
- {\blx@imc@getpartannotation@iii{#1}{\blx@tempb}}
- {\blx@imc@getpartannotation@iii{#1}{\blx@tempb}[\the\value{listcount}]}}
- \def\blx@imc@getpartannotation@iii#1#2[#3]#4{%
- \ifstrempty{#3}
- {\def\blx@tempc{\the\value{listcount}}}
- {\def\blx@tempc{#3}}%
- \def\blx@tempd{#1}%
- \blx@resolve@annotation@label{\blx@tempd}%
- \ifcsdef{abx@annotation@literal@part@\blx@tempd @#2@\blx@tempc @#4}
- {\csuse{abx@annotation@literal@part@\blx@tempd @#2@\blx@tempc @#4}}
- {}}
- % [<field>][<annotationname>]{<annotation>}
- \def\blx@imc@iffieldannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@iffieldannotation@i}
- {\blx@imc@iffieldannotation@i[\blx@tempa]}}
- \def\blx@imc@iffieldannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@iffieldannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@iffieldannotation@ii{#1}}
- {\blx@imc@iffieldannotation@ii{#1}[default]}}}
- \def\blx@imc@iffieldannotation@ii#1[#2]#3{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \def\blx@tempc{#1}%
- \blx@resolve@annotation@label{\blx@tempc}%
- \ifinlistcs{#3}{abx@annotation@field@\blx@tempc @\blx@tempb}}
- % [<field>][<annotationname>][<item>]{<annotation>}
- \def\blx@imc@ifitemannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@ifitemannotation@i}
- {\blx@imc@ifitemannotation@i[\blx@tempa]}}
- \def\blx@imc@ifitemannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@ifitemannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@ifitemannotation@ii{#1}}
- {\blx@imc@ifitemannotation@ii{#1}[default]}}}
- \def\blx@imc@ifitemannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \@ifnextchar[%]
- {\blx@imc@ifitemannotation@iii{#1}{\blx@tempb}}
- {\blx@imc@ifitemannotation@iii{#1}{\blx@tempb}[\the\value{listcount}]}}
- \def\blx@imc@ifitemannotation@iii#1#2[#3]#4{%
- \def\blx@tempc{#1}%
- \blx@resolve@annotation@label{\blx@tempc}%
- \ifinlistcs{#4}{abx@annotation@item@\blx@tempc @#2@#3}}
- % [<field>][<annotationname>][<item>]{<part>}{<annotation>}
- \def\blx@imc@ifpartannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@ifpartannotation@i}
- {\blx@imc@ifpartannotation@i[\blx@tempa]}}
- \def\blx@imc@ifpartannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@ifpartannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@ifpartannotation@ii{#1}}
- {\blx@imc@ifpartannotation@ii{#1}[default]}}}
- \def\blx@imc@ifpartannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \@ifnextchar[%]
- {\blx@imc@ifpartannotation@iii{#1}{\blx@tempb}}
- {\blx@imc@ifpartannotation@iii{#1}{\blx@tempb}[\the\value{listcount}]}}
- \def\blx@imc@ifpartannotation@iii#1#2[#3]#4#5{%
- \ifstrempty{#3}
- {\def\blx@tempc{\the\value{listcount}}}
- {\def\blx@tempc{#3}}%
- \def\blx@tempd{#1}%
- \blx@resolve@annotation@label{\blx@tempd}%
- \ifinlistcs{#5}{abx@annotation@part@\blx@tempd @#2@\blx@tempc @#4}}
- % [<field>][<annotationname>]
- \def\blx@imc@hasfieldannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@hasfieldannotation@i}
- {\blx@imc@hasfieldannotation@i[\blx@tempa]}}
- \def\blx@imc@hasfieldannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@hasfieldannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@hasfieldannotation@ii{#1}}
- {\blx@imc@hasfieldannotation@ii{#1}[default]}}}
- \def\blx@imc@hasfieldannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \def\blx@tempc{#1}%
- \blx@resolve@annotation@label{\blx@tempc}%
- \ifcsdef{abx@annotation@literal@field@\blx@tempc @\blx@tempb}}
- % [<field>][<annotationname>][<item>]
- \def\blx@imc@hasitemannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@hasitemannotation@i}
- {\blx@imc@hasitemannotation@i[\blx@tempa]}}
- \def\blx@imc@hasitemannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@hasitemannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@hasitemannotation@ii{#1}}
- {\blx@imc@hasitemannotation@ii{#1}[default]}}}
- \def\blx@imc@hasitemannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \@ifnextchar[%]
- {\blx@imc@hasitemannotation@iii{#1}{\blx@tempb}}
- {\blx@imc@hasitemannotation@iii{#1}{\blx@tempb}[\the\value{listcount}]}}
- \def\blx@imc@hasitemannotation@iii#1#2[#3]{%
- \def\blx@tempc{#1}%
- \blx@resolve@annotation@label{\blx@tempc}%
- \ifcsdef{abx@annotation@literal@item@\blx@tempc @#2@#3}}
- % [<field>][<annotationname>][<item>]{<part>}
- \def\blx@imc@haspartannotation{%
- \let\blx@tempa\@empty
- \ifdefvoid\currentfield{}{\let\blx@tempa\currentfield}%
- \ifdefvoid\currentlist{}{\let\blx@tempa\currentlist}%
- \ifdefvoid\currentname{}{\let\blx@tempa\currentname}%
- \@ifnextchar[%]
- {\blx@imc@haspartannotation@i}
- {\blx@imc@haspartannotation@i[\blx@tempa]}}
- \def\blx@imc@haspartannotation@i[#1]{%
- \ifstrempty{#1}
- {\blx@imc@haspartannotation@i[\blx@tempa]}
- {\@ifnextchar[%]
- {\blx@imc@haspartannotation@ii{#1}}
- {\blx@imc@haspartannotation@ii{#1}[default]}}}
- \def\blx@imc@haspartannotation@ii#1[#2]{%
- \ifstrempty{#2}
- {\def\blx@tempb{default}}
- {\def\blx@tempb{#2}}%
- \@ifnextchar[%]
- {\blx@imc@haspartannotation@iii{#1}{\blx@tempb}}
- {\blx@imc@haspartannotation@iii{#1}{\blx@tempb}[\the\value{listcount}]}}
- \def\blx@imc@haspartannotation@iii#1#2[#3]#4{%
- \ifstrempty{#3}
- {\def\blx@tempc{\the\value{listcount}}}
- {\def\blx@tempc{#3}}%
- \def\blx@tempd{#1}%
- \blx@resolve@annotation@label{\blx@tempd}%
- \ifcsdef{abx@annotation@literal@part@\blx@tempd @#2@\blx@tempc @#4}}
- % labeldatesource has a slightly different format than other <field>sources
- % that's one reason for a dedicated command, the other being that this command
- % is probably only used in contexts where \currentfield is not defined, so
- % the <datetype> argument is always required
- % [<annotationname>]{<datetype>}{<annotation>}
- \newcommand*{\blx@imc@ifdateannotation}[3][]{%
- \ifblank{#1}
- {\def\blx@tempa{default}}
- {\def\blx@tempa{#1}}%
- \def\blx@tempb{#2}%
- \ifcsundef{abx@field@\blx@tempb source}
- {}%
- {\letcs\blx@tempa{abx@field@\blx@tempb source}%
- \edef\blx@tempb{\blx@tempb date}}%
- \ifinlistcs{#3}{abx@annotation@field@\blx@tempb @\blx@tempa}}
- % [<annotationname>]{<datetype>}
- \newcommand*{\blx@imc@hasdateannotation}[2][]{%
- \ifblank{#1}
- {\def\blx@tempa{default}}
- {\def\blx@tempa{#1}}%
- \def\blx@tempb{#2}%
- \ifcsundef{abx@field@\blx@tempb source}
- {}%
- {\letcs\blx@tempa{abx@field@\blx@tempb source}%
- \edef\blx@tempb{\blx@tempb date}}%
- \ifboolexpr { test {\ifcsdef{abx@annotation@field@\blx@tempb @\blx@tempa}}
- or
- test {\ifcsdef{abx@annotation@literal@field@\blx@tempb @\blx@tempa}} }}
- % [<annotationname>]{<datetype>}
- \newcommand*{\blx@imc@getdateannotation}[2][]{%
- \ifblank{#1}
- {\def\blx@tempa{default}}
- {\def\blx@tempa{#1}}%
- \def\blx@tempb{#1}%
- \ifcsundef{abx@field@\blx@tempb source}
- {}%
- {\letcs\blx@tempb{abx@field@\blx@tempb source}%
- \edef\blx@tempb{\blx@tempb date}}%
- \ifcsdef{abx@annotation@literal@field@\blx@tempb @\blx@tempa}
- {\csuse{abx@annotation@literal@field@\blx@tempb @\blx@tempa}}
- {}}
- \blx@regimcs{\iffieldannotation \ifitemannotation \ifpartannotation
- \ifdateannotation \getfieldannotation \getitemannotation \getpartannotation
- \getdateannotation \hasfieldannotation \hasitemannotation \haspartannotation
- \hasdateannotation}
- % {<fieldname>}
- \def\blx@resolve@annotation@label#1{%
- \ifcsundef{abx@field@#1source}
- {}%
- {\letcs\blx@tempa{abx@field@#1source}}}
- \begingroup
- \catcode`\<=12
- \catcode`\>=12
- \uccode`\<=`\ %
- \uccode`\>=\endlinechar
- \uppercase{\gdef\blx@bbl@verbadd@i<#1>}{%
- \endgroup
- \edef\NewValue{\NewValue\detokenize{#1}}}
- \uppercase{\gdef\blx@bbl@verbladd@i<#1>}{%
- \endgroup
- \eappto\blx@tempc{{\detokenize{#1}}}}%
- \endgroup
- % {<counter>}{<value>}
- \protected\long\def\blx@bbl@cntdef#1#2{%
- \csxappto\blx@bbl@data{%
- \csname c@#1\endcsname#2\relax}}
- % {<boolean>}
- \protected\def\blx@bbl@booltrue#1{%
- \csgappto\blx@bbl@data{%
- \toggletrue{abx@bool@#1}}}
- \protected\def\blx@bbl@boolfalse#1{%
- \csgappto\blx@bbl@data{%
- \togglefalse{abx@bool@#1}}}
- % {<list>}{<itemcount>}{<value>}
- \protected\def\blx@bbl@listdef#1#2#3{%
- \def\NewCount{#2}%
- \def\NewValue{#3}%
- \ifcsdef{blx@lih@#1}
- {\csname blx@lih@#1\endcsname{#3}%
- \ifdefvoid\NewValue}
- {\@secondoftwo}
- {}
- {\csxappto\blx@bbl@data{%
- \csname c@#1\endcsname\NewCount\relax
- \def\expandafter\noexpand\csname abx@list@#1\endcsname
- {\expandonce\NewValue}}}}
- % {<name>}{<itemcount>}{<nameoptions>}{<value>}
- \protected\def\blx@bbl@namedef#1#2#3#4{%
- \def\NewCount{#2}%
- \def\NewOption{#3}%
- \def\NewValue{#4}%
- \ifcsdef{blx@nih@#1}
- {\csname blx@nih@#1\endcsname{#4}%
- \ifdefvoid\NewValue}
- {\@secondoftwo}
- {}
- {\csxappto\blx@bbl@data{%
- \csname c@#1\endcsname\NewCount\relax
- \def\expandafter\noexpand\csname abx@name@#1\endcsname
- {{\expandonce\NewOption}{\expandonce\NewValue}}}}}
- % blx@setp@<rs>@<sp> = map of set parent <sp> in a refsection <rs> to csv
- % of set children
- % blx@seti@<rs>@<sc> = position of set child <sc> in entry set in
- % refsection <rs>
- % blx@setc@<rs>@<sc> = map of set child <sc> in refsection <rs> to set parent
- % {<entrykey>,...}
- \protected\def\blx@bbl@set#1{%
- \blx@bbl@fieldedef{entryset}{\detokenize{#1}}%
- \csxdef{blx@setp@\the\c@refsection @\abx@field@entrykey}{\detokenize{#1}}%
- \begingroup
- \blx@tempcnta\z@
- \expandafter\forcsvlist
- \expandafter\blx@bbl@set@i
- \expandafter{\detokenize{#1}}%
- \endgroup}
- \def\blx@bbl@set@i#1{%
- \advance\blx@tempcnta\@ne
- \csxdef{blx@seti@\the\c@refsection @#1}{\the\blx@tempcnta}}
- % {<entrykey>}
- \protected\def\blx@bbl@inset#1{%
- \toggletrue{blx@setonly}%
- \blx@bbl@fieldedef{entryset}{\detokenize{#1}}%
- \csxdef{blx@setc@\the\c@refsection @\abx@field@entrykey}{\detokenize{#1}}}
- % {<entrykey>}
- \protected\def\blx@bbl@xref#1{}% No-op to avoid an error with BibTeX .bbl
- % {<keyword>,...}
- \protected\def\blx@bbl@keyw#1{%
- \forcsvlist{\blx@addkeyword{\abx@field@entrykey}}{#1}%
- \blx@bbl@fielddef{keywords}{#1}}
- \def\blx@addkeyword#1#2{%
- \listcsxadd{blx@keyw@\the\c@refsection @\detokenize{#2}}{#1}}
- % {<options>}
- \protected\long\def\blx@bbl@options#1{%
- \begingroup
- \let\blx@tempa\@empty
- \forcsvlist\blx@bbl@options@i{#1}%
- \edef\blx@tempa{%
- \endgroup
- \ifx\blx@tempa\@empty
- \else
- \def\noexpand\abx@field@options{\expandonce\blx@tempa}%
- \fi}%
- \blx@tempa}
- \long\def\blx@bbl@options@i#1{\blx@bbl@options@ii#1==&}
- \long\def\blx@bbl@options@ii#1=#2=#3&{%
- \ifcsundef{KV@blx@opt@ent@#1}
- {\blx@warning@noline{%
- Ignoring undefined option '#1'\MessageBreak
- at entry '\abx@field@entrykey'}}
- {\eappto\blx@tempa{%
- \ifx\blx@tempa\@empty\else,\fi
- \unexpanded{#1}\ifblank{#2}{}{=\unexpanded{#2}}}}}
- \def\blx@ifdata#1{%
- \ifcsdef{blx@data@\the\c@refsection @\blx@refcontext@context @#1}}
- \let\blx@imc@ifentryinbib\blx@ifdata
- \def\blx@getdata#1{%
- \csuse{blx@data@\the\c@refsection @\blx@refcontext@context @#1}%
- \blx@adjustyears
- \blx@getlabeldata
- \blx@aliasfields
- \blx@setcitecounter}
- \def\blx@adjustyears{%
- % All dates by default are output from biber in astronomical era with a year 0
- % So, if we are ouputting BCE/BC era, we need to adjust the years by +1
- \def\do##1{%
- \ifdefstring\blx@dateera{astronomical}
- {}
- {\ifcsdef{abx@field@##1year}
- {\csuse{if##1dateera}{bce}
- {\csedef{abx@field@##1year}{\number\numexpr\csuse{abx@field@##1year}+1}}
- {}}
- {}%
- \ifcsdef{abx@field@##1endyear}
- {\csuse{if##1enddateera}{bce}
- {\csedef{abx@field@##1endyear}{\number\numexpr\csuse{abx@field@##1endyear}+1}}
- {}}
- {}}%
- {}}%
- \abx@dodatetypes}
- \def\blx@getlabeldata{%
- % Here we resolve label* bib fields to their real fields. In fact, currently biber resolves
- % the label* fields too, as it needs to do this to generate various internal
- % counters for tracking things like singletitle etc. internally. However, it does not output
- % the resolved values to the .bbl. It is conceptually neater to have just the calculated label*
- % source field in the .bbl and let biblatex resolve the label* field using the label*source
- % fields. However, currently there is no way/need to vary the label* resolution to pick up a
- % different target field in biblatex and so practically, this resolution is being done twice,
- % once by biber, once by biblatex. It is possible in the future that it would be useful to
- % to change the resolution of the label* fields dynamically in a style/document and so this
- % biblatex-side resolution remains.
- %
- % An unanswered question is whether such dynamic resolution causes problems due to the fact
- % that biber uses the label* field to generate counters internally and changing the
- % label* field resolution in biblatex would occur after such counters have been used to
- % generate the .bbl
- % This could all be removed from biblatex if necessary and biber could output all resolved
- % label* fields to the .bbl but then it potentially removes control of such things from
- % macros
- %
- % fields
- \def\do##1{%
- \ifcsundef{abx@field@##1source}
- {}%
- {\csletcs{abx@field@##1}{abx@field@\csuse{abx@field@##1source}}}}%
- \dolistloop\abx@rfields%
- % names
- \def\do##1{%
- \ifcsundef{abx@field@##1source}
- {}
- {\csname c@##1\expandafter\endcsname\expandafter\the\csname c@\csuse{abx@field@##1source}\endcsname
- \csletcs{abx@name@##1}{abx@name@\csuse{abx@field@##1source}}}}%
- \dolistloop\abx@rnames%
- % Resolve labeldate
- % Note that here we can't refer to labelyear as this is where we create it, hence the
- % complications in constructing test names etc.
- % This also shows why biber shouldn't resolve labeldate fields as we have to add
- % circa/uncertain/era etc. information to them and that has to be done here.
- \ifundef\abx@field@labeldatesource
- {}
- {\ifcsundef{abx@field@\abx@field@labeldatesource year}
- % \DeclareLabeldate resolved to a literal/localisation string or a non-date field
- % in which case we only set labelyear.
- {\ifcsundef{abx@field@\abx@field@labeldatesource}
- % \DeclareLabeldate resolved to a literal/localisation string
- {\edef\abx@field@labelyear{\abx@field@labeldatesource}}
- % \DeclareLabeldate resolved to a non-date field. Not safe to \edef because
- % such contents could contain arbitrary macros, unlike ETDF sourced labeldatesource values
- {\letcs\abx@field@labelyear{abx@field@\abx@field@labeldatesource}}}
- % \DeclareLabeldate resolved to a date field name prefix like '', 'event', 'url'
- % or 'orig'
- {% labeldateera/labelenddateera
- \ifcsdef{abx@field@\abx@field@labeldatesource dateera}
- {\edef\abx@field@labeldateera{\csuse{abx@field@\abx@field@labeldatesource dateera}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource enddateera}
- {\edef\abx@field@labelenddateera{\csuse{abx@field@\abx@field@labeldatesource enddateera}}}
- {}%
- % labelyear/labelendyear
- \ifcsdef{abx@field@\abx@field@labeldatesource year}
- {\edef\abx@field@labelyear{\csuse{abx@field@\abx@field@labeldatesource year}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endyear}
- {\edef\abx@field@labelendyear{\csuse{abx@field@\abx@field@labeldatesource endyear}}}
- {}%
- % labelmonth
- \ifcsdef{abx@field@\abx@field@labeldatesource month}
- {\edef\abx@field@labelmonth{\csuse{abx@field@\abx@field@labeldatesource month}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endmonth}
- {\edef\abx@field@labelendmonth{\csuse{abx@field@\abx@field@labeldatesource endmonth}}}
- {}%
- % labelday/labelendday
- \ifcsdef{abx@field@\abx@field@labeldatesource day}
- {\edef\abx@field@labelday{\csuse{abx@field@\abx@field@labeldatesource day}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endday}
- {\edef\abx@field@labelendday{\csuse{abx@field@\abx@field@labeldatesource endday}}}
- {}%
- % labelhour/labelendhour
- \ifcsdef{abx@field@\abx@field@labeldatesource hour}
- {\edef\abx@field@labelhour{\csuse{abx@field@\abx@field@labeldatesource hour}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endhour}
- {\edef\abx@field@labelendhour{\csuse{abx@field@\abx@field@labeldatesource endhour}}}
- {}%
- % labelminute/labelendminute
- \ifcsdef{abx@field@\abx@field@labeldatesource minute}
- {\edef\abx@field@labelminute{\csuse{abx@field@\abx@field@labeldatesource minute}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endminute}
- {\edef\abx@field@labelendminute{\csuse{abx@field@\abx@field@labeldatesource endminute}}}
- {}%
- % labelsecond/labelendsecond
- \ifcsdef{abx@field@\abx@field@labeldatesource second}
- {\edef\abx@field@labelsecond{\csuse{abx@field@\abx@field@labeldatesource second}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endsecond}
- {\edef\abx@field@labelendsecond{\csuse{abx@field@\abx@field@labeldatesource endsecond}}}
- {}%
- % labeltimezone/labelendtimezone
- \ifcsdef{abx@field@\abx@field@labeldatesource timezone}
- {\edef\abx@field@labeltimezone{\csuse{abx@field@\abx@field@labeldatesource timezone}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endtimezone}
- {\edef\abx@field@labelendtimezone{\csuse{abx@field@\abx@field@labeldatesource endtimezone}}}
- {}%
- % labelseason/labelendseason
- \ifcsdef{abx@field@\abx@field@labeldatesource season}
- {\edef\abx@field@labelseason{\csuse{abx@field@\abx@field@labeldatesource season}}}
- {}%
- \ifcsdef{abx@field@\abx@field@labeldatesource endseason}
- {\edef\abx@field@labelendseason{\csuse{abx@field@\abx@field@labeldatesource endseason}}}
- {}%
- % labeldateunspecified
- \ifcsdef{abx@field@\abx@field@labeldatesource dateunspecified}
- {\csletcs{abx@field@labeldateunspecified}{abx@field@\abx@field@labeldatesource dateunspecified}}
- {}%
- % labeldatecirca/labelenddatecirca
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource datecirca}
- {\csletcs{etb@tgl@abx@bool@labeldatecirca}{etb@tgl@abx@bool@\abx@field@labeldatesource datecirca}}
- {}%
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddatecirca}
- {\csletcs{etb@tgl@abx@bool@labelenddatecirca}{etb@tgl@abx@bool@\abx@field@labeldatesource enddatecirca}}
- {}%
- % labeldatejulian/labelenddatejulian
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource datejulian}
- {\csletcs{etb@tgl@abx@bool@labeldatejulian}{etb@tgl@abx@bool@\abx@field@labeldatesource datejulian}}
- {}%
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddatejulian}
- {\csletcs{etb@tgl@abx@bool@labelenddatejulian}{etb@tgl@abx@bool@\abx@field@labeldatesource enddatejulian}}
- {}%
- % labeldateuncertain/labelenddateuncertain
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource dateuncertain}
- {\csletcs{etb@tgl@abx@bool@labeldateuncertain}{etb@tgl@abx@bool@\abx@field@labeldatesource dateuncertain}}
- {}%
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddateuncertain}
- {\csletcs{etb@tgl@abx@bool@labelenddateuncertain}{etb@tgl@abx@bool@\abx@field@labeldatesource enddateuncertain}}
- {}%
- % labeldateunknown/labelenddateunknown
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource dateunknown}
- {\csletcs{etb@tgl@abx@bool@labeldateunknown}{etb@tgl@abx@bool@\abx@field@labeldatesource dateunknown}}
- {}%
- \ifcsdef{etb@tgl@abx@bool@\abx@field@labeldatesource enddateunknown}
- {\csletcs{etb@tgl@abx@bool@labelenddateunknown}{etb@tgl@abx@bool@\abx@field@labeldatesource enddateunknown}}
- {}}}}
- % This gets the entry data for a citation
- \def\blx@getdata@cite#1{%
- \blx@getdata{#1}%
- % Inject the relevant set parent fields like labelnumber/labelprefix into child
- \ifcsdef{blx@setc@\the\c@refsection @#1}
- {\blx@ifdata{#1}
- {\def\abx@field@childentrykey{#1}%LEGACY(<3.8)
- \edef\abx@field@childentrytype{\abx@field@entrytype}%LEGACY(<3.8)
- \begingroup
- \expandafter\expandafter\expandafter\blx@getdata\expandafter\expandafter\expandafter{%
- \csname blx@setc@\the\c@refsection @#1\endcsname}%
- \let\blx@tempa\@empty
- % Inject labelnumber if it exists
- \ifdef\abx@field@labelnumber
- {\appto\blx@tempa{\def\noexpand\abx@field@labelnumber{\abx@field@labelnumber}}}
- {}%
- % Inject labelprefix if it exists
- \ifdef\abx@field@labelprefix
- {\appto\blx@tempa{\def\noexpand\abx@field@labelprefix{\abx@field@labelprefix}}}
- {}%
- % Inject labelalpha if it exists
- \ifdef\abx@field@labelalpha
- {\appto\blx@tempa{\def\noexpand\abx@field@labelalpha{\abx@field@labelalpha}}}
- {}%
- % Inject extraalpha if it exists
- \ifdef\abx@field@extraalpha
- {\appto\blx@tempa{\def\noexpand\abx@field@extraalpha{\abx@field@extraalpha}}}
- {}%
- % Perform the injection
- \edef\blx@tempb{\endgroup\blx@tempa}%
- \blx@tempb}
- {}}
- {}%
- \ifcsdef{blx@seti@\the\c@refsection @#1}
- {\letcs\abx@field@entrysetcount{blx@seti@\the\c@refsection @#1}}
- {}}
- \def\blx@execute{%
- \blx@imc@thefield{execute}}
- \def\blx@setoptions@entry{%
- \blx@imc@iffieldundef{options}
- {}
- {\begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\setkeys{blx@opt@ent}{\abx@field@options}}%
- \blx@tempa
- \blx@checkoptions@entry}}
- \def\blx@setoptions@type#1{%
- \ifcsdef{blx@opts@type@#1}
- {\begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\setkeys{blx@opt@typ}{\csuse{blx@opts@type@#1}}}%
- \blx@tempa}
- {}}
- \def\blx@checkoptions@global{}
- \def\blx@checkoptions@type{}
- \def\blx@checkoptions@entry{}
- \def\blx@entrysetcount{%
- \ifdef\abx@field@entrykey
- {\ifcsdef{blx@seti@\the\c@refsection @\abx@field@entrykey}
- {\letcs\abx@field@entrysetcount{%
- blx@seti@\the\c@refsection @\abx@field@entrykey}}
- {}}
- {}}
- % {<section>}
- \def\blx@bbl@refsection#1{%
- \begingroup
- \c@refsection#1\relax}
- \def\blx@bbl@endrefsection{%
- \iftoggle{blx@addset}
- {\blx@addset
- \global\togglefalse{blx@addset}}
- {}%
- \endgroup}
- % {<entrykey>}
- \protected\def\blx@bbl@missing#1{%
- \listcsxadd{blx@miss@\the\c@refsection}{\detokenize{#1}}%
- \blx@warning@noline{%
- The following entry could not be found\MessageBreak
- in the database%
- \ifnumgreater\c@refsection\z@
- { (refsection \the\c@refsection)}
- {}:\MessageBreak
- \detokenize{#1}\MessageBreak
- Please verify the spelling and rerun\MessageBreak
- LaTeX afterwards}}
- % We create an alias resolving macro and also a list of aliases
- % which we need to add to the .bcf. We need to resolve the aliases
- % for internal use but we always want the aliases themselves in the .bcf
- % so that biber can correctly use and resolve them too.
- \protected\def\blx@bbl@keyalias#1#2{%
- \csgdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}%
- \listcsgadd{blx@keyaliases@\the\c@refsection}{#1}}
- % blx@dlist@list@<section>@<refcontext> - a list of list items in a refcontext in a
- % section (for tracking bibliography lists,
- % obeys skipbiblist)
- % blx@dlist@entry@<section>@<list> - a list of normal entries in a list in a
- % section (for tracking bibliographies,
- % obeys skipbib)
- % blx@dlist@centry@<section>@<list> - a list of normal entries in a list in a
- % section (for tracking citations,
- % obeys skipbib). Same as @entry@ but
- % with added set children
- % {<entrykey>}{<entrytype>}{<options>}
- \protected\def\blx@bbl@entry#1#2#3{%
- \begingroup
- \edef\abx@field@entrykey{\detokenize{#1}}%
- \blx@setoptions@type{#2}%
- \blx@bbl@options{#3}%
- \blx@setoptions@entry
- \edef\blx@bbl@data{blx@data@\the\c@refsection @\blx@dlist@name @\abx@field@entrykey}%
- \blx@bbl@addfield{entrykey}{\abx@field@entrykey}%
- \listxadd\blx@entries{\abx@field@entrykey}%
- \blx@bbl@addfield{entrytype}{#2}%
- \csuse\blx@bbl@data
- \blx@imc@iffieldundef{options}
- {}
- {\blx@bbl@fieldedef{options}{\expandonce\abx@field@options}}}
- \protected\def\blx@bbl@endentry{%
- \csuse\blx@bbl@data
- \ifcsundef{blx@pref@\the\c@refsection @\abx@field@entrykey}
- {}
- {\blx@addpageref{\abx@field@entrykey}}%
- \nottoggle{blx@setonly}
- {}
- {\global\toggletrue{blx@addset}%
- \toggletrue{blx@skipbib}%
- \toggletrue{blx@skipbiblist}%
- \toggletrue{blx@skiplab}}%
- \nottoggle{blx@skipbib}
- {\expandafter\ifstrequal\expandafter{\blx@dlist@type}{entry}
- {\listcsxadd{blx@dlist@entry@\the\c@refsection @\blx@dlist@name}{\abx@field@entrykey}%
- \listcsxadd{blx@dlist@centry@\the\c@refsection @\blx@dlist@name}{\abx@field@entrykey}%
- \listcsxadd{blx@type@\the\c@refsection @\abx@field@entrytype}{\abx@field@entrykey}%
- \ifdef\abx@field@entrysubtype
- {\listcsxadd{blx@subt@\the\c@refsection @\abx@field@entrysubtype}{\abx@field@entrykey}}
- {}}
- {}}%
- {}%
- \nottoggle{blx@skipbiblist}
- {\expandafter\ifstrequal\expandafter{\blx@dlist@type}{list}
- {\blx@bbl@labelfields
- \listcsxadd{blx@dlist@\blx@dlist@type @\the\c@refsection @\blx@dlist@name}{\abx@field@entrykey}}
- {}}%
- {}%
- \nottoggle{blx@skiplab}
- {\iftoggle{blx@labelnumber}
- {\blx@bbl@labelnumber}
- {}%
- \iftoggle{blx@labelalpha}
- {\blx@bbl@labelalpha}
- {}%
- \iftoggle{blx@labeltitle}
- {\blx@bbl@labeltitle}
- {}%
- \iftoggle{blx@labeltitleyear}
- {\blx@bbl@labeltitleyear}
- {}%
- \iftoggle{blx@labeldateparts}
- {\blx@bbl@labeldate}
- {}%
- \blx@bbl@labelname}
- {}%
- \blx@bbl@titles
- \blx@bbl@hooks
- \endgroup}
- % This, at the end of the .bbl, puts any set parent children into the
- % current context sort list of citations (a separate list *@centry@* to the
- % bibliography *@entry@* which doesn't want the children adding if they weren't
- % cited) as this is needed for the subentry citing
- % when sortcites is enabled as for sortcites, the current context sorting list
- % is used and the parent set of a subentry is not necessarily
- % available in the current context sortlist.
- \def\blx@addset{%
- \begingroup
- \ifcsdef{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}
- {\letcs\blx@tempa{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}%
- \global\cslet{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}\@empty
- \forlistloop\blx@addset@i\blx@tempa}
- {\blx@warning@noline{Sorting template has changed}}%
- \endgroup}
- \def\blx@addset@i#1{%
- \listcsgadd{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}{#1}%
- \ifcsdef{blx@setp@\the\c@refsection @#1}
- {\expandafter\expandafter\expandafter\forcsvlist
- \expandafter\expandafter\expandafter\blx@addset@ii
- \expandafter\expandafter\expandafter{%
- \csname blx@setp@\the\c@refsection @#1\endcsname}}
- {}}
- \def\blx@addset@ii#1{%
- \listcsgadd{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}{#1}}
- % {<csname>}{<field>/<format>}{<field>}
- \def\abx@flfw@getfieldformat#1#2#3{%
- \blx@getformat\abx@tmp@theformat{ffd}{#2}{#3}%
- \csletcs{#1}{abx@tmp@theformat}}
- \def\blx@labelwidth@resetlocal{%
- \locallabelnumberwidth0pt\relax
- \locallabelalphawidth0pt\relax
- \def\do##1{%
- \csname local##1width\endcsname0pt\relax}%
- \abx@dolabelfields}
- \def\blx@labelwidth@settolocal{%
- \labelnumberwidth\locallabelnumberwidth
- \labelalphawidth\locallabelalphawidth
- \def\do##1{%
- \csname ##1width\endcsname\csname local##1width\endcsname}%
- \abx@dolabelfields}
- \def\blx@locallabelwidth#1{%
- \blx@labelwidth@resetlocal
- \let\blx@do\blx@lengthitem
- \let\blx@done\relax
- \blx@listloop{#1}%
- \blx@labelwidth@settolocal}
- % {<prefix for labelwidth fields>}
- \def\blx@bbl@labelnumberwidth@numeric#1{%
- \abx@flfw@getfieldformat{abx@flfw@labelnumberwidth}{labelnumberwidth}{}%
- \abx@flfw@getfieldformat{abx@flfw@labelprefix}{labelprefix}{}%
- \abx@flfw@getfieldformat{abx@flfw@labelnumber}{labelnumber}{}%
- \iftoggle{blx@defernumbers}
- {\ifundef\abx@field@localnumber
- {\numdef\abx@field@localnumber{0}}%
- {}}
- {\ifundef\abx@field@localnumber
- {\edef\abx@field@localnumber{%
- \csuse{blx@labelnumber@\the\c@refsection}}}
- {}}%
- \blx@setlabwidth{\csname #1labelnumberwidth\endcsname}{%
- \csuse{abx@flfw@labelnumberwidth}{%
- \ifdef\abx@field@labelprefix
- {\csuse{abx@flfw@labelprefix}{\abx@field@labelprefix}}
- {}%
- \csuse{abx@flfw@labelnumber}{\abx@field@localnumber}}}}
- \def\blx@bbl@labelnumberwidth@shorthand#1{%
- \abx@flfw@getfieldformat{abx@flfw@labelnumberwidth}{labelnumberwidth}{}%
- \abx@flfw@getfieldformat{abx@flfw@labelnumber}{labelnumber}{}%
- \blx@setlabwidth{\csname #1labelnumberwidth\endcsname}{%
- \csuse{abx@flfw@labelnumberwidth}{%
- \csuse{abx@flfw@labelnumber}{\abx@field@shorthand}}}}
- \def\blx@bbl@locallabelnumberwidth{%
- \ifdefempty\abx@field@localnumber
- {}
- {\ifundef\abx@field@shorthand
- {\blx@bbl@labelnumberwidth@numeric{local}}
- {\blx@bbl@labelnumberwidth@shorthand{local}}}}
- % {<prefix for labelwidth fields>}
- \def\blx@bbl@labelalphawidth#1{%
- \abx@flfw@getfieldformat{abx@flfw@labelalphawidth}{labelalphawidth}{}%
- \abx@flfw@getfieldformat{abx@flfw@labelprefix}{labelprefix}{}%
- \abx@flfw@getfieldformat{abx@flfw@labelalpha}{labelalpha}{}%
- \abx@flfw@getfieldformat{abx@flfw@extraalpha}{extraalpha}{}%
- \blx@setlabwidth{\csname #1labelalphawidth\endcsname}{%
- \csuse{abx@flfw@labelalphawidth}{%
- \ifdef\abx@field@labelprefix
- {\csuse{abx@flfw@labelprefix}{\abx@field@labelprefix}}
- {}%
- \csuse{abx@flfw@labelalpha}{\abx@field@labelalpha}%
- \ifundef\abx@field@extraalpha
- {}
- {\csuse{abx@flfw@extraalpha}{\abx@field@extraalpha}}}}}
- \def\blx@bbl@locallabelalphawidth{%
- \ifundef\abx@field@labelalpha
- {}
- {\blx@bbl@labelalphawidth{local}}}
- \def\blx@bbl@locallabelfields{\blx@bbl@labelfields@i{local}}
- \def\blx@bbl@labelfields{\blx@bbl@labelfields@i{}}
- % {<prefix for labelwidth fields>}
- \def\blx@bbl@labelfields@i#1{%
- \def\do##1{%
- \ifcsundef{abx@field@##1}
- {}
- {\abx@flfw@getfieldformat{abx@flfw@##1width}{##1width}{##1}%
- \blx@setlabwidth{\csname #1##1width\endcsname}{%
- \csuse{abx@flfw@##1width}{\csname abx@field@##1\endcsname}}}}%
- \abx@dolabelfields}
- \def\blx@bbl@labelnumber{%
- % Used at endentry, when reading .bbl
- % only do this for the global sorting list otherwise we increment
- % the labelnumbers for each sortlist
- \ifdefempty\abx@field@localnumber
- {}% only if omitnumbers=true
- {\ifundef\abx@field@shorthand
- {\iftoggle{blx@defernumbers}
- % only if defernumbers=true, we have to define localnumber to
- % something to stop labelnumberwidth def complaining on first
- % post-backend run since there will be nothing in the .aux yet
- % for defernums localnumbers. On the second post-backend run,
- % it will have a value correct for generating labelnumberwidth
- % We also have to define a dummy value for labelnumber here for
- % first post-backend runs otherwise references to labelnumber
- % in cite styles like numeric-comp will die.
- {\ifundef\abx@field@localnumber
- {\numdef\abx@field@localnumber{0}%
- \blx@bbl@fielddef{labelnumber}{0}}%
- {}}
- {\csnumgdef{blx@labelnumber@\the\c@refsection}{%
- \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@bbl@labelnumberwidth@numeric{}}}
- {\csgappto\blx@bbl@data{\let\abx@field@labelnumber\abx@field@shorthand}%
- \iftoggle{blx@skipbib}
- {}
- {\blx@bbl@labelnumberwidth@shorthand{}}}}}
- \def\blx@bbl@labelalpha{%
- \ifundef\abx@field@labelalpha
- {}
- {\ifundef\abx@field@extraalpha
- {}
- {\ifnum\abx@field@extraalpha>\c@maxextraalpha
- \global\c@maxextraalpha\abx@field@extraalpha\relax
- \fi}%
- \iftoggle{blx@skipbib}
- {}
- {\blx@bbl@labelalphawidth{}}}}
- \def\blx@bbl@labeltitle{%
- \ifundef\abx@field@extratitle
- {}
- {\ifnum\abx@field@extratitle>\c@maxextratitle
- \global\c@maxextratitle\abx@field@extratitle\relax
- \fi}}
- \def\blx@bbl@labeltitleyear{%
- \ifundef\abx@field@extratitleyear
- {}
- {\ifnum\abx@field@extratitleyear>\c@maxextratitleyear
- \global\c@maxextratitleyear\abx@field@extratitleyear\relax
- \fi}}
- \def\blx@bbl@labelname{%
- \ifundef\abx@field@extraname
- {}
- {\ifnum\abx@field@extraname>\c@maxextraname
- \global\c@maxextraname\abx@field@extraname\relax
- \fi}}
- \def\blx@bbl@labeldate{%
- \ifundef\abx@field@extradate
- {}
- {\ifnum\abx@field@extradate>\c@maxextradate
- \global\c@maxextradate\abx@field@extradate\relax
- \fi}}
- \def\blx@bbl@titles{%
- \ifundef\abx@field@indextitle
- {\csgappto\blx@bbl@data{%
- \let\abx@field@indextitle\abx@field@title}}
- {}%
- \ifundef\abx@field@indexsorttitle
- {\csgappto\blx@bbl@data{%
- \let\abx@field@indexsorttitle\abx@field@indextitle}}
- {}}
- \def\blx@bbl@hooks{%
- \ifcsundef{blx@hook@bblitem@*}
- {\ifcsundef{blx@hook@bblitem@\abx@field@entrytype}
- {}
- {\csuse\blx@bbl@data
- \csuse{blx@hook@bblitem@\abx@field@entrytype}}}
- {\csuse\blx@bbl@data
- \csuse{blx@hook@bblitem@*}%
- \csuse{blx@hook@bblitem@\abx@field@entrytype}}}
- \newrobustcmd*{\AtDataInput}[1][*]{\csgappto{blx@hook@bblitem@#1}}
- \@onlypreamble\AtDataInput
- \def\blx@setlabwidth#1#2{%
- \begingroup
- \settowidth{\@tempdima}{\bibfont#2}%
- \ifnum\@tempdima>#1%
- \global#1\@tempdima
- \fi
- \endgroup}
- \def\blx@bblstart{%
- \let\preamble\blx@bbl@preamble
- \let\warn\blx@bbl@thewarn
- \let\refsection\blx@bbl@refsection
- \let\endrefsection\blx@bbl@endrefsection
- \let\entry\blx@bbl@entry
- \let\endentry\blx@bbl@endentry
- \let\missing\blx@bbl@missing
- \let\keyalias\blx@bbl@keyalias
- \let\datalist\blx@bbl@dlist
- \let\enddatalist\blx@bbl@enddlist
- \let\set\blx@bbl@set
- \let\inset\blx@bbl@inset
- \let\xref\blx@bbl@xref % A No-op for Biber
- \let\keyw\blx@bbl@keyw
- \let\name\blx@bbl@namedef
- \let\list\blx@bbl@listdef
- \let\field\blx@bbl@fielddef
- \let\range\blx@bbl@rangedef
- \let\strng\blx@bbl@stringdef
- \let\cnt\blx@bbl@cntdef
- \let\true\blx@bbl@booltrue
- \let\false\blx@bbl@boolfalse
- \let\verb\blx@bbl@verbdef
- \let\endverb\blx@bbl@verbend
- \let\lverb\blx@bbl@verbldef
- \let\endlverb\blx@bbl@verblend
- \let\annotation\blx@bbl@annotationdef}
- \def\blx@bblend{%
- % Special warning for defernumbers when a citation cannot be found
- \iftoggle{blx@defernumbers}
- {\def\do##1{\ifinlist{##1}\blx@entries
- {}
- {\blx@warning@noline{%
- citation '##1' was not found at all in the .bbl, bibliography labels cannot be generated, please correct the citation}}}%
- \dolistloop\blx@lastcites}
- {}}
- % {<entrykey>}
- % Get the saved information on which citations were mentioned last run
- \protected\def\abx@aux@cite#1{%
- \listxadd\blx@lastcites{\detokenize{#1}}}
- % {<refcontext>}
- % Get the saved information on which refcontexts were mentioned last run
- \protected\def\abx@aux@refcontext#1{%
- \listxadd\blx@lastrefcontexts{\detokenize{#1}}}
- % {<sortingtemplatename>}
- % Get the saved information on which shorthand sorting templates were mentioned last run
- \protected\def\abx@aux@biblist#1{%
- \listgadd\blx@lastbiblists{#1}}
- % Here we mustn't change the checksum if we used localnumbers from the
- % .aux file as this means that deferred numbering is
- % complete. Otherwise we get in an endless rerun loop because the
- % checksum due to number changes is always different.
- \AtEndDocument{%
- \def\abx@aux@number#1#2#3#4#5{%
- \ifblank{#5}
- {}
- {\nottoggle{blx@localnumber}
- {\blx@addchecksum{#1}{#5}}
- {}}}}
- \AtEndDocument{%
- % Here we run some tests to decide if we need to issue re-run
- % messages in certain circumstances. In general, if we add/remove
- % any citations or add/remove any sorting templates, we need to re-run
- % biber. Also, if we have to re-run biber, we need to defer writing
- % the defernumbers .aux information because it will not yet be correct.
- % Test to see if we *removed* any citations since last run
- % (adding citations is dealt with naturally in \blx@citation@entry)
- % If so, give a rerun biber message. This also sets the
- % rerun biber toggle so defernums doesn't consume the localnumbers
- % in the .aux but instead, re-writes them, which is what we need.
- \begingroup
- \def\do#1{\ifinlist{#1}\blx@cites{}{\blx@logreq@active{}}\relax}%
- \dolistloop\blx@lastcites
- % Special case - if we are using sortingtemplate "none" anywhere, then changes
- % in citation order matter and we need to re-run biber. So a special test
- % to see if the cites from last run are identical in order. We have
- % already tested for more or less cites between runs by now, we are
- % testing here for exactly the same cites by treating the cite and
- % lastcite lists as strings and comparing them. This doesn't apply
- % to biblist sortingtemplates as nobody wants to sort biblists with
- % "none", since it makes no sense
- \ifinlist{none}\blx@sortingtemplatenames
- {\ifdefstrequal{\blx@cites}{\blx@lastcites}
- {}
- {\blx@logreq@active{}}}
- {}%
- % Test if we removed any mention of a reference context since last run
- % If we did, we need to re-run biber
- \def\do#1{\ifinlist{#1}\blx@refcontexts{}{\blx@logreq@active{}}\relax}%
- \dolistloop\blx@lastrefcontexts
- % Test if we added any mention of a reference context since last run
- % If we did, we need to re-run biber
- \def\do#1{\ifinlist{#1}\blx@lastrefcontexts{}{\blx@logreq@active{}}\relax}%
- \dolistloop\blx@refcontexts
- % Test if we removed any mention of a biblist since last run.
- % If we did, we need to re-run biber
- \def\do#1{\ifinlist{#1}\blx@biblists{}{\blx@logreq@active{}}\relax}%
- \dolistloop\blx@lastbiblists
- % Test to see if we added any mention of a biblist since last run.
- % If we did, we need to re-run biber
- \def\do#1{\ifinlist{#1}\blx@lastbiblists{}{\blx@logreq@active{}}\relax}%
- \dolistloop\blx@biblists
- % If we have to run biber or latex again and we are using defernumbers,
- % don't write the localnumber information to the .aux file yet as we will
- % potentially have to regenerate sorting order first in biber
- \iftoggle{blx@defernumbers}
- {\iftoggle{blx@runbiber}
- {}
- {\def\do#1{\blx@auxwrite\@mainaux{}{#1}}
- \dolistloop\blx@localnumaux}}
- {}%
- \endgroup}
- % {<instcount>}{<entrykey>}{<refsection>}{<refcontext>}{<labelnumber>}
- \protected\def\blx@aux@number#1#2#3#4#5{%
- \blx@bbl@addentryfield{\detokenize{#2}}{#3}{localnumber}{#4}{#5}%
- \blx@bbl@addentryfield{\detokenize{#2}}{#3}{labelnumber}{#4}{#5}%
- \global\toggletrue{blx@localnumber}%
- \ifblank{#5}
- {}
- {\csgdef{blx@labelnumber@#3}{#5}}}
- % Called as part of bib output for an entry
- % Only used when defernumbers=true
- \def\blx@addlabelnumber{%
- \begingroup
- \nottoggle{blx@skiplab}
- {\iftoggle{blx@labelnumber}
- {\ifundef\abx@field@shorthand
- % Need to know if we set any localnumber from .aux file, not
- % just current item. Otherwise, we may just write new
- % localnumbers but not existing ones
- % Also, don't want to regenerate localnumber for any key in a
- % refsection which we've already seen because this has the nasty
- % side-effect of incrementing the localnum counter
- {\ifboolexpr { not togl {blx@localnumber}
- and
- not test {\ifcsdef{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@entrykey}} }
- {\iftoggle{blx@omitnumbers}
- {\let\abx@field@localnumber\@empty}
- {\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@addentryfield{\abx@field@entrykey}{\the\c@refsection}%
- {localnumber}{\blx@refcontext@context}{\abx@field@localnumber}}}
- {}%
- % If localnumbers were already in the .aux, add them
- % again from the .aux. This prevents some cycling
- % problems where pagebreaks change after localnumber
- % settles down and then we need another run which then
- % regenerates localnumber requiring another run but then
- % the pagebreaks change back again ... etc.
- \ifcsundef{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@entrykey}
- {\ifundef\abx@field@localnumber
- {}
- {\listxadd\blx@localnumaux{%
- \string\abx@aux@number%
- {\the\c@instcount}%
- {\abx@field@entrykey}%
- {\the\c@refsection}%
- {\blx@refcontext@context}%
- {\abx@field@localnumber}}%
- % record that we have already generated and output localnum
- % for this key in this refsection/refcontext
- \global\cslet{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@entrykey}\@empty}}
- {}}
- {}}%
- {}}
- {}%
- \endgroup}
- % {<datalistname>}
- \def\blx@bbl@dlist[#1]#2{%
- \begingroup
- \def\blx@dlist@type{#1}%
- \def\blx@dlist@name{#2}}
- \def\blx@bbl@enddlist{%
- \csnumgdef{blx@labelnumber@\the\c@refsection}{0}%
- \endgroup}
- \def\blx@addpageref#1{%
- \begingroup
- \blx@tempcnta\z@
- \let\blx@tempa\@empty
- \def\do##1{%
- \appto\blx@tempa{{##1}}%
- \advance\blx@tempcnta\@ne}%
- \dolistcsloop{blx@pref@\the\c@refsection @#1}%
- \edef\blx@tempa{\endgroup\noexpand\blx@bbl@listdef
- {pageref}{\the\blx@tempcnta}{\blx@tempa}}%
- \blx@tempa}
- %% Data input
- \def\blx@bblinput{%
- \begingroup
- \blx@info@noline{Trying to load bibliographic data..}%
- \blx@blxinit
- \blx@bblfile
- \endgroup}
- \def\blx@bblfile{%
- \blx@secinit
- \begingroup
- \blx@bblstart
- \blx@ifsigned{\jobname}{bbl}
- {\InputIfFileExists{\jobname.bbl}
- {\blx@info@noline{... file '\jobname.bbl' found}%
- \global\toggletrue{blx@bbldone}}
- {\blx@info@noline{... file '\jobname.bbl' not found}%
- \typeout{No file \jobname.bbl.}}}
- {}%
- \blx@bblend
- \endgroup
- % global sorting as this is called at BeginDocument
- \csnumgdef{blx@labelnumber@\the\c@refsection}{0}}
- %% Bibliography
- % {<name>}{<start code>}[<end code>]{<item code>}
- \newrobustcmd*{\defbibenvironment}[4]{%
- \long\csdef{blx@env@#1}{#2}%
- \long\csdef{blx@endenv@#1}{#3}%
- \long\csdef{blx@item@#1}{#4}}
- \defbibenvironment{bibliography}
- {\list{}{%
- \leftmargin\bibhang
- \itemindent-\leftmargin
- \itemsep\bibitemsep
- \parsep\bibparsep}}
- {\endlist}
- {\item}
- \def\do#1{%
- \defbibenvironment{#1}
- {\list{\thefield{#1}}{%
- \labelwidth\csname #1width\endcsname
- \labelsep\biblabelsep
- \leftmargin\labelwidth
- \advance\leftmargin\labelsep
- \itemsep\bibitemsep
- \parsep\bibparsep
- \def\makelabel####1{####1\hss}}}
- {\endlist}
- {\item}}
- \abx@dolabelfields
- % {<name>}[<default>]{<code>}
- \newrobustcmd*{\defbibheading}[1]{%
- \@ifnextchar[%]
- {\blx@defbibheading{blx@head@#1}}
- {\blx@defbibheading{blx@head@#1}[\bibname]}}
- \def\blx@defbibheading#1[#2]{%
- \csundef{#1}%
- \expandafter\newcommand\csname#1\endcsname[1][#2]}
- % {<name>}{<text>}
- \newrobustcmd*{\defbibnote}[1]{%
- \long\csdef{blx@note@#1}}
- % {<name>}{<code>}
- \newrobustcmd*{\defbibfilter}[2]{%
- \begingroup
- \def\blx@flt@error{\csname blx@flt@errortrue\endcsname}%
- \let\not\blx@flt@not \let\NOT\not
- \let\and\blx@flt@and \let\AND\and
- \let\or\blx@flt@or \let\OR\or
- \letcs\({blx@flt@(} \letcs\){blx@flt@)}%
- \def\section##1{\blx@flt@error}%
- \def\segment##1{segment=##1}%
- \def\type##1{type=##1}%
- \def\subtype##1{subtype=##1}%
- \def\keyword##1{keyword={##1}}%
- \def\category##1{category={##1}}%
- \edef\blx@tempa{\noexpand\blx@defbibfilter{#2}}%
- \ifdef\blx@flt@errortrue
- {\blx@err@filter}
- {\let\the\relax
- \let\blx@flt@item\relax
- \edef\blx@tempa{\blx@tempa}%
- \ifdef\blx@flt@errortrue
- {\blx@err@filter}
- {\csxdef{blx@filter@#1}{\blx@tempa}}}%
- \endgroup}
- \def\blx@defbibfilter#1{%
- \blx@defbibfilter@i#1 &}
- \def\blx@defbibfilter@i#1 #2&{%
- \blx@defbibfilter@ii#1==&%
- \ifblank{#2}{}{\blx@defbibfilter@i#2 &}}
- \def\blx@defbibfilter@ii#1=#2=#3&{%
- \ifblank{#2}
- {\ifblank{#1}
- {}
- {\ifcsdef{blx@flt@#1}
- {\csname blx@flt@#1\endcsname}
- {\blx@flt@error}}}
- {\ifcsdef{blx@flt@#1}
- {\csname blx@flt@#1\endcsname{\detokenize{#2}}}
- {\blx@flt@error}}}
- \def\blx@flt@and{ and }
- \def\blx@flt@or{ or }
- \def\blx@flt@not{ not }
- \csdef{blx@flt@(}{ ( }
- \csdef{blx@flt@)}{ ) }
- \def\blx@flt@segment#1{%
- test {\xifinlistcs\blx@flt@item{blx@segm@\the\c@refsection @#1}}}
- \def\blx@flt@type#1{%
- test {\xifinlistcs\blx@flt@item{blx@type@\the\c@refsection @#1}}}
- \def\blx@flt@subtype#1{%
- test {\xifinlistcs\blx@flt@item{blx@subt@\the\c@refsection @#1}}}
- \def\blx@flt@keyword#1{%
- test {\xifinlistcs\blx@flt@item{blx@keyw@\the\c@refsection @#1}}}
- \def\blx@flt@category#1{%
- test {\xifinlistcs\blx@flt@item{blx@catg@#1}}}
- % {<name>}{<code>}
- \newrobustcmd*{\defbibcheck}[2]{%
- \csdef{blx@bibcheck@#1}{%
- \togglefalse{blx@skipentry}%
- \def\skipentry{\toggletrue{blx@skipentry}}%
- #2\undef\skipentry}}
- % options
- % We need a 2-pass structure for options in \printbibliography and
- % \printbiblist because the section has to be set before any
- % other options and this partly determines which list to use for later filtering
- \define@key{blx@bib1}{segment}{}
- \define@key{blx@bib1}{type}{}
- \define@key{blx@bib1}{nottype}{}
- \define@key{blx@bib1}{subtype}{}
- \define@key{blx@bib1}{notsubtype}{}
- \define@key{blx@bib1}{keyword}{}
- \define@key{blx@bib1}{notkeyword}{}
- \define@key{blx@bib1}{category}{}
- \define@key{blx@bib1}{notcategory}{}
- \define@key{blx@bib1}{filter}{}
- \define@key{blx@bib1}{check}{}
- \define@key{blx@bib1}{heading}{}
- \define@key{blx@bib1}{env}{}
- \define@key{blx@bib1}{title}{}
- \define@key{blx@bib1}{prenote}{}
- \define@key{blx@bib1}{postnote}{}
- \define@key{blx@bib1}{omitnumbers}[]{}
- % Here we are using the first pass to see if there is an explicit setting for resetnumbers
- % If there isn't we will use the default behaviour where if there is a labelprefix,
- % resetnumbers will default to "true"
- \define@key{blx@bib1}{resetnumbers}[true]{%
- \toggletrue{blx@resetnumsexplicit}}
- \define@key{blx@bib2}{section}{}
- \define@key{blx@bib2}{sorting}{}
- \define@key{blx@biblist1}{segment}{}
- \define@key{blx@biblist1}{type}{}
- \define@key{blx@biblist1}{nottype}{}
- \define@key{blx@biblist1}{subtype}{}
- \define@key{blx@biblist1}{notsubtype}{}
- \define@key{blx@biblist1}{keyword}{}
- \define@key{blx@biblist1}{notkeyword}{}
- \define@key{blx@biblist1}{category}{}
- \define@key{blx@biblist1}{notcategory}{}
- \define@key{blx@biblist1}{filter}{}
- \define@key{blx@biblist1}{check}{}
- \define@key{blx@biblist1}{heading}{}
- \define@key{blx@biblist1}{env}{}
- \define@key{blx@biblist1}{title}{}
- \define@key{blx@biblist1}{prenote}{}
- \define@key{blx@biblist1}{postnote}{}
- \define@key{blx@biblist2}{section}{}
- \define@key{blx@biblist2}{sorting}{}
- \define@key{blx@bib1}{section}{%
- \ifcsundef{blx@sections@#1}
- {\blx@err@nosec{#1}}
- {\c@refsection#1\relax
- \def\blx@tempe{#1}}}
- \define@key{blx@biblist1}{section}{%
- \ifcsundef{blx@sections@#1}
- {\blx@err@nosec{#1}}
- {\c@refsection#1\relax
- \def\blx@tempe{#1}}}
- \define@key{blx@bbg}{section}{%
- \ifcsundef{blx@sections@#1}
- {\blx@err@nosec{#1}}
- {\c@refsection#1\relax}}
- \define@key{blx@bbc}{section}{%
- \ifcsundef{blx@sections@#1}
- {\blx@err@nosec{#1}}
- {\c@refsection#1\relax}}
- \define@key{blx@bib2}{segment}{\blx@key@segment{#1}}
- \define@key{blx@biblist2}{segment}{\blx@key@segment{#1}}
- \def\blx@key@segment#1{%
- \ifcsundef{blx@segm@\the\c@refsection @#1}
- {\blx@warning{Segment '#1' not found in section '\the\c@refsection'}}
- {\c@refsegment#1\relax
- \blx@printbibchecks
- \blx@filter\blx@tempa{blx@segm@\the\c@refsection @#1}}}
- \define@key{blx@bib2}{type}{\blx@key@type{#1}}
- \define@key{blx@biblist2}{type}{\blx@key@type{#1}}
- \def\blx@key@type#1{%
- \ifcsundef{blx@type@\the\c@refsection @#1}
- {\blx@warning{Type '#1' not found}%
- \let\blx@tempa\@empty}
- {\blx@printbibchecks
- \iftoggle{blx@tempb}
- {\togglefalse{blx@tempb}%
- \blx@filter\blx@tempa{blx@type@\the\c@refsection @#1}}
- {\let\blx@tempa\@empty
- \blx@error
- {'type' used multiple times}
- {When passing multiple filter options, each entry\MessageBreak
- must satisfy all conditions (AND conjunction),\MessageBreak
- hence some options may not be used twice.\MessageBreak
- Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}}
- \define@key{blx@bib2}{nottype}{\blx@key@nottype{#1}}
- \define@key{blx@biblist2}{nottype}{\blx@key@nottype{#1}}
- \def\blx@key@nottype#1{%
- \ifcsundef{blx@type@\the\c@refsection @#1}
- {}
- {\blx@printbibchecks
- \blx@notfilter\blx@tempa{blx@type@\the\c@refsection @#1}}}
- \define@key{blx@bib2}{subtype}{\blx@key@subtype{#1}}
- \define@key{blx@biblist2}{subtype}{\blx@key@subtype{#1}}
- \def\blx@key@subtype#1{%
- \ifcsundef{blx@subt@\the\c@refsection @#1}
- {\blx@warning{Subtype '#1' not found}%
- \let\blx@tempa\@empty}
- {\blx@printbibchecks
- \iftoggle{blx@tempb}
- {\togglefalse{blx@tempb}%
- \blx@filter\blx@tempa{blx@subt@\the\c@refsection @#1}}
- {\let\blx@tempa\@empty
- \blx@error
- {'subtype' used multiple times}
- {When passing multiple filter options, each entry\MessageBreak
- must satisfy all conditions (AND conjunction),\MessageBreak
- hence some options may not be used twice.\MessageBreak
- Use 'filter' and '\string\defbibfilter' with OR conjunctions}}}}
- \define@key{blx@bib2}{notsubtype}{\blx@key@notsubtype{#1}}
- \define@key{blx@biblist2}{notsubtype}{\blx@key@notsubtype{#1}}
- \def\blx@key@notsubtype#1{%
- \ifcsundef{blx@subt@\the\c@refsection @#1}
- {}
- {\blx@printbibchecks
- \blx@notfilter\blx@tempa{blx@subt@\the\c@refsection @#1}}}
- \define@key{blx@bib2}{keyword}{\blx@key@keyword{#1}}
- \define@key{blx@biblist2}{keyword}{\blx@key@keyword{#1}}
- \def\blx@key@keyword#1{%
- \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}}
- {\blx@warning{Keyword '\detokenize{#1}' not found}%
- \let\blx@tempa\@empty}
- {\blx@printbibchecks
- \blx@filter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}}
- \define@key{blx@bib2}{notkeyword}{\blx@key@notkeyword{#1}}
- \define@key{blx@biblist2}{notkeyword}{\blx@key@notkeyword{#1}}
- \def\blx@key@notkeyword#1{%
- \ifcsundef{blx@keyw@\the\c@refsection @\detokenize{#1}}
- {}
- {\blx@printbibchecks
- \blx@notfilter\blx@tempa{blx@keyw@\the\c@refsection @\detokenize{#1}}}}
- \define@key{blx@bib2}{category}{\blx@key@category{#1}}
- \define@key{blx@biblist2}{category}{\blx@key@category{#1}}
- \def\blx@key@category#1{%
- \ifcsundef{blx@catg@\detokenize{#1}}
- {\blx@warning{Category '\detokenize{#1}' not found}%
- \let\blx@tempa\@empty}
- {\blx@printbibchecks
- \blx@filter\blx@tempa{blx@catg@\detokenize{#1}}}}
- \define@key{blx@bib2}{notcategory}{\blx@key@notcategory{#1}}
- \define@key{blx@biblist2}{notcategory}{\blx@key@notcategory{#1}}
- \def\blx@key@notcategory#1{%
- \ifcsundef{blx@catg@#1}
- {}
- {\blx@printbibchecks
- \blx@notfilter\blx@tempa{blx@catg@#1}}}
- \define@key{blx@bib2}{filter}{\blx@key@filter{#1}}
- \define@key{blx@biblist2}{filter}{\blx@key@filter{#1}}
- \def\blx@key@filter#1{%
- \ifcsdef{blx@filter@#1}
- {\blx@printbibchecks
- \blx@bibfilter\blx@tempa{blx@filter@#1}}
- {\let\blx@tempa\@empty
- \blx@error
- {Filter '#1' not found}
- {The filter '#1' could not be found.\MessageBreak
- Use \string\defbibfilter\space to define it}}}
- \define@key{blx@bib2}{check}{\blx@key@bibcheck{#1}}
- \define@key{blx@biblist2}{check}{\blx@key@bibcheck{#1}}
- \def\blx@key@bibcheck#1{%
- \ifcsdef{blx@bibcheck@#1}
- {\letcs\blx@bibcheck{blx@bibcheck@#1}}
- {\let\blx@tempa\@empty
- \blx@error
- {Check '#1' not found}
- {The check '#1' could not be found.\MessageBreak
- Use \string\defbibcheck\space to define it}}}
- \define@key{blx@bhd}{heading}{\blx@key@heading{#1}}
- \define@key{blx@bib2}{heading}{\blx@key@heading{#1}}
- \define@key{blx@biblist2}{heading}{\blx@key@heading{#1}}
- \define@key{blx@bbs}{heading}{\blx@key@heading{#1}}
- \define@key{blx@bbg}{heading}{\blx@key@heading{#1}}
- \def\blx@key@heading#1{%
- \ifcsundef{blx@head@#1}
- {\blx@error
- {Heading '#1' not found}
- {The heading '#1' could not be found.\MessageBreak
- Use \string\defbibheading\space to define it}}
- {\def\blx@theheading{#1}}}
- \define@key{blx@bib2}{env}{\blx@key@env{#1}}
- \define@key{blx@biblist2}{env}{\blx@key@env{#1}}
- \define@key{blx@bbs}{env}{\blx@key@env{#1}}
- \define@key{blx@bbg}{env}{\blx@key@env{#1}}
- \define@key{blx@bbc}{env}{\blx@key@env{#1}}
- \def\blx@key@env#1{%
- \ifcsundef{blx@env@#1}
- {\blx@error
- {Environment '#1' not found}
- {The environment '#1' could not be found.\MessageBreak
- Use \string\defbibenvironment\space to define it}}
- {\def\blx@theenv{#1}}}
- \define@key{blx@bhd}{title}{\def\blx@thetitle{#1}}
- \define@key{blx@bib2}{title}{\def\blx@thetitle{#1}}
- \define@key{blx@biblist2}{title}{\def\blx@thetitle{#1}}
- \define@key{blx@bib2}{prenote}{\blx@key@prenote{#1}}
- \define@key{blx@biblist2}{prenote}{\blx@key@prenote{#1}}
- \define@key{blx@bbs}{prenote}{\blx@key@prenote{#1}}
- \define@key{blx@bbg}{prenote}{\blx@key@prenote{#1}}
- \define@key{blx@bbc}{prenote}{\blx@key@prenote{#1}}
- \def\blx@key@prenote#1{%
- \ifcsundef{blx@note@#1}
- {\blx@error
- {Note '#1' not found}
- {The note '#1' could not be found.\MessageBreak
- Use \string\defbibnote\space to define it}}
- {\def\blx@theprenote{#1}}}
- \define@key{blx@bib2}{postnote}{\blx@key@postnote{#1}}
- \define@key{blx@biblist2}{postnote}{\blx@key@postnote{#1}}
- \define@key{blx@bbs}{postnote}{\blx@key@postnote{#1}}
- \define@key{blx@bbg}{postnote}{\blx@key@postnote{#1}}
- \define@key{blx@bbc}{postnote}{\blx@key@postnote{#1}}
- \def\blx@key@postnote#1{%
- \ifcsundef{blx@note@#1}
- {\blx@error
- {Note '#1' not found}
- {The note '#1' could not be found.\MessageBreak
- Use \string\defbibnote\space to define it}}
- {\def\blx@thepostnote{#1}}}
- \define@key{blx@bib1}{locallabelwidth}[]{}
- \define@key{blx@biblist1}{locallabelwidth}[]{}
- \define@key{blx@bib2}{locallabelwidth}[true]{\blx@key@locallabelwidth{#1}}
- \define@key{blx@biblist2}{locallabelwidth}[true]{\blx@key@locallabelwidth{#1}}
- \def\blx@key@locallabelwidth#1{%
- \ifstrequal{#1}{true}
- {\def\abx@locallabelwidth{\blx@locallabelwidth}}
- {\let\abx@locallabelwidth\@gobble}}
- \define@key{blx@bib2}{resetnumbers}[true]{%
- \iftoggle{blx@defernumbers}
- {\ifstrequal{#1}{true}
- {\csnumdef{blx@labelnumber@\the\c@refsection}{0}}
- {\ifstrequal{#1}{false}
- {}
- {\csnumdef{blx@labelnumber@\the\c@refsection}{#1-1}}}}
- {\blx@warning{%
- Option 'resetnumbers' requires 'defernumbers=true'.\MessageBreak
- Ignoring 'resetnumbers=true'}}}
- \define@key{blx@bib2}{omitnumbers}[true]{%
- \ifstrequal{#1}{true}
- {\iftoggle{blx@defernumbers}
- {\toggletrue{blx@omitnumbers}}
- {\blx@warning{%
- Option 'omitnumbers' requires 'defernumbers=true'.\MessageBreak
- Ignoring 'omitnumbers=true'}}}
- {}}
- % [<options>]
- \newrobustcmd*{\printbibheading}{%
- \begingroup
- \edef\on@line{\on@line}%
- \@ifnextchar[%]
- {\blx@printbibheading}
- {\blx@printbibheading[]}}
- \def\blx@printbibheading[#1]{%
- \def\blx@theheading{bibliography}%
- \let\blx@thetitle\@empty
- \blx@safe@actives
- \setkeys{blx@bhd}{#1}%
- \blx@rest@actives
- \blx@langstrings
- \blx@bibheading\blx@theheading\blx@thetitle
- \endgroup}
- % We use this to determine whether an explicit value for resetnumbers is passed to
- % \printbibliography, if not, then we use the default behaviour where a labelprefix forces
- % a reset. It is useful that we have a 2-pass structure for \printbibliography keys anyway.
- \newtoggle{blx@resetnumsexplicit}
- % [<options>]
- \newrobustcmd*{\printbibliography}{%
- \begingroup
- \delimcontext{bib}%
- \edef\on@line{\on@line}%
- \@ifnextchar[%]
- {\blx@printbibliography}
- {\blx@printbibliography[]}}
- \def\blx@printbibliography[#1]{%
- \toggletrue{blx@tempa}%
- \toggletrue{blx@tempb}%
- \def\blx@theheading{bibliography}%
- \def\blx@theenv{bibliography}%
- \let\blx@theprenote\@empty
- \let\blx@thepostnote\@empty
- \let\blx@thetitle\@empty
- % defaults
- \let\blx@tempa\@empty% before there is a .bbl, this must not be undef
- \edef\blx@tempe{\the\c@refsection}% default refsection is current
- \blx@safe@actives
- \togglefalse{blx@resetnumsexplicit}%
- \setkeys{blx@bib1}{#1}% First pass options keys - section and resetnumbers
- % Is there a user-specified option for resetnumbers? If so, this overrides the default
- % "labelprefix implies resetnumbers" behaviour
- \iftoggle{blx@resetnumsexplicit}
- {}
- {\ifdefempty\blx@refcontext@labelprefix
- {}
- {\setkeys{blx@bib2}{resetnumbers}}}%
- \blx@rest@actives
- \ifcsvoid{blx@dlist@entry@\blx@tempe @\blx@refcontext@context}
- {}
- {\letcs\blx@tempa{blx@dlist@entry@\blx@tempe @\blx@refcontext@context}}%
- \blx@safe@actives
- % Must reset omitnumbers as it's a global macro and if we don't, any
- % \printbibliography following one with this set will inherit any
- % previous "true" value
- \togglefalse{blx@omitnumbers}%
- \setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options
- \blx@rest@actives
- % Add datalist to list of seen datalists to prevent duplicates
- \xifinlist{\blx@refcontext@context @\blx@tempe @entry}\blx@dlistnames
- {}
- {\listxadd\blx@dlistnames{\blx@refcontext@context @\blx@tempe @entry}%
- \csxappto{blx@dlists}{%
- \blx@xml@dlist{\blx@refcontext@context}{entry}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@refcontext@sortingtemplatename}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{}}}%
- \ifdefvoid\blx@tempa
- {\blx@warn@bibempty\endgroup}
- {\blx@bibliography\blx@tempa}}
- % [<options>]
- \newrobustcmd*{\bibbysection}{%
- \begingroup
- \delimcontext{bib}%
- \ifnum\blx@maxsection=\z@
- \blx@warning{No reference sections found}%
- \fi
- \edef\on@line{\on@line}%
- \@ifnextchar[%]
- {\blx@bibbysection}
- {\blx@bibbysection[]}}
- \def\blx@bibbysection[#1]{%
- \def\blx@theheading{bibliography}%
- \def\blx@theenv{bibliography}%
- \let\blx@theprenote\@empty
- \let\blx@thepostnote\@empty
- \let\blx@thetitle\@empty
- \c@refsection\z@
- \blx@safe@actives
- \setkeys{blx@bbs}{#1}%
- \blx@rest@actives
- \togglefalse{blx@tempa}%
- \blx@refsections}
- \def\blx@refsections{%
- \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
- {}
- {\toggletrue{blx@tempa}%
- \begingroup
- \expandafter\blx@bibliography\csname blx@dlist@entry@\the\c@refsection @\blx@refcontext@context\endcsname}%
- \ifnum\c@refsection<\blx@maxsection
- \advance\c@refsection\@ne
- \expandafter\blx@refsections
- \else
- \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
- \endgroup
- \fi}
- % [<options>]
- \newrobustcmd*{\bibbysegment}{%
- \begingroup
- \delimcontext{bib}%
- \edef\on@line{\on@line}%
- \ifnum\csname blx@maxsegment@\the\c@refsection\endcsname=\z@
- \blx@warning{No reference segments found}%
- \fi
- \@ifnextchar[%]
- {\blx@bibbysegment}
- {\blx@bibbysegment[]}}
- \def\blx@bibbysegment[#1]{%
- \def\blx@theheading{bibliography}%
- \def\blx@theenv{bibliography}%
- \let\blx@theprenote\@empty
- \let\blx@thepostnote\@empty
- \let\blx@thetitle\@empty
- \c@refsegment\@ne
- \blx@safe@actives
- \setkeys{blx@bbg}{#1}%
- \blx@rest@actives
- \togglefalse{blx@tempa}%
- \blx@refsegments}
- \def\blx@refsegments{%
- \ifcsvoid{blx@segm@\the\c@refsection @\the\c@refsegment}
- {}
- {\toggletrue{blx@tempa}%
- \begingroup
- \let\blx@tempa\@empty
- \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
- {}
- {\letcs\blx@tempa{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}}%
- \blx@filter\blx@tempa{blx@segm@\the\c@refsection @\the\c@refsegment}%
- \blx@bibliography\blx@tempa}%
- \ifnum\c@refsegment<\csname blx@maxsegment@\the\c@refsection\endcsname
- \advance\c@refsegment\@ne
- \expandafter\blx@refsegments
- \else
- \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
- \endgroup
- \fi}
- % [<options>]
- \newrobustcmd*{\bibbycategory}{%
- \begingroup
- \delimcontext{bib}%
- \edef\on@line{\on@line}%
- \ifx\blx@categories\@empty
- \blx@warning{No categories found}%
- \fi
- \@ifnextchar[%]
- {\blx@bibbycategory}
- {\blx@bibbycategory[]}}
- \def\blx@bibbycategory[#1]{%
- \def\blx@theheading{bibliography}%
- \def\blx@theenv{bibliography}%
- \let\blx@theprenote\@empty
- \let\blx@thepostnote\@empty
- \let\blx@thetitle\@empty
- \c@refsection\z@
- \blx@safe@actives
- \setkeys{blx@bbc}{#1}%
- \blx@rest@actives
- \togglefalse{blx@tempa}%
- \forlistloop\blx@bibcategory\blx@categories
- \blx@endbibcategory}
- \def\blx@bibcategory#1{%
- \ifcsvoid{blx@catg@#1}
- {}
- {\toggletrue{blx@tempa}%
- \begingroup
- \blx@key@heading{#1}%
- \let\blx@tempa\@empty
- \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
- {}
- {\letcs\blx@tempa{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}}%
- \blx@filter\blx@tempa{blx@catg@#1}%
- \blx@bibliography\blx@tempa}}%
- \def\blx@endbibcategory{%
- \iftoggle{blx@tempa}{}{\blx@warn@bibempty}%
- \endgroup}
- % {<entrykey>,...}
- \def\blx@bibliography#1{%
- \blx@langstrings
- \blx@bibheading\blx@theheading\blx@thetitle
- \blx@bibnote\blx@theprenote
- \begingroup
- \blx@bibinit
- \let\@noitemerr\@empty
- \let\blx@noitem\blx@warn@bibempty
- \ifnum\bibinitsep=\z@
- \let\blx@initsep\relax
- \fi
- \ifnum\bibnamesep=\z@
- \let\blx@namesep\relax
- \fi
- \abx@locallabelwidth{#1}%
- \csuse{blx@env@\blx@theenv}%
- \csuse{blx@hook@bibinit}%
- \csuse{blx@hook@bibinit@next}%
- \let\blx@do\blx@bibitem
- \let\blx@done\blx@endbibliography
- \blx@listloop{#1}}
- \def\blx@endbibliography{%
- \csuse{blx@endenv@\blx@theenv}%
- \blx@noitem
- \endgroup
- \blx@bibnote\blx@thepostnote
- \endgroup}
- \def\blx@bibheading#1#2{%
- \begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\blx@bibheading@i{\expandonce#1}{\expandonce#2}}%
- \blx@tempa}
- \def\blx@bibheading@i#1#2{%
- \let\newrefsection\relax
- \let\newrefsegment\relax
- \ifblank{#2}
- {\csuse{blx@head@#1}}
- {\csuse{blx@head@#1}[#2]}%
- \let\newrefsection\blx@newrefsection
- \let\newrefsegment\blx@newrefsegment}
- \def\blx@bibnote#1{%
- \ifdefempty#1
- {}
- {\begingroup
- \let\newrefsection\relax
- \let\newrefsegment\relax
- \noindent
- \csuse{blx@note@#1}\par\nobreak
- \endgroup}}
- \def\blx@bibinit{%
- \iftoggle{blx@citation}
- {}
- {\toggletrue{blx@bibliography}}%
- \blx@blxinit
- \blx@resetdata
- \csuse{blx@hook@bbxinit}%
- \bibsetup\bibfont
- \blx@setsfcodes
- \csuse{blx@bibsetup}}
- % {<entrykey>}
- \def\blx@lengthitem#1{%
- \blx@ifdata{#1}
- {\begingroup
- \blx@getdata{#1}%
- \blx@bibcheck
- \iftoggle{blx@skipentry}{}{%
- \iftoggle{blx@labelnumber}
- {\blx@bbl@locallabelnumberwidth}
- {}%
- \iftoggle{blx@labelalpha}
- {\blx@bbl@locallabelalphawidth}
- {}%
- \nottoggle{blx@skipbiblist}
- {\blx@bbl@locallabelfields}
- {}}%
- \endgroup}
- {}}
- % {<entrykey>}
- % output a bib item, this is why \blx@thelabelnumber is here so that
- % labelnumber is deferred if defernumbers=true
- \def\blx@bibitem#1{%
- \blx@ifdata{#1}
- {\begingroup
- \blx@getdata{#1}%
- \blx@bibcheck
- \iftoggle{blx@skipentry}{}{%
- \blx@setdefaultrefcontext{#1}%
- \global\let\blx@noitem\@empty
- \blx@setoptions@type\abx@field@entrytype
- \blx@setoptions@entry
- \blx@thelabelnumber
- \addtocounter{instcount}\@ne
- \csuse{blx@item@\blx@theenv}\relax
- \blx@initsep
- \blx@namesep
- \csuse{blx@hook@bibitem}%
- \blx@execute
- \blx@initunit
- \blx@anchor
- \blx@beglangbib
- \bibsentence
- \blx@pagetracker
- \blx@driver\abx@field@entrytype
- \blx@postpunct
- \blx@endlangbib}%
- \endgroup}
- {}}
- \let\blx@bibcheck\relax
- \def\blx@edef@refcontext#1{%
- \edef\blx@refcontext@context{#1}%
- \expandafter\edef\expandafter\blx@refcontext@context\expandafter{%
- \expandafter\detokenize\expandafter{\blx@refcontext@context}}}
- \def\blx@xdef@refcontext#1{%
- \edef\blx@refcontext@context{#1}%
- \expandafter\xdef\expandafter\blx@refcontext@context\expandafter{%
- \expandafter\detokenize\expandafter{\blx@refcontext@context}}}
- % This sets and saves to the .aux the default refcontext for an entry. The
- % default refcontext for an entry is the refcontext of the last
- % bibliography in the refsection in which it is actually printed. This
- % allows citations to default to selecting data from the correct
- % bibliography list in standard cases where entries are not listed in
- % multiple bibliographies
- \def\blx@setdefaultrefcontext#1{%
- \ifbool{refcontextdefaults}
- {\blx@rerun@latex}%
- {}%
- \ifinlistcs{#1}{blx@defaultrefcontexts@\the\c@refsection}
- {}
- {\listcsgadd{blx@defaultrefcontexts@\the\c@refsection}{#1}}%
- \csxdef{blx@assignedrefcontextbib@\the\c@refsection @#1}{\blx@refcontext@context}}
- % <refsection><key><refcontext>
- \def\abx@aux@defaultrefcontext#1#2#3{%
- \global\boolfalse{refcontextdefaults}%
- \csxdef{blx@assignedrefcontextbib@#1@#2}{\detokenize{#3}}}
- \def\abx@aux@refcontextdefaultsdone{%
- \global\boolfalse{refcontextdefaults}}
- \AtEndDocument{%
- % write the .aux to say we don't need to re-run to consume refcontext defaults
- \ifbool{refcontextdefaults}
- {}
- {\blx@auxwrite\@mainaux{}{\string\abx@aux@refcontextdefaultsdone}}%
- % always add default refcontext declarations to .aux after biber run
- \iftoggle{blx@bbldone}
- {\def\do#1{%
- \begingroup
- \def\do##1{%
- \blx@auxwrite\@mainaux{}{\string\abx@aux@defaultrefcontext{#1}{##1}{\csuse{blx@assignedrefcontextbib@#1@##1}}}}%
- \dolistcsloop{blx@defaultrefcontexts@#1}%
- \endgroup}
- \dolistloop\blx@allrefsections}
- {}}
- \def\blx@initsep{%
- \blx@imc@iffieldundef{sortinithash}
- {}
- {\ifnum\c@instcount>\@ne
- \blx@imc@iffieldequals{sortinithash}\blx@previnithash
- {}
- {\addvspace{\bibinitsep}}%
- \fi
- \global\let\blx@previnithash\abx@field@sortinithash}}
- \def\blx@namesep{%
- \ifnum\c@instcount>\@ne
- \blx@imc@iffieldequals{fullhash}\blx@prevhash
- {}
- {\addvspace{\bibnamesep}}%
- \fi
- \global\let\blx@prevhash\abx@field@fullhash}
- \newrobustcmd*{\AtBeginBibliography}{\gappto\blx@hook@bibinit}
- \newrobustcmd*{\AtEveryBibitem}{\gappto\blx@hook@bibitem}
- \@onlypreamble\AtBeginBibliography
- \@onlypreamble\AtEveryBibitem
- \def\blx@imc@UseBibitemHook{\csuse{blx@hook@bibitem}}
- \blx@regimcs{\UseBibitemHook}
- \newrobustcmd*{\AtNextBibliography}{%
- \ifundef\blx@hook@bibinit@next
- {\gdef\blx@hook@bibinit@next{\global\undef\blx@hook@bibinit@next}}
- {}%
- \gappto\blx@hook@bibinit@next}
- % page tracker
- \def\blx@pagetracker@context{%
- \blx@leavevmode
- \ifbool{@filesw}
- {\ifbool{pagetracker}
- {\protected@write\@mainaux{}{%
- \iftoggle{blx@footnote}
- {\string\abx@aux@fnpage}
- {\string\abx@aux@page}%
- {\the\c@instcount}{\noexpand\the\c@page}}}
- {}}
- {}}
- % {<instcount>}{<page>}
- \protected\def\blx@aux@page#1#2{%
- \csgdef{blx@page@#1}{#2}%
- \blx@addpagesum{#1}{#2}}
- \protected\def\blx@aux@spread#1#2{%
- \ifodd#2\relax
- \csxdef{blx@page@#1}{\number\numexpr#2-1}%
- \else
- \csgdef{blx@page@#1}{#2}%
- \fi
- \blx@addpagesum{#1}{#2}}
- \protected\def\blx@aux@fnpage#1#2{%
- \csgdef{blx@fnpage@#1}{#2}%
- \blx@addpagesum{#1}{#2}}
- \protected\def\blx@aux@fnspread#1#2{%
- \ifodd#2\relax
- \csxdef{blx@fnpage@#1}{\number\numexpr#2-1}%
- \else
- \csgdef{blx@fnpage@#1}{#2}%
- \fi
- \blx@addpagesum{#1}{#2}}
- \AtEndDocument{%
- \def\abx@aux@page#1#2{\blx@addpagesum{#1}{#2}}%
- \def\abx@aux@fnpage#1#2{\blx@addpagesum{#1}{#2}}}
- % hyperref interface
- \appto\blx@mkhyperref{%
- \let\blx@anchors\@empty
- \ifundef\hyper@natanchorstart
- {\protected\def\blx@anchor{%
- \xifinlist{\the\c@refsection @\abx@field@entrykey}{\blx@anchors}
- {}
- {\listxadd\blx@anchors{\the\c@refsection @\abx@field@entrykey}%
- \hypertarget{cite.\the\c@refsection @\abx@field@entrykey}{}}}}
- {\protected\def\blx@anchor{%
- \xifinlist{\the\c@refsection @\abx@field@entrykey}{\blx@anchors}
- {}
- {\listxadd\blx@anchors{\the\c@refsection @\abx@field@entrykey}%
- \hyper@natanchorstart{\the\c@refsection @\abx@field@entrykey}%
- \hyper@natanchorend}}}}
- \appto\blx@mknohyperref{\let\blx@anchor\relax}
- \define@key{blx@biblist2}{driver}{\blx@key@driver{#1}}
- \define@key{blx@biblist1}{driver}{}
- \def\blx@key@driver#1{%
- \def\blx@thebiblistdriver{#1}}
- % Custom bibliography list
- % [<otions>]{biblistname}
- \newrobustcmd*{\printbiblist}[2][]{%
- \begingroup
- \delimcontext{biblist}%
- \edef\on@line{\on@line}%
- \toggletrue{blx@tempa}%
- \toggletrue{blx@tempb}%
- \def\blx@theheading{biblist}% default to biblist heading
- \def\blx@theenv{#2}% default to list name
- \def\blx@thebiblist{#2}%
- \def\blx@thebiblistdriver{#2}%
- \def\blx@thebiblistfilter{#2}%
- \let\blx@theprenote\@empty
- \let\blx@thepostnote\@empty
- \let\blx@thetitle\@empty
- % defaults
- \let\blx@tempa\@empty% before there is a .bbl, this must not be undef
- % default sorting template and template name for list is same name as list
- % name, then current context if not found
- \edef\blx@tempc{%
- \ifcsdef{blx@sortingtemplate@#2}
- {#2}
- {\blx@refcontext@sortingtemplatename}}%
- % locally define this since we want to fetch data from the datalist named
- % after the list we are printing rather than the data in refcontext list
- % Note that the name must be unique so we prepend "#2:" because the combination of
- % options might not generate a unique name since sortschemename has a fallback to the
- % refcontext scheme if there is no sortscheme named after the list
- \blx@edef@refcontext{#2:\blx@tempc/\blx@refcontext@sortingnamekeytemplatename/\blx@refcontext@labelprefix/\blx@refcontext@uniquenametemplatename/\blx@refcontext@labelalphanametemplatename}%
- \xifinlist\blx@tempc\blx@sortingtemplatenames
- {}
- {\listxadd\blx@sortingtemplatenames\blx@tempc}%
- \let\blx@printbibchecks\relax
- \edef\blx@tempe{\the\c@refsection}% default refsection is current
- \blx@safe@actives
- \blx@printbibchecks
- % Add the sortingtemplate to the list of sortingtemplates for this biblist
- % so we can compare on next run
- \xifinlist\blx@tempc\blx@biblists
- {}
- {\listxadd\blx@biblists\blx@tempc
- \blx@auxwrite\@mainaux{}{\string\abx@aux@biblist{\blx@tempc}}}%
- \setkeys{blx@biblist1}{#1}% Set section only, if present ...
- \blx@rest@actives
- \ifcsvoid{blx@dlist@list@\blx@tempe @\blx@refcontext@context}
- {}
- {\letcs\blx@tempa{blx@dlist@list@\blx@tempe @\blx@refcontext@context}}%
- \blx@safe@actives
- \setkeys{blx@biblist2}{#1}% ... now we have correct \blx@tempa, set rest of options
- \ifundef\blx@bibcheck
- {\ifcsdef{blx@bibcheck@#2}
- {\letcs\blx@bibcheck{blx@bibcheck@#2}}
- {}}
- {}%
- \blx@rest@actives
- % Add datalist to list of seen datalists to prevent duplicates
- \xifinlist{\blx@refcontext@context @\blx@tempe @list}\blx@dlistnames
- {}
- {\listxadd\blx@dlistnames{\blx@refcontext@context @\blx@tempe @list}%
- \xappto\blx@dlists{%
- \blx@xml@dlist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@tempc}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{\csuse{blx@biblistfilters@\blx@thebiblistfilter}}}}%
- \ifdefvoid\blx@tempa
- {\blx@warn@biblistempty{#2}\endgroup}
- {\blx@biblist\blx@tempa}}
- \def\blx@printbibchecks{%
- \togglefalse{blx@tempa}%
- \iftoggle{blx@defernumbers}
- {\global\let\blx@printbibchecks\relax}
- {\iftoggle{blx@labelnumber}
- {}
- {\global\let\blx@printbibchecks\relax}}}
- % {<entrykey>,...}
- \def\blx@biblist#1{%
- \if@twocolumn
- \@restonecoltrue\onecolumn
- \else
- \@restonecolfalse
- \fi
- \blx@langstrings
- \blx@bibheading\blx@theheading\blx@thetitle
- \blx@bibnote\blx@theprenote
- \begingroup
- \blx@bibinit
- \let\@noitemerr\@empty
- \def\blx@noitem{\blx@warn@biblistempty{\blx@thebiblist}}%
- \abx@locallabelwidth{#1}%
- \csuse{blx@env@\blx@theenv}%
- \csuse{blx@hook@biblistinit@\blx@thebiblist}%
- \let\blx@do\blx@biblistitem
- \let\blx@done\blx@endbiblist
- \blx@listloop{#1}}
- \def\blx@endbiblist{%
- \csuse{blx@endenv@\blx@theenv}%
- \blx@noitem
- \endgroup
- \blx@bibnote\blx@thepostnote
- \endgroup
- \if@restonecol\twocolumn\fi}
- % {<biblistname>}
- \newrobustcmd*{\AtBeginBiblist}[1]{\csgappto{blx@hook@biblistinit@#1}}
- \newrobustcmd*{\AtEveryBiblistitem}[1]{\csgappto{blx@hook@biblistitem@#1}}
- \@onlypreamble\AtBeginBiblist
- \@onlypreamble\AtEveryBiblistitem
- % {<entrykey>}
- \def\blx@biblistitem#1{%
- \blx@ifdata{#1}
- {\begingroup
- \blx@getdata{#1}%
- \blx@bibcheck
- \iftoggle{blx@skipentry}{}{%
- \blx@setdefaultrefcontext{#1}%
- \global\let\blx@noitem\@empty
- \blx@setoptions@type\abx@field@entrytype
- \blx@setoptions@entry
- \addtocounter{instcount}\@ne
- \csuse{blx@item@\blx@theenv}\relax
- \csuse{blx@hook@biblistitem@\blx@thebiblist}%
- \blx@execute
- \blx@initunit
- \blx@beglangbib
- \bibsentence
- \blx@pagetracker
- \blx@driver{\blx@thebiblistdriver}%
- \blx@postpunct
- \blx@endlangbib}%
- \endgroup}
- {}}
- % Just a default in case .bbx doesn't define it. standard.bbx defines
- % it to print a complete entry, like the bibliography.
- \DeclareBibliographyDriver{shorthand}{%
- \iffieldundef{shorttitle}
- {\printfield{title}}
- {\printfield{shorttitle}}}
- % Reference contexts
- \newcommand*{\DeclareRefcontext}[2]{%
- \csgdef{blx@refcontext@name@#1}{#2}}
- \@onlypreamble\DeclareRefcontext
- \def\newrefcontext{%
- \endrefcontext
- \refcontext}
- % Backwards compat for older \refcontext[] format
- \def\refcontext{%
- \@ifnextchar[%]
- {\refcontext@i}
- {\refcontext@i[]}}
- \def\refcontext@i[#1]{%
- \@ifnextchar\bgroup
- {\refcontext@ii[#1]}
- {\refcontext@ii[#1]{}}}
- \newcommand*{\refcontext@ii}[2][]{%
- \iftoggle{blx@refcontext}
- {\blx@err@nestenv{refcontext}%
- \endrefcontext}
- {\toggletrue{blx@refcontext}%
- % Set refcontext from named refcontext, if given
- \ifblank{#2}
- {}
- {\edef\z{\noexpand\setkeys{blx@refcontext}{\csuse{blx@refcontext@name@#2}}}\z}%
- % Override with explicit refcontext keyvals, if given
- \setkeys{blx@refcontext}{#1}%
- % Add the sortingtemplate to the list of sortingtemplates so we can track
- % special cases like sorting=none which need cite order change detection
- \xifinlist\blx@refcontext@sortingtemplatename\blx@sortingtemplatenames
- {}
- {\listxadd\blx@sortingtemplatenames\blx@refcontext@sortingtemplatename}%
- \blx@xdef@refcontext{\blx@refcontext@sortingtemplatename/\blx@refcontext@sortingnamekeytemplatename/\blx@refcontext@labelprefix/\blx@refcontext@uniquenametemplatename/\blx@refcontext@labelalphanametemplatename}%
- % Add the refcontext to the list of refcontexts so we can compare on next run
- \xifinlist\blx@refcontext@context\blx@refcontexts
- {}
- {\listxadd\blx@refcontexts\blx@refcontext@context
- \blx@auxwrite\@mainaux{}{\string\abx@aux@refcontext{\blx@refcontext@context}}}%
- \ifcsundef{blx@sortingtemplate@\blx@refcontext@sortingtemplatename}
- {\blx@err@invopt{sorting=\blx@refcontext@sortingtemplatename}{}}
- {}%
- \ifcsundef{blx@sortingnamekeytemplate@\blx@refcontext@sortingnamekeytemplatename}
- {\blx@err@invopt{sortingnamekeytemplate=\blx@refcontext@sortingnamekeytemplatename}{}}
- {}%
- \ifcsundef{blx@uniquenametemplate@\blx@refcontext@uniquenametemplatename}
- {\blx@err@invopt{uniquenametemplate=\blx@refcontext@uniquenametemplatename}{}}
- {}%
- \ifcsundef{blx@labelalphanametemplate@\blx@refcontext@labelalphanametemplatename}
- {\blx@err@invopt{labelalphanametemplate=\blx@refcontext@labelalphanametemplatename}{}}
- {}}}
- % Reset to global sorting etc. when we leave a ref context (since they can't be nested)
- \protected\def\endrefcontext{%
- \togglefalse{blx@refcontext}%
- \global\let\blx@refcontext@labelprefix\@empty
- \global\let\blx@refcontext@labelprefix@real\@empty
- \xdef\blx@refcontext@sortingtemplatename{\blx@sorting}%
- \gdef\blx@refcontext@sortingnamekeytemplatename{global}%
- \gdef\blx@refcontext@uniquenametemplatename{global}%
- \gdef\blx@refcontext@labelalphanametemplatename{global}%
- \blx@xdef@refcontext{\blx@refcontext@sortingtemplatename/\blx@refcontext@sortingnamekeytemplatename//\blx@refcontext@uniquenametemplatename/\blx@refcontext@labelalphanametemplatename}}
- % Meta option to set all name template options
- \define@key{blx@refcontext}{nametemplates}{%
- \gdef\blx@refcontext@sortingnamekeytemplatename{#1}%
- \gdef\blx@refcontext@uniquenametemplatename{#1}%
- \gdef\blx@refcontext@labelalphanametemplatename{#1}}
- \define@key{blx@refcontext}{sorting}{\gdef\blx@refcontext@sortingtemplatename{#1}}
- \define@key{blx@refcontext}{sortingnamekeytemplatename}{\gdef\blx@refcontext@sortingnamekeytemplatename{#1}}
- \define@key{blx@refcontext}{uniquenametemplatename}{\gdef\blx@refcontext@uniquenametemplatename{#1}}
- \define@key{blx@refcontext}{labelalphanametemplatename}{\gdef\blx@refcontext@labelalphanametemplatename{#1}}
- % labelprefix cannot be used as is because it is used to construct the internal
- % refcontext name which is referenced/expanded a lot all over the place. So,
- % we hash the given input and use the safe hash as internal name.
- % But that is not enough since the MD5 hash function expands the argument all
- % the way and so unexpandable content like \dag breaks.
- % Unexpandable content should be protected with \detokenize.
- \define@key{blx@refcontext}{labelprefix}{%
- \xdef\blx@refcontext@labelprefix{\blx@mdfivesum{#1}}%
- \gdef\blx@refcontext@labelprefix@real{#1}%
- \iftoggle{blx@defernumbers}
- {}%
- {\iftoggle{blx@labelnumber}
- {\blx@warning{%
- Option 'labelprefix' requires global\MessageBreak
- 'defernumbers=true'}}
- {}}}
- % [refcontext keys]{<keyword1>,<keyword2>,...}
- \newcommand*{\assignrefcontextkeyws}{%
- \@ifstar
- {\blx@assignrefcontextkeyws[*]}
- {\blx@assignrefcontextkeyws[]}}
- \def\blx@assignrefcontextkeyws[#1][#2]#3{%
- \edef\blx@tempa{\blx@sorting}%
- \def\blx@tempb{global}%
- \let\blx@tempc\@empty%
- \def\blx@tempd{global}%
- \def\blx@tempe{global}%
- \setkeys{blx@assignrefcontext}{#2}%
- \def\do##1{%
- \listxadd\blx@assignedrefcontextkeywlist{##1}%
- \csxdef{blx@assignedrefcontextkeyws#1@\the\c@refsection @##1}%
- {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
- \docsvlist{#3}}
- % [refcontext keys]{<category1>,<category2>,...}
- \newcommand*{\assignrefcontextcats}{%
- \@ifstar
- {\blx@assignrefcontextcats[*]}
- {\blx@assignrefcontextcats[]}}
- \def\blx@assignrefcontextcats[#1][#2]#3{%
- \edef\blx@tempa{\blx@sorting}%
- \def\blx@tempb{global}%
- \let\blx@tempc\@empty%
- \def\blx@tempd{global}%
- \def\blx@tempe{global}%
- \setkeys{blx@assignrefcontext}{#2}%
- \def\do##1{%
- \listxadd\blx@assignedrefcontextcatlist{##1}%
- \csxdef{blx@assignedrefcontextcats#1@\the\c@refsection @##1}%
- {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
- \docsvlist{#3}}
- % [refcontext keys]{<entrykey1>,<entrykey2>,...}
- \newcommand*{\assignrefcontextentries}{%
- \@ifstar
- {\blx@assignrefcontextentries[*]}
- {\blx@assignrefcontextentries[]}}
- \def\blx@assignrefcontextentries[#1][#2]#3{%
- \edef\blx@tempa{\blx@sorting}%
- \def\blx@tempb{global}%
- \let\blx@tempc\@empty%
- \def\blx@tempd{global}%
- \def\blx@tempe{global}%
- \setkeys{blx@assignrefcontext}{#2}%
- \def\do##1{%
- \csxdef{blx@assignedrefcontextkeys#1@\the\c@refsection @##1}%
- {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
- \docsvlist{#3}}
- % Meta option to set all name template options
- \define@key{blx@assignrefcontext}{nametemplates}{%
- \def\blx@tempb{#1}%
- \def\blx@tempd{#1}%
- \def\blx@tempe{#1}}
- \define@key{blx@assignrefcontext}{sorting}{\def\blx@tempa{#1}}
- \define@key{blx@assignrefcontext}{sortingnamekeytemplatename}{\def\blx@tempb{#1}}
- \define@key{blx@assignrefcontext}{labelprefix}{%
- \edef\blx@tempc{\blx@mdfivesum{#1}}}
- \define@key{blx@assignrefcontext}{uniquenametemplatename}{\def\blx@tempd{#1}}
- \define@key{blx@assignrefcontext}{labelalphanametemplatename}{\def\blx@tempe{#1}}
- % Reference sections
- \newrobustcmd*{\newrefsection}{%
- \endrefcontext
- \ifnum\c@refsection>\z@
- \endrefsection
- \fi
- \refsection}
- \let\blx@newrefsection\newrefsection
- \newrobustcmd*{\refsection}{%
- \begingroup
- \edef\on@line{\on@line}%
- \ifnum\c@refsection>\z@
- \blx@err@nestenv{refsection}%
- \blx@endrefsection
- \fi
- \ifnum\c@refsegment>\z@
- \blx@err@nestenv{refsection}%
- \blx@endrefsegment
- \fi
- \@ifnextchar[%]
- {\blx@refsection}
- {\blx@refsection[]}}
- \def\blx@refsection{%
- \begingroup
- \blx@hook@fileverb
- \blx@refsection@i}
- \def\blx@refsection@i[#1]{%
- \endgroup
- \global\advance\blx@maxsection\@ne
- \global\c@refsection\blx@maxsection
- \xifinlist{\the\c@refsection}\blx@allrefsections
- {}
- {\listxadd\blx@allrefsections{\the\c@refsection}}%
- \ifcsdef{blx@defaultrefcontexts@\the\c@refsection}
- {}
- {\global\cslet{blx@defaultrefcontexts@\the\c@refsection}\@empty}%
- \expandafter\newcount\csname blx@maxsegment@\the\c@refsection\endcsname
- \expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname
- \blx@inf@refsec
- \blx@secinit
- \if@filesw
- \blx@auxwrite\@mainaux{}{%
- \string\abx@aux@refsection{\the\c@refsection}{\the\c@page}}%
- \ifblank{#1}
- {}
- {\let\blx@bibfiles\@empty
- % globals should be first as it might contain macros needed for others
- \forlistloop{\listadd\blx@bibfiles}\blx@bibfiles@global}%
- \blx@xsanitizeafter{\forcsvlist\blx@refsection@addfile}{#1}%
- \blx@refsection@ii
- \fi
- \blx@info{Setting label 'refsection:\the\c@refsection'}%
- \label{refsection:\the\c@refsection}%
- \endgroup}
- \def\blx@refsection@addfile#1{%
- \ifcsdef{blx@res@labl@#1}
- {\blx@refsection@addfile@i{\csuse{blx@res@labl@#1}}}
- {\blx@refsection@addfile@i{#1}}}
- \def\blx@refsection@addfile@i#1{%
- \ifcsdef{blx@res@loca@#1}
- {\listeadd\blx@bibfiles{#1}}
- {\listeadd\blx@bibfiles{\blx@stripbib{#1}\detokenize{.bib}}}}
- \def\blx@refsection@ii{%
- \blx@regbibfiles\jobname\blx@bibfiles
- \begingroup
- \let\blx@tempa\@empty
- \blx@bibdata\blx@tempa\blx@bibfiles
- \blx@auxwrite\blx@bcfout
- {\let\do\blx@datasource}
- {\blx@xml@endsection\blx@nl
- \blx@xml@comment{SECTION \the\c@refsection}%
- \blx@xml@bibdata{\the\c@refsection}{\blx@tempa}%
- \blx@xml@section{\the\c@refsection}}%
- \endgroup}
- \protected\def\endrefsection{%
- \endrefcontext
- \blx@endrefsection
- \blx@inf@refsec}
- \def\blx@endrefsection{%
- \blx@endrefsegment
- % make sure we always output aliases to the .bcf otherwise after their
- % first resolution by biber, they will be invisible to subsequent biber
- % runs since biblatex will resolve the \keyalias{} macro to the main
- % entry key, biber won't put \keyalias{}in the .bbl on subsequent runs
- % and biblatex will report a missing citekey
- \def\do##1{%
- % Make sure this counter exists. Sometimes it might not when using, e.g:
- % refsection=chapter and \includeonly to put in the chapters or when
- % inserting citations into table of contents
- \ifcscounter{blx@sectionciteorder@\the\c@refsection}
- {}
- {\expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname}%
- \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
- \blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{##1}{}{\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}}}%
- \dolistcsloop{blx@keyaliases@\the\c@refsection}%
- \ifnum\c@refsection>\z@
- \blx@auxwrite\blx@bcfout{}{%
- \blx@xml@endsection\blx@nl
- \blx@xml@comment{SECTION 0 (cont.)}%
- \blx@xml@section{0}}%
- \fi
- \global\c@refsection\z@}
- \AtEndDocument{%
- \endrefcontext
- \blx@endrefsection
- \def\abx@aux@refsection#1#2{\blx@addchecksum{#1}{#2}}}
- \protected\def\abx@aux@refsection#1#2{%
- \ifnum#1>\blx@maxsection
- \global\blx@maxsection#1\relax
- \fi
- \blx@addchecksum{#1}{#2}}
- % Reference segments
- \newrobustcmd*{\newrefsegment}{%
- \ifnum\c@refsegment>\z@
- \blx@endrefsegment
- \fi
- \refsegment}
- \let\blx@newrefsegment\newrefsegment
- \newrobustcmd*{\refsegment}{%
- \ifnum\c@refsegment>\z@
- \blx@err@nestenv{refsegment}%
- \blx@endrefsegment
- \fi
- \global\advance\csname blx@maxsegment@\the\c@refsection\endcsname\@ne
- \global\c@refsegment\csname blx@maxsegment@\the\c@refsection\endcsname
- \blx@inf@refseg
- \blx@info{Setting label 'refsegment:\the\c@refsection\the\c@refsegment'}%
- \label{refsegment:\the\c@refsection\the\c@refsegment}%
- \ifcsundef{blx@segm@\the\c@refsection @\the\c@refsegment}
- {\global\cslet{blx@segm@\the\c@refsection @\the\c@refsegment}\@empty}
- {}}
- \protected\def\endrefsegment{%
- \blx@endrefsegment
- \blx@inf@refseg}
- \def\blx@endrefsegment{%
- \global\c@refsegment\z@}
- % Reference section/segment auto-reset
- % we are prepending to the commands so that the resets happen before
- % the part title is typeset otherwise \cites in there could be "ibid"
- % which makes no sense
- \def\blx@refpatch@part#1{%
- \ifundef\part
- {\blx@err@nodocdiv{part}}
- {\toggletrue{blx@tempa}%
- \def\do##1{%
- \pretocmd##1{#1}
- {\togglefalse{blx@tempa}\listbreak}
- {}}%
- \docsvlist{%
- \H@old@part,% hyperref
- \NR@part,% nameref
- \@part}% latex/koma-script/memoir
- \iftoggle{blx@tempa}
- {\blx@err@patch{\string\@part}}
- {}%
- \let\do\noexpand}}
- \def\blx@refpatch@chapter#1{%
- \ifundef\chapter
- {\blx@err@nodocdiv{chapter}}
- {% the \ifcsundef{KOMAClassName} should be redundant, but you never know
- \ifboolexpr{test {\ifcsundef{KOMAClassName}}
- or test {\ifcsundef{startsection@secnumdepth}}}
- {\pretocmd\@makechapterhead{#1}
- {}
- {\blx@err@patch{\string\@makechapterhead}}
- \pretocmd\@makeschapterhead{#1}
- {}
- {\blx@err@patch{\string\@makeschapterhead}}}
- {% <- new KOMA >= 3.26 defines \startsection@secnumdepth
- \At@startsection{\ifnumequal{\startsection@secnumdepth}{0}{#1}{}}}}}
- \def\blx@refpatch@sect#1{%
- \ifcsundef{#1}
- {\blx@err@nodocdiv{#1}\@gobbletwo}
- {% the \ifcsundef{KOMAClassName} should be redundant, but you never know
- \ifboolexpr{test {\ifcsundef{KOMAClassName}}
- or test {\ifcsundef{startsection@secnumdepth}}}
- {\blx@refpatch@sect@i}
- {\blx@refpatch@sect@koma}}}
- % KOMA >= 3.26 defines \startsection@secnumdepth to check the sectioning level,
- % so we can now use \At@startsection
- \def\blx@refpatch@sect@koma#1#2{%
- \At@startsection{\ifnumequal{\startsection@secnumdepth}{#2}{#1}{}}}
- \edef\blx@refpatch@sect@i#1#2{%
- \def\noexpand\do##1{%
- \pretocmd##1%
- {\noexpand\blx@refpatch@sect@ii{#1}{#2}{\string#2}}
- {\togglefalse{blx@tempa}\noexpand\listbreak}
- {}}%
- \noexpand\blx@refpatch@sect@iii}
- \def\blx@refpatch@sect@ii#1#2#3{%
- \ifnumequal{#2}{#3}{#1}{}}
- \def\blx@refpatch@sect@iii{%
- \toggletrue{blx@tempa}%
- \docsvlist{% order does matter:
- \H@old@sectm@m,% memoir+hyperref (what a mess...)
- \M@sect,% memoir
- \H@old@sect,% hyperref
- \NR@sect,% nameref
- \scr@sect,% koma-script 3.x
- \scr@startsection,% bad hack for koma 3.15 <= v <= 3.25
- \@startsection}% latex
- \iftoggle{blx@tempa}
- {\blx@err@patch{\string\@sect}}
- {}%
- \let\do\noexpand}
- % Bibliography categories
- \let\blx@categories\@empty
- % {<category>}
- \newrobustcmd*{\DeclareBibliographyCategory}[1]{%
- \ifcsundef{blx@catg@#1}
- {\global\cslet{blx@catg@#1}\@empty
- \listgadd\blx@categories{#1}}
- {\blx@error
- {Category '#1' already declared}
- {The bibliography category '#1'\MessageBreak
- has already been declared}}}
- \@onlypreamble\DeclareBibliographyCategory
- % {<category>}{<entrykey>,...}
- \newrobustcmd*{\addtocategory}[2]{%
- \ifcsundef{blx@catg@#1}
- {\blx@error
- {Category '#1' not declared}
- {Use \string\DeclareBibliographyCategory\space to declare}}
- {\AfterPreamble{%
- \blx@xsanitizeafter{\forcsvlist{\blx@addtocategory{#1}}}{#2}}}}
- % {<category>}{<entrykey>,...}
- \def\blx@addtocategory#1#2{%
- % If we are adding a set member to a category, make sure we also add the
- % set parent if it is cited. If it is cited, we should be using the set
- % parent in the category, not the set child member. blx@setc@... will
- % only exist if the set parent is also cited as it is only defined when a
- % member contains \inset which only happens when the set parent is cited.
- \ifcsdef{blx@setc@\the\c@refsection @#2}
- {\blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}%
- \abx@aux@category{#1}{\csuse{blx@setc@\the\c@refsection @#2}}}
- {}%
- \blx@auxwrite\@mainaux{}{\string\abx@aux@category{#1}{#2}}%
- \abx@aux@category{#1}{#2}}
- % {<category>}{<entrykey>,...}
- \protected\def\abx@aux@category#1#2{%
- \xifinlistcs{\detokenize{#2}}{blx@catg@#1}
- {}
- {\listcsxadd{blx@catg@#1}{\detokenize{#2}}}}
- \AtEndDocument{\let\abx@aux@category\@gobbletwo}
- % [<options>]{<resource>,...}
- \renewrobustcmd*{\bibliography}[1]{%
- \begingroup
- \def\blx@tempa{file}%
- \def\blx@tempb{bibtex}%
- \def\blx@tempc{local}%
- \undef\blx@tempd
- \let\blx@tempe\@empty
- \blx@xsanitizeafter{\forcsvlist\blx@addbib@legacy}{#1}%
- \endgroup}
- \@onlypreamble\bibliography
- \def\blx@addbib@legacy#1{%
- \begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\blx@addbib@resource{\blx@stripbib{#1}\detokenize{.bib}}}%
- \blx@tempa}
- \def\blx@stripbib#1{%
- \expandafter\blx@stripbib@i\detokenize{#1.bib}&}
- \edef\blx@stripbib@i{%
- \def\noexpand\blx@stripbib@i##1\detokenize{.bib}##2&}
- \blx@stripbib@i{#1}
- % [<options>]{<resource>,...}
- \newrobustcmd*{\addbibresource}{%
- \blx@addbib\blx@addbib@resource}
- \@onlypreamble\addbibresource
- \newrobustcmd*{\addglobalbib}{%
- \blx@addbib\blx@addbib@global}
- \@onlypreamble\addglobalbib
- \newrobustcmd*{\addsectionbib}{%
- \blx@addbib\blx@addbib@register}
- \@onlypreamble\addsectionbib
- \def\blx@addbib#1{%
- \@ifnextchar[%]
- {\blx@addbib@i{#1}}
- {\blx@addbib@i{#1}[]}}
- \def\blx@addbib@i#1[#2]{%
- \begingroup
- \blx@hook@fileverb
- \blx@addbib@ii{#1}{#2}}
- \def\blx@addbib@ii#1#2#3{%
- \endgroup
- \begingroup
- \def\blx@tempa{file}%
- \def\blx@tempb{bibtex}%
- \def\blx@tempc{local}%
- \undef\blx@tempd
- \let\blx@tempe\@empty
- \setkeys{blx@addbib}{#2}%
- \blx@xsanitizeafter{#1}{#3}%
- \endgroup}
- \def\blx@hook@fileverb{%
- \let\do\@makeother
- \dospecials
- \catcode`\\=\z@
- \catcode`\{=\@ne
- \catcode`\}=\tw@}
- \define@key{blx@addbib}{type}{\def\blx@tempa{#1}}
- \define@key{blx@addbib}{datatype}{\def\blx@tempb{#1}}
- \define@key{blx@addbib}{location}{\def\blx@tempc{#1}}
- \define@key{blx@addbib}{label}{\edef\blx@tempd{\detokenize{#1}}}
- \define@key{blx@addbib}{bibencoding}{\def\blx@tempe{#1}}
- % \blx@res@type@<resource> resource -> type
- % \blx@res@data@<resource> resource -> datatype
- % \blx@res@loca@<resource> resource -> datatype
- % \blx@res@labl@<resource> label -> resource
- \def\blx@addbib@register#1{%
- \csxdef{blx@res@type@#1}{\blx@tempa}%
- \csxdef{blx@res@data@#1}{\blx@tempb}%
- \csxdef{blx@res@loca@#1}{\blx@tempc}%
- \csxdef{blx@res@bibencoding@#1}{\blx@tempe}%
- \ifdef\blx@tempd
- {\csxdef{blx@res@labl@\blx@tempd}{#1}}
- {}}
- \def\blx@addbib@resource#1{%
- \blx@addbib@register{#1}%
- \listgadd\blx@bibfiles{#1}%
- \blx@regbibfile\jobname{#1}}
- \def\blx@addbib@global#1{%
- \blx@addbib@resource{#1}%
- \listgadd\blx@bibfiles@global{#1}}
- \let\blx@bibfiles\@empty
- \let\blx@bibfiles@global\@empty
- \def\blx@bibdata#1#2{%
- \forlistloop{\blx@bibdata@i{#1}}#2}
- \def\blx@bibdata@i#1#2{%
- \blx@xmlsanitizeafter{\blx@bibdata@ii{#1}{#2}}{#2}}
- \def\blx@bibdata@ii#1#2#3{%
- \eappto#1{%
- \blx@xml@datasource
- {\ifcsdef{blx@res@type@#2}
- {\csuse{blx@res@type@#2}}
- {file}}
- {\ifcsdef{blx@res@data@#2}
- {\csuse{blx@res@data@#2}}
- {bibtex}}
- {\ifcsvoid{blx@res@bibencoding@#2}
- {}
- { encoding="\csuse{blx@res@bibencoding@#2}"}}
- {#3}}}
- %% Citations
- \newrobustcmd*{\AtEveryCite}{\gappto\blx@hook@cite}
- \newrobustcmd*{\AtEveryCitekey}{\gappto\blx@hook@citekey}
- \newrobustcmd*{\AtEveryMultiCite}{\gappto\blx@hook@mcite}
- \@onlypreamble\AtEveryCite
- \@onlypreamble\AtEveryCitekey
- \@onlypreamble\AtEveryMultiCite
- \newrobustcmd*{\AtEachCitekey}{%
- \iftoggle{blx@citation}{\appto\blx@hook@citekey}{\@gobble}}
- \def\blx@imc@UseEveryCiteHook{\csuse{blx@hook@cite}}
- \def\blx@imc@UseEveryCitekeyHook{\csuse{blx@hook@citekey}}
- \def\blx@imc@UseEveryMultiCiteHook{\csuse{blx@hook@mcite}}
- \newrobustcmd*{\AtNextCite}{%
- \ifundef\blx@hook@cite@next
- {\gdef\blx@hook@cite@next{\global\undef\blx@hook@cite@next}}
- {}%
- \gappto\blx@hook@cite@next}
- \newrobustcmd*{\AtNextCitekey}{%
- \ifundef\blx@hook@citekey@next
- {\gdef\blx@hook@citekey@next{\global\undef\blx@hook@citekey@next}}
- {}%
- \gappto\blx@hook@citekey@next}
- \newrobustcmd*{\AtNextMultiCite}{%
- \ifundef\blx@hook@mcite@next
- {\gdef\blx@hook@mcite@next{\global\undef\blx@hook@mcite@next}}
- {}%
- \gappto\blx@hook@mcite@next}
- \def\blx@imc@UseNextCiteHook{\csuse{blx@hook@cite@next}}
- \def\blx@imc@UseNextCitekeyHook{\csuse{blx@hook@citekey@next}}
- \def\blx@imc@UseNextMultiCiteHook{\csuse{blx@hook@mcite@next}}
- \def\blx@imc@DeferNextCitekeyHook{\undef\blx@hook@citekey@next}
- \blx@regimcs{%
- \UseEveryCiteHook \UseEveryCitekeyHook \UseEveryMultiCiteHook
- \UseNextCiteHook \UseNextCitekeyHook \UseNextMultiCiteHook
- \DeferNextCitekeyHook}
- % {<style>}
- \newrobustcmd*{\RequireCitationStyle}[1]{%
- \blx@inputonce{#1.cbx}{citation style '#1'}{}{}{}
- {\blx@error
- {Style '#1' not found}
- {The citation style '#1' could not be found}}}
- \@onlypreamble\RequireCitationStyle
- % {<code>}
- \newrobustcmd*{\InitializeCitationStyle}{\appto\blx@hook@cbxinit}
- \@onlypreamble\InitializeCitationStyle
- % {<code>}
- \newrobustcmd*{\OnManualCitation}{\appto\blx@hook@mancite}
- \@onlypreamble\OnManualCitation
- \newrobustcmd*{\mancite}{%
- \csuse{blx@hook@mancite}%
- \blx@ibidreset
- \blx@idemreset
- \blx@opcitreset
- \blx@loccitreset}
- % {<entrykey>}{<message>}
- % Wrapper to track cite keys which are \nocited
- \def\blx@nocitation#1#2{%
- \ifinlist{#1}\blx@nocites
- {}
- {\listgadd\blx@nocites{#1}}%
- \blx@citation@i{#1}{#2}}
- % {<entrykey>}{<message>}
- % Just a wrapper to suppress citation tracking in toc/lof etc.
- \def\blx@citation#1#2{%
- \ifinlist{#1}\blx@directcites
- {}
- {\listgadd\blx@directcites{#1}}%
- \blx@citation@i{#1}{#2}}
- \def\blx@citation@i#1#2{%
- \ifbool{citerequest}
- {\blx@citation@entry{#1}{#2}}
- {}}
- \def\blx@citation@entry#1#2{%
- \blx@bibreq{#1}%
- \ifinlist{#1}\blx@cites
- {}
- {\listgadd{\blx@cites}{#1}%
- \blx@auxwrite\@mainaux{}{\string\abx@aux@cite{#1}}}%
- \ifinlistcs{#1}{blx@segm@\the\c@refsection @\the\c@refsegment}
- {}
- {\listcsgadd{blx@segm@\the\c@refsection @\the\c@refsegment}{#1}}%
- \blx@auxwrite\@mainaux{}{\string\abx@aux@segm{\the\c@refsection}{\the\c@refsegment}{\detokenize{#1}}}%
- \blx@ifdata{#1}
- {}
- {\ifcsdef{blx@miss@\the\c@refsection}
- {\ifinlistcs{#1}{blx@miss@\the\c@refsection}
- {}
- {\blx@logreq@active{#2{#1}}}}
- {\blx@logreq@active{#2{#1}}}}}
- \protected\def\abx@aux@segm#1#2#3{%
- \listcsxadd{blx@segm@#1@#2}{\detokenize{#3}}}
- \def\blx@nocitation@all{%
- \ifinlist{*}\blx@nocites
- {}
- {\listgadd\blx@nocites{*}}%
- \blx@citation@all}
- \def\blx@citation@all{%
- \ifbool{citerequest}
- {\blx@bibreq{*}%
- \global\csletcs
- {blx@segm@\the\c@refsection @\the\c@refsegment}
- {blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}%
- \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
- {\blx@logreq@active{}}
- {}}
- {}}
- \protected\def\blx@bibreq#1{%
- \begingroup
- \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
- \let\blx@tempb\@empty
- % Only output as \nocited if a key wasn't also directly \cite'd
- % Since citekey output is sequential as cites are read, the .bcf might contain
- % duplicate keys with differring nocite attributes if \nocite{X} and \cite{X} both occur
- % but biber deals with this and priorities \cites
- \ifboolexpr{test {\ifinlist{#1}\blx@nocites}
- and
- not test {\ifinlist{#1}\blx@directcites}}
- {\def\blx@tempb{ nocite="1"}}
- {}%
- % citeall is always order "0" - this makes no real difference as biber
- % ignores all other citekeys in the section if citeall is present
- \ifstrequal{*}{#1}
- {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}{0}}}
- {\blx@auxwrite\blx@bcfout{}{\blx@xml@citekey{\blx@tempa}{\blx@tempb}{\expandafter\the\csname blx@sectionciteorder@\the\c@refsection\endcsname}}}%
- \endgroup}
- % {<set>}{<key1,key2,key3>}
- \newrobustcmd*{\defbibentryset}[2]{%
- \@bsphack
- \begingroup
- \blx@xsanitizeafter{\def\blx@tempa}{#1}%
- \let\blx@tempb\@empty
- \let\blx@tempc\@empty
- \blx@xsanitizeafter{\forcsvlist\blx@defentryset@add}{#2}%
- \ifcsdef{blx@set@\the\c@refsection @\blx@tempa}
- {\expandafter\ifdefequal
- \csname blx@set@\the\c@refsection @\blx@tempa\endcsname
- \blx@tempb
- {}
- {\blx@error
- {Conflicting definitions of '\blx@tempa'}
- {The entry set '\blx@tempa' been defined before.\MessageBreak
- old: \blx@tempa\space = %
- \csuse{blx@set@\the\c@refsection @\blx@tempa}\MessageBreak
- new: \blx@tempa\space = \blx@tempb\MessageBreak
- I'm ignoring the new definition}}}
- {\global\cslet{blx@set@\the\c@refsection @\blx@tempa}\blx@tempb
- \edef\blx@tempa{%
- \AfterPreamble{\blx@setreq{\blx@tempa}{\blx@tempb}}}%
- \blx@tempa}%
- \endgroup
- \@esphack}
- \def\blx@defentryset@add#1{%
- \edef\blx@tempb{\blx@tempb\blx@tempc#1}%
- \def\blx@tempc{,}}
- \protected\def\blx@setreq#1#2{%
- \begingroup
- \blx@xmlsanitizeafter{\def\blx@tempa}{#1}%
- \blx@xmlsanitizeafter{\def\blx@tempb}{#2}%
- \blx@auxwrite\blx@bcfout{}{\blx@xml@citeset{\blx@tempa}{\blx@tempb}}%
- \endgroup}
- % {<entrykey>,...}
- \protected\def\blx@citeloop#1{%
- \expandafter\blx@citeloop@i\expandafter{\detokenize{#1}}}
- \protected\def\blx@citeloop@i#1{%
- \begingroup
- % This must be here and not after \blx@citeadd as this changes the refcontext
- \letcs\blx@tempb{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}%
- \ifundef\blx@tempb
- {\let\blx@tempb\@empty}
- {}%
- % Make sure this counter exists. Sometimes it might not when using, e.g:
- % refsection=chapter and \includeonly to put in the chapters or when
- % inserting citations into table of contents
- \ifcscounter{blx@sectionciteorder@\the\c@refsection}
- {}
- {\expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname}%
- \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
- \blx@tempcnta\z@
- \blx@tempcntb\z@
- \let\blx@tempa\@empty
- \forcsvlist\blx@citeadd{#1}% adds to \blx@tempa
- \blx@thenotecheck
- \ifnum\blx@tempcnta>\z@
- \ifnum\blx@tempcntb>\z@
- \multicitedelim
- \fi
- \else
- \blx@postpunct@saved
- \fi
- % \blx@tempb is a sorted list of all cites, \blx@tempa is the list of cites to
- % sort using this list
- \blx@thecitesort
- \edef\blx@tempa{\endgroup
- \c@citecount\z@
- \c@citetotal\the\blx@tempcnta\relax
- \noexpand\ifnum\c@overallcitetotal=0
- \c@overallcitetotal\c@citetotal
- \noexpand\fi
- \unexpanded{\forlistloop\blx@citeprint}{\blx@tempb}}%
- \blx@tempa}
- \def\blx@notecheck{%
- \ifnum\blx@tempcnta>\@ne
- \blx@warning{%
- Package option 'sortcites' enabled.\MessageBreak
- Verify postnote placement}%
- \fi}
- \def\blx@citesort{%
- \ifnum\blx@tempcnta>\@ne
- \blx@filtercitesort\blx@tempb{blx@tempa}%
- \else
- \blx@citenosort
- \fi}
- \def\blx@citenosort{%
- \let\blx@tempb\blx@tempa}
- \def\abx@missing@entry#1{%
- \abx@missing{#1}}
- % {<entrykey>}
- \def\blx@citeadd#1{%
- \ifcsdef{blx@keyalias@\the\c@refsection @#1}
- {\edef\blx@realkey{\csuse{blx@keyalias@\the\c@refsection @#1}}}
- {\def\blx@realkey{#1}}%
- \expandafter\blx@getrefcontext\expandafter{\blx@realkey}% needed for \ifdata
- \expandafter\blx@citation\expandafter{\blx@realkey}\blx@msg@cundefon
- \expandafter\blx@ifdata\expandafter{\blx@realkey}
- {\advance\blx@tempcnta\@ne
- \listeadd\blx@tempa{\blx@realkey}}
- {\ifnum\blx@tempcntb>\z@\multicitedelim\fi
- \expandafter\abx@missing@entry\expandafter{\blx@realkey}%
- \advance\blx@tempcntb\@ne}}
- % set default refcontext for one citation key
- % and then override with data from auto-assign \assignrefcontext* macros, if any
- % <entrykey>
- \def\blx@getrefcontext#1{%
- % Save refcontext for restoration at end of \citeprint
- \let\blx@refcontext@context@saved\blx@refcontext@context
- % Get the default refcontext
- % If there was one due to appearance in a bib/biblist, use it
- % otherwise fall back on global refcontext. This can happen for cites
- % made (a bit strangely but some styles do this) inside a biblist
- % which never appear in any printed bib/biblist and therefore have no default
- % refcontext defined
- \ifcsdef{blx@assignedrefcontextbib@\the\c@refsection @#1}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextbib@\the\c@refsection @#1}}
- {\blx@edef@refcontext{\blx@sorting/global//global/global}}%
- % assignment via keyword list
- \ifdef\blx@assignedrefcontextkeywlist
- {\def\do##1{%
- \blx@imc@ifentrykeyword{#1}{##1}
- {% weak version
- \ifboolexpr{test {\ifcsdef{blx@assignedrefcontextkeyws*@\the\c@refsection @##1}}
- and
- not togl {blx@refcontext}}% inside explicit non-global refcontext
- {\letcs\blx@refcontext@context{blx@assignedrefcontextkeyws*@\the\c@refsection @##1}}
- {}%
- % strong version
- \ifcsdef{blx@assignedrefcontextkeyws@\the\c@refsection @##1}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextkeyws@\the\c@refsection @##1}}
- {}}
- {}}%
- \dolistloop\blx@assignedrefcontextkeywlist}
- {}%
- % assignment via category
- \ifdef\blx@assignedrefcontextcatlist
- {\def\do##1{%
- \blx@imc@ifentrycategory{#1}{##1}
- {% weak version
- \ifboolexpr{test {\ifcsdef{blx@assignedrefcontextcats*@\the\c@refsection @##1}}
- and
- not togl {blx@refcontext}}% inside explicit non-global refcontext
- {\letcs\blx@refcontext@context{blx@assignedrefcontextcats*@\the\c@refsection @##1}}
- {}%
- % strong version
- \ifcsdef{blx@assignedrefcontextcats@\the\c@refsection @##1}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextcats@\the\c@refsection @##1}}
- {}}
- {}}%
- \dolistloop\blx@assignedrefcontextcatlist}
- {}%
- % assignment via entrykeys
- % weak version
- \nottoggle{blx@refcontext}
- {\ifcsdef{blx@assignedrefcontextkeys*@\the\c@refsection @*}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys*@\the\c@refsection @*}}
- {\ifcsdef{blx@assignedrefcontextkeys*@\the\c@refsection @#1}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys*@\the\c@refsection @#1}}
- {}}}
- {}%
- % strong version
- \ifcsdef{blx@assignedrefcontextkeys@\the\c@refsection @*}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys@\the\c@refsection @*}}
- {\ifcsdef{blx@assignedrefcontextkeys@\the\c@refsection @#1}
- {\letcs\blx@refcontext@context{blx@assignedrefcontextkeys@\the\c@refsection @#1}}
- {}}}
- % {<entrykey>}
- \protected\def\blx@citeprint#1{%
- \blx@getrefcontext{#1}%
- \advance\c@citecount\@ne
- \advance\c@overallcitecount\@ne
- \addtocounter{instcount}\@ne
- \ifnum\c@citecount=\@ne
- \blx@getdata@cite{#1}%
- \blx@precode
- \ifnum\c@citetotal>\@ne
- \blx@resetdata
- \fi
- \else
- \blx@dlimcode
- \fi
- \begingroup
- \ifnum\c@citetotal>\@ne
- \blx@getdata@cite{#1}%
- \fi
- \blx@entrysetcount
- \blx@setoptions@type\abx@field@entrytype
- \blx@setoptions@entry
- \blx@backref{#1}%
- \blx@pagetracker
- \csuse{blx@hook@citekey}%
- \csuse{blx@hook@citekey@next}%
- \blx@beglangcite
- \blx@execute
- \blx@loopcode
- \blx@citecounter
- \blx@citetracker
- \blx@ibidtracker
- \blx@idemtracker
- \blx@opcittracker
- \blx@loccittracker
- \ifnum\c@citecount=\c@citetotal
- \def\blx@thecheckpunct{\blx@err@nestcite\@gobble}%
- \blx@postcode
- \blx@postpunct@saved
- \fi
- \blx@endlangcite
- \endgroup
- \let\blx@refcontext@context\blx@refcontext@context@saved}
- % cite counter
- \def\blx@citecounter@global{%
- \ifbool{@filesw}
- {\ifbool{citetracker}
- {\immediate\write\@mainaux{%
- \string\abx@aux@count
- {\the\c@refsection}{\abx@field@entrykey}}}
- {}}
- {}}
- \def\blx@citecounter@context{%
- \ifbool{@filesw}
- {\ifbool{citetracker}
- {\immediate\write\@mainaux{%
- \iftoggle{blx@footnote}
- {\string\abx@aux@fncount}
- {\string\abx@aux@count}%
- {\the\c@refsection}{\abx@field@entrykey}}}
- {}}
- {}}
- % {<refsection>}{<entrykey>}
- % set maxcitecounter as well, note that we also define a maxcitecounter across
- % all refsections, but that does not have a high-level interface
- \protected\def\blx@aux@count#1#2{%
- \csnumgdef{blx@count@#1@\detokenize{#2}}{%
- \csuse{blx@count@#1@\detokenize{#2}}+1}%
- \ifnumgreater{\csuse{blx@count@#1@\detokenize{#2}}}{%
- 0\csuse{blx@maxcitecounter@#1}}
- {\csnumgdef{blx@maxcitecounter@#1}{%
- \csuse{blx@count@#1@\detokenize{#2}}}}
- {}%
- \ifnumgreater{\csuse{blx@count@#1@\detokenize{#2}}}{%
- 0\csuse{blx@maxcitecounter}}
- {\csnumgdef{blx@maxcitecounter}{%
- \csuse{blx@count@#1@\detokenize{#2}}}}
- {}}
- \protected\def\blx@aux@fncount#1#2{%
- \csnumgdef{blx@fncount@#1@\detokenize{#2}}{%
- \csuse{blx@fncount@#1@\detokenize{#2}}+1}%
- \ifnumgreater{\csuse{blx@fncount@#1@\detokenize{#2}}}{%
- 0\csuse{blx@maxfncitecounter@#1}}
- {\csnumgdef{blx@maxfncitecounter@#1}{%
- \csuse{blx@fncount@#1@\detokenize{#2}}}}
- {}%
- \ifnumgreater{\csuse{blx@fncount@#1@\detokenize{#2}}}{%
- 0\csuse{blx@maxfncitecounter}}
- {\csnumgdef{blx@maxfncitecounter}{%
- \csuse{blx@fncount@#1@\detokenize{#2}}}}
- {}}
- \let\abx@aux@count\@gobbletwo
- \let\abx@aux@fncount\@gobbletwo
- \AtEndDocument{%
- \let\abx@aux@count\@gobbletwo
- \let\abx@aux@fncount\@gobbletwo}
- \protected\def\blx@setcitecounter@global{%
- \c@citecounter0%
- \csuse{blx@count@\the\c@refsection @\abx@field@entrykey}%
- \relax
- \c@maxcitecounter0%
- \csuse{blx@maxcitecounter@\the\c@refsection}%
- \relax}
- \protected\def\blx@setcitecounter@context{%
- \c@citecounter0%
- \iftoggle{blx@footnote}
- {\csuse{blx@fncount@\the\c@refsection @\abx@field@entrykey}}
- {\csuse{blx@count@\the\c@refsection @\abx@field@entrykey}}%
- \relax
- \c@maxcitecounter0%
- \iftoggle{blx@footnote}
- {\csuse{blx@maxfncitecounter@\the\c@refsection}}
- {\csuse{blx@maxcitecounter@\the\c@refsection}}%
- \relax}
- % cite tracker
- \def\blx@citetracker@global{%
- \ifbool{citetracker}
- {\xifinlistcs\abx@field@entrykey{blx@bsee@\the\c@refsection}
- {}
- {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@entrykey}}
- {}}
- \def\blx@citetracker@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\xifinlistcs\abx@field@entrykey{blx@fsee@\the\c@refsection}
- {}
- {\listcsxadd{blx@fsee@\the\c@refsection}\abx@field@entrykey}}
- {\xifinlistcs\abx@field@entrykey{blx@bsee@\the\c@refsection}
- {}
- {\listcsxadd{blx@bsee@\the\c@refsection}\abx@field@entrykey}}}
- {}}
- \protected\appto\abx@savetrackers{%
- \global\csletcs{blx@saved@bsee@\the\c@refsection}{blx@bsee@\the\c@refsection}%
- \global\csletcs{blx@saved@fsee@\the\c@refsection}{blx@fsee@\the\c@refsection}}
- \protected\appto\abx@resttrackers{%
- \global\csletcs{blx@bsee@\the\c@refsection}{blx@saved@bsee@\the\c@refsection}%
- \global\csletcs{blx@fsee@\the\c@refsection}{blx@saved@fsee@\the\c@refsection}}
- \protected\appto\abx@cleartrackers{%
- \global\cslet{blx@saved@bsee@\the\c@refsection}\@empty
- \global\cslet{blx@saved@fsee@\the\c@refsection}\@empty}
- % ibidem tracker
- \def\blx@ibidtracker@global{%
- \ifbool{citetracker}
- {\global\let\blx@lastkey@text\abx@field@entrykey}
- {}}
- \def\blx@ibidtracker@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\global\let\blx@lastkey@foot\abx@field@entrykey}
- {\global\let\blx@lastkey@text\abx@field@entrykey}}
- {}}
- \def\blx@ibidtracker@strict{%
- \blx@ifcitesingle
- {\blx@ibidtracker@global}
- {\blx@ibidreset@global}}%
- \def\blx@ibidtracker@constrict{%
- \blx@ifcitesingle
- {\blx@mpfnsave
- \blx@ibidtracker@context}
- {\blx@ibidreset@context}}%
- \def\blx@ibidreset@force{%
- \global\undef\blx@lastkey@text
- \global\undef\blx@lastkey@foot
- \blx@mpfnreset}
- \def\blx@ibidreset@global{%
- \global\undef\blx@lastkey@text}
- \def\blx@ibidreset@context{%
- \iftoggle{blx@footnote}
- {\blx@mpfnreset
- \global\undef\blx@lastkey@foot}
- {\global\undef\blx@lastkey@text}}
- \protected\appto\abx@savetrackers{%
- \global\let\blx@saved@lastkey@text\blx@lastkey@text
- \global\let\blx@saved@lastkey@foot\blx@lastkey@foot}
- \protected\appto\abx@resttrackers{%
- \global\let\blx@lastkey@text\blx@saved@lastkey@text
- \global\let\blx@lastkey@foot\blx@saved@lastkey@foot}
- \protected\appto\abx@cleartrackers{%
- \global\undef\blx@saved@lastkey@text
- \global\undef\blx@saved@lastkey@foot}
- % idem tracker
- \def\blx@idemtracker@global{%
- \ifbool{citetracker}
- {\global\let\blx@lasthash@text\abx@field@fullhash}
- {}}
- \def\blx@idemtracker@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\global\let\blx@lasthash@foot\abx@field@fullhash}
- {\global\let\blx@lasthash@text\abx@field@fullhash}}
- {}}
- \let\blx@idemtracker@strict\blx@idemtracker@global
- \def\blx@idemtracker@constrict{%
- \blx@mpfnsave
- \blx@idemtracker@context}
- \def\blx@idemreset@force{%
- \global\undef\blx@lasthash@text
- \global\undef\blx@lasthash@foot
- \blx@mpfnreset}
- \def\blx@idemreset@global{%
- \global\undef\blx@lasthash@text}
- \def\blx@idemreset@context{%
- \iftoggle{blx@footnote}
- {\blx@mpfnreset
- \global\undef\blx@lasthash@foot}
- {\global\undef\blx@lasthash@text}}
- \protected\appto\abx@savetrackers{%
- \global\let\blx@saved@lasthash@text\blx@lasthash@text
- \global\let\blx@saved@lasthash@text\blx@lasthash@text}
- \protected\appto\abx@resttrackers{%
- \global\let\blx@lasthash@text\blx@saved@lasthash@text
- \global\let\blx@lasthash@text\blx@saved@lasthash@text}
- \protected\appto\abx@cleartrackers{%
- \global\undef\blx@saved@lasthash@text
- \global\undef\blx@saved@lasthash@foot}
- % opcit tracker
- \def\blx@opcittracker@global{%
- \ifbool{citetracker}
- {\blx@opcit@tracker{text}}
- {}}
- \def\blx@opcittracker@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@opcit@tracker{foot}}
- {\blx@opcit@tracker{text}}}
- {}}
- \def\blx@opcittracker@strict{%
- \blx@ifcitesingle
- {\blx@opcittracker@global}
- {\blx@opcitreset@global}}%
- \def\blx@opcittracker@constrict{%
- \blx@ifcitesingle
- {\blx@mpfnsave
- \blx@opcittracker@context}
- {\blx@opcitreset@context}}%
- \def\blx@opcit@tracker#1{%
- \blx@imc@iffieldundef{namehash}
- {}
- {\global\cslet{blx@lastkey@#1@\abx@field@namehash}\abx@field@entrykey
- \xifinlistcs\abx@field@namehash{blx@trackhash@#1}
- {}
- {\listcsxadd{blx@trackhash@#1}\abx@field@namehash}}}
- \def\blx@opcit@reset#1{%
- \begingroup
- \def\do##1{\global\csundef{blx@lastkey@#1@##1}}%
- \dolistcsloop{blx@trackhash@#1}%
- \global\cslet{blx@trackhash@#1}\@empty
- \endgroup}
- \def\blx@opcitreset@force{%
- \blx@opcit@reset{text}%
- \blx@opcit@reset{foot}%
- \blx@mpfnreset}
- \def\blx@opcitreset@global{%
- \blx@opcit@reset{text}}
- \def\blx@opcitreset@context{%
- \iftoggle{blx@footnote}
- {\blx@opcit@reset{foot}%
- \blx@mpfnreset}
- {\blx@opcit@reset{text}}}
- \let\blx@trackhash@text\@empty
- \let\blx@trackhash@foot\@empty
- \protected\appto\abx@savetrackers{%
- \begingroup
- \def\do#1{\global\csletcs{blx@saved@lastkey@text@#1}{blx@lastkey@text@#1}}%
- \dolistloop\blx@trackhash@text
- \global\let\blx@saved@trackhash@text\blx@trackhash@text
- \def\do#1{\global\csletcs{blx@saved@lastkey@foot@#1}{blx@lastkey@foot@#1}}%
- \dolistloop\blx@trackhash@foot
- \global\let\blx@saved@trackhash@foot\blx@trackhash@foot
- \endgroup}
- \protected\appto\abx@resttrackers{%
- \begingroup
- \blx@opcit@reset{text}%
- \global\let\blx@trackhash@text\blx@saved@trackhash@text
- \def\do#1{\global\csletcs{blx@lastkey@text@#1}{blx@saved@lastkey@text@#1}}%
- \dolistloop\blx@trackhash@text
- \blx@opcit@reset{foot}%
- \global\let\blx@trackhash@foot\blx@saved@trackhash@foot
- \def\do#1{\global\csletcs{blx@lastkey@foot@#1}{blx@saved@lastkey@foot@#1}}%
- \dolistloop\blx@trackhash@foot
- \endgroup}
- \protected\appto\abx@cleartrackers{%
- \begingroup
- \def\do#1{\global\csundef{blx@saved@lastkey@text@#1}}%
- \dolistloop\blx@saved@trackhash@text
- \global\undef\blx@saved@trackhash@text
- \def\do#1{\global\csundef{blx@saved@lastkey@foot@#1}}%
- \dolistloop\blx@saved@trackhash@foot
- \global\undef\blx@saved@trackhash@foot
- \endgroup}
- % loccit tracker
- \def\blx@loccittracker@global{%
- \ifbool{citetracker}
- {\blx@loccit@tracker{text}}
- {}}
- \def\blx@loccittracker@context{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@loccit@tracker{foot}}
- {\blx@loccit@tracker{text}}}
- {}}
- \def\blx@loccittracker@strict{%
- \ifbool{citetracker}
- {\blx@loccit@stricttracker{text}}
- {}}
- \def\blx@loccittracker@constrict{%
- \ifbool{citetracker}
- {\iftoggle{blx@footnote}
- {\blx@mpfnsave
- \blx@loccit@stricttracker{foot}}
- {\blx@loccit@stricttracker{text}}}
- {}}
- \def\blx@loccit@tracker#1{%
- \global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
- \blx@imc@iffieldundef{postnote}
- {}
- {\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
- \xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
- {}
- {\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}}
- \def\blx@loccit@stricttracker#1{%
- \global\csundef{blx@lastnote@#1@\abx@field@entrykey}%
- \blx@imc@iffieldundef{postnote}
- {}
- {\blx@ifcitesingle
- {\expandafter\blx@imc@ifpages
- \expandafter{\abx@field@postnote}
- {\global\cslet{blx@lastnote@#1@\abx@field@entrykey}\abx@field@postnote
- \xifinlistcs\abx@field@entrykey{blx@trackkeys@#1}
- {}
- {\listcsxadd{blx@trackkeys@#1}\abx@field@entrykey}}
- {}}
- {}}}
- \def\blx@loccit@reset#1{%
- \begingroup
- \def\do##1{\global\csundef{blx@lastnote@#1@##1}}%
- \dolistcsloop{blx@trackkeys@#1}%
- \global\cslet{blx@trackkeys@#1}\@empty
- \endgroup}
- \def\blx@loccitreset@force{%
- \blx@loccit@reset{text}%
- \blx@loccit@reset{foot}%
- \blx@mpfnreset}
- \def\blx@loccitreset@global{%
- \blx@loccit@reset{text}}
- \def\blx@loccitreset@context{%
- \iftoggle{blx@footnote}
- {\blx@loccit@reset{foot}%
- \blx@mpfnreset}
- {\blx@loccit@reset{text}}}
- \let\blx@trackkeys@text\@empty
- \let\blx@trackkeys@foot\@empty
- \protected\appto\abx@savetrackers{%
- \begingroup
- \def\do#1{\global\csletcs{blx@saved@lastnote@text@#1}{blx@lastnote@text@#1}}%
- \dolistloop\blx@trackkeys@text
- \global\let\blx@saved@trackkeys@text\blx@trackkeys@text
- \def\do#1{\global\csletcs{blx@saved@lastnote@foot@#1}{blx@lastnote@foot@#1}}%
- \dolistloop\blx@trackkeys@foot
- \global\let\blx@saved@trackkeys@foot\blx@trackkeys@foot
- \endgroup}
- \protected\appto\abx@resttrackers{%
- \begingroup
- \blx@loccit@reset{text}%
- \global\let\blx@trackkeys@text\blx@saved@trackkeys@text
- \def\do#1{\global\csletcs{blx@lastnote@text@#1}{blx@saved@lastnote@text@#1}}%
- \dolistloop\blx@trackkeys@text
- \blx@loccit@reset{foot}%
- \global\let\blx@trackkeys@foot\blx@saved@trackkeys@foot
- \def\do#1{\global\csletcs{blx@lastnote@foot@#1}{blx@saved@lastnote@foot@#1}}%
- \dolistloop\blx@trackkeys@foot
- \endgroup}
- \protected\appto\abx@cleartrackers{%
- \begingroup
- \def\do#1{\global\csundef{blx@saved@lastnote@text@#1}}%
- \dolistloop\blx@saved@trackkeys@text
- \global\undef\blx@saved@trackkeys@text
- \def\do#1{\global\csundef{blx@saved@lastnote@foot@#1}}%
- \dolistloop\blx@saved@trackkeys@foot
- \global\undef\blx@saved@trackkeys@foot
- \endgroup}
- \def\blx@addbackref#1{%
- \ifcsdef{blx@setp@\the\c@refsection @#1}
- {\ifcase\blx@backrefsetstyle
- \blx@addbackref@i{#1}%
- \or
- \blx@addbackref@ii{setp}{#1}%
- \or
- \blx@addbackref@i{#1}%
- \or
- \blx@addbackref@i{#1}%
- \or
- \blx@addbackref@i{#1}%
- \blx@addbackref@ii{setp}{#1}%
- \or
- \blx@addbackref@i{#1}%
- \blx@addbackref@ii{setp}{#1}%
- \fi}
- {\ifcsdef{blx@setc@\the\c@refsection @#1}
- {\ifcase\blx@backrefsetstyle
- \blx@addbackref@ii{setc}{#1}%
- \or
- \blx@addbackref@i{#1}%
- \or
- \blx@addbackref@i{#1}%
- \or
- \blx@addbackref@i{#1}%
- \blx@addbackref@ii{setc}{#1}%
- \or
- \blx@addbackref@i{#1}%
- \or
- \blx@addbackref@i{#1}%
- \blx@addbackref@ii{setc}{#1}%
- \fi}
- {\blx@addbackref@i{#1}}}}
- \def\blx@addbackref@i#1{%
- \ifbacktracker
- \blx@leavevmode
- \if@filesw
- \protected@write\@mainaux{}{\string\abx@aux@backref
- {\the\c@instcount}{#1}{\the\c@refsection}%
- {\thepage}{\noexpand\the\c@page}}%
- \fi
- \fi}
- \def\blx@addbackref@ii#1#2{%
- \expandafter\expandafter\expandafter\forcsvlist
- \expandafter\expandafter\expandafter\blx@addbackref@i
- \expandafter\expandafter\expandafter{%
- \csname blx@#1@\the\c@refsection @#2\endcsname}}
- % {<instcount>}{<entrykey>}{<refsection>}{<page>}{<page int>}
- \protected\def\blx@aux@backref#1#2#3#4#5{%
- \ifcsundef{blx@pref@#3@\detokenize{#2}}
- {\global\cslet{blx@pref@#3@\detokenize{#2}}\@empty
- \expandafter\blx@onlypreamble\csname blx@pref@#3@\detokenize{#2}\endcsname}
- {}%
- \ifinlistcs{#4}{blx@pref@#3@\detokenize{#2}}
- {}
- {\listcsgadd{blx@pref@#3@\detokenize{#2}}{#4}}%
- \blx@addpagesum{#1}{#5}}
- \AtEndDocument{%
- \def\abx@aux@backref#1#2#3#4#5{\blx@addpagesum{#1}{#5}}}
- % {<true>}{<false>}
- \def\blx@ifcitesingle{%
- \ifnum\c@citetotal=\@ne
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi}
- % hyperref interface
- \appto\blx@mkhyperref{%
- \protected\def\blx@imc@bibhyperref{%
- \@ifnextchar[%]
- {\blx@bibhyperref}
- {\blx@bibhyperref[\abx@field@entrykey]}}%
- \ifundef\hyper@natanchorstart
- {\long\def\blx@bibhyperref[#1]#2{%
- \blx@sfsave\hyperlink{cite.\the\c@refsection @#1}{\blx@sfrest
- #2%
- \blx@sfsave}\blx@sfrest}%
- \protected\long\def\blx@imc@bibhyperlink#1#2{%
- \blx@sfsave\hyperlink{cite.\the\c@refsection:#1}{\blx@sfrest
- #2%
- \blx@sfsave}\blx@sfrest}%
- \protected\long\def\blx@imc@bibhypertarget#1#2{%
- \blx@sfsave\hypertarget{cite.\the\c@refsection:#1}{\blx@sfrest
- #2%
- \blx@sfsave}\blx@sfrest}}%
- {\long\def\blx@bibhyperref[#1]#2{%
- \blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest
- #2%
- \blx@sfsave\hyper@natlinkend\blx@sfrest}%
- \protected\long\def\blx@imc@bibhyperlink#1#2{%
- \blx@sfsave\hyper@natlinkstart{\the\c@refsection:#1}\blx@sfrest
- #2%
- \blx@sfsave\hyper@natlinkend\blx@sfrest}%
- \protected\long\def\blx@imc@bibhypertarget#1#2{%
- \blx@sfsave\hyper@natanchorstart{\the\c@refsection:#1}\blx@sfrest
- #2%
- \blx@sfsave\hyper@natanchorend\blx@sfrest}}
- \let\blx@imc@ifhyperref\@firstoftwo
- \def\blx@sf{\spacefactor}%
- \def\blx@sfsave{%
- \blx@leavevmode
- \numgdef\blx@sf{\spacefactor}}%
- \def\blx@sfrest{%
- \ifhmode\spacefactor\blx@sf\relax\fi
- \gdef\blx@sf{\spacefactor}}}
- \appto\blx@mknohyperref{%
- \protected\def\blx@imc@bibhyperref{\@ifnextchar[\blx@nohyperref\@firstofone}%
- \def\blx@nohyperref[#1]#2{#2}%
- \let\blx@imc@bibhyperlink\@secondoftwo
- \let\blx@imc@bibhypertarget\@secondoftwo
- \let\blx@imc@ifhyperref\@secondoftwo}
- \blx@regimcs{%
- \bibhyperref \bibhyperlink \bibhypertarget \ifhyperref}
- % {<entrykey>,...}
- \protected\def\nocite#{\blx@nocite}
- \def\blx@nocite#1{%
- \@bsphack
- \AfterPreamble{%
- \iftoggle{blx@bibliography}
- {}
- {\ifstrequal{*}{#1}
- {\blx@nocitation@all}
- {\blx@xsanitizeafter{\forcsvlist\blx@nocite@do}{#1}}}}%
- \@esphack}
- \def\blx@nocite@do#1{%
- % Make sure this counter exists. Sometimes it might not when using, e.g:
- % refsection=chapter and \includeonly to put in the chapters or when
- % inserting citations into table of contents
- \ifcscounter{blx@sectionciteorder@\the\c@refsection}
- {}
- {\expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname}%
- \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
- \blx@nocitation{#1}\blx@msg@cundef}
- % {<macro>}[<arg1>][<arg2>]{<arg3>}
- % => <macro>{<arg1>}{<arg2>}{<arg3>}
- \protected\def\blx@citeargs#1{%
- \@ifnextchar[%]
- {\blx@citeargs@i{#1}}
- {\blx@citeargs@iii{#1{}{}}}}
- \long\def\blx@citeargs@i#1[#2]{%
- \@ifnextchar[%]
- {\blx@citeargs@ii{#1{#2}}}
- {\blx@citeargs@iii{#1{}{#2}}}}
- \long\def\blx@citeargs@ii#1[#2]{%
- \blx@citeargs@iii{#1{#2}}}
- \long\def\blx@citeargs@iii#1#2{%
- \blx@xsanitizeafter{#1}{#2}}
- % {<macro>}(<arg1>)(<arg2>)
- % => <macro>{<arg1>}{<arg2>}
- \protected\def\blx@multiargs#1{%
- \@ifnextchar(%)
- {\blx@multiargs@i{#1}}
- {#1{}{}}}
- \long\def\blx@multiargs@i#1(#2){%
- \@ifnextchar(%)
- {\blx@multiargs@ii{#1{#2}}}
- {#1{}{#2}}}
- \long\def\blx@multiargs@ii#1(#2){#1{#2}}
- % {<macro>}[<arg1>][<arg2>]{<arg3>}<punct>
- % => <macro>{<arg1>}{<arg2>}{<arg3>}{<punctcmd>}
- \protected\def\blx@citepunct#1{%
- \blx@citeargs{\blx@citepunct@i{#1}}}
- \long\def\blx@citepunct@i#1#2#3#4{%
- \blx@thecheckpunct{#1{#2}{#3}{#4}}}
- % {<csname>}[<arg1>][<arg2>]{arg3}[arg4]{arg5}<punct>
- % => <macro>{<arg1>}{<arg2>}{<arg3>}{<arg4>}{arg5}{<punctcmd>}
- \protected\def\blx@citexpunct#1{%
- \blx@citeargs{\blx@citexpunct@i{#1}}}
- \long\def\blx@citexpunct@i#1#2#3#4{%
- \@ifnextchar[%]
- {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}}
- {\blx@citexpunct@ii{#1}{{#2}{#3}{#4}}[#1]}}
- \long\def\blx@citexpunct@ii#1#2[#3]#4{%
- \blx@thecheckpunct{\blxcitecmd{#1}#2{#3}{#4}}}
- % {<code>}<punct> => <code>{<punctcmd>}
- \long\def\blx@checkpunct#1{%
- \begingroup
- \def\blx@tempa{\endgroup#1}%
- \futurelet\blx@tempb\blx@checkpunct@i}
- \def\blx@checkpunct@i{%
- \expandafter\blx@checkpunct@ii\blx@autopunct&}
- \def\blx@checkpunct@ii#1{%
- \ifx#1&%
- \expandafter\blx@checkpunct@iii
- \fi
- \ifx#1\blx@tempb
- \expandafter\blx@checkpunct@iv
- \fi
- \blx@checkpunct@ii}
- \def\blx@checkpunct@iii#1\blx@checkpunct@ii{%
- \global\undef\abx@field@postpunct
- \blx@tempa{\blx@postpunct}}
- \def\blx@checkpunct@iv#1\blx@checkpunct@ii#2{%
- \gdef\abx@field@postpunct{#3}%
- \edef\blx@tempa{%
- \expandonce\blx@tempa{%
- \ifcsdef{blx@pm@\detokenize{#3}}
- {\csname blx@imc@add\csname blx@pm@\detokenize{#3}\endcsname
- \endcsname}
- {\noexpand#3}}}%
- \blx@tempa}
- \long\def\blx@nocheckpunct#1{#1{}}
- \protected\def\blx@citeinit{%
- \iftoggle{blx@bibliography}
- {}
- {\toggletrue{blx@citation}}%
- \blx@blxinit
- \blx@langstrings
- \citesetup
- \blx@setsfcodes
- \blx@postpunct@agroup
- \blx@resetdata
- \blx@leavevmode
- \csuse{blx@hook@cite}%
- \csuse{blx@hook@cite@next}%
- \let\blx@citeinit\blx@resetdata}
- \protected\def\blx@citecmdinit{%
- \blx@leavevmode@cite
- \iftoggle{blx@bibliography}
- {}
- {\blx@initunit}}
- % *{<command>}[<wrapper>]{<precode>}{<loopcode>}{<delimcode>}{<postcode>}
- \newrobustcmd*{\DeclareCiteCommand}{%
- \@ifstar{\blx@defcitecmd*}{\blx@defcitecmd{}}}
- \def\blx@defcitecmd#1#2{%
- \begingroup
- \escapechar\m@ne
- \edef\blx@tempa{\endgroup
- \noexpand\blx@defcitecmd@i{#1}{\string#2}}%
- \blx@tempa}
- \def\blx@defcitecmd@i#1#2{%
- \blx@checkcitecmd{#2}{#1}%
- \protected\csdef{#2}{%
- \blx@citecmdinit
- \@ifstar
- {\blx@citepunct{\blxcitecmd{#2*}}}
- {\blx@citepunct{\blxcitecmd{#2}}}}%
- \@ifnextchar[%]
- {\blx@defcitecmd@iii{#2#1}}
- {\blx@defcitecmd@ii{#2#1}}}
- \long\def\blx@defcitecmd@ii#1{%
- \csundef{blx@defcite@wrapper@#1}%
- \blx@defcitecmd@iv{#1}%
- \blx@defcitecmd@v{#1}}
- \long\def\blx@defcitecmd@iii#1[#2]{%
- \csdef{blx@defcite@wrapper@#1}{#2}%
- \blx@defcitecmd@iv{#1}%
- \blx@defcitecmd@v{#1}}
- \long\def\blx@defcitecmd@iv#1{%
- \protected\long\csedef{blx@cite@#1}##1##2##3##4{%
- \ifboolexpe{test {\ifcsundef{blx@defcite@wrapper@#1}}
- and
- (test {\ifcsundef{blx@citepunct@#1}}
- or
- test {\ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}})}
- {}
- {\begingroup
- \blx@citeinit}%
- \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@l}
- {\noexpand\unspace##4}
- {}%
- \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@f}
- {\noexpand\iftoggle{blx@footnote}{}{\unspace##4}}
- {}%
- \ifcsundef{blx@defcite@wrapper@#1}
- {\blxciteicmd{#1}{##1}{##2}{##3}{%
- \ifcsundef{blx@citepunct@#1}{##4}{}%
- \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}{##4}{}}}
- {\csexpandonce{blx@defcite@wrapper@#1}{%
- \blxciteicmd{#1}{##1}{##2}{##3}{%
- \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}{##4}{}}}%
- \ifcsundef{blx@citepunct@#1}{##4}{}}%
- \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@r}{##4}{}%
- \ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@f}
- {\noexpand\iftoggle{blx@footnote}{##4}{}}
- {}%
- \ifboolexpe{test {\ifcsundef{blx@defcite@wrapper@#1}}
- and
- (test {\ifcsundef{blx@citepunct@#1}}
- or
- test {\ifcsequal{blx@citepunct@#1}{blx@citepunctid@pos@c}})}
- {}
- {\endgroup}}}
- \long\def\blx@defcitecmd@v#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{\delimcontext{#1}#2}%
- \def\blx@loopcode{#3}%
- \def\blx@dlimcode{#4}%
- \def\blx@postcode{#5}%
- \def\blx@postpunct@saved{##4}%
- \edef\blx@smugglecode{%
- \unless\ifnum\c@overallcitetotal=\z@
- \noexpand\blx@smuggle@counter
- \noexpand\c@overallcitecount
- \fi}%
- \blx@citeloop{##3}%
- \blx@smugglecode
- \endgroup}}
- % Leave the value of a counter outside a group
- \def\blx@smuggle@counter#1\endgroup{%
- \expandafter\endgroup\expandafter#1\the#1\relax}
- % {<type>}{<name>}{*}
- \def\blx@checkcitecmd#1#2{%
- \ifblank{#2}
- {\ifcsdef{blx@cite@#1}
- {\blx@info{Redefining '\@backslashchar#1'}}
- {\ifcsundef{#1}
- {}
- {\blx@warning@noline{Redefining '\@backslashchar#1'}}}%
- \ifcsdef{blx@cite@#1*}
- {}
- {\csedef{blx@cite@#1*}{%
- \expandafter\noexpand\csname blx@cite@#1\endcsname}%
- \csedef{blx@citei@#1*}{%
- \expandafter\noexpand\csname blx@citei@#1\endcsname}}}
- {\ifcsdef{blx@cite@#1}
- {}
- {\csdef{blx@cite@#1}{\blx@err@citecmd{#1}}%
- \csdef{blx@citei@#1}{\blx@err@citecmd{#1}}}}}
- % {<name>}{prenote}{postnote}{citekey}{punct}
- \newrobustcmd*{\blxcitecmd}[1]{%
- \ifcsundef{blx@cite@#1}
- {\blx@err@citecmd{#1}}
- {\csuse{blx@cite@#1}}}
- \newrobustcmd*{\blxciteicmd}[1]{%
- \begingroup
- \blx@citeinit
- \ifcsundef{blx@citei@#1}
- {\blx@err@citecmd{#1}}
- {\csuse{blx@citei@#1}}}
- % {<multicitecount>}{<name>}{prenote}{postnote}{citekey}{punct}
- \protected\def\blxmciteicmd#1{%
- \c@multicitecount#1\relax
- \blxciteicmd}
- % {<multicitetotal>}{<multiprenote>}{<multipostnote>}
- \protected\def\blxmcites#1#2#3{%
- \begingroup
- \blx@citeinit
- \c@multicitecount\z@
- \c@multicitetotal#1\relax
- \ifnum\c@multicitetotal>\@ne
- \let\blx@ifcitesingle\@secondoftwo
- \fi
- \csuse{blx@hook@mcite}%
- \csuse{blx@hook@mcite@next}%
- \ifblank{#2}%
- {}
- {\def\abx@field@multiprenote{#2}}%
- \ifblank{#3}%
- {}
- {\def\abx@field@multipostnote{#3}}%
- \usebibmacro{multiprenote}}
- \protected\def\blxendmcites{%
- \usebibmacro{multipostnote}%
- \endgroup}
- % {<command>}[<wrapper>]{<cite>}{<delimiter>}
- \newrobustcmd{\DeclareMultiCiteCommand}[1]{%
- \ifundef#1%
- {}
- {\blx@info{Redefining '\string#1'}}%
- \@ifnextchar[%]
- {\blx@defmcitecmd{#1}}
- {\blx@defmcitecmd{#1}[\@firstofone]}}
- \def\blx@defmcitecmd#1[#2]#3#4{%
- \begingroup
- \escapechar\m@ne
- \edef\blx@tempa{\endgroup
- \protected\def\noexpand#1{%
- \blx@citecmdinit
- \noexpand\@ifstar
- {\expandafter\noexpand
- \csname blx@mcite@\string#1\endcsname*%
- \expandafter\noexpand
- \csname blx@mcitei@\string#1\endcsname}
- {\expandafter\noexpand
- \csname blx@mcite@\string#1\endcsname{}%
- \expandafter\noexpand
- \csname blx@mcitei@\string#1\endcsname}}%
- \protected\csdef{blx@mcite@\string#1}####1####2{%
- \begingroup
- \blx@citeinit
- \noexpand\blx@multicite
- ####2%
- {\unexpanded{#2}}%
- {\string#3####1}%
- {\unexpanded{#4}}}%
- \protected\long\csdef{blx@mcitei@\string#1}}%
- \blx@tempa##1##2##3{##1{##2}##3\endgroup}}
- % {<command>}{<wrapper>}{<citecmd>}{<delimiter>} =>
- % <init><command>{<wrapper>}{<cites>}{<punct>}
- \def\blx@multicite#1#2#3#4{%
- \begingroup
- \csuse{blx@hook@mcite@before}%
- \def\blx@tempa{#1}%
- \def\blx@tempb{#2}%
- \def\blx@tempc{#3}%
- \def\blx@tempd{#4}%
- \c@multicitetotal\z@
- \blx@multiargs\blx@multicite@i}
- \def\blx@multicite@i#1#2{%
- \ifblank{#1}%
- {\let\abx@field@multiprenote\@empty}%
- {\def\abx@field@multiprenote{#1}}%
- \ifblank{#2}%
- {\let\abx@field@multipostnote\@empty}%
- {\def\abx@field@multipostnote{#2}}%
- \let\blx@tempe\@empty
- \let\blx@tempf\@empty
- \togglefalse{blx@tempa}%
- \blx@multiparse}
- \iftrue
- % Option 1:
- % Use \blx@citeloop to handle the sorting and compression of citations here.
- % I disable \blx@thenotecheck, \multicitedelim, and \blx@postpunct@saved to
- % avoid premature output. Then I use \blx@tempcntc (a and b are already used
- % internally by \blx@citeloop) to keep track of the number of citations,
- % increasing it with \blx@citeprint, which would otherwise print each
- % citation. The only global assignment in \blx@citeloop is reversed later.
- % Finally smuggle \blx@tempcntc one level to add it to \c@overallcitetotal
- % Pros: Concise code (I guess). No need to make an almost exact copy of an
- % already working code.
- % Cons: Might have unpredicted effects due to the misuse of the macro (I didn't
- % find any, though, but I'm good at missing obvious problems :).
- \def\blx@multicite@add#1#2#3{%
- \togglefalse{blx@tempa}%
- \advance\c@multicitetotal\@ne
- \begingroup
- \let\blx@thenotecheck\@empty
- \let\multicitedelim\@empty
- \let\blx@postpunct@saved\@empty
- \blx@tempcntc\z@
- \def\blx@citeprint##1{\advance\blx@tempcntc\@ne}%
- \blx@citeloop{#3}% (mis)using to sort the citations
- \global\advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\m@ne% Undoing global things
- \blx@smuggle@counter\blx@tempcntc
- \endgroup
- \advance\c@overallcitetotal\blx@tempcntc
- \eappto\blx@tempe{%
- \expandonce\blx@tempf
- \blxmciteicmd{\the\c@multicitetotal}%
- {\expandonce\blx@tempc}\unexpanded{{#1}{#2}{#3}}{}}%
- \let\blx@tempf\blx@tempd
- \blx@multiparse}
- \else
- % Option 2:
- % Copy \blx@citeloop and remove unnecessary code for the sorting/compressing
- % step. Use the counted number of citations (\blx@tempcnta) to \advance the
- % \c@overallcitetotal and smuggle the \c@overallcitetotal outside of the group.
- % Pros: Does not mess with the citation loop code (supposedly), and can possibly
- % be optimized.
- % Cons: Code (sort of) duplication.
- \def\blx@multicite@add#1#2#3{%
- \togglefalse{blx@tempa}%
- \advance\c@multicitetotal\@ne
- \begingroup
- \blx@overallcitecount@loop{#3}%
- \advance\c@overallcitetotal\blx@tempcnta
- \blx@smuggle@counter\c@overallcitetotal
- \endgroup
- \eappto\blx@tempe{%
- \expandonce\blx@tempf
- \blxmciteicmd{\the\c@multicitetotal}%
- {\expandonce\blx@tempc}\unexpanded{{#1}{#2}{#3}}{}}%
- \let\blx@tempf\blx@tempd
- \blx@multiparse}
- % {<entrykey>,...}
- \protected\def\blx@overallcitecount@loop#1{%
- \expandafter\blx@overallcitecount@loop@i\expandafter{\detokenize{#1}}}
- \protected\def\blx@overallcitecount@loop@i#1{%
- \begingroup
- % This must be here and not after \blx@citeadd as this changes the refcontext
- \letcs\blx@tempb{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}%
- \ifundef\blx@tempb
- {\let\blx@tempb\@empty}
- {}%
- % Make sure this counter exists. Sometimes it might not when using, e.g:
- % refsection=chapter and \includeonly to put in the chapters or when
- % inserting citations into table of contents
- \ifcscounter{blx@sectionciteorder@\the\c@refsection}
- {}
- {\expandafter\newcount\csname blx@sectionciteorder@\the\c@refsection\endcsname}%
- % \global% Remove global but keep the \advance (though I have no idea what this counter does)
- \advance\csname blx@sectionciteorder@\the\c@refsection\endcsname\@ne
- \blx@tempcnta\z@
- \blx@tempcntb\z@
- \let\blx@tempa\@empty
- \forcsvlist\blx@citeadd{#1}% adds to \blx@tempa
- % \blx@thenotecheck % Unnecessary/unwated code here
- % \ifnum\blx@tempcnta>\z@
- % \ifnum\blx@tempcntb>\z@
- % \multicitedelim
- % \fi
- % \else
- % \blx@postpunct@saved
- % \fi
- % \blx@tempb is a sorted list of all cites, \blx@tempa is the list of cites to
- % sort using this list
- \blx@thecitesort
- \blx@smuggle@counter\blx@tempcnta
- \endgroup}
- \fi
- \def\blx@multicite@end#1{%
- \edef\blx@tempa{\endgroup
- \c@overallcitetotal\the\c@overallcitetotal\relax
- \expandonce\blx@tempa
- {\expandonce\blx@tempb}%
- {\blxmcites
- {\the\c@multicitetotal}%
- {\expandonce\abx@field@multiprenote}%
- {\expandonce\abx@field@multipostnote}%
- \expandonce\blx@tempe
- \blxendmcites}%
- {#1}%
- \iftoggle{blx@tempa}{\relax\space}{}}%
- \blx@tempa}
- \def\blx@multiparse{%
- \futurelet\@let@token\blx@multiparse@i}
- \def\blx@multiparse@i{%
- \ifx\@let@token\relax
- \blx@multiparse@ii{\blx@multicite@end{}}%
- \fi
- \ifx\@let@token[%]
- \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}%
- \fi
- \ifx\@let@token\bgroup
- \blx@multiparse@ii{\blx@citeargs\blx@multicite@add}%
- \fi
- \ifx\@let@token\@sptoken
- \blx@multiparse@ii\blx@multiparse@iii
- \fi
- \iftrue
- \iftoggle{blx@tempa}
- {\blx@multiparse@ii{\blx@multicite@end{}}}
- {\blx@multiparse@ii{\blx@thecheckpunct\blx@multicite@end}}%
- \fi
- &}
- \def\blx@multiparse@ii#1#2&{\fi#1}
- \csdef{blx@multiparse@iii} {\toggletrue{blx@tempa}\blx@multiparse}
- % {<name>}[l|i|r]{<cite>}{<multicite>}
- \newrobustcmd*{\DeclareAutoCiteCommand}[1]{%
- \ifcsundef{blx@acite@#1}
- {}
- {\blx@info{Redefining autocite command '#1'}}%
- \@ifnextchar[%]
- {\blx@defautocmd@i{#1}}
- {\blx@defautocmd@i{#1}[r]}}
- \def\blx@defautocmd@i#1[#2]#3#4{%
- \begingroup
- \escapechar\m@ne
- \edef\blx@tempa{\endgroup
- \noexpand\blx@defautocmd@ii{#1}{#2}%
- {\string#3}{\string#4}}%
- \blx@tempa}
- \def\blx@defautocmd@ii#1#2#3#4{%
- \protected\csedef{blx@acite@#1}{%
- \blx@citecmdinit
- \noexpand\@ifstar
- {\blx@citepunct{\expandafter\noexpand
- \csname blx@acitei@#1\endcsname*}}
- {\blx@citepunct{\expandafter\noexpand
- \csname blx@acitei@#1\endcsname{}}}}%
- \protected\csedef{blx@acitei@#1}##1##2##3##4##5{%
- \begingroup
- \blx@citeinit
- \if l#2\noexpand\unspace##5\fi
- \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##5}\fi
- \blxcitecmd{#3##1}{##2}{##3}{##4}{}%
- \if r#2##5\fi
- \if f#2\noexpand\iftoggle{blx@footnote}{##5}{}\fi
- \endgroup}%
- \protected\csedef{blx@macite@#1}{%
- \blx@citecmdinit
- \noexpand\@ifstar
- {\expandafter\noexpand
- \csname blx@macitei@#1\endcsname*%
- \expandafter\noexpand
- \csname blx@maciteii@#1\endcsname}
- {\expandafter\noexpand
- \csname blx@macitei@#1\endcsname{}%
- \expandafter\noexpand
- \csname blx@maciteii@#1\endcsname}}%
- \csedef{blx@macitei@#1}{\csname blx@mcite@#4\endcsname}%
- \protected\csedef{blx@maciteii@#1}##1##2##3{%
- \if l#2\noexpand\unspace##3\fi
- \if f#2\noexpand\iftoggle{blx@footnote}{}{\unspace##3}\fi
- ##1{##2}%
- \if r#2##3\fi
- \if f#2\noexpand\iftoggle{blx@footnote}{##3}{}\fi
- \endgroup}}
- % {<characters>}
- \newrobustcmd*{\DeclareAutoPunctuation}[1]{%
- \ifblank{#1}
- {\let\blx@thecheckpunct\blx@nocheckpunct}
- {\let\blx@thecheckpunct\blx@checkpunct
- \def\blx@autopunct{#1}}}
- % {<command>}{<pos marker>}
- % pos markers are:
- % l: move punctuation before the command (i.e. left of it)
- % r: leave punctuation after the command (i.e. to the right)
- % f: like l in normal text, like r in footnotes
- % c: pass on to the cite command,
- % the punctuation will eventually end up as field 'postpunct'
- % d: discard the punctuation
- % o (or any other value): restores the old standard behaviour
- % r for wrapped citation commands,
- % c for unwrapped ones
- \newrobustcmd*{\DeclareCitePunctuationPosition}[2]{%
- \begingroup
- \escapechar\m@ne
- \edef\blx@tempa{\endgroup
- \noexpand\blx@defcitepunctpos@i{\string#1}{#2}}%
- \blx@tempa}
- \def\blx@citepunctid@pos@l{l}
- \def\blx@citepunctid@pos@r{r}
- \def\blx@citepunctid@pos@f{f}
- \def\blx@citepunctid@pos@c{c}
- \def\blx@citepunctid@pos@d{d}
- \def\blx@defcitepunctpos@i#1#2{%
- \ifcsundef{blx@citepunctid@pos@#2}
- {\csundef{blx@citepunct@#1}}
- {\csletcs{blx@citepunct@#1}{blx@citepunctid@pos@#2}}%
- \blx@defcitecmd@iv{#1}}
- \AfterEndPreamble{% babel
- \begingroup
- \makeatletter
- \endlinechar\m@ne
- \scantokens\expandafter{%
- \expandafter\gdef
- \expandafter\blx@autopunct
- \expandafter{\blx@autopunct}}%
- \endgroup}
- % [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<namelist>}<punct>
- \newrobustcmd*{\citename}{\blx@citexpunct{citename}}
- \long\csdef{blx@cite@citename}#1#2#3#4#5#6{%
- \begingroup
- \blx@citecmdinit
- \blx@citeinit
- \ifblank{#1}
- {}
- {\def\abx@field@prenote{#1}}%
- \ifblank{#2}
- {\let\blx@thenotecheck\relax}
- {\def\abx@field@postnote{#2}}%
- \def\blx@precode{\usebibmacro{prenote}}%
- \def\blx@loopcode{%
- \ifnameundef{#5}
- {\blx@warning@entry{'#5' undefined or not a name list}%
- \abx@missing{#5}}
- {\printnames[#4]{#5}}}%
- \def\blx@dlimcode{\multicitedelim}%
- \def\blx@postpunct@saved{#6}%
- \ifblank{#2}
- {\let\blx@postcode\@empty}
- {\def\blx@postcode{\usebibmacro{postnote}}}%
- \boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \blx@citeloop{#3}%
- \endgroup}
- % [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<list>}<punct>
- \newrobustcmd*{\citelist}{\blx@citexpunct{citelist}}
- \long\csdef{blx@cite@citelist}#1#2#3#4#5#6{%
- \begingroup
- \blx@citecmdinit
- \blx@citeinit
- \ifblank{#1}
- {}
- {\def\abx@field@prenote{#1}}%
- \ifblank{#2}
- {\let\blx@thenotecheck\relax}
- {\def\abx@field@postnote{#2}}%
- \def\blx@precode{\usebibmacro{prenote}}%
- \def\blx@loopcode{%
- \iflistundef{#5}
- {\blx@warning@entry{'#5' undefined or not a literal list}%
- \abx@missing{#5}}
- {\printlist[#4]{#5}}}%
- \def\blx@dlimcode{\multicitedelim}%
- \def\blx@postpunct@saved{#6}%
- \ifblank{#2}
- {\let\blx@postcode\@empty}
- {\def\blx@postcode{\usebibmacro{postnote}}}%
- \boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \blx@citeloop{#3}%
- \endgroup}
- % [<prenote>][<postnote>]{<entrykey>,...}[<format>]{<field>}<punct>
- \newrobustcmd*{\citefield}{\blx@citexpunct{citefield}}
- \long\csdef{blx@cite@citefield}#1#2#3#4#5#6{%
- \begingroup
- \blx@citecmdinit
- \blx@citeinit
- \ifblank{#1}
- {}
- {\def\abx@field@prenote{#1}}%
- \ifblank{#2}
- {\let\blx@thenotecheck\relax}
- {\def\abx@field@postnote{#2}}%
- \def\blx@precode{\usebibmacro{prenote}}%
- \def\blx@loopcode{%
- \iffieldundef{#5}
- {\blx@warning@entry{'#5' undefined or not a field}%
- \abx@missing{#5}}
- {\printfield[#4]{#5}}}%
- \def\blx@dlimcode{\multicitedelim}%
- \def\blx@postpunct@saved{#6}%
- \ifblank{#2}
- {\let\blx@postcode\@empty}
- {\def\blx@postcode{\usebibmacro{postnote}}}%
- \boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \blx@citeloop{#3}%
- \endgroup}
- \renewrobustcmd*{\cite}{\blx@err@citecmd\cite}
- \let\blx@cite@cite\relax
- \newrobustcmd*{\parencite}{\blx@warn@citecmd\parencite\cite}
- \let\blx@cite@parencite\relax
- \newrobustcmd*{\footcite}{\blx@warn@citecmd\footcite\cite}
- \let\blx@cite@footcite\relax
- \newrobustcmd*{\footcitetext}{\blx@warn@citecmd\footcitetext\cite}
- \let\blx@cite@footcitetext\relax
- \newrobustcmd*{\smartcite}{\blx@warn@citecmd\smartcite\cite}
- \let\blx@cite@smartcite\relax
- \newrobustcmd*{\textcite}{\blx@warn@citecmd\textcite\cite}
- \let\blx@cite@textcite\relax
- \newrobustcmd*{\supercite}{\blx@warn@citecmd\supercite\cite}
- \let\blx@cite@supercite\relax
- %% ifthen interface
- \def\blx@TE#1#2{%
- \TE@throw
- \unexpanded{%
- \iftrue\@nameuse{fi}%
- #1{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2}
- \def\blx@xTE#1#2{%
- \TE@throw
- \unexpanded{\iftrue\@nameuse{fi}}%
- #1\unexpanded{{\@nameuse{iftrue}}{\@nameuse{iffalse}}}#2}
- \let\blx@TE@hook\@empty
- \appto\blx@blxinit{%
- \appto\blx@TE@hook{%
- \def\ifhyperref{\blx@TE\blx@imc@ifhyperref}%
- \def\ifmorenames{\blx@TE\blx@imc@ifmorenames}%
- \def\ifmoreitems{\blx@TE\blx@imc@ifmoreitems}%
- \def\iffirstcitekey{\blx@TE\blx@imc@iffirstcitekey}%
- \def\iflastcitekey{\blx@TE\blx@imc@iflastcitekey}%
- \def\ifciteseen{\blx@TE\blx@imc@ifciteseen}%
- \def\ifentryseen{\blx@TE\blx@imc@ifentryseen}%
- \def\ifentryinbib{\blx@TE\blx@imc@ifentryinbib}%
- \def\ifciteibid{\blx@TE\blx@imc@ifciteibid}%
- \def\ifciteidem{\blx@TE\blx@imc@ifciteidem}%
- \def\ifopcit{\blx@TE\blx@imc@ifopcit}%
- \def\ifloccit{\blx@TE\blx@imc@ifloccit}%
- \def\ifsamepage{\blx@TE\blx@imc@ifsamepage}%
- \def\iffirstonpage{\blx@TE\blx@imc@iffirstonpage}%
- \def\ifcurrentfield#1{\blx@TE{\blx@imc@ifcurrentfield{#1}}}%
- \def\ifcurrentlist#1{\blx@TE{\blx@imc@ifcurrentlist{#1}}}%
- \def\ifcurrentname#1{\blx@TE{\blx@imc@ifcurrentname{#1}}}%
- \def\ifentrytype#1{\blx@TE{\blx@imc@ifentrytype{#1}}}%
- \def\iffieldequalcs#1#2{\blx@TE{\blx@imc@iffieldequalcs{#1}{#2}}}%
- \def\iffieldequals#1#2{\blx@TE{\blx@imc@iffieldequals{#1}{#2}}}%
- \def\iffieldequalstr#1#2{\blx@TE{\blx@imc@iffieldequalstr{#1}{#2}}}%
- \def\iffieldsequal#1#2{\blx@TE{\blx@imc@iffieldsequal{#1}{#2}}}%
- \def\ifbibmacroundef#1{\blx@TE{\blx@imc@ifbibmacroundef{#1}}}%
- \def\iffieldundef#1{\blx@TE{\blx@imc@iffieldundef{#1}}}%
- \def\ifnameequalcs#1#2{\blx@TE{\blx@imc@ifnameequalcs{#1}{#2}}}%
- \def\ifnameequals#1#2{\blx@TE{\blx@imc@ifnameequals{#1}{#2}}}%
- \def\ifnamesequal#1#2{\blx@TE{\blx@imc@ifnamesequal{#1}{#2}}}%
- \def\ifnameundef#1{\blx@TE{\blx@imc@ifnameundef{#1}}}%
- \def\ifcategory#1{\blx@TE{\blx@imc@ifcategory{#1}}}%
- \def\ifkeyword#1{\blx@TE{\blx@imc@ifkeyword{#1}}}%
- \def\ifentrycategory#1#2{\blx@TE{\blx@imc@ifentrycategory{#1}{#2}}}%
- \def\ifentrykeyword#1#2{\blx@TE{\blx@imc@ifentrykeyword{#1}{#2}}}%
- \def\ifcapital{\blx@TE\blx@imc@ifcapital}%
- \def\ifinteger#1{\blx@TE{\blx@imc@ifinteger{#1}}}%
- \def\iffieldint#1{\blx@TE{\blx@imc@iffieldint{#1}}}%
- \def\ifnumeral#1{\blx@TE{\blx@imc@ifnumeral{#1}}}%
- \def\ifnumerals#1{\blx@TE{\blx@imc@ifnumerals{#1}}}%
- \def\ifpages#1{\blx@TE{\blx@imc@ifpages{#1}}}%
- \def\iffieldnum#1{\blx@TE{\blx@imc@iffieldnum{#1}}}%
- \def\iffieldnums#1{\blx@TE{\blx@imc@iffieldnums{#1}}}%
- \def\iffieldpages#1{\blx@TE{\blx@imc@iffieldpages{#1}}}%
- \def\ifbibstring#1{\blx@TE{\blx@imc@ifbibstring{#1}}}%
- \def\iffieldbibstring#1{\blx@TE{\blx@imc@iffieldbibstring{#1}}}%
- \def\ifnatbibmode{\blx@TE{\iftoggle{blx@natbib}}}%
- \def\ifcitation{\blx@TE{\iftoggle{blx@citation}}}%
- \def\ifbibliography{\blx@TE{\iftoggle{blx@bibliography}}}%
- \def\ifciteindex{\blx@TE{\iftoggle{blx@citeindex}}}%
- \def\ifbibindex{\blx@TE{\iftoggle{blx@bibindex}}}%
- \def\iffootnote{\blx@TE{\iftoggle{blx@footnote}}}%
- \def\ifuseprefix{\blx@TE{\iftoggle{blx@useprefix}}}%
- \def\ifterseinits{\blx@TE{\iftoggle{blx@terseinits}}}%
- \def\ifsingletitle{\blx@TE{\iftoggle{abx@bool@singletitle}}}%
- \def\ifnocite{\blx@TE{\iftoggle{abx@bool@nocite}}}%
- \def\ifuniquetitle{\blx@TE{\iftoggle{abx@bool@uniquetitle}}}%
- \def\ifuniquebaretitle{\blx@TE{\iftoggle{abx@bool@uniquebaretitle}}}%
- \def\ifuniquework{\blx@TE{\iftoggle{abx@bool@uniquework}}}%
- \def\ifuniqueprimaryauthor{\blx@TE{\iftoggle{abx@bool@uniqueprimaryauthor}}}%
- \def\ifandothers#1{\blx@TE{\iftoggle{abx@bool@more#1}}}%
- \def\iflabeldateisdate{\blx@TE\blx@imc@iflabeldateisdate}%
- \def\ifdatehasyearonlyprecision#1{%
- \blx@TE{\blx@imc@ifdatehasyearonlyprecision{#1}}}%
- \def\ifdatehastime#1{\blx@TE{\blx@imc@ifdatehastime{#1}}}%
- \def\ifdateshavedifferentprecision#1#2{%
- \blx@TE{\blx@imc@ifdateshavedifferentprecision{#1}{#2}}}%
- \def\ifdateyearsequal#1#2{%
- \blx@TE{\blx@imc@ifdateyearsequal{#1}{#2}}}}}
- % {<listmacro>}{<filtercsname>} => matches in <listmacro>
- \protected\def\blx@bibfilter#1#2{%
- \begingroup
- \edef\blx@do##1{%
- \def\noexpand\blx@flt@item{##1}%
- \ifboolexpr{\csexpandonce{#2}}%
- {\listadd\noexpand\blx@tempa{##1}}%
- {}}%
- \let\blx@done\relax
- \edef\blx@tempa{%
- \let\noexpand\blx@tempa\noexpand\@empty
- \blx@listloop{#1}}%
- \blx@tempa
- \edef\blx@tempa{\endgroup
- \def\noexpand#1{\blx@tempa}}%
- \blx@tempa}
- %% Auxiliary macros
- \newrobustcmd*{\mkbibquote}{\blx@enquote}
- \protected\def\blx@imc@mkbibquote{%
- \blx@ifuspunct\blx@usquote\blx@enquote}
- \def\blx@usquote{%
- \ifnum\@quotelevel>\z@
- \expandafter\blx@usiquote
- \else
- \expandafter\blx@usoquote
- \fi}
- \long\def\blx@usoquote#1{%
- \begingroup
- \blx@initoquote
- \blx@textooquote#1%
- \futurelet\@let@token\blx@usoquote@i}
- \def\blx@usoquote@i{%
- \blx@usqcheck
- {\ifx\blx@postpunct\@empty\else\blx@dopostpunct\fi
- \blx@textcoquote\endgroup}
- {\blx@setpostpunct\blx@textcoquote\endgroup}}
- \long\def\blx@usiquote#1{%
- \begingroup
- \blx@initiquote
- \blx@textoiquote#1%
- \futurelet\@let@token\blx@usiquote@i}
- \def\blx@usiquote@i{%
- \blx@usqcheck
- {\blx@textciquote\endgroup}
- {\blx@setpostpunct\blx@textciquote\endgroup}}
- \long\def\blx@usqcheck#1#2{%
- \def\blx@tempa{#1}%
- \def\blx@tempb{#2}%
- \ifx\@let@token\space
- \blx@usqcheck@i\blx@tempa
- \fi
- \ifx\@let@token\@sptoken
- \blx@usqcheck@i\blx@tempa
- \fi
- \if\noexpand\@let@token\relax
- \expandafter\blx@usqcheck@iv
- \fi
- \expandafter\blx@usqcheck@ii\blx@quotepunct\relax&}
- \long\def\blx@usqcheck@i#1#2&{\fi#1}
- \long\def\blx@usqcheck@ii#1{%
- \if\noexpand#1\relax
- \blx@usqcheck@i\blx@tempa
- \fi
- \if\noexpand#1\noexpand\@let@token
- \blx@usqcheck@i{\blx@usqcheck@iii\blx@tempa}%
- \fi
- \blx@usqcheck@ii
- }
- \long\def\blx@usqcheck@iii#1#2{#2#1}
- \long\def\blx@usqcheck@iv#1{%
- \begingroup
- \escapechar=-1 %
- \edef\blx@tempa{\expandafter\@gobble\string#2}%
- \expandafter\endgroup
- \ifx\blx@tempa\@empty
- \else
- \blx@usqcheck@i\blx@tempb
- \fi
- #1%
- }
- \newrobustcmd*{\mkbibemph}{\emph}
- \protected\long\def\blx@imc@mkbibemph#1{%
- \emph{#1}\blx@imc@setpunctfont\emph}
- \newrobustcmd*{\mkbibbold}{\textbf}
- \protected\long\def\blx@imc@mkbibbold#1{%
- \textbf{#1}\blx@imc@setpunctfont\textbf}
- \newrobustcmd*{\mkbibitalic}{\textit}
- \protected\long\def\blx@imc@mkbibitalic#1{%
- \textit{#1}\blx@imc@setpunctfont\textit}
- \blx@regimcs{\mkbibquote \mkbibemph \mkbibbold \mkbibitalic}
- \newcommand*{\bibleftparen}{\blx@postpunct(}
- \newcommand*{\bibrightparen}{\blx@postpunct)\midsentence}
- \newcommand*{\bibleftbracket}{\blx@postpunct[}
- \newcommand*{\bibrightbracket}{\blx@postpunct]\midsentence}
- \def\blx@parenlevel{%
- \iftoggle{blx@footnote}
- {\blx@parenlevel@foot}
- {\blx@parenlevel@text}}
- \newrobustcmd*{\blx@bibopenparen}{%
- \blx@opencheck\bibopenparen
- \blx@postpunct
- \ifnum\blx@parenlevel=\z@
- \global\blx@parenlevel\@ne
- \global\c@parenlevel\@ne
- \expandafter\bibleftparen
- \else
- \expandafter\blx@openparen
- \fi}
- \newrobustcmd*{\blx@bibopenbracket}{%
- \blx@opencheck\bibopenbracket
- \blx@postpunct
- \ifnum\blx@parenlevel=\z@
- \global\blx@parenlevel1002
- \global\c@parenlevel\@ne
- \expandafter\bibleftbracket
- \else
- \expandafter\blx@openparen
- \fi}
- \newrobustcmd*{\blx@bibcloseparen}{%
- \blx@closecheck\bibcloseparen
- \blx@postpunct\blx@closeparen}
- \newrobustcmd*{\blx@bibclosebracket}{%
- \blx@closecheck\bibclosebracket
- \blx@postpunct\blx@closeparen}
- \def\blx@openparen{%
- \ifodd\blx@parenlevel
- \global\advance\blx@parenlevel\@ne
- \global\advance\c@parenlevel\@ne
- \expandafter\bibleftbracket
- \else
- \global\advance\blx@parenlevel\@ne
- \global\advance\c@parenlevel\@ne
- \expandafter\bibleftparen
- \fi}
- \def\blx@closeparen{%
- \ifodd\blx@parenlevel
- \blx@closeparen@i
- \expandafter\bibrightparen
- \else
- \blx@closeparen@i
- \expandafter\bibrightbracket
- \fi}
- \def\blx@closeparen@i{%
- \ifnum\blx@parenlevel=1002
- \global\blx@parenlevel\z@
- \global\c@parenlevel\z@
- \else
- \global\advance\blx@parenlevel\m@ne
- \global\advance\c@parenlevel\m@ne
- \fi}
- \def\blx@opencheck#1{%
- \ifnum\numexpr\blx@parenlevel+\@ne
- \ifnum\blx@parenlevel>\@m -1001\fi
- >\c@maxparens
- \blx@err@nestparen{\string#1}%
- \blx@errormark
- \fi}
- \def\blx@closecheck#1{%
- \ifnum\numexpr\blx@parenlevel
- \ifnum\blx@parenlevel>\@m -1001\fi
- >\c@maxparens
- \blx@err@nestparen{\string#1}%
- \blx@errormark
- \fi
- \ifnum\blx@parenlevel<\@ne
- \blx@err@matchparen{Unmatched \string#1}%
- \blx@errormark
- \fi}
- \protected\def\blx@errormark{%
- \rule[0.25ex]{1.25ex}{1.25ex}}
- \AtEndDocument{%
- \unless\ifnum\blx@parenlevel@text=\z@
- \blx@err@matchparen{%
- Unbalanced parentheses or brackets in the document body}%
- \fi
- \unless\ifnum\blx@parenlevel@foot=\z@
- \blx@err@matchparen{%
- Unbalanced parentheses or brackets in a foot or endnote}%
- \fi}
- \newrobustcmd{\mkbibparens}[1]{%
- \begingroup
- \blx@blxinit
- \blx@setsfcodes
- \bibopenparen#1\bibcloseparen
- \endgroup}
- \newrobustcmd{\mkbibbrackets}[1]{%
- \begingroup
- \blx@blxinit
- \blx@setsfcodes
- \bibopenbracket#1\bibclosebracket
- \endgroup}
- \newrobustcmd*{\parentext}{\mkbibparens}
- \newrobustcmd*{\brackettext}{\mkbibbrackets}
- \newrobustcmd{\mkbibsuperscript}[1]{%
- \unspace\allowhyphens\textsuperscript{%
- \begingroup
- \protected\long\def\mkbibsuperscript##1{%
- \blx@warning{Nested superscript}%
- \mkbibbrackets{##1}}%
- #1\endgroup}}
- \newrobustcmd{\mkbibfootnote}{\blx@mkbibfootnote{}}
- \newrobustcmd{\mkbibfootnotetext}{\blx@mkbibfootnote{text}}
- \newrobustcmd{\blx@mkbibfootnote}[2]{%
- \iftoggle{blx@footnote}
- {\blx@warning{Nested notes}%
- \addspace\mkbibparens{#2}}
- {\unspace
- \ifnum\blx@notetype=\tw@
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi
- {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}
- {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}}}
- \newrobustcmd{\mkbibendnote}{\blx@mkbibendnote{}}
- \newrobustcmd{\mkbibendnotetext}{\blx@mkbibendnote{text}}
- \newrobustcmd{\blx@mkbibendnote}[2]{%
- \iftoggle{blx@footnote}
- {\blx@warning{Nested notes}%
- \addspace\mkbibparens{#2}}
- {\unspace
- \ifnum\blx@notetype=\@ne
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi
- {\csuse{footnote#1}{\protecting{\blxmkbibnote{foot}{#2}}}}
- {\csuse{blx@theendnote#1}{\protecting{\blxmkbibnote{end}{#2}}}}}}
- \newrobustcmd{\blxmkbibnote}[2]{%
- \begingroup
- \blx@blxinit
- \blx@setsfcodes
- \blx@postpunct@agroup
- \toggletrue{blx@footnote}%
- \csuse{bib#1notewrapper}{#2}%
- \endgroup}
- \newcommand{\bibfootnotewrapper}[1]{%
- \bibsentence#1\addperiod}
- \newcommand{\bibendnotewrapper}[1]{%
- \bibsentence#1\addperiod}
- \AtEndPreamble{%
- \def\blx@theendnote{\blx@err@endnote\footnote}%
- \def\blx@theendnotetext{\blx@err@endnote\footnotetext}%
- \ifdef\endnote
- {\def\blx@theendnote{\endnote}%
- \ifdef\endnotetext
- {\def\blx@theendnotetext{\endnotetext}}
- {}}
- {\ifdef\pagenote
- {\def\blx@theendnote{\pagenote}%
- \ifdef\pagenotetext
- {\def\blx@theendnotetext{\pagenotetext}}
- {}}
- {}}}
- \newrobustcmd*{\mknumalph}[1]{%
- \begingroup
- \blx@tempcnta=#1\relax
- \ifnum\blx@tempcnta>702 %
- \else
- \ifnum\blx@tempcnta>26 %
- \advance\blx@tempcnta\m@ne
- \divide\blx@tempcnta26\relax
- \blx@numalph\blx@tempcnta
- \multiply\blx@tempcnta26\relax
- \blx@tempcnta=\numexpr#1-\blx@tempcnta\relax
- \fi
- \fi
- \blx@numalph\blx@tempcnta
- \endgroup}
- \def\blx@numalph#1{%
- \ifcase#1\relax\blx@warning@entry{Value out of range}\number#1\or
- a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or
- n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else
- \blx@warning@entry{Value out of range}\number#1\fi}
- % {<macro>}[<pre>]{<vol>}[<post>] => <macro>{<pre>}{{<vol>}{<post>}}
- \newrobustcmd*{\volcitecmd}{%
- \AtNextCite{\DeclareFieldAlias{postnote}{volcitenote}}%
- \begingroup\let\blx@citeargs\blx@volciteargs}
- \protected\def\blx@volciteargs#1{%
- \endgroup
- \@ifnextchar[%]
- {\blx@volciteargs@i{#1}}
- {\blx@volciteargs@i{#1}[]}}
- \long\def\blx@volciteargs@i#1[#2]#3{%
- \@ifnextchar[%]
- {\blx@volciteargs@ii{#1}{#2}{#3}}
- {\blx@citeargs@iii{#1{#2}{{#3}{}}}}}
- \long\def\blx@volciteargs@ii#1#2#3[#4]{%
- \blx@citeargs@iii{#1{#2}{{#3}{#4}}}}
- \newrobustcmd*{\multivolcitecmd}{%
- \AtNextCite{\DeclareFieldAlias{postnote}{volcitenote}}%
- \def\blx@hook@mcite@before{%
- \global\undef\blx@hook@mcite@before
- \let\blx@citeargs\blx@volmciteargs}}
- \protected\def\blx@volmciteargs#1{%
- \@ifnextchar[%]
- {\blx@volciteargs@i{#1}}
- {\blx@volciteargs@i{#1}[]}}
- %% Control file
- \begingroup
- \let~\space
- \@makeother\<
- \@makeother\>
- \@makeother\.
- \@makeother\:
- \@makeother\?
- \@makeother\"
- \@makeother\-
- \@makeother\=
- \@makeother\/
- \xdef\blx@xml@file{%
- \blx@sig@bcf\blx@nl
- \blx@ver@bcf\blx@nl}
- \xdef\blx@xml@endfile{%
- </bcf:controlfile>}
- \xdef\blx@xml@comment#1{%
- ~~<!-- #1 -->\blx@nl}
- \xdef\blx@xml@options#1#2#3{%
- ~~<bcf:options%
- \noexpand\ifblank{#1}{}{ component="#1"}%
- \noexpand\ifblank{#2}{}{ type="#2"}%
- >\blx@nl
- #3%
- ~~</bcf:options>\blx@nl}
- \xdef\blx@xml@option#1#2{%
- ~~~~<bcf:option type="#1">\blx@nl
- #2%
- ~~~~</bcf:option>\blx@nl}
- \xdef\blx@xml@ordered#1#2#3{%
- ~~~~~~<bcf:value order="#1"#2%
- >#3</bcf:value>\blx@nl}
- \xdef\blx@xml@datafieldset#1#2{%
- ~~<bcf:datafieldset name="#1">\blx@nl
- #2%
- ~~</bcf:datafieldset>\blx@nl}
- \xdef\blx@xml@datafieldsets@member#1{%
- ~~~~<bcf:member#1/>\blx@nl}
- \xdef\blx@xml@transliteration#1#2{%
- ~~<bcf:transliteration entrytype="#1">\blx@nl
- #2%
- ~~</bcf:transliteration>\blx@nl}
- \xdef\blx@xml@translit#1#2#3#4{%
- ~~~~<bcf:translit #1target="#2" from="#3" to="#4"/>\blx@nl}
- \xdef\blx@xml@sourcemap#1{%
- ~~<bcf:sourcemap>\blx@nl
- #1%
- ~~</bcf:sourcemap>\blx@nl}
- \xdef\blx@xml@sourcemap@maps#1#2{%
- ~~~~<bcf:maps#1>\blx@nl
- #2%
- ~~~~</bcf:maps>\blx@nl}
- \xdef\blx@xml@sourcemap@map#1#2{%
- ~~~~~~<bcf:map#1>\blx@nl
- #2%
- ~~~~~~</bcf:map>\blx@nl}
- \xdef\blx@xml@sourcemap@perdatasource#1{%
- ~~~~~~~~<bcf:per\string_datasource>#1</bcf:per\string_datasource>\blx@nl}
- \xdef\blx@xml@sourcemap@pertype#1{%
- ~~~~~~~~<bcf:per\string_type>#1</bcf:per\string_type>\blx@nl}
- \xdef\blx@xml@sourcemap@pernottype#1{%
- ~~~~~~~~<bcf:per\string_nottype>#1</bcf:per\string_nottype>\blx@nl}
- \xdef\blx@xml@sourcemap@step#1{%
- ~~~~~~~~<bcf:map\string_step#1/>\blx@nl}
- \xdef\blx@xml@labelalphanametemplate#1#2{%
- ~~<bcf:labelalphanametemplate name="#1">\blx@nl
- #2%
- ~~</bcf:labelalphanametemplate>\blx@nl}
- \xdef\blx@xml@labelalphanametemplatenamepart#1#2#3{%
- ~~~~<bcf:namepart #1#2>#3</bcf:namepart>\blx@nl}
- \xdef\blx@xml@labelalphatemplate#1#2{%
- ~~<bcf:labelalphatemplate type="#1">\blx@nl
- #2%
- ~~</bcf:labelalphatemplate>\blx@nl}
- \xdef\blx@xml@labelalpha@element#1#2{%
- ~~~~<bcf:labelelement order="#1">\blx@nl
- #2%
- ~~~~</bcf:labelelement>\blx@nl}
- \xdef\blx@xml@labelalpha@part#1#2{%
- ~~~~~~<bcf:labelpart#1>#2</bcf:labelpart>\blx@nl}
- \xdef\blx@xml@extradate#1{%
- ~~<bcf:extradatespec>\blx@nl
- #1%
- ~~</bcf:extradatespec>\blx@nl}
- \xdef\blx@xml@extradatescope#1{%
- ~~~~<bcf:scope>\blx@nl
- #1%
- ~~~~</bcf:scope>\blx@nl}
- \xdef\blx@xml@edordered#1#2{%
- ~~~~~~<bcf:field order="#1">#2</bcf:field>\blx@nl}
- \xdef\blx@xml@inheritance#1{%
- ~~<bcf:inheritance>\blx@nl
- #1%
- ~~</bcf:inheritance>\blx@nl}
- \xdef\blx@xml@inherit@defaults#1#2{%
- ~~~~<bcf:defaults#1>\blx@nl
- #2%
- ~~~~</bcf:defaults>\blx@nl}
- \xdef\blx@xml@inherit@data#1#2{%
- ~~~~<bcf:inherit#1>\blx@nl
- #2%
- ~~~~</bcf:inherit>\blx@nl}
- \xdef\blx@xml@inherit@type#1#2#3{%
- ~~~~~~<bcf:type\string_pair source="#1" target="#2"#3/>\blx@nl}
- \xdef\blx@xml@inherit@field#1#2#3{%
- ~~~~~~<bcf:field source="#1" target="#2"#3/>\blx@nl}
- \xdef\blx@xml@inherit@block#1{%
- ~~~~~~<bcf:field source="#1" skip="true"/>\blx@nl}
- \xdef\blx@xml@nosorts#1{%
- ~~<bcf:nosorts>\blx@nl
- #1%
- ~~</bcf:nosorts>\blx@nl}
- \xdef\blx@xml@nosort#1#2{%
- ~~~~<bcf:nosort field="#1" value="#2"/>\blx@nl}
- \xdef\blx@xml@noinits#1{%
- ~~<bcf:noinits>\blx@nl
- #1%
- ~~</bcf:noinits>\blx@nl}
- \xdef\blx@xml@noinit#1{%
- ~~~~<bcf:noinit value="#1"/>\blx@nl}
- \xdef\blx@xml@nolabels#1{%
- ~~<bcf:nolabels>\blx@nl
- #1%
- ~~</bcf:nolabels>\blx@nl}
- \xdef\blx@xml@nolabel#1{%
- ~~~~<bcf:nolabel value="#1"/>\blx@nl}
- \xdef\blx@xml@nolabelwidthcounts#1{%
- ~~<bcf:nolabelwidthcounts>\blx@nl
- #1%
- ~~</bcf:nolabelwidthcounts>\blx@nl}
- \xdef\blx@xml@nolabelwidthcount#1{%
- ~~~~<bcf:nolabelwidthcount value="#1"/>\blx@nl}
- \xdef\blx@xml@uniquenametemplate#1#2{%
- ~~<bcf:uniquenametemplate name="#1">\blx@nl%
- #2%
- ~~</bcf:uniquenametemplate>\blx@nl}
- \xdef\blx@xml@uniquenametemplatenamepart#1#2#3{%
- ~~~~<bcf:namepart #1#2>#3</bcf:namepart>\blx@nl}
- \xdef\blx@xml@sortingnamekeytemplate#1#2{%
- ~~<bcf:sortingnamekeytemplate name="#1">\blx@nl%
- #2%
- ~~</bcf:sortingnamekeytemplate>\blx@nl}
- \xdef\blx@xml@sortingnamekeykeypart#1#2{%
- ~~~~<bcf:keypart#1>\blx@nl
- #2%
- ~~~~</bcf:keypart>\blx@nl}
- \xdef\blx@xml@sortingnamekeynamepart#1#2#3{%
- ~~~~~~<bcf:part type="namepart"#1#2>#3</bcf:part>\blx@nl}
- \xdef\blx@xml@sortingnamekeyliteral#1#2{%
- ~~~~~~<bcf:part type="literal"#1>#2</bcf:part>\blx@nl}
- \xdef\blx@xml@sortingtemplate#1#2#3{%
- ~~<bcf:sortingtemplate name="#1"#2>\blx@nl%
- #3%
- ~~</bcf:sortingtemplate>\blx@nl}
- \xdef\blx@xml@presort#1#2{%
- ~~<bcf:presort\noexpand\ifblank{#1}{}{ type="#1"}>%
- #2</bcf:presort>\blx@nl}
- \xdef\blx@xml@sortexclude#1#2{%
- ~~<bcf:sortexclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl
- #2%
- ~~</bcf:sortexclusion>\blx@nl}
- \xdef\blx@xml@exclude#1{%
- ~~~~<bcf:exclusion>#1</bcf:exclusion>\blx@nl}
- \xdef\blx@xml@sortinclude#1#2{%
- ~~<bcf:sortinclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl
- #2%
- ~~</bcf:sortinclusion>\blx@nl}
- \xdef\blx@xml@include#1{%
- ~~~~<bcf:inclusion>#1</bcf:inclusion>\blx@nl}
- \xdef\blx@xml@sort#1#2{%
- ~~~~<bcf:sort #1>\blx@nl
- #2%
- ~~~~</bcf:sort>\blx@nl}
- \xdef\blx@xml@sortitem#1#2{%
- ~~~~~~<bcf:sortitem #1>#2</bcf:sortitem>\blx@nl}
- \xdef\blx@xml@section#1{%
- ~~<bcf:section number="#1">}
- \xdef\blx@xml@endsection{%
- ~~</bcf:section>}
- \xdef\blx@xml@dlist@refcontext#1#2#3#4#5{%
- ~~~~~~~~~~~~~~~~sortingtemplatename="#1"\blx@nl
- ~~~~~~~~~~~~~~~~sortingnamekeytemplatename="#2"\blx@nl
- ~~~~~~~~~~~~~~~~labelprefix="#3"\blx@nl
- ~~~~~~~~~~~~~~~~uniquenametemplatename="#4"\blx@nl
- ~~~~~~~~~~~~~~~~labelalphanametemplatename="#5"}
- \xdef\blx@xml@dlist#1#2#3#4#5{%
- ~~<bcf:datalist section="#3"\blx@nl
- ~~~~~~~~~~~~~~~~name="#1"\blx@nl
- ~~~~~~~~~~~~~~~~type="#2"\blx@nl
- #4>\blx@nl
- #5%
- ~~</bcf:datalist>\blx@nl}
- \xdef\blx@xml@dlistfilterorbegin{%
- ~~~~<bcf:filteror>\blx@nl}
- \xdef\blx@xml@dlistfilterorend{%
- ~~~~</bcf:filteror>\blx@nl}
- \xdef\blx@xml@dlistfilter#1#2{%
- ~~~~<bcf:filter type="#1">#2</bcf:filter>\blx@nl}
- \xdef\blx@xml@bibdata#1#2{%
- ~~<bcf:bibdata section="#1">\blx@nl
- #2%
- ~~</bcf:bibdata>\blx@nl}
- \xdef\blx@xml@datasource#1#2#3#4{%
- ~~~~<bcf:datasource type="#1" datatype="#2"#3>#4</bcf:datasource>\blx@nl}
- \xdef\blx@xml@citekey#1#2#3{%
- ~~~~<bcf:citekey order="#3"#2>#1</bcf:citekey>}
- \xdef\blx@xml@citeset#1#2{%
- ~~~~<bcf:citekey type="set" members="#2">#1</bcf:citekey>}
- \xdef\blx@xml@svalue#1#2{%
- \blx@xml@option{singlevalued}{%
- ~~~~~~<bcf:key>#1</bcf:key>\blx@nl
- ~~~~~~<bcf:value>#2</bcf:value>\blx@nl}}
- \xdef\blx@xml@mvalue#1#2{%
- \blx@xml@option{multivalued}{%
- ~~~~~~<bcf:key>#1</bcf:key>\blx@nl
- #2}}
- \xdef\blx@xml@toggle#1{%
- \blx@xml@svalue{#1}{\noexpand\iftoggle{blx@#1}{1}{0}}}
- \xdef\blx@xml@options@scope#1#2{%
- ~~<bcf:optionscope type="#1">\blx@nl
- #2%
- ~~</bcf:optionscope>\blx@nl}
- \xdef\blx@xml@option@scope#1#2{%
- ~~~~<bcf:option datatype="#1">#2</bcf:option>\blx@nl}
- \endgroup
- \def\blx@bcf@options@global{%
- \blx@xml@comment{GLOBAL}%
- \blx@xml@options{biblatex}{global}{%
- \blx@xml@svalue{alphaothers}{\labelalphaothers}%
- \blx@xml@toggle{labelalpha}%
- \blx@xml@mvalue{labelnamespec}{\blx@bcf@labelnamespec}%
- \blx@xml@toggle{labeltitle}%
- \blx@xml@mvalue{labeltitlespec}{\blx@bcf@labeltitlespec}%
- \blx@xml@toggle{labeltitleyear}%
- \blx@xml@toggle{labeldateparts}%
- \blx@xml@mvalue{labeldatespec}{\blx@bcf@labeldatespec}%
- \blx@xml@toggle{julian}%
- \blx@xml@svalue{gregorianstart}{\blx@gregorianstart}%
- \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}%
- \blx@xml@svalue{maxbibnames}{\blx@maxbibnames}%
- \blx@xml@svalue{maxcitenames}{\blx@maxcitenames}%
- \blx@xml@svalue{maxsortnames}{\blx@maxsortnames}%
- \blx@xml@svalue{maxitems}{\blx@maxitems}%
- \blx@xml@svalue{minalphanames}{\blx@minalphanames}%
- \blx@xml@svalue{minbibnames}{\blx@minbibnames}%
- \blx@xml@svalue{mincitenames}{\blx@mincitenames}%
- \blx@xml@svalue{minsortnames}{\blx@minsortnames}%
- \blx@xml@svalue{minitems}{\blx@minitems}%
- \blx@xml@toggle{singletitle}%
- \blx@xml@svalue{sortalphaothers}{\sortalphaothers}%
- \blx@xml@svalue{sortlocale}{\blx@sortlocale}%
- \blx@xml@svalue{sortingtemplatename}{\blx@sorting}%
- \blx@xml@toggle{sortsets}%
- \blx@xml@svalue{uniquelist}{\blx@uniquelist}%
- \blx@xml@svalue{uniquename}{\blx@uniquename}%
- \blx@xml@toggle{uniqueprimaryauthor}%
- \blx@xml@toggle{uniquetitle}%
- \blx@xml@toggle{uniquebaretitle}%
- \blx@xml@toggle{uniquework}%
- \blx@xml@toggle{useprefix}%
- \blx@xml@nametoggles
- }%
- }
- \def\blx@bcf@options@type#1{%
- \blx@xml@comment{#1}%
- \blx@xml@options{biblatex}{#1}{%
- \blx@xml@toggle{labelalpha}%
- \blx@xml@mvalue{labelnamespec}{%
- \ifcsdef{blx@bcf@labelnamespec@#1}
- {\csuse{blx@bcf@labelnamespec@#1}}
- {\blx@bcf@labelnamespec}}%
- \blx@xml@toggle{labeltitle}%
- \blx@xml@mvalue{labeltitlespec}{%
- \ifcsdef{blx@bcf@labeltitlespec@#1}
- {\csuse{blx@bcf@labeltitlespec@#1}}
- {\blx@bcf@labeltitlespec}}%
- \blx@xml@toggle{labeltitleyear}%
- \blx@xml@toggle{labeldateparts}%
- \blx@xml@mvalue{labeldatespec}{%
- \ifcsdef{blx@bcf@labeldatespec@#1}
- {\csuse{blx@bcf@labeldatespec@#1}}
- {\blx@bcf@labeldatespec}}%
- \blx@xml@svalue{maxalphanames}{\blx@maxalphanames}%
- \blx@xml@svalue{maxbibnames}{\blx@maxbibnames@type}%
- \blx@xml@svalue{maxcitenames}{\blx@maxcitenames@type}%
- \blx@xml@svalue{maxsortnames}{\blx@maxsortnames@type}%
- \blx@xml@svalue{maxitems}{\blx@maxitems@type}%
- \blx@xml@svalue{minalphanames}{\blx@minalphanames}%
- \blx@xml@svalue{minbibnames}{\blx@minbibnames@type}%
- \blx@xml@svalue{mincitenames}{\blx@mincitenames@type}%
- \blx@xml@svalue{minsortnames}{\blx@minsortnames@type}%
- \blx@xml@svalue{minitems}{\blx@minitems@type}%
- \blx@xml@toggle{singletitle}%
- \blx@xml@toggle{skipbib}%
- \blx@xml@toggle{skiplab}%
- \blx@xml@toggle{skipbiblist}%
- \blx@xml@svalue{uniquelist}{\blx@uniquelist}%
- \blx@xml@svalue{uniquename}{\blx@uniquename}%
- \blx@xml@toggle{uniqueprimaryauthor}%
- \blx@xml@toggle{uniquetitle}%
- \blx@xml@toggle{uniquebaretitle}%
- \blx@xml@toggle{uniquework}%
- \blx@xml@toggle{useprefix}%
- \blx@xml@nametoggles
- }%
- }
- \def\blx@ctrlwrite{%
- \begingroup
- \blx@safe@actives
- \let\protect\string
- % options
- \edef\labelalphaothers{\labelalphaothers}%
- \edef\sortalphaothers{\sortalphaothers}%
- \blx@xmlsanitizeafter{\def\labelalphaothers}{\labelalphaothers}%
- \blx@xmlsanitizeafter{\def\sortalphaothers}{\sortalphaothers}%
- % Expand the global use* name toggles
- \let\blx@xml@nametoggles\@empty
- \def\do##1{\eappto\blx@xml@nametoggles{\blx@xml@toggle{use##1}}}%
- \abx@donames
- \edef\blx@tempa{%
- \blx@xml@file
- \blx@xml@comment{BIBER OPTIONS}%
- \blx@xml@options{biber}{global}{%
- \blx@xml@svalue{output_encoding}{\blx@texencoding}%
- \blx@xml@svalue{input_encoding}{\blx@bibencoding}%
- \blx@xml@toggle{debug}%
- \blx@xml@svalue{mincrossrefs}{\blx@mincrossrefs}%
- \blx@xml@svalue{minxrefs}{\blx@minxrefs}%
- \blx@xml@toggle{sortcase}%
- \blx@xml@toggle{sortupper}%
- }%
- \blx@xml@comment{BIBLATEX OPTIONS}%
- \blx@bcf@options@global
- }%
- \ifdef\blx@opts@type
- {\def\do##1{%
- \begingroup
- \let\protect\relax
- \blx@setoptions@type{##1}%
- % Expand the type use* name toggles
- \let\blx@xml@nametoggles\@empty
- \def\do####1{\eappto\blx@xml@nametoggles{\blx@xml@toggle{use####1}}}%
- \abx@donames
- \blx@checkoptions@type
- \xappto\blx@tempa{\blx@bcf@options@type{##1}}%
- \endgroup}%
- \dolistloop\blx@opts@type}
- {}%
- % options scope
- % GLOBAL
- \def\do##1{%
- \begingroup
- \def\do####1{\xappto\blx@bcf@options@scope@global{\blx@xml@option@scope{##1}{####1}}}%
- \dolistcsloop{blx@globalopts@##1}%
- \endgroup}%
- \dolistloop\blx@globalopts@datatypes
- % ENTRYTYPE
- \def\do##1{%
- \begingroup
- \def\do####1{\xappto\blx@bcf@options@scope@type{\blx@xml@option@scope{##1}{####1}}}%
- \dolistcsloop{blx@typeopts@##1}%
- \endgroup}%
- \dolistloop\blx@typeopts@datatypes
- % ENTRY
- \def\do##1{%
- \begingroup
- \def\do####1{\xappto\blx@bcf@options@scope@entry{\blx@xml@option@scope{##1}{####1}}}%
- \dolistcsloop{blx@entryopts@##1}%
- \endgroup}%
- \dolistloop\blx@entryopts@datatypes
- % NAMELIST
- \def\do##1{%
- \begingroup
- \def\do####1{\xappto\blx@bcf@options@scope@namelist{\blx@xml@option@scope{##1}{####1}}}%
- \dolistcsloop{blx@namelistopts@##1}%
- \endgroup}%
- \dolistloop\blx@entryopts@datatypes
- % NAME
- \def\do##1{%
- \begingroup
- \def\do####1{\xappto\blx@bcf@options@scope@name{\blx@xml@option@scope{##1}{####1}}}%
- \dolistcsloop{blx@nameopts@##1}%
- \endgroup}%
- \dolistloop\blx@entryopts@datatypes
- \eappto\blx@tempa{%
- \blx@xml@comment{BIBLATEX OPTION SCOPE}%
- \blx@xml@options@scope{GLOBAL}{\blx@bcf@options@scope@global}%
- \blx@xml@options@scope{ENTRYTYPE}{\blx@bcf@options@scope@type}%
- \blx@xml@options@scope{ENTRY}{\blx@bcf@options@scope@entry}%
- \blx@xml@options@scope{NAMELIST}{\blx@bcf@options@scope@namelist}%
- \blx@xml@options@scope{NAME}{\blx@bcf@options@scope@name}}
- % datafieldsets
- \def\do##1{%
- \xappto\blx@bcf@datafieldsets{\blx@xml@datafieldset{##1}{\csuse{blx@datafieldsetmembers@##1}}}}
- \dolistloop\blx@datafieldsets
- \eappto\blx@tempa{%
- \blx@xml@comment{DATAFIELDSETS}%
- \blx@bcf@datafieldsets}%
- % sourcemap
- \ifbool{sourcemap}
- {\eappto\blx@tempa{%
- \blx@xml@comment{SOURCEMAP}%
- \blx@xml@sourcemap{%
- \ifdef\blx@sourcemap@user
- {\blx@sourcemap@user}
- {}%
- \ifdef\blx@sourcemap@style
- {\blx@sourcemap@style}
- {}%
- \ifdef\blx@sourcemap@defaults@bibtex
- {\blx@sourcemap@defaults@bibtex}
- {}%
- \ifdef\blx@sourcemap@defaults@biblatexml
- {\blx@sourcemap@defaults@biblatexml}
- {}}}}
- {}%
- % labelalpha name template
- \eappto\blx@tempa{\blx@xml@comment{LABELALPHA NAME TEMPLATE}}%
- \def\do##1{%
- \eappto\blx@tempa{%
- \blx@xml@labelalphanametemplate{##1}{\csuse{blx@labelalphanametemplate@##1}}}}%
- \dolistloop\blx@lantemplatespecs
- % labelalpha template
- \eappto\blx@tempa{%
- \blx@xml@comment{LABELALPHA TEMPLATE}}%
- \def\do##1{%
- \eappto\blx@tempa{%
- \blx@xml@labelalphatemplate{##1}{%
- \csuse{blx@labelalphatemplate@##1}}}}%
- \dolistloop\blx@latem@type
- % extradate specification
- \eappto\blx@tempa{%
- \blx@xml@comment{EXTRADATE}%
- \blx@xml@extradate{\csuse{blx@bcf@extradatespec}}}%
- % data inheritance
- \eappto\blx@tempa{%
- \blx@xml@comment{INHERITANCE}%
- \blx@xml@inheritance{%
- \csuse{blx@inherit@default}%
- \csuse{blx@inherit@data}}}%
- % noinit
- \ifcsdef{blx@noinit}
- {\eappto\blx@tempa{%
- \blx@xml@comment{NOINIT}%
- \blx@xml@noinits{%
- \csuse{blx@noinit}}}}%
- {}%
- % nolabel
- \ifcsdef{blx@nolabel}
- {\eappto\blx@tempa{%
- \blx@xml@comment{NOLABEL}%
- \blx@xml@nolabels{%
- \csuse{blx@nolabel}}}}%
- {}%
- % nolabel
- \ifcsdef{blx@nolabelwidthcount}
- {\eappto\blx@tempa{%
- \blx@xml@comment{NOLABELWIDTHCOUNT}%
- \blx@xml@nolabelwidthcounts{%
- \csuse{blx@nolabelwidthcount}}}}%
- {}%
- % nosort
- \ifcsdef{blx@nosort}
- {\eappto\blx@tempa{%
- \blx@xml@comment{NOSORT}%
- \blx@xml@nosorts{%
- \csuse{blx@nosort}}}}%
- {}%
- % transliteration
- \ifdefempty\blx@translits
- {}
- {\eappto\blx@tempa{\blx@xml@comment{TRANSLITERATION}}%
- \def\do##1{%
- \eappto\blx@tempa{\blx@xml@transliteration{##1}{\csuse{blx@translit@##1}}}}%
- \dolistloop\blx@translits}%
- % uniquenametemplate
- \eappto\blx@tempa{\blx@xml@comment{UNIQUENAME TEMPLATES}}%
- \def\do##1{%
- \eappto\blx@tempa{%
- \blx@xml@uniquenametemplate{##1}{\csuse{blx@uniquenametemplate@##1}}}}%
- \dolistloop\blx@untemplatespecs
- % sortingnamekeytemplate
- \eappto\blx@tempa{\blx@xml@comment{SORTING NAME KEY TEMPLATES}}%
- \def\do##1{%
- \eappto\blx@tempa{%
- \blx@xml@sortingnamekeytemplate{##1}{\csuse{blx@sortingnamekeytemplate@##1}}}}%
- \dolistloop\blx@sortingnamekeytemplates
- % presort/sorting excludes/sorting includes
- \def\do##1{%
- \eappto\blx@bcf@presort{\csuse{blx@bcf@presort@##1}}%
- \eappto\blx@bcf@exclude{\csuse{blx@bcf@exclude@##1}}%
- \eappto\blx@bcf@include{\csuse{blx@bcf@include@##1}}}%
- \abx@doentrytypes
- \do{*}% entrytype wildcard
- \eappto\blx@tempa{%
- \blx@bcf@presort
- \blx@bcf@exclude
- \blx@bcf@include}%
- % datamodel
- \eappto\blx@tempa{%
- \blx@xml@comment{DATA MODEL}%
- \blx@xml@datamodel{%
- \blx@xml@datamodel@constants{%
- \blx@bcf@datamodel@constants
- }%
- \blx@xml@datamodel@entrytypes{%
- \blx@bcf@datamodel@entrytypes
- }%
- \blx@xml@datamodel@fields{%
- \blx@bcf@datamodel@fields
- }%
- \blx@bcf@datamodel@entryfields
- \blx@bcf@datamodel@constraints
- }%
- }%
- % files
- \let\blx@tempb\@empty
- \blx@bibdata\blx@tempb\blx@bibfiles
- \eappto\blx@tempa{%
- \blx@xml@comment{CITATION DATA}%
- \blx@xml@comment{SECTION 0}%
- \blx@xml@bibdata{0}{\blx@tempb}%
- \blx@xml@section{0}%
- }%
- \immediate\openout\blx@bcfout\jobname.bcf\relax
- \blx@auxwrite\blx@bcfout{}{\blx@tempa}%
- \global\undef\blx@tempa
- \endgroup
- \AfterEndDocument{%
- \def\do##1{%
- \csxappto{blx@sortingtemplates}{%
- \blx@xml@sortingtemplate{##1}
- {\ifcsdef{blx@sortdef@locale@##1}{ locale="\csuse{blx@sortdef@locale@##1}"}{}}
- {\csuse{blx@sortingtemplate@##1}}}}%
- \dolistloop\blx@sortingtemplatenames
- \blx@auxwrite\blx@bcfout{}{%
- \blx@xml@endsection\blx@nl
- \blx@xml@comment{SORTING TEMPLATES}%
- \csuse{blx@sortingtemplates}%
- \blx@xml@comment{DATALISTS}%
- \csuse{blx@dlists}%
- \blx@xml@endfile}%
- \immediate\closeout\blx@bcfout}}
- %% Customisation
- % nolabel
- \newrobustcmd*{\DeclareNolabel}[1]{%
- \begingroup
- \let\nolabel\blx@nolabel@setup
- \let\blx@tempa\@empty
- #1%
- \global\let\blx@nolabel\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareNolabel
- \newcommand*{\blx@nolabel@setup}[1]{%
- \eappto\blx@tempa{%
- \blx@xml@nolabel{#1}}}
- % nolabelwidthcount
- \newrobustcmd*{\DeclareNolabelwidthcount}[1]{%
- \begingroup
- \let\nolabel\blx@nolabelwidthcount@setup
- \let\blx@tempa\@empty
- #1%
- \global\let\blx@nolabelwidthcount\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareNolabelwidthcount
- \newcommand*{\blx@nolabelwidthcount@setup}[1]{%
- \eappto\blx@tempa{%
- \blx@xml@nolabelwidthcount{#1}}}
- % nosort
- \newrobustcmd*{\DeclareNosort}[1]{%
- \begingroup
- \let\nosort\blx@nosort@setup
- \let\blx@tempa\@empty
- #1%
- \global\let\blx@nosort\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareNosort
- \newcommand*{\blx@nosort@setup}[2]{%
- \eappto\blx@tempa{%
- \blx@xml@nosort{#1}{#2}}}
- % noinit
- \newrobustcmd*{\DeclareNoinit}[1]{%
- \begingroup
- \let\noinit\blx@noinit@setup
- \let\blx@tempa\@empty
- #1%
- \global\let\blx@noinit\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareNoinit
- \newcommand*{\blx@noinit@setup}[1]{%
- \eappto\blx@tempa{%
- \blx@xml@noinit{#1}}}
- % datafieldsets
- \newrobustcmd*{\DeclareDatafieldSet}[2]{%
- \begingroup
- \let\member\blx@datafieldset@member
- \let\blx@tempa\@empty
- \def\blx@setname{#1}
- \cslet{blx@datafieldset@#1}\@empty
- #2%
- \csxdef{blx@datafieldsetmembers@#1}{\blx@tempa}%
- \listgadd\blx@datafieldsets{#1}%
- \global\csletcs{datafieldset#1}{blx@datafieldset@#1}% expose user-facing macro
- \endgroup}
- \@onlypreamble\DeclareDatafieldSet
- \newcommand*{\blx@datafieldset@member}[1][2]{%
- \let\blx@dm@fieldtype\@empty
- \let\blx@dm@datatype\@empty
- \let\blx@member@field\@empty
- \let\blx@tempb\@empty
- \setkeys{blx@datafieldsets@member}{#1}%
- \eappto\blx@tempa{%
- \blx@xml@datafieldsets@member{\blx@tempb}}%
- \ifdefempty\blx@member@field
- {}
- {\listcsxadd{blx@datafieldset@\blx@setname}{\blx@member@field}}%
- % Set some internal macros in case biblatex needs to use the set
- \ifboolexpr{%
- not test {\ifdefempty{\blx@dm@fieldtype}}
- and
- not test {\ifdefempty{\blx@dm@datatype}}}
- {\def\do##1{%
- \listcsxadd{blx@datafieldset@\blx@setname}{##1}}
- \dolistcsloop{blx@datamodelfields@types@\blx@dm@fieldtype @\blx@dm@datatype}}
- {\ifdefempty{\blx@dm@fieldtype}
- {}
- {\def\do##1{%
- \listcsxadd{blx@datafieldset@\blx@setname}{##1}}
- \dolistcsloop{blx@datamodelfields@fieldtypes@\blx@dm@fieldtype}}%
- \ifdefempty{\blx@dm@datatype}
- {}
- {\def\do##1{%
- \listcsxadd{blx@datafieldset@\blx@setname}{##1}}
- \dolistcsloop{blx@datamodelfields@datatypes@\blx@dm@datatype}}}}
- \define@key{blx@datafieldsets@member}{datatype}{% characters
- \appto\blx@tempb{ datatype="#1"}%
- \def\blx@dm@datatype{#1}}
- \define@key{blx@datafieldsets@member}{fieldtype}{% characters
- \appto\blx@tempb{ fieldtype="#1"}%
- \def\blx@dm@fieldtype{#1}}
- \define@key{blx@datafieldsets@member}{field}{% characters
- \appto\blx@tempb{ field="#1"}%
- \def\blx@member@field{#1}}
- % sourcemap
- \newrobustcmd*{\DeclareSourcemap}[1]{%
- \booltrue{sourcemap}%
- \begingroup
- \let\maps\blx@usersourcemap@maps
- \let\blx@tempa\@empty
- #1%
- \xappto\blx@sourcemap@user\blx@tempa%
- \endgroup}
- \@onlypreamble\DeclareSourcemap
- \newrobustcmd*{\DeclareStyleSourcemap}[1]{%
- \booltrue{sourcemap}%
- \begingroup
- \let\maps\blx@stylesourcemap@maps
- \let\blx@tempa\@empty
- #1%
- \xappto\blx@sourcemap@style\blx@tempa%
- \endgroup}
- \@onlypreamble\DeclareStyleSourcemap
- \newrobustcmd*{\DeclareDriverSourcemap}[2][]{%
- \booltrue{sourcemap}%
- \begingroup
- \let\blx@tempa\@empty
- \let\blx@tempb\@empty
- \let\blx@tempc\@empty
- \let\blx@tempd\@empty
- \let\map\blx@sourcemap@map
- #2%
- \ifblank{#1}
- {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=driver}}
- {\setkeys{blx@sourcemap@maps}{#1, level=driver}}%
- \eappto\blx@tempa{%
- \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}%
- \csxdef{blx@sourcemap@defaults@\blx@tempd}{\blx@tempa}%
- \endgroup}
- \@onlypreamble\DeclareDriverSourcemap
- \newcommand*{\blx@usersourcemap@maps}[2][]{%
- \let\blx@tempb\@empty
- \let\blx@tempc\@empty
- \let\map\blx@sourcemap@map
- \ifblank{#1}
- {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=user}}
- {\setkeys{blx@sourcemap@maps}{#1, level=user}}%
- #2%
- \eappto\blx@tempa{%
- \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}}
- \newcommand*{\blx@stylesourcemap@maps}[2][]{%
- \let\blx@tempb\@empty
- \let\blx@tempc\@empty
- \let\map\blx@sourcemap@map
- \ifblank{#1}
- {\setkeys{blx@sourcemap@maps}{datatype=bibtex, level=style}}
- {\setkeys{blx@sourcemap@maps}{#1, level=style}}%
- #2%
- \eappto\blx@tempa{%
- \blx@xml@sourcemap@maps{\blx@tempb}{\blx@tempc}}}
- \define@key{blx@sourcemap@maps}{datatype}{% characters
- \eappto\blx@tempb{ datatype="#1"}%
- \eappto\blx@tempd{#1}}
- \define@key{blx@sourcemap@maps}{overwrite}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempb{ map\string_overwrite="1"}}
- {}}
- \define@key{blx@sourcemap@maps}{level}{% user|style|driver
- \appto\blx@tempb{ level="#1"}}
- \newcommand*{\blx@sourcemap@map}[2][]{%
- \let\blx@tempm\@empty
- \let\blx@tempe\@empty
- \let\perdatasource\blx@sourcemap@perdatasource
- \let\pertype\blx@sourcemap@pertype
- \let\pernottype\blx@sourcemap@pernottype
- \let\step\blx@sourcemap@step
- \ifblank{#1}
- {}
- {\setkeys{blx@sourcemap@map}{#1}}%
- #2%
- \eappto\blx@tempc{%
- \blx@xml@sourcemap@map{\blx@tempm}{\blx@tempe}}}
- \define@key{blx@sourcemap@map}{overwrite}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempm{ map\string_overwrite="1"}}
- {}}
- \define@key{blx@sourcemap@map}{foreach}{% characters
- \eappto\blx@tempm{ map\string_foreach="#1"}}
- \define@key{blx@sourcemap@map}{refsection}{% integer
- \eappto\blx@tempm{ refsection="#1"}}
- \newcommand*{\blx@sourcemap@perdatasource}[1]{%
- \eappto\blx@tempe{%
- \blx@xml@sourcemap@perdatasource{#1}}}
- \newcommand*{\blx@sourcemap@pertype}[1]{%
- \eappto\blx@tempe{%
- \blx@xml@sourcemap@pertype{#1}}}
- \newcommand*{\blx@sourcemap@pernottype}[1]{%
- \eappto\blx@tempe{%
- \blx@xml@sourcemap@pernottype{#1}}}
- \newcommand*{\blx@sourcemap@step}[1][2]{%
- \let\blx@tempf\@empty
- \setkeys{blx@sourcemap@step}{#1}%
- \eappto\blx@tempe{%
- \blx@xml@sourcemap@step{\blx@tempf}}}
- \define@key{blx@sourcemap@step}{typesource}{% characters
- \eappto\blx@tempf{ map\string_type\string_source="#1"}}
- \define@key{blx@sourcemap@step}{typetarget}{% characters
- \eappto\blx@tempf{ map\string_type\string_target="#1"}}
- \define@key{blx@sourcemap@step}{final}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_final="1"}}
- {}}
- \define@key{blx@sourcemap@step}{fieldsource}{% characters
- \eappto\blx@tempf{ map\string_field\string_source="#1"}}
- \define@key{blx@sourcemap@step}{notfield}{% characters
- \eappto\blx@tempf{ map\string_notfield="#1"}}
- \define@key{blx@sourcemap@step}{fieldtarget}{% characters
- \eappto\blx@tempf{ map\string_field\string_target="#1"}}
- \define@key{blx@sourcemap@step}{fieldset}{% characters
- \eappto\blx@tempf{ map\string_field\string_set="#1"}}
- % We are sanitising the XML here as it's the value of an attribute which
- % might contain quotes or ampersands (URLs, for example)
- \define@key{blx@sourcemap@step}{fieldvalue}{% characters
- \blx@xmlsanitizeafter{\def\blx@temps}{#1}%
- \eappto\blx@tempf{ map\string_field\string_value="\blx@temps"}}
- \define@key{blx@sourcemap@step}{append}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_append="1"}}
- {}}
- \define@key{blx@sourcemap@step}{null}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_null="1"}}
- {}}
- \define@key{blx@sourcemap@step}{entrynull}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_entry\string_null="1"}}
- {}}
- \define@key{blx@sourcemap@step}{entrynocite}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_entry\string_nocite="1"}}
- {}}
- \define@key{blx@sourcemap@step}{entrynew}{% characters
- \appto\blx@tempf{ map\string_entry\string_new="#1"}}
- \define@key{blx@sourcemap@step}{entrynewtype}{% characters
- \appto\blx@tempf{ map\string_entry\string_newtype="#1"}}
- \define@key{blx@sourcemap@step}{entrytarget}{% characters
- \appto\blx@tempf{ map\string_entrytarget="#1"}}
- \define@key{blx@sourcemap@step}{entryclone}{% characters
- \appto\blx@tempf{ map\string_entry\string_clone="#1"}}
- \define@key{blx@sourcemap@step}{origfield}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_origfield="1"}}
- {}}
- \define@key{blx@sourcemap@step}{origfieldval}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_origfieldval="1"}}
- {}}
- \define@key{blx@sourcemap@step}{origentrytype}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempf{ map\string_origentrytype="1"}}
- {}}
- \define@key{blx@sourcemap@step}{match}{% characters
- \appto\blx@tempf{ map\string_match="#1"}}
- \define@key{blx@sourcemap@step}{matchi}{% characters
- \appto\blx@tempf{ map\string_matchi="#1"}}
- \define@key{blx@sourcemap@step}{notmatch}{% characters
- \appto\blx@tempf{ map\string_notmatch="#1"}}
- \define@key{blx@sourcemap@step}{notmatchi}{% characters
- \appto\blx@tempf{ map\string_notmatchi="#1"}}
- \define@key{blx@sourcemap@step}{replace}{% characters
- \eappto\blx@tempf{ map\string_replace="#1"}}
- % [<specname>]{<spec>}
- \newrobustcmd*{\DeclareLabelalphaNameTemplate}[2][]{%
- \begingroup
- \ifblank{#1}
- {\def\blx@lantname{global}}% default
- {\def\blx@lantname{#1}}%
- \let\namepart\blx@lantem@namepart
- \let\blx@tempa\@empty
- \blx@tempcnta\z@
- #2%
- \global\cslet{blx@labelalphanametemplate@\blx@lantname}\blx@tempa
- \xifinlist\blx@lantname\blx@lantemplatespecs
- {}
- {\listxadd\blx@lantemplatespecs\blx@lantname}%
- \endgroup}
- \@onlypreamble\DeclareLabelalphaNameTemplate
- \blx@collectopts{xml}{blx@globalopts}{labelalphanametemplate}% for passing to the .bcf
- \DeclareEntryOption[string]{labelalphanametemplatename}{%
- \def\blx@refcontext@labelalphanametemplatename{#1}}
- \newcommand*{\blx@lantem@namepart}[2][]{%
- \advance\blx@tempcntb\@ne
- \edef\blx@tempe{order="\the\blx@tempcntb"}%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@lantem@namepart}{#1}}%
- \eappto\blx@tempa{%
- \blx@xml@labelalphanametemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}}
- \define@key{blx@lantem@namepart}{use}[true]{% use* option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ use="1"}}
- {}}
- \define@key{blx@lantem@namepart}{pre}[true]{% pre option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ pre="1"}}
- {}}
- \define@key{blx@lantem@namepart}{compound}[true]{% base option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ substring\string_compound="1"}}
- {}}
- \define@key{blx@lantem@namepart}{strwidth}{% integer
- \eappto\blx@tempc{ substring\string_width="#1"}}
- \define@key{blx@lantem@field}{strside}{% left|right
- \ifstrequal{#1}{right}
- {\eappto\blx@tempc{ substring\string_side="right"}}
- {\eappto\blx@tempc{ substring\string_side="left"}}}
- % [<entrytype>]{<spec>}
- \newrobustcmd*{\DeclareLabelalphaTemplate}[2][]{%
- \ifblank{#1}
- {\blx@latem{#2}{global}}
- {\forcsvlist{\blx@latem{#2}}{#1}}}
- \@onlypreamble\DeclareLabelalphaTemplate
- \blx@collectopts{xml}{blx@globalopts}{labelalphatemplate}% for passing to the .bcf
- \blx@collectopts{xml}{blx@typeopts}{labelalphatemplate}% for passing to the .bcf
- \def\blx@latem#1#2{%
- \begingroup
- \let\labelelement\blx@latem@element
- \let\field\blx@latem@field
- \let\literal\blx@latem@literal
- \blx@tempcnta\z@
- \let\blx@tempa\@empty
- #1%
- \ifdef\blx@latem@type
- {\ifinlist{#2}\blx@latem@type
- {\global\cslet{blx@labelalphatemplate@#2}\blx@tempa}
- {\listgadd\blx@latem@type{#2}%
- \global\cslet{blx@labelalphatemplate@#2}\blx@tempa}}
- {\listgadd\blx@latem@type{#2}%
- \global\cslet{blx@labelalphatemplate@#2}\blx@tempa}%
- \endgroup}
- \newcommand*{\blx@latem@element}[1]{%
- \advance\blx@tempcnta\@ne
- \let\blx@tempb\@empty
- #1%
- \eappto\blx@tempa{%
- \blx@xml@labelalpha@element{\the\blx@tempcnta}{\blx@tempb}}}
- \newcommand*{\blx@latem@literal}[1]{%
- \blx@xmlsanitizeafter{\def\blx@temps}{#1}%
- \eappto\blx@tempb{%
- \blx@xml@labelalpha@part{}{\expandafter\regexp\expandafter{\blx@temps}}}}
- \newcommand*{\blx@latem@field}[2][]{%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@latem@field}{#1}}%
- \eappto\blx@tempb{%
- \blx@xml@labelalpha@part{\blx@tempc}{#2}}}
- \define@key{blx@latem@field}{uppercase}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ uppercase="1"}}
- {}}
- \define@key{blx@latem@field}{lowercase}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ lowercase="1"}}
- {}}
- \define@key{blx@latem@field}{final}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ final="1"}}
- {}}
- \define@key{blx@latem@field}{strwidth}{% integer
- \eappto\blx@tempc{ substring\string_width="#1"}}
- \define@key{blx@latem@field}{varwidth}[true]{% "v"
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ substring\string_width="v"}}
- {}}
- \define@key{blx@latem@field}{varwidthnorm}[true]{% "vf"
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ substring\string_width="vf"}}
- {}}
- \define@key{blx@latem@field}{varwidthlist}[true]{% "l"
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ substring\string_width="l"}}
- {}}
- \define@key{blx@latem@field}{strfixedcount}{%
- \eappto\blx@tempc{ substring\string_fixed\string_threshold="#1"}}
- \define@key{blx@latem@field}{strwidthmax}{%
- \eappto\blx@tempc{ substring\string_width\string_max="#1"}}
- \define@key{blx@latem@field}{strside}{% left|right
- \ifstrequal{#1}{right}
- {\eappto\blx@tempc{ substring\string_side="right"}}
- {\eappto\blx@tempc{ substring\string_side="left"}}}
- \define@key{blx@latem@field}{namessep}{%
- \eappto\blx@tempc{ namessep="#1"}}
- \define@key{blx@latem@field}{ifnames}{%
- \eappto\blx@tempc{ ifnames="#1"}}
- \define@key{blx@latem@field}{names}{%
- \eappto\blx@tempc{ names="#1"}}
- \define@key{blx@latem@field}{noalphaothers}[true]{%
- \eappto\blx@tempc{ noalphaothers="1"}}
- \define@key{blx@latem@field}{padchar}{%
- \blx@xmlsanitizeafter{\def\blx@temps}{#1}%
- \eappto\blx@tempc{ pad\string_char="\expandafter\regexp\expandafter{\blx@temps}"}}
- \define@key{blx@latem@field}{padside}{% left|right
- \ifstrequal{#1}{left}
- {\eappto\blx@tempc{ pad\string_side="left"}}
- {\eappto\blx@tempc{ pad\string_side="right"}}}
- % [<exceptions>]{<options>}
- \newrobustcmd*{\DefaultInheritance}[2][]{%
- \begingroup
- \let\blx@tempf\@empty
- \ifblank{#2}
- {}
- {\setkeys{blx@inherit@default}{#2}}%
- \edef\blx@tempa{\space
- inherit\string_all="\iftoggle{blx@inherit@all}{true}{false}"\space
- override\string_target="\iftoggle{blx@inherit@override}{true}{false}"%
- \blx@tempf}%
- \let\blx@tempb\@empty
- \let\except\blx@inherit@except
- #1%
- \xdef\blx@inherit@default{%
- \blx@xml@inherit@defaults{\blx@tempa}{\blx@tempb}}%
- \endgroup}
- \@onlypreamble\DefaultInheritance
- \newtoggle{blx@inherit@all}
- \newtoggle{blx@inherit@override}
- \define@key{blx@inherit@default}{all}[true]{% true|false
- \settoggle{blx@inherit@all}{#1}}
- \define@key{blx@inherit@default}{override}[true]{% true|false
- \settoggle{blx@inherit@override}{#1}}
- \define@key{blx@inherit@default}{ignore}{% csv list
- \edef\blx@tempf{ ignore="#1"}}
- % {<source>}{<target>}{<options>}
- \newcommand*{\blx@inherit@except}[3]{%
- \let\blx@tempc\@empty
- \ifblank{#3}
- {}
- {\setkeys{blx@inherit@except}{#3}}%
- \eappto\blx@tempb{%
- \blx@xml@inherit@type{#1}{#2}{\blx@tempc}}}
- \define@key{blx@inherit@except}{all}[true]{% true|false
- \eappto\blx@tempc{ inherit\string_all="#1"}}
- \define@key{blx@inherit@except}{override}[true]{% true|false
- \eappto\blx@tempc{ override\string_target="#1"}}
- \define@key{blx@inherit@except}{ignore}{% csv list
- \eappto\blx@tempc{ ignore="#1"}}
- % {<type,type,...>}{<type,type,...>}{<spec>}
- \newrobustcmd*{\DeclareDataInheritance}[4][]{%
- \begingroup
- \let\blx@tempa\@empty
- \let\blx@tempf\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@inherit}{#1}}%
- \forcsvlist{\blx@inherit@i{#3}}{#2}%
- \let\blx@tempb\@empty
- \let\inherit\blx@inherit@field
- \let\noinherit\blx@inherit@block
- #4%
- \xappto\blx@inherit@data{%
- \blx@xml@inherit@data{\blx@tempf}{%
- \blx@tempa
- \blx@tempb}}%
- \endgroup}
- \@onlypreamble\DeclareDataInheritance
- \def\blx@inherit@i#1#2{%
- \forcsvlist{\blx@inherit@ii{#2}}{#1}}
- \def\blx@inherit@ii#1#2{%
- \eappto\blx@tempa{\blx@xml@inherit@type{#1}{#2}{}}}
- \blx@collectopts{xml}{blx@globalopts}{inheritance}% for passing to the .bcf
- % [<options>]{<source>}{<target>}
- \newcommand*{\blx@inherit@field}[3][]{%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@inherit@field}{#1}}%
- \eappto\blx@tempb{%
- \blx@xml@inherit@field{#2}{#3}{\blx@tempc}}}
- \newcommand*{\blx@inherit@block}[1]{%
- \eappto\blx@tempb{\blx@xml@inherit@block{#1}}}
- \define@key{blx@inherit}{ignore}{% csv list
- \edef\blx@tempf{ ignore="#1"}}
- \define@key{blx@inherit@field}{override}[true]{% true|false
- \ifstrequal{#1}{true}
- {\edef\blx@tempc{ override\string_target="true"}}
- {\edef\blx@tempc{ override\string_target="false"}}}
- \newrobustcmd*{\ResetDataInheritance}{%
- \global\csundef{blx@inherit@data}}
- \@onlypreamble\ResetDataInheritance
- % {<name>}{<spec>}
- \newrobustcmd*{\DeclareBiblistFilter}[2]{%
- \begingroup
- \let\filteror\blx@biblistfilteror
- \let\filter\blx@biblistfilter
- \let\blx@tempa\@empty
- #2%
- \global\cslet{blx@biblistfilters@#1}\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareBiblistFilter
- \newcommand*{\blx@biblistfilteror}[1]{%
- \eappto\blx@tempa{\blx@xml@dlistfilterorbegin}%
- #1%
- \eappto\blx@tempa{\blx@xml@dlistfilterorend}}
- \newcommand*{\blx@biblistfilter}[1][2]{%
- \let\blx@tempc\@empty
- \let\blx@tempd\@empty
- \setkeys{blx@biblistfilter@filter}{#1}%
- \eappto\blx@tempa{%
- \blx@xml@dlistfilter{\blx@tempc}{\blx@tempd}}}
- \define@key{blx@biblistfilter@filter}{type}{%
- \def\blx@tempc{#1}}
- \define@key{blx@biblistfilter@filter}{filter}{%
- \def\blx@tempd{#1}}
- % Predefine filters for label fields
- \def\do#1{\DeclareBiblistFilter{#1}{\filter[type=field,filter=#1]}}
- \abx@dolabelfields
- \define@key{blx@biblist2}{biblistfilter}{\blx@key@biblistfilter{#1}}
- \define@key{blx@biblist1}{biblistfilter}{}
- \def\blx@key@biblistfilter#1{%
- \ifcsundef{blx@biblistfilters@#1}
- {\blx@error
- {BiblistFilter '#1' not found}
- {The BiblistFilter '#1' could not be found.\MessageBreak
- Use '\string\DeclareBiblistFilter' to define it}}
- {\def\blx@thebiblistfilter{#1}}}
- % [<langids>][<entrytype>]{translitsource}{translittarget}
- \newrobustcmd*{\DeclareSortTranslit}[2][]{%
- \begingroup
- \ifblank{#1}
- {\def\blx@tempa{*}}
- {\def\blx@tempa{#1}}%
- \let\translit\blx@translit@setup
- \let\blx@tempb\@empty
- #2%
- \global\cslet{blx@translit@\blx@tempa}\blx@tempb
- \xifinlist\blx@tempa\blx@translits
- {}
- {\listxadd\blx@translits\blx@tempa}%
- \endgroup}
- \@onlypreamble\DeclareSortTranslit
- \blx@collectopts{xml}{blx@globalopts}{translit}% for passing to the .bcf
- \blx@collectopts{xml}{blx@typeopts}{translit}% for passing to the .bcf
- \newcommand*{\blx@translit@setup}[4][]{%
- \eappto\blx@tempb{%
- \ifblank{#1}
- {\blx@xml@translit{}{#2}{#3}{#4}}
- {\blx@xml@translit{langids="#1" }{#2}{#3}{#4}}}}
- % [<specname>]{<spec>}
- \newrobustcmd*{\DeclareUniquenameTemplate}[2][]{%
- \begingroup
- \ifblank{#1}
- {\def\blx@untname{global}}% default
- {\def\blx@untname{#1}}%
- \let\namepart\blx@untemp@namepart
- \let\blx@tempa\@empty
- \blx@tempcnta\z@
- #2%
- \global\cslet{blx@uniquenametemplate@\blx@untname}\blx@tempa
- \xifinlist\blx@untname\blx@untemplatespecs
- {}
- {\listxadd\blx@untemplatespecs\blx@untname}%
- \endgroup}
- \@onlypreamble\DeclareUniquenameTemplate
- \blx@collectopts{xml}{blx@globalopts}{uniquenametemplate}% for passing to the .bcf
- \DeclareEntryOption[string]{uniquenametemplatename}{%
- \def\blx@refcontext@uniquenametemplatename{#1}}
- \newcommand*{\blx@untemp@namepart}[2][]{%
- \advance\blx@tempcntb\@ne
- \edef\blx@tempe{order="\the\blx@tempcntb"}%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@untemp@namepart}{#1}}%
- \eappto\blx@tempa{%
- \blx@xml@uniquenametemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}}
- \define@key{blx@untemp@namepart}{use}[true]{% use* option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ use="1"}}
- {}}
- \define@key{blx@untemp@namepart}{base}[true]{% base option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ base="1"}}
- {}}
- \define@key{blx@untemp@namepart}{disambiguation}{% disambiguation option for namepart none|inits|full|fullonly
- \appto\blx@tempc{ disambiguation="#1"}}
- % [<templatename>]{<template>}
- \newrobustcmd*{\DeclareSortingNamekeyTemplate}[2][]{%
- \begingroup
- \ifblank{#1}
- {\def\blx@snkname{global}}% default
- {\def\blx@snkname{#1}}%
- \let\namepart\blx@sortnk@namepart
- \let\keypart\blx@sortnk@keypart
- \let\literal\blx@sortnk@literal
- \let\blx@tempa\@empty
- \blx@tempcnta\z@
- #2%
- \global\cslet{blx@sortingnamekeytemplate@\blx@snkname}\blx@tempa
- \xifinlist\blx@snkname\blx@sortingnamekeytemplates
- {}
- {\listxadd\blx@sortingnamekeytemplates\blx@snkname}%
- \endgroup}
- \@onlypreamble\DeclareSortingNamekeyTemplate
- \blx@collectopts{xml}{blx@globalopts}{sortingnamekeytemplate}% for passing to the .bcf
- \DeclareEntryOption[string]{sortingnamekeytemplatename}{%
- \def\blx@refcontext@sortingnamekeytemplatename{#1}}
- % User-mode macro for checking sorting name template options
- \def\ifuniquenametemplatename#1{%
- \expandafter\ifstrequal\expandafter{\blx@refcontext@uniquenametemplatename}{#1}}
- \def\iflabelalphanametemplatename#1{%
- \expandafter\ifstrequal\expandafter{\blx@refcontext@labelalphanametemplatename}{#1}}
- \def\ifsortingnamekeytemplatename#1{%
- \expandafter\ifstrequal\expandafter{\blx@refcontext@sortingnamekeytemplatename}{#1}}
- \newcommand*{\blx@sortnk@keypart}[1]{%
- \advance\blx@tempcnta\@ne
- \blx@tempcntb\z@
- \edef\blx@tempd{ order="\the\blx@tempcnta"}%
- \let\blx@tempb\@empty
- #1%
- \eappto\blx@tempa{%
- \blx@xml@sortingnamekeykeypart{\blx@tempd}{\blx@tempb}}}
- \newcommand*{\blx@sortnk@literal}[1]{%
- \advance\blx@tempcntb\@ne
- \edef\blx@tempe{ order="\the\blx@tempcntb"}%
- \let\blx@tempc\@empty
- \eappto\blx@tempb{%
- \blx@xml@sortingnamekeyliteral{\blx@tempe}{#1}}}
- \newcommand*{\blx@sortnk@namepart}[2][]{%
- \advance\blx@tempcntb\@ne
- \edef\blx@tempe{ order="\the\blx@tempcntb"}%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@sortnk@namepart}{#1}}%
- \eappto\blx@tempb{%
- \blx@xml@sortingnamekeynamepart{\blx@tempe}{\blx@tempc}{#2}}}
- \define@key{blx@sortnk@namepart}{use}[true]{% use* option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ use="1"}}
- {\appto\blx@tempc{ use="0"}}}
- \define@key{blx@sortnk@namepart}{inits}[true]{% initials only option for namepart true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ inits="1"}}
- {\appto\blx@tempc{ inits="0"}}}
- % [options]{<templatename>}{<template>}
- \newrobustcmd*{\DeclareSortingTemplate}[3][]{%
- \ifblank{#1}
- {}
- {\setkeys{blx@sortdef@sorting}{#1}%
- \csxdef{blx@sortdef@locale@#2}{\blx@templ}}%
- \begingroup
- \def\name{%LEGACY(<2.0)
- \blx@warning@noline{%
- '\string\name' is deprecated in sorting specifications, please use '\string\field'}%
- \blx@sortdef@field}%
- \def\list{%LEGACY(<2.0)
- \blx@warning@noline{%
- '\string\list' is deprecated in sorting specifications, please use '\string\field'}%
- \blx@sortdef@field}%
- \let\sort\blx@sortdef@sort
- \let\field\blx@sortdef@field
- \let\literal\blx@sortdef@literal
- \def\citeorder{\blx@sortdef@field{citeorder}}%
- \blx@tempcnta\z@
- \let\blx@tempa\@empty
- #3%
- \global\cslet{blx@sortingtemplate@#2}\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareSortingTemplate
- \blx@collectopts{xml}{blx@globalopts}{sortingtemplate}% for passing to the .bcf
- \define@key{blx@sortdef@sorting}{locale}{% locale name
- \def\blx@templ{#1}}
- \newcommand*{\blx@sortdef@sort}[2][]{%
- \advance\blx@tempcnta\@ne
- \blx@tempcntb\z@
- \let\blx@tempb\@empty
- \edef\blx@tempc{order="\the\blx@tempcnta"}%
- \ifblank{#1}
- {}
- {\setkeys{blx@sortdef@sort}{#1}}%
- \let\do\@firstofone
- #2%
- \eappto\blx@tempa{%
- \blx@xml@sort{\blx@tempc}{\blx@tempb}}}
- \define@key{blx@sortdef@sort}{locale}{% locale name
- \eappto\blx@tempc{ locale="#1"}}
- \define@key{blx@sortdef@sort}{direction}{% ascending|descending
- \ifstrequal{#1}{ascending}
- {\eappto\blx@tempc{ sort\string_direction="ascending"}}
- {\eappto\blx@tempc{ sort\string_direction="descending"}}}
- \define@key{blx@sortdef@sort}{final}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ final="1"}}
- {}}
- \define@key{blx@sortdef@sort}{sortcase}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ sortcase="1"}}
- {\appto\blx@tempc{ sortcase="0"}}}
- \define@key{blx@sortdef@sort}{sortupper}[true]{% true|false
- \ifstrequal{#1}{true}
- {\appto\blx@tempc{ sortupper="1"}}
- {\appto\blx@tempc{ sortupper="0"}}}
- \newcommand*{\blx@sortdef@field}[2][]{%
- \advance\blx@tempcntb\@ne
- \edef\blx@tempd{order="\the\blx@tempcntb"}%
- \ifblank{#1}
- {}
- {\setkeys{blx@sortdef@field}{#1}}%
- \eappto\blx@tempb{%
- \blx@xml@sortitem{\blx@tempd}{#2}}}
- \define@key{blx@sortdef@field}{padside}{% left|right
- \ifstrequal{#1}{right}
- {\eappto\blx@tempd{ pad\string_side="right"}}
- {\eappto\blx@tempd{ pad\string_side="left"}}}
- \define@key{blx@sortdef@field}{padwidth}{% integer
- \eappto\blx@tempd{ pad\string_width="#1"}}
- \define@key{blx@sortdef@field}{padchar}{% character
- \blx@xmlsanitizeafter{\def\blx@tempe}{#1}%
- \eappto\blx@tempd{ pad\string_char="\blx@tempe"}}
- \define@key{blx@sortdef@field}{strside}{% left|right
- \ifstrequal{#1}{right}
- {\eappto\blx@tempd{ substring\string_side="right"}}
- {\eappto\blx@tempd{ substring\string_side="left"}}}
- \define@key{blx@sortdef@field}{strwidth}{% integer
- \eappto\blx@tempd{ substring\string_width="#1"}}
- \def\blx@sortdef@literal#1{%
- \advance\blx@tempcntb\@ne
- \blx@xmlsanitizeafter{\def\blx@tempe}{#1}%
- \eappto\blx@tempb{%
- \blx@xml@sortitem{order="\the\blx@tempcntb"}{\blx@tempe}}}
- % [<type,type,...>]{<string>}
- \newrobustcmd*{\DeclarePresort}[2][]{%
- \begingroup
- \blx@xmlsanitizeafter{\def\blx@tempa}{#2}%
- \ifblank{#1}
- {\xdef\blx@bcf@presort{\blx@xml@presort{}{\blx@tempa}}}
- {\notblank{#2}
- {\forcsvlist{\blx@defpresort\blx@tempa}{#1}}
- {\forcsvlist\blx@undefpresort{#1}}}%
- \endgroup}
- \@onlypreamble\DeclarePresort
- \blx@collectopts{string}{blx@globalopts}{presort}% for passing to the .bcf
- \blx@collectopts{string}{blx@typeopts}{presort}% for passing to the .bcf
- \blx@collectopts{string}{blx@entryopts}{presort}% for passing to the .bcf
- \def\blx@defpresort#1#2{%
- \csxdef{blx@bcf@presort@#2}{\blx@xml@presort{#2}{#1}}}
- \def\blx@undefpresort#1{%
- \global\csundef{blx@bcf@presort@#1}}
- % {<entrytype,...>}{<field,...>}
- \newrobustcmd*{\DeclareSortExclusion}[2]{%
- \forcsvlist{\blx@sortexclude{#2}}{#1}}
- \blx@collectopts{xml}{blx@typeopts}{sortexclusion}% for passing to the .bcf
- % {<field>}{<entrytype>}
- \def\blx@sortexclude#1#2{%
- \begingroup
- \ifblank{#1}
- {\global\csundef{blx@bcf@exclude@#2}}
- {\let\blx@tempa\@empty
- \forcsvlist\blx@sortexclude@i{#1}%
- \csxdef{blx@bcf@exclude@#2}{%
- \blx@xml@sortexclude{#2}{\blx@tempa}}}
- \endgroup}
- \def\blx@sortexclude@i#1{%
- \appto\blx@tempa{\blx@xml@exclude{#1}}}
- % {<entrytype,...>}{<field,...>}
- \newrobustcmd*{\DeclareSortInclusion}[2]{%
- \forcsvlist{\blx@sortinclude{#2}}{#1}}
- \blx@collectopts{xml}{blx@typeopts}{sortinclusion}% for passing to the .bcf
- % {<field>}{<entrytype>}
- \def\blx@sortinclude#1#2{%
- \begingroup
- \ifblank{#1}
- {\global\csundef{blx@bcf@include@#2}}
- {\let\blx@tempa\@empty
- \forcsvlist\blx@sortinclude@i{#1}%
- \csxdef{blx@bcf@include@#2}{%
- \blx@xml@sortinclude{#2}{\blx@tempa}}}
- \endgroup}
- \def\blx@sortinclude@i#1{%
- \appto\blx@tempa{\blx@xml@include{#1}}}
- % {<field,field,...>}
- \newrobustcmd*{\DeclareExtradate}[1]{%
- \begingroup
- \let\blx@tempa\@empty
- \let\scope\blx@extradate@scope
- #1%
- \global\let\blx@bcf@extradatespec\blx@tempa
- \endgroup}
- \@onlypreamble\DeclareExtradate
- \blx@collectopts{xml}{blx@globalopts}{extradatespec}% for passing to the .bcf
- \newrobustcmd*{\blx@extradate@scope}[1]{%
- \let\blx@tempb\@empty
- \let\field\blx@ordereded@field
- #1%
- \csxappto{blx@tempa}{%
- \noexpand\blx@xml@extradatescope{\blx@tempb}}}
- \newcommand*{\blx@ordereded@field}[1]{%
- \advance\blx@tempcnta\@ne
- \csxappto{blx@tempb}{%
- \noexpand\blx@xml@edordered{\the\blx@tempcnta}{#1}}}
- % [<type,type,...>]{<field,field,...>}
- \newrobustcmd*{\DeclareLabelname}[2][]{%
- \begingroup
- \let\blx@tempa\@empty
- \def\blx@tempb{labelnamespec}%
- \let\field\blx@ordered@field
- \ifblank{#1}
- {\global\cslet{blx@bcf@labelnamespec}\@empty}
- {\def\blx@tempa{#1}%
- \def\do##1{\global\cslet{blx@bcf@labelnamespec@##1}\@empty}%
- \expandafter\docsvlist\expandafter{#1}}%
- #2%
- \endgroup}
- \@onlypreamble\DeclareLabelname
- \blx@collectopts{xml}{blx@globalopts}{labelnamespec}% for passing to the .bcf
- \blx@collectopts{xml}{blx@typeopts}{labelnamespec}% for passing to the .bcf
- \newrobustcmd*{\DeclareLabeltitle}[2][]{%
- \begingroup
- \let\blx@tempa\@empty
- \def\blx@tempb{labeltitlespec}%
- \let\field\blx@ordered@field
- \ifblank{#1}
- {\global\cslet{blx@bcf@labeltitlespec}\@empty}
- {\def\blx@tempa{#1}%
- \def\do##1{\global\cslet{blx@bcf@labeltitlespec@##1}\@empty}%
- \expandafter\docsvlist\expandafter{#1}}%
- #2%
- \endgroup}
- \@onlypreamble\DeclareLabeltitle
- \blx@collectopts{xml}{blx@globalopts}{labeltitlespec}% for passing to the .bcf
- \blx@collectopts{xml}{blx@typeopts}{labeltitlespec}% for passing to the .bcf
- \newrobustcmd*{\DeclareLabeldate}[2][]{%
- \begingroup
- \let\blx@tempa\@empty
- \def\blx@tempb{labeldatespec}%
- \let\field\blx@orderedld@field
- \let\literal\blx@orderedld@literal
- \ifblank{#1}
- {\global\cslet{blx@bcf@labeldatespec}\@empty}
- {\def\blx@tempa{#1}%
- \def\do##1{\global\cslet{blx@bcf@labeldatespec@##1}\@empty}%
- \expandafter\docsvlist\expandafter{#1}}%
- #2%
- \endgroup}
- \@onlypreamble\DeclareLabeldate
- \blx@collectopts{xml}{blx@globalopts}{labeldatespec}% for passing to the .bcf
- \blx@collectopts{xml}{blx@typeopts}{labeldatespec}% for passing to the .bcf
- \newcommand*{\blx@ordered@field}[2][]{%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@ordered@field}{#1}}%
- \advance\blx@tempcnta\@ne
- \ifdefempty{\blx@tempa}
- {\csxappto{blx@bcf@\blx@tempb}{%
- \noexpand\blx@xml@ordered{\the\blx@tempcnta}{\blx@tempc}{#2}}}
- {\def\do##1{%
- \blx@addtypeopt{##1}%
- \csxappto{blx@bcf@\blx@tempb @##1}{%
- \noexpand\blx@xml@ordered{\the\blx@tempcnta}{\blx@tempc}{#2}}}%
- \expandafter\docsvlist\expandafter{\blx@tempa}}}
- \newcommand*{\blx@orderedld@field}[2][]{%
- \let\blx@tempc\@empty
- \ifblank{#1}
- {}
- {\setkeys{blx@ordered@field}{#1}}%
- \advance\blx@tempcnta\@ne
- \ifdefempty{\blx@tempa}
- {\csxappto{blx@bcf@\blx@tempb}{%
- \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="field"\blx@tempc}{#2}}}
- {\def\do##1{%
- \blx@addtypeopt{##1}%
- \csxappto{blx@bcf@\blx@tempb @##1}{%
- \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="field"\blx@tempc}{#2}}}%
- \expandafter\docsvlist\expandafter{\blx@tempa}}}
- \newcommand*{\blx@orderedld@literal}[1]{%
- \advance\blx@tempcnta\@ne
- \ifdefempty{\blx@tempa}
- {\csxappto{blx@bcf@\blx@tempb}{%
- \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="string"}{#1}}}
- {\def\do##1{%
- \blx@addtypeopt{##1}%
- \csxappto{blx@bcf@\blx@tempb @##1}{%
- \noexpand\blx@xml@ordered{\the\blx@tempcnta}{ type="string"}{#1}}}%
- \expandafter\docsvlist\expandafter{\blx@tempa}}}
- %% Package options
- % [<entrytype,entrytype,...>]{<options>}
- \newrobustcmd*{\ExecuteBibliographyOptions}[2][]{%
- \ifblank{#1}
- {\setkeys{blx@opt@pre}{#2}}
- {\forcsvlist{\blx@typeoptions{#2}}{#1}}}
- \@onlypreamble\ExecuteBibliographyOptions
- \def\blx@typeoptions#1#2{%
- \blx@addtypeopt{#2}%
- \csappto{blx@opts@type@#2}{#1,}}
- \def\blx@addtypeopt#1{%
- \notblank{#1}
- {\ifdef\blx@opts@type
- {\ifinlist{#1}\blx@opts@type
- {}
- {\listgadd\blx@opts@type{#1}}}
- {\listgadd\blx@opts@type{#1}}}
- {}}
- % load-time only
- % Have to have a dummy for this as it's set much earlier but is passed
- % through to here where we just ignore it
- \define@key{blx@opt@ldt}{datamodel}{}
- \define@key{blx@opt@ldt}{backend}{%
- \ifstrequal{#1}{biber}
- {}
- {\ifboolexpr{
- test {\ifstrequal{#1}{bibtex}}
- or
- test {\ifstrequal{#1}{bibtex8}}}
- {\settoggle{blx@bibtex}{true}%
- \newtoggle{blx@bibtex8}%
- \ifstrequal{#1}{bibtex8}
- {\settoggle{blx@bibtex8}{true}}
- {}}%
- {\blx@err@invopt{backend=#1}{}}}}
- \define@key{blx@opt@ldt}{style}{%
- \def\blx@cbxfile{#1}%
- \def\blx@bbxfile{#1}}
- \define@key{blx@opt@ldt}{bibstyle}{%
- \def\blx@bbxfile{#1}}
- \define@key{blx@opt@ldt}{citestyle}{%
- \def\blx@cbxfile{#1}}
- \define@key{blx@opt@ldt}{natbib}[true]{%
- \settoggle{blx@natbib}{#1}}
- \define@key{blx@opt@ldt}{mcite}[true]{%
- \settoggle{blx@mcite}{#1}}
- \define@key{blx@opt@ldt}{noerroretextools}[true]{%
- \blx@warning@noline{%
- The option 'noerroretextools' is deprecated.\MessageBreak
- Define the control sequence '\string\blx@noerroretextools'\MessageBreak
- before loading biblatex instead}%
- \ifstrequal{#1}{true}
- {\global\cslet{blx@noerroretextools}\@empty}
- {\csgundef{blx@noerroretextools}}}
- % load-time and preamble
- \DeclareBibliographyOption[boolean]{debug}[true]{%
- \settoggle{blx@debug}{#1}}
- \DeclareBibliographyOption[boolean]{loadfiles}[true]{%
- \settoggle{blx@loadfiles}{#1}}
- \DeclareBibliographyOption[integer]{mincrossrefs}{%
- \ifnum#1<\z@
- \def\blx@mincrossrefs{1}%
- \else
- \def\blx@mincrossrefs{#1}%
- \fi}
- \DeclareBibliographyOption[integer]{minxrefs}{%
- \ifnum#1<\z@
- \def\blx@minxrefs{1}%
- \else
- \def\blx@minxrefs{#1}%
- \fi}
- \def\blx@minxrefs{2}
- \DeclareBibliographyOption[string]{texencoding}{%
- \ifstrequal{#1}{auto}
- {\undef\blx@texencoding}
- {\def\blx@texencoding{#1}}}
- \DeclareBibliographyOption[string]{bibencoding}{%
- \ifcsdef{blx@bibenc@#1}
- {\letcs\blx@bibencoding{blx@bibenc@#1}}
- {\def\blx@bibencoding{#1}}}
- \def\abx@mapbibenc#1#2{\csdef{blx@bibenc@#1}{#2}}
- \abx@mapbibenc{inputenc}{auto}
- \abx@mapbibenc{x-ascii}{ascii}
- \def\abx@mapinpenc#1#2{\csdef{blx@inpenc@#1}{#2}}
- \abx@mapinpenc{utf8x}{utf8}
- \abx@mapinpenc{lutf8}{utf8}
- \abx@mapinpenc{x-ascii}{ascii}
- \DeclareBibliographyOption[boolean]{safeinputenc}[true]{%
- \settoggle{blx@safeinputenc}{#1}}
- \newtoggle{blx@safeinputenc}
- % global "sorting" option becomes "sortingtemplatename" in the .bcf and so
- % don't use \DeclareBibliographyOption. This is a legacy naming issue
- % unlikely to be corrected as "sorting" is an obvious name for biblatex users
- % "sorting" is used in the .bcf for the actual sorting template definitions and is
- % an XML format option
- \define@key{blx@opt@pre}{sorting}{%
- \def\blx@sorting{#1}%
- \def\blx@refcontext@sortingtemplatename{#1}}
- \blx@collectopts{string}{blx@globalopts}{sortingtemplatename}% for passing to the .bcf
- \AtEndPreamble{%
- \ifcsdef{blx@sortingtemplate@\blx@sorting}
- {}
- {\blx@err@invopt{sorting=\blx@sorting}{}%
- \def\blx@sorting{nty}%
- \def\blx@refcontext@sortingtemplatename{nty}}%
- \listxadd\blx@sortingtemplatenames\blx@sorting
- \def\blx@refcontext@sortingnamekeytemplatename{global}%
- \let\blx@refcontext@labelprefix\@empty
- \let\blx@refcontext@labelprefix@real\@empty
- \def\blx@refcontext@uniquenametemplatename{global}%
- \def\blx@refcontext@labelalphanametemplatename{global}%
- \blx@xdef@refcontext{\blx@refcontext@sortingtemplatename/\blx@refcontext@sortingnamekeytemplatename/\blx@refcontext@labelprefix/\blx@refcontext@uniquenametemplatename/\blx@refcontext@labelalphanametemplatename}%
- \listxadd\blx@refcontexts\blx@refcontext@context}
- \DeclareBibliographyOption[boolean]{sortcase}[true]{%
- \settoggle{blx@sortcase}{#1}}
- \DeclareBibliographyOption[boolean]{sortupper}[true]{%
- \settoggle{blx@sortupper}{#1}}
- \DeclareBibliographyOption[integer]{maxnames}{%
- \numdef\blx@maxcitenames{#1}%
- \numdef\blx@maxbibnames{#1}%
- \numdef\blx@maxsortnames{#1}}
- \DeclareBibliographyOption[integer]{minnames}{%
- \numdef\blx@mincitenames{#1}%
- \numdef\blx@minbibnames{#1}%
- \numdef\blx@minsortnames{#1}}
- \DeclareTypeOption[integer]{maxnames}{%
- \numdef\blx@maxcitenames@type{#1}%
- \numdef\blx@maxbibnames@type{#1}%
- \numdef\blx@maxsortnames@type{#1}%
- \c@maxnames#1\relax}
- \DeclareTypeOption[integer]{minnames}{%
- \numdef\blx@mincitenames@type{#1}%
- \numdef\blx@minbibnames@type{#1}%
- \numdef\blx@minsortnames@type{#1}%
- \c@minnames#1\relax}
- \DeclareEntryOption[integer]{maxnames}{%
- \c@maxnames#1\relax}
- \DeclareEntryOption[integer]{minnames}{%
- \c@minnames#1\relax}
- \DeclareBibliographyOption[integer]{maxbibnames}{%
- \numdef\blx@maxbibnames{#1}%
- \numdef\blx@maxsortnames{#1}}
- \DeclareBibliographyOption[integer]{minbibnames}{%
- \numdef\blx@minbibnames{#1}%
- \numdef\blx@minsortnames{#1}}
- \DeclareTypeOption[integer]{maxbibnames}{%
- \numdef\blx@maxbibnames@type{#1}%
- \numdef\blx@maxsortnames@type{#1}%
- \iftoggle{blx@bibliography}
- {\c@maxnames#1\relax}
- {}}
- \DeclareTypeOption[integer]{minbibnames}{%
- \numdef\blx@minbibnames@type{#1}%
- \numdef\blx@minsortnames@type{#1}%
- \iftoggle{blx@bibliography}
- {\c@minnames#1\relax}
- {}}
- \DeclareEntryOption[integer]{maxbibnames}{%
- \iftoggle{blx@bibliography}
- {\c@maxnames#1\relax}
- {}}
- \DeclareEntryOption[integer]{minbibnames}{%
- \iftoggle{blx@bibliography}
- {\c@minnames#1\relax}
- {}}
- \DeclareBibliographyOption[integer]{maxcitenames}{%
- \numdef\blx@maxcitenames{#1}}
- \DeclareBibliographyOption[integer]{mincitenames}{%
- \numdef\blx@mincitenames{#1}}
- \DeclareTypeOption[integer]{maxcitenames}{%
- \numdef\blx@maxcitenames@type{#1}%
- \iftoggle{blx@bibliography}
- {}
- {\c@maxnames#1\relax}}
- \DeclareTypeOption[integer]{mincitenames}{%
- \numdef\blx@mincitenames@type{#1}%
- \iftoggle{blx@bibliography}
- {}
- {\c@minnames#1\relax}}
- \DeclareEntryOption[integer]{maxcitenames}{%
- \iftoggle{blx@bibliography}
- {}
- {\c@maxnames#1\relax}}
- \DeclareEntryOption[integer]{mincitenames}{%
- \iftoggle{blx@bibliography}
- {}
- {\c@minnames#1\relax}}
- \DeclareBibliographyOption[integer]{maxsortnames}{%
- \numdef\blx@maxsortnames{#1}}
- \DeclareBibliographyOption[integer]{minsortnames}{%
- \numdef\blx@minsortnames{#1}}
- \DeclareTypeOption[integer]{maxsortnames}{%
- \numdef\blx@maxsortnames@type{#1}}
- \DeclareTypeOption[integer]{minsortnames}{%
- \numdef\blx@minsortnames@type{#1}}
- \DeclareEntryOption[integer]{maxsortnames}{}
- \DeclareEntryOption[integer]{minsortnames}{}
- \appto\blx@checkoptions@global{%
- \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames\blx@minbibnames
- \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames\blx@mincitenames
- \blx@maxmin@num{maxsortnames}{minsortnames}\blx@maxsortnames\blx@minsortnames}
- \appto\blx@checkoptions@type{%
- \blx@maxmin@num{maxbibnames}{minbibnames}\blx@maxbibnames@type\blx@minbibnames@type
- \blx@maxmin@num{maxcitenames}{mincitenames}\blx@maxcitenames@type\blx@mincitenames@type
- \blx@maxmin@num{maxsortnames}{minsortnames}\blx@maxsortnames@type\blx@minsortnames@type}
- \appto\blx@checkoptions@entry{%
- \blx@maxmin@cnt{maxnames}{minnames}\c@maxnames\c@minnames}
- \DeclareBibliographyOption[integer]{maxitems}{%
- \numdef\blx@maxitems{#1}}
- \DeclareBibliographyOption[integer]{minitems}{%
- \numdef\blx@minitems{#1}}
- \DeclareTypeOption[integer]{maxitems}{%
- \numdef\blx@maxitems@type{#1}%
- \c@maxitems#1\relax}
- \DeclareTypeOption[integer]{minitems}{%
- \numdef\blx@minitems@type{#1}%
- \c@minitems#1\relax}
- \DeclareEntryOption[integer]{maxitems}{%
- \c@maxitems#1\relax}
- \DeclareEntryOption[integer]{minitems}{%
- \c@minitems#1\relax}
- \appto\blx@checkoptions@global{%
- \blx@maxmin@num{maxitems}{minitems}\blx@maxitems\blx@minitems}
- \appto\blx@checkoptions@type{%
- \blx@maxmin@num{maxitems}{minitems}\blx@maxitems@type\blx@minitems@type}
- \appto\blx@checkoptions@entry{%
- \blx@maxmin@cnt{maxitems}{minitems}\c@maxitems\blx@minitems}
- \DeclareBibliographyOption[integer]{maxalphanames}{%
- \numdef\blx@maxalphanames{#1}}
- \DeclareBibliographyOption[integer]{minalphanames}{%
- \numdef\blx@minalphanames{#1}}
- \DeclareTypeOption[integer]{maxalphanames}{%
- \numdef\blx@maxalphanames{#1}}
- \DeclareTypeOption[integer]{minalphanames}{%
- \numdef\blx@minalphanames{#1}}
- \DeclareEntryOption[integer]{maxalphanames}{%
- \numdef\blx@maxalphanames{#1}}
- \DeclareEntryOption[integer]{minalphanames}{%
- \numdef\blx@minalphanames{#1}}
- \appto\blx@checkoptions@global{%
- \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames}
- \appto\blx@checkoptions@type{%
- \blx@maxmin@num{maxalphanames}{minalphanames}\blx@maxalphanames\blx@minalphanames}
- \def\blx@maxmin@num#1#2#3#4{%
- \ifnumless#3\@ne
- {\blx@err@invopt{#1=#3}{'#1' must be greater than zero}%
- \let#3\@ne}
- {}%
- \ifnumless#4\@ne
- {\blx@err@invopt{#2=#4}{'#2' must be greater than zero}%
- \let#4\@ne}
- {}%
- \ifnumless#3#4
- {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}%
- \let#3#4}
- {}}
- \def\blx@maxmin@cnt#1#2#3#4{%
- \ifnumless#3\@ne
- {\blx@err@invopt{#1=\number#3}{'#1' must be greater than zero}%
- #3\@ne}
- {}%
- \ifnumless#4\@ne
- {\blx@err@invopt{#2=\number#4}{'#2' must be greater than zero}%
- #4\@ne}
- {}%
- \ifnumless#3#4
- {\blx@err@confopt{#1/#2}{'#1' must be greater than or equal to '#2'}%
- #3=#4}
- {}}
- \DeclareBibliographyOption[boolean]{terseinits}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@terseinits}
- \renewrobustcmd*{\bibinitperiod}{}
- \renewrobustcmd*{\bibinitdelim}{}
- \renewrobustcmd*{\bibinithyphendelim}{}}
- {\togglefalse{blx@terseinits}
- \renewrobustcmd*{\bibinitperiod}{\adddot}
- \renewrobustcmd*{\bibinitdelim}{\addnbspace}
- \renewrobustcmd*{\bibinithyphendelim}{\adddot\mbox{-}}}}
- \DeclareBibliographyOption[boolean]{abbreviate}[true]{%
- \ifstrequal{#1}{true}
- {\def\abx@str{abx@sstr}}
- {\def\abx@str{abx@lstr}}}
- \DeclareBibliographyOption[boolean]{dateabbrev}[true]{%
- \ifstrequal{#1}{true}
- {\let\abx@bibmonth\blx@imc@bibsstring
- \let\abx@bibseason\blx@imc@bibsstring}
- {\let\abx@bibmonth\blx@imc@biblstring
- \let\abx@bibseason\blx@imc@biblstring}}
- \DeclareBibliographyOption[string]{sortlocale}{%
- \edef\blx@sortlocale{\detokenize{#1}}}
- \DeclareBibliographyOption[string]{language}{%
- \togglefalse{blx@autolangbib}%
- \togglefalse{blx@autolangcite}%
- \ifboolexpr{
- test {\ifstrequal{#1}{auto}}
- or
- test {\ifstrequal{#1}{autobib}}
- or
- test {\ifstrequal{#1}{autocite}}
- }
- {\def\blx@languagename{english}%
- \ifstrequal{#1}{auto}
- {\toggletrue{blx@autolangbib}%
- \toggletrue{blx@autolangcite}}
- {}%
- \ifstrequal{#1}{autobib}
- {\toggletrue{blx@autolangbib}}
- {}%
- \ifstrequal{#1}{autocite}
- {\toggletrue{blx@autolangcite}}
- {}}
- % If language is explicit, we do want to auto-switch but only to the
- % selected language
- {\IfFileExists{#1.lbx}
- {\toggletrue{blx@autolangbib}%
- \toggletrue{blx@autolangcite}%
- \edef\blx@languagename{#1}%
- \edef\blx@forcelanguagename{#1}}
- {\blx@error
- {Language '#1' not supported}
- {Failed to find a matching '#1.lbx' file}}}}
- \DeclareBibliographyOption[boolean]{clearlang}[true]{%
- \settoggle{blx@clearlang}{#1}}
- \DeclareBibliographyOption[string]{autolang}{%
- \blx@autolang@i{#1}}
- \def\blx@autolang@i#1{%
- \ifcsdef{blx@opt@autolang@#1}
- {\csuse{blx@opt@autolang@#1}}
- {\blx@err@invopt{autolang=#1}{}}}
- \def\blx@opt@autolang@none{%
- \undef\blx@thelangenv
- \let\blx@hook@initlang\@empty
- \let\blx@hook@endlang\@empty}
- \def\blx@opt@autolang@hyphen{%
- \def\blx@thelangenv{hyphenrules}%
- \let\blx@hook@initlang\@empty
- \let\blx@hook@endlang\@empty}
- \csdef{blx@opt@autolang@other*}{%
- \def\blx@thelangenv{otherlanguage*}%
- \def\blx@hook@initlang{\@quotereset\@ne}%
- \def\blx@hook@endlang{\blx@postpunct}}
- \def\blx@opt@autolang@other{%
- \def\blx@thelangenv{otherlanguage}%
- \def\blx@hook@initlang{\@quotereset\@ne}%
- \def\blx@hook@endlang{\blx@postpunct}}
- \def\blx@opt@autolang@langname{%
- \@ifpackageloaded{polyglossia}
- {\def\blx@thelangenv{langname}}
- {\def\blx@thelangenv{otherlanguage}}%
- \def\blx@hook@initlang{\@quotereset\@ne}%
- \def\blx@hook@endlang{\blx@postpunct}}
- \DeclareBibliographyOption[boolean]{indexing}[true]{%
- \blx@opt@index{#1}}
- \DeclareTypeOption[boolean]{indexing}[true]{%
- \blx@opt@index{#1}}
- \DeclareEntryOption[boolean]{indexing}[true]{%
- \blx@opt@index{#1}}
- \def\blx@opt@index#1{%
- \ifcsdef{blx@opt@index@#1}
- {\csuse{blx@opt@index@#1}}
- {\blx@err@invopt{indexing=#1}{}}}
- \def\blx@opt@index@true{%
- \toggletrue{blx@citeindex}%
- \toggletrue{blx@bibindex}}
- \def\blx@opt@index@false{%
- \togglefalse{blx@citeindex}%
- \togglefalse{blx@bibindex}}
- \def\blx@opt@index@cite{%
- \toggletrue{blx@citeindex}%
- \togglefalse{blx@bibindex}}
- \def\blx@opt@index@bib{%
- \togglefalse{blx@citeindex}%
- \toggletrue{blx@bibindex}}
- \DeclareBibliographyOption[boolean]{sortcites}[true]{%
- \ifstrequal{#1}{true}
- {\let\blx@thecitesort\blx@citesort
- \let\blx@thenotecheck\blx@notecheck
- \booltrue{sortcites}}
- {\let\blx@thecitesort\blx@citenosort
- \let\blx@thenotecheck\relax}}
- \DeclareBibliographyOption[boolean]{sortsets}[true]{%
- \settoggle{blx@sortsets}{#1}}
- \DeclareBibliographyOption[boolean]{hyperref}[true]{%
- \ifcsdef{blx@opt@hyperref@#1}
- {\letcs\blx@hyperref{blx@opt@hyperref@#1}}
- {\blx@err@invopt{hyperref=#1}{}}}
- \def\blx@opt@hyperref@false{0}
- \def\blx@opt@hyperref@true{1}
- \def\blx@opt@hyperref@auto{2}
- \def\blx@opt@hyperref@manual{3}
- \def\blx@warn@usedmanualhyperrefs#1{%
- \blx@warning@noline{The command '\string#1' can\MessageBreak
- only be used with 'hyperref=manual'}}
- \def\blx@warn@multiplemanualhyperrefs{%
- \blx@warning@noline{You must call either '\string\BiblatexManualHyperrefOn'\MessageBreak
- or '\string\BiblatexManualHyperrefOff' exactly once.\MessageBreak
- Subsequent calls to either command will be ignored}}
- \def\BiblatexManualHyperrefOn{%
- \ifnum\blx@hyperref=\thr@@
- \blx@mkhyperref
- \global\undef\blx@mkhyperref
- \global\undef\blx@mknohyperref
- \global\let\BiblatexManualHyperrefOn\blx@warn@multiplemanualhyperrefs
- \global\let\BiblatexManualHyperrefOff\blx@warn@multiplemanualhyperrefs
- \else
- \blx@warn@usedmanualhyperrefs{\BiblatexManualHyperrefOn}%
- \fi}
- \def\BiblatexManualHyperrefOff{%
- \ifnum\blx@hyperref=\thr@@
- \blx@mknohyperref
- \global\undef\blx@mkhyperref
- \global\undef\blx@mknohyperref
- \global\let\BiblatexManualHyperrefOn\blx@warn@multiplemanualhyperrefs
- \global\let\BiblatexManualHyperrefOff\blx@warn@multiplemanualhyperrefs
- \else
- \blx@warn@usedmanualhyperrefs{\BiblatexManualHyperrefOff}%
- \fi}
- \DeclareBibliographyOption[boolean]{backref}[true]{%
- \ifstrequal{#1}{true}
- {\let\blx@backref\blx@addbackref
- \let\abx@aux@backref\blx@aux@backref
- \booltrue{backtracker}}
- {\let\blx@backref\@gobble
- \let\abx@aux@backref\@gobblefive
- \boolfalse{backtracker}}}
- \DeclareBibliographyOption[string]{backrefsetstyle}{%
- \ifcsdef{blx@opt@backrefsetstyle@#1}
- {\letcs\blx@backrefsetstyle{blx@opt@backrefsetstyle@#1}}
- {\blx@err@invopt{backrefsetstyle=#1}{}}}
- \def\blx@opt@backrefsetstyle@setonly{0}
- \def\blx@opt@backrefsetstyle@memonly{1}
- \def\blx@opt@backrefsetstyle@setormem{2}
- \def\blx@opt@backrefsetstyle@setandmem{3}
- \def\blx@opt@backrefsetstyle@memandset{4}
- \def\blx@opt@backrefsetstyle@setplusmem{5}
- \appto\blx@mkhyperref{%
- \ifHy@plainpages
- \blx@warning@noline{%
- hyperref package option 'plainpages' enabled.\MessageBreak
- This may cause problems with hyperlinked back\MessageBreak
- references. 'plainpages=false' is recommended}%
- \fi
- \ifHy@pageanchor\else
- \blx@warning@noline{%
- hyperref package option 'pageanchor' disabled.\MessageBreak
- This will cause problems with hyperlinked back\MessageBreak
- references. 'pageanchor=true' is required}%
- \fi}
- \DeclareBibliographyOption[string]{block}{%
- \ifcsdef{blx@opt@block@#1}
- {\csuse{blx@opt@block@#1}}
- {\blx@err@invopt{block=#1}{}}}
- \def\blx@opt@block@none{%
- \let\blx@bibsetup\@empty
- \let\newblockpunct\@empty}
- \def\blx@opt@block@par{%
- \let\blx@bibsetup\@empty
- \def\newblockpunct{\par}}
- \def\blx@opt@block@nbpar{%
- \def\blx@bibsetup{\interlinepenalty\@M}%
- \def\newblockpunct{\par\nobreak}}
- \def\blx@opt@block@space{%
- \let\blx@bibsetup\@empty
- \def\newblockpunct{%
- \unspace\space
- \hskip 0.11em
- \@plus 0.33em
- \@minus 0.07em}}
- \def\blx@opt@block@ragged{%
- \let\blx@bibsetup\raggedright
- \def\newblockpunct{%
- \unspace\penalty-9\relax\space}}
- \DeclareBibliographyOption[boolean]{pagetracker}[true]{%
- \ifcsdef{blx@opt@pagetracker@#1}
- {\csuse{blx@opt@pagetracker@#1}}
- {\blx@err@invopt{pagetracker=#1}{}}}
- \def\blx@opt@pagetracker@true{%
- \if@twoside
- \blx@opt@pagetracker@spread
- \else
- \blx@opt@pagetracker@page
- \fi}
- \def\blx@opt@pagetracker@false{%
- \let\blx@pagetracker\relax
- \let\abx@aux@page\@gobbletwo
- \let\abx@aux@fnpage\@gobbletwo
- \boolfalse{pagetracker}}
- \def\blx@opt@pagetracker@page{%
- \let\blx@pagetracker\blx@pagetracker@context
- \let\abx@aux@page\blx@aux@page
- \let\abx@aux@fnpage\blx@aux@fnpage
- \booltrue{pagetracker}}
- \def\blx@opt@pagetracker@spread{%
- \if@twoside
- \let\blx@pagetracker\blx@pagetracker@context
- \let\abx@aux@page\blx@aux@spread
- \let\abx@aux@fnpage\blx@aux@fnspread
- \booltrue{pagetracker}%
- \else
- \blx@warning@noline{%
- LaTeX not in twoside mode\MessageBreak
- Falling back to 'pagetracker=page'}%
- \blx@opt@pagetracker@page
- \fi}
- \DeclareBibliographyOption[boolean]{citecounter}[true]{%
- \ifcsdef{blx@opt@citecounter@#1}
- {\csuse{blx@opt@citecounter@#1}}
- {\blx@err@invopt{citecounter=#1}{}}}
- \def\blx@opt@citecounter@true{%
- \let\blx@setcitecounter\blx@setcitecounter@global
- \let\blx@citecounter\blx@citecounter@global
- \let\abx@aux@count\blx@aux@count
- \let\abx@aux@fncount\blx@aux@fncount
- \booltrue{citetracker}}
- \def\blx@opt@citecounter@context{%
- \let\blx@setcitecounter\blx@setcitecounter@context
- \let\blx@citecounter\blx@citecounter@context
- \let\abx@aux@count\blx@aux@count
- \let\abx@aux@fncount\blx@aux@fncount
- \booltrue{citetracker}}
- \def\blx@opt@citecounter@false{%
- \let\blx@setcitecounter\relax
- \let\blx@citecounter\relax
- \let\abx@aux@count\@gobbletwo
- \let\abx@aux@fncount\@gobbletwo}
- \DeclareBibliographyOption[boolean]{citetracker}[true]{%
- \ifcsdef{blx@opt@citetracker@#1}
- {\csuse{blx@opt@citetracker@#1}}
- {\blx@err@invopt{citetracker=#1}{}}}
- \def\blx@opt@citetracker@true{%
- \let\blx@imc@ifciteseen\blx@ifciteseen@global
- \let\blx@imc@ifentryseen\blx@ifentryseen@global
- \let\blx@citetracker\blx@citetracker@global
- \booltrue{citetracker}}
- \def\blx@opt@citetracker@false{%
- \let\blx@imc@ifciteseen\@secondoftwo
- \protected\long\def\blx@imc@ifentryseen##1##2##3{##3}%
- \let\blx@citetracker\relax}
- \def\blx@opt@citetracker@context{%
- \let\blx@imc@ifciteseen\blx@ifciteseen@context
- \let\blx@imc@ifentryseen\blx@ifentryseen@context
- \let\blx@citetracker\blx@citetracker@context
- \booltrue{citetracker}}
- \def\blx@opt@citetracker@strict{%
- \let\blx@imc@ifciteseen\blx@ifciteseen@global
- \let\blx@imc@ifentryseen\blx@ifentryseen@global
- \def\blx@citetracker{%
- \blx@ifcitesingle{\blx@citetracker@global}{}}%
- \booltrue{citetracker}}
- \def\blx@opt@citetracker@constrict{%
- \let\blx@imc@ifciteseen\blx@ifciteseen@context
- \let\blx@imc@ifentryseen\blx@ifentryseen@context
- \def\blx@citetracker{%
- \blx@ifcitesingle{\blx@citetracker@context}{}}%
- \booltrue{citetracker}}
- \DeclareBibliographyOption[boolean]{ibidtracker}[true]{%
- \ifcsdef{blx@opt@ibidtracker@#1}
- {\csuse{blx@opt@ibidtracker@#1}}
- {\blx@err@invopt{ibidtracker=#1}{}}}
- \def\blx@opt@ibidtracker@true{%
- \let\blx@imc@ifciteibid\blx@ifciteibid@global
- \let\blx@ibidtracker\blx@ibidtracker@global
- \let\blx@ibidreset\blx@ibidreset@global
- \booltrue{citetracker}}
- \def\blx@opt@ibidtracker@false{%
- \let\blx@imc@ifciteibid\@secondoftwo
- \let\blx@ibidtracker\relax
- \let\blx@ibidreset\relax}
- \def\blx@opt@ibidtracker@context{%
- \let\blx@imc@ifciteibid\blx@ifciteibid@context
- \let\blx@ibidtracker\blx@ibidtracker@context
- \let\blx@ibidreset\blx@ibidreset@context
- \booltrue{citetracker}}
- \def\blx@opt@ibidtracker@strict{%
- \let\blx@imc@ifciteibid\blx@ifciteibid@strict
- \let\blx@ibidtracker\blx@ibidtracker@strict
- \let\blx@ibidreset\blx@ibidreset@global
- \booltrue{citetracker}}
- \def\blx@opt@ibidtracker@constrict{%
- \let\blx@imc@ifciteibid\blx@ifciteibid@constrict
- \let\blx@ibidtracker\blx@ibidtracker@constrict
- \let\blx@ibidreset\blx@ibidreset@context
- \booltrue{citetracker}}
- \DeclareBibliographyOption[boolean]{idemtracker}[true]{%
- \ifcsdef{blx@opt@idemtracker@#1}
- {\csuse{blx@opt@idemtracker@#1}}
- {\blx@err@invopt{idemtracker=#1}{}}}
- \def\blx@opt@idemtracker@true{%
- \let\blx@imc@ifciteidem\blx@ifciteidem@global
- \let\blx@idemtracker\blx@idemtracker@global
- \let\blx@idemreset\blx@idemreset@global
- \booltrue{citetracker}}
- \def\blx@opt@idemtracker@false{%
- \let\blx@imc@ifciteidem\@secondoftwo
- \let\blx@idemtracker\relax
- \let\blx@idemreset\relax}
- \def\blx@opt@idemtracker@context{%
- \let\blx@imc@ifciteidem\blx@ifciteidem@context
- \let\blx@idemtracker\blx@idemtracker@context
- \let\blx@idemreset\blx@idemreset@context
- \booltrue{citetracker}}
- \def\blx@opt@idemtracker@strict{%
- \let\blx@imc@ifciteidem\blx@ifciteidem@strict
- \let\blx@idemtracker\blx@idemtracker@strict
- \let\blx@idemreset\blx@idemreset@global
- \booltrue{citetracker}}
- \def\blx@opt@idemtracker@constrict{%
- \let\blx@imc@ifciteidem\blx@ifciteidem@constrict
- \let\blx@idemtracker\blx@idemtracker@constrict
- \let\blx@idemreset\blx@idemreset@context
- \booltrue{citetracker}}
- \DeclareBibliographyOption[boolean]{opcittracker}[true]{%
- \ifcsdef{blx@opt@opcittracker@#1}
- {\csuse{blx@opt@opcittracker@#1}}
- {\blx@err@invopt{opcittracker=#1}{}}}
- \def\blx@opt@opcittracker@true{%
- \let\blx@imc@ifopcit\blx@ifopcit@global
- \let\blx@opcittracker\blx@opcittracker@global
- \let\blx@opcitreset\blx@opcitreset@global
- \booltrue{citetracker}}
- \def\blx@opt@opcittracker@false{%
- \let\blx@imc@ifopcit\@secondoftwo
- \let\blx@opcittracker\relax
- \let\blx@opcitreset\relax}
- \def\blx@opt@opcittracker@context{%
- \let\blx@imc@ifopcit\blx@ifopcit@context
- \let\blx@opcittracker\blx@opcittracker@context
- \let\blx@opcitreset\blx@opcitreset@context
- \booltrue{citetracker}}
- \def\blx@opt@opcittracker@strict{%
- \let\blx@imc@ifopcit\blx@ifopcit@strict
- \let\blx@opcittracker\blx@opcittracker@strict
- \let\blx@opcitreset\blx@opcitreset@global
- \booltrue{citetracker}}
- \def\blx@opt@opcittracker@constrict{%
- \let\blx@imc@ifopcit\blx@ifopcit@constrict
- \let\blx@opcittracker\blx@opcittracker@constrict
- \let\blx@opcitreset\blx@opcitreset@context
- \booltrue{citetracker}}
- \DeclareBibliographyOption[boolean]{loccittracker}[true]{%
- \ifcsdef{blx@opt@loccittracker@#1}
- {\csuse{blx@opt@loccittracker@#1}}
- {\blx@err@invopt{loccittracker=#1}{}}}
- \def\blx@opt@loccittracker@true{%
- \let\blx@imc@ifloccit\blx@ifloccit@global
- \let\blx@loccittracker\blx@loccittracker@global
- \let\blx@loccitreset\blx@loccitreset@global
- \booltrue{citetracker}}
- \def\blx@opt@loccittracker@false{%
- \let\blx@imc@ifloccit\@secondoftwo
- \let\blx@loccittracker\relax
- \let\blx@loccitreset\relax}
- \def\blx@opt@loccittracker@context{%
- \let\blx@imc@ifloccit\blx@ifloccit@context
- \let\blx@loccittracker\blx@loccittracker@context
- \let\blx@loccitreset\blx@loccitreset@context
- \booltrue{citetracker}}
- \def\blx@opt@loccittracker@strict{%
- \let\blx@imc@ifloccit\blx@ifloccit@strict
- \let\blx@loccittracker\blx@loccittracker@strict
- \let\blx@loccitreset\blx@loccitreset@global
- \booltrue{citetracker}}
- \def\blx@opt@loccittracker@constrict{%
- \let\blx@imc@ifloccit\blx@ifloccit@constrict
- \let\blx@loccittracker\blx@loccittracker@constrict
- \let\blx@loccitreset\blx@loccitreset@context
- \booltrue{citetracker}}
- \DeclareBibliographyOption[boolean]{parentracker}[true]{%
- \ifstrequal{#1}{true}
- {\let\bibopenparen\blx@bibopenparen
- \let\bibcloseparen\blx@bibcloseparen
- \let\bibopenbracket\blx@bibopenbracket
- \let\bibclosebracket\blx@bibclosebracket}
- {\protected\def\bibopenparen{\bibleftparen}%
- \protected\def\bibcloseparen{\bibrightparen}%
- \protected\def\bibopenbracket{\bibleftbracket}%
- \protected\def\bibclosebracket{\bibrightbracket}}}
- \DeclareBibliographyOption[integer]{maxparens}{%
- \ifnumless{#1}{1}
- {\blx@err@invopt{maxparens=#1}{}}
- {\setcounter{maxparens}{#1}}}
- \newtoggle{blx@labeldateusetime}
- \DeclareBibliographyOption[boolean]{labeldateusetime}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@labeldateusetime}}
- {\togglefalse{blx@labeldateusetime}}}
- \DeclareBibliographyOption[string]{labeldate}{%
- % 'true' or 'false' means that the user thinks that this is the old 'labeldate'
- % option which is now 'labeldateparts' (which is a boolean).
- \ifboolexpr{%
- test {\ifstrequal{#1}{true}}
- or
- test {\ifstrequal{#1}{false}}}
- {\blx@warning@noline{%
- 'labeldate' option used to determine whether to provide label date fields and\MessageBreak
- extradate field is renamed to 'labeldateparts', setting this instead. This option is
- now used to set the format of the labeldate}%
- \settoggle{blx@labeldateparts}{#1}}
- {\ifstrequal{#1}{iso8601}
- {\blx@warning@noline{%
- 'iso8601' date format specifier is deprecated.\MessageBreak
- Use 'iso' instead}%
- \def\blx@dateformat@labeldate{iso}%
- \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
- {\ifstrequal{#1}{edtf}
- {\blx@warning@noline{%
- 'edtf' date format specifier is deprecated.\MessageBreak
- Use 'iso' instead}%
- \def\blx@dateformat@labeldate{iso}%
- \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
- {\def\blx@dateformat@labeldate{#1}}}%
- \ifstrequal{#1}{ymd}
- {\renewrobustcmd*{\bibdaterangesep}{\slash}%
- \renewrobustcmd*{\bibtimerangesep}{\slash}%
- \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
- {}%
- \ifstrequal{#1}{iso}% bibdaterangesep hard-coded to slash, no extra space before prefices
- {\renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
- {}%
- \ifcsdef{mkdaterange#1}
- {\protected\def\blx@imc@printlabeldate{\csuse{mkdaterange#1}{label}}
- \protected\def\blx@imc@printlabeldateextra{\csuse{mkdaterange#1extra}{label}}}
- {\ifcsdef{mkbibrange#1}%LEGACY(<3.5)
- {\protected\def\blx@imc@printlabeldate{\csuse{mkbibrange#1}{label}}
- \protected\def\blx@imc@printlabeldateextra{\csuse{mkbibrange#1extra}{label}}}
- {\blx@err@invopt{labeldate=#1}{}}}}}
- \DeclareBibliographyOption[string]{labeltime}{%
- \ifcsdef{mktimerange#1}
- {\def\blx@timeformat@labeltime{#1}%
- \protected\def\blx@imc@printlabeltime{\csuse{mktimerange#1}{label}}}
- {\blx@err@invopt{labeltime=#1}{}}}
- % Date meta-information
- \DeclareBibliographyOption[string]{dateera}{%
- \ifboolexpr{%
- test {\ifstrequal{#1}{astronomical}}
- or
- test {\ifstrequal{#1}{secular}}
- or
- test {\ifstrequal{#1}{christian}}}
- {\def\blx@dateera{#1}%
- \ifstrequal{#1}{secular}
- {\def\blx@dateera@bce{beforecommonera}%
- \def\blx@dateera@ce{commonera}}
- {}%
- \ifstrequal{#1}{christian}
- {\def\blx@dateera@bce{beforechrist}%
- \def\blx@dateera@ce{annodomini}}
- {}}
- {\blx@err@invopt{dateera=#1}{}}}
- % Effectively turns off dateeraauto since it's only used on ce dates which
- % are never less than zero (as that would be a bce date)
- \numdef\blx@dateeraauto{0}
- \DeclareBibliographyOption[integer]{dateeraauto}{%
- \numdef\blx@dateeraauto{#1}}
- \newtoggle{blx@datecirca}
- \DeclareBibliographyOption[boolean]{datecirca}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@datecirca}%
- \protected\def\datecircaprint{%
- \ifdatecirca{\bibstring{circa}\printdelim{datecircadelim}}{}}%
- \protected\def\enddatecircaprint{%
- \ifenddatecirca{\bibstring{circa}\printdelim{datecircadelim}}{}}%
- \protected\def\datecircaprintedtf{%LEGACY(<3.9)
- \blx@warning@noline{%
- '\string\datecircaprintedtf' is deprecated.
- Please use '\string\datecircaprintiso'}%
- \datecircaprintiso}%
- \protected\def\enddatecircaprintedtf{%LEGACY(<3.9)
- \blx@warning@noline{%
- '\string\enddatecircaprintedtf' is deprecated.
- Please use '\string\enddatecircaprintiso'}%
- \enddatecircaprintiso}%
- \protected\def\datecircaprintiso{%
- \ifdatecirca{\textasciitilde}{}}%
- \protected\def\enddatecircaprintiso{%
- \ifenddatecirca{\textasciitilde}{}}}
- {\togglefalse{blx@datecirca}}}
- \newtoggle{blx@dateuncertain}
- \DeclareBibliographyOption[boolean]{dateuncertain}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@dateuncertain}%
- \protected\def\dateuncertainprint{%
- \ifdateuncertain{\bibdateuncertain}{}}%
- \protected\def\enddateuncertainprint{%
- \ifenddateuncertain{\bibdateuncertain}{}}}
- {\togglefalse{blx@dateuncertain}}}
- % *time format options - auto-created for all datamodel date fields
- % *date format options - auto-created for all datamodel date fields
- % *dateusetime options - auto-created for all datamodel date fields
- % Date metadata toggles are defined in one of the \abx@dobooleans calls
- \def\do#1{%
- \DeclareBibliographyOption[string]{#1date}{%
- \ifstrequal{##1}{iso8601}
- {\blx@warning@noline{'iso8601' date format specifier is deprecated.\MessageBreak
- Use 'iso' instead}%
- \csdef{blx@dateformat@#1date}{iso}}
- {\ifstrequal{##1}{edtf}
- {\blx@warning@noline{'edtf' date format specifier is deprecated.\MessageBreak
- Use 'iso' instead}%
- \csdef{blx@dateformat@#1date}{iso}}
- {\csdef{blx@dateformat@#1date}{##1}}}%
- \ifstrequal{##1}{ymd}
- {\renewrobustcmd*{\bibdaterangesep}{\slash}%
- \renewrobustcmd*{\bibtimerangesep}{\slash}%
- \renewrobustcmd*{\bibdateeraendprefix}{\bibdateeraprefix}}
- {}%
- \ifcsdef{mkdaterange##1}
- {\protected\csedef{blx@imc@print#1date}{\noexpand\csuse{mkdaterange##1}{#1}}%
- \protected\csedef{blx@imc@print#1dateextra}{\noexpand\csuse{mkdaterange##1extra}{#1}}}
- {\ifcsdef{mkbibrange##1}%LEGACY(<3.5)
- {\blx@warning@noline{%
- '\string\mkbibrange##1(extra)' date range macro in style is deprecated,\MessageBreak
- please define '\string\mkdaterange##1(extra)' instead}%
- \protected\csedef{blx@imc@print#1date}{\noexpand\csuse{mkbibrange##1}{#1}}%
- \protected\csedef{blx@imc@print#1dateextra}{\noexpand\csuse{mkbibrange##1extra}{#1}}}
- {\blx@err@invopt{#1date=##1}{}}}}%
- % Default for new date fields is "comp" but this is overridden below by
- % biblatex defaults
- \setkeys{blx@opt@pre}{#1date=comp}%
- % Time format options
- \DeclareBibliographyOption[string]{#1time}{%
- \csdef{blx@timeformat@#1time}{##1}%
- \ifcsdef{mktimerange##1}
- {\protected\csedef{blx@imc@print#1time}{\csuse{mktimerange##1}{#1}}}
- {\blx@err@invopt{#1time=##1}{}}}%
- % Default for new time fields is "24h"
- \setkeys{blx@opt@pre}{#1time=24h}%
- % Boolean to determine if times are printed with dates
- \newtoggle{blx@#1dateusetime}%
- \DeclareBibliographyOption[boolean]{#1dateusetime}{%
- \ifstrequal{##1}{true}
- {\toggletrue{blx@#1dateusetime}}
- {\togglefalse{blx@#1dateusetime}}}}
- \abx@dodatetypes
- \DeclareBibliographyOption[string]{alldatesusetime}{%
- \def\do##1{\ExecuteBibliographyOptions{##1usetime=#1}}%
- \abx@dodates
- \do{labeldate}}
- \DeclareBibliographyOption[string]{alldates}{%
- \def\do##1{\ExecuteBibliographyOptions{##1=#1}}%
- \abx@dodates
- \do{labeldate}}
- \DeclareBibliographyOption[string]{alltimes}{%
- \def\do##1{%
- \ExecuteBibliographyOptions{##1time=#1}}%
- \abx@dodatetypes
- \do{label}}
- \newtoggle{blx@julian}
- \def\blx@gregorianstart{1582-10-15}
- \DeclareBibliographyOption[boolean]{julian}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@julian}}
- {\togglefalse{blx@julian}}}
- \DeclareBibliographyOption[string]{gregorianstart}{%
- \def\blx@gregorianstart{#1}}
- \newtoggle{blx@datezeros}\toggletrue{blx@datezeros}
- \DeclareBibliographyOption[boolean]{datezeros}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@datezeros}%
- \let\blx@imc@mkyearzeros\blx@imc@forcezerosy
- \let\blx@imc@mkmonthzeros\blx@imc@forcezerosmdt
- \let\blx@imc@mkdayzeros\blx@imc@forcezerosmdt}
- {\togglefalse{blx@datezeros}%
- \let\blx@imc@mkyearzeros\blx@imc@stripzeros
- \let\blx@imc@mkmonthzeros\blx@imc@stripzeros
- \let\blx@imc@mkdayzeros\blx@imc@stripzeros}}
- \newtoggle{blx@timezeros}\toggletrue{blx@timezeros}
- \DeclareBibliographyOption[boolean]{timezeros}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@timezeros}%
- \let\blx@imc@mktimezeros\blx@imc@forcezerosmdt}
- {\togglefalse{blx@timezeros}%
- \let\blx@imc@mktimezeros\blx@imc@stripzeros}}
- \newtoggle{blx@timezones}
- \DeclareBibliographyOption[boolean]{timezones}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@timezones}}
- {\togglefalse{blx@timezones}}}
- \newtoggle{blx@seconds}
- \DeclareBibliographyOption[boolean]{seconds}[true]{%
- \ifstrequal{#1}{true}
- {\toggletrue{blx@seconds}}
- {\togglefalse{blx@seconds}}}
- \DeclareBibliographyOption[string]{autocite}{%
- \ifcsundef{blx@acite@#1}
- {\blx@error
- {Autocite command '#1' undefined}
- {The autocite command '#1' has not been defined by
- the\MessageBreak selected citation style}}
- {\letcs\autocite{blx@acite@#1}%
- \letcs\autocites{blx@macite@#1}}}
- \DeclareBibliographyOption[string]{notetype}{%
- \ifcsdef{blx@opt@notetype@#1}
- {\blx@notetype\csuse{blx@opt@notetype@#1}}
- {\blx@err@invopt{notetype=#1}{}}}
- \cslet{blx@opt@notetype@foot+end}\z@
- \let\blx@opt@notetype@footonly\@ne
- \let\blx@opt@notetype@endonly\tw@
- \DeclareBibliographyOption[boolean]{autopunct}[true]{%
- \ifstrequal{#1}{true}
- {\DeclareAutoPunctuation{.,;:!?}}
- {\DeclareAutoPunctuation{}}}
- \DeclareBibliographyOption[boolean]{punctfont}[true]{%
- \ifstrequal{#1}{true}
- {\let\blx@ifpuncthook\@firstoftwo}
- {\let\blx@ifpuncthook\@secondoftwo}}
- \DeclareBibliographyOption[boolean]{labelnumber}[true]{%
- \settoggle{blx@labelnumber}{#1}%
- \iftoggle{blx@labelnumber}
- {}
- {\setkeys{blx@opt@pre}{defernumbers=false}}}
- \DeclareTypeOption[boolean]{labelnumber}[true]{%
- \settoggle{blx@labelnumber}{#1}}
- \DeclareBibliographyOption[boolean]{labelalpha}[true]{%
- \settoggle{blx@labelalpha}{#1}}
- \DeclareTypeOption[boolean]{labelalpha}[true]{%
- \settoggle{blx@labelalpha}{#1}}
- \DeclareBibliographyOption[boolean]{labeltitle}[true]{%
- \settoggle{blx@labeltitle}{#1}}
- \DeclareTypeOption[boolean]{labeltitle}[true]{%
- \settoggle{blx@labeltitle}{#1}}
- \DeclareBibliographyOption[boolean]{labeltitleyear}[true]{%
- \settoggle{blx@labeltitleyear}{#1}}
- \DeclareTypeOption[boolean]{labeltitleyear}[true]{%
- \settoggle{blx@labeltitleyear}{#1}}
- \DeclareBibliographyOption[boolean]{labeldateparts}[true]{%
- \settoggle{blx@labeldateparts}{#1}}
- \DeclareTypeOption[boolean]{labeldateparts}[true]{%
- \settoggle{blx@labeldateparts}{#1}}
- \DeclareBibliographyOption[boolean]{uniquelist}[true]{%
- \ifcsdef{blx@opt@uniquelist@#1}
- {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}}
- {\blx@err@invopt{uniquelist=#1}{}}}
- \DeclareTypeOption[boolean]{uniquelist}[true]{%
- \ifcsdef{blx@opt@uniquelist@#1}
- {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}}
- {\blx@err@invopt{uniquelist=#1}{}}}
- \DeclareEntryOption[boolean]{uniquelist}[true]{%
- \ifcsdef{blx@opt@uniquelist@#1}
- {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}}
- {\blx@err@invopt{uniquelist=#1}{}}}
- \def\blx@opt@uniquelist@false{0}
- \def\blx@opt@uniquelist@true{1}
- \def\blx@opt@uniquelist@minyear{2}
- \DeclareBibliographyOption[boolean]{uniquename}[true]{%
- \ifcsdef{blx@opt@uniquename@#1}
- {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
- {\blx@err@invopt{uniquename=#1}{}}}
- \DeclareTypeOption[boolean]{uniquename}[true]{%
- \ifcsdef{blx@opt@uniquename@#1}
- {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
- {\blx@err@invopt{uniquename=#1}{}}}
- \DeclareEntryOption[boolean]{uniquename}[true]{%
- \ifcsdef{blx@opt@uniquename@#1}
- {\letcs\blx@uniquename{blx@opt@uniquename@#1}}
- {\blx@err@invopt{uniquename=#1}{}}}
- \def\blx@opt@uniquename@false{0}
- \def\blx@opt@uniquename@init{1}
- \def\blx@opt@uniquename@true{2}
- \def\blx@opt@uniquename@full{2}
- \def\blx@opt@uniquename@allinit{3}
- \def\blx@opt@uniquename@allfull{4}
- \def\blx@opt@uniquename@mininit{5}
- \def\blx@opt@uniquename@minfull{6}
- \DeclareBibliographyOption[boolean]{noroman}[true]{%
- \settoggle{blx@noroman}{#1}}
- \DeclareTypeOption[boolean]{noroman}[true]{%
- \settoggle{blx@noroman}{#1}}
- \DeclareEntryOption[boolean]{noroman}[true]{%
- \settoggle{blx@noroman}{#1}}
- \DeclareBibliographyOption[boolean]{singletitle}[true]{%
- \settoggle{blx@singletitle}{#1}}
- \DeclareTypeOption[boolean]{singletitle}[true]{%
- \settoggle{blx@singletitle}{#1}}
- \DeclareBibliographyOption[boolean]{uniquetitle}[true]{%
- \settoggle{blx@uniquetitle}{#1}}
- \DeclareTypeOption[boolean]{uniquetitle}[true]{%
- \settoggle{blx@uniquetitle}{#1}}
- \DeclareBibliographyOption[boolean]{uniquebaretitle}[true]{%
- \settoggle{blx@uniquebaretitle}{#1}}
- \DeclareTypeOption[boolean]{uniquebaretitle}[true]{%
- \settoggle{blx@uniquebaretitle}{#1}}
- \DeclareBibliographyOption[boolean]{uniquework}[true]{%
- \settoggle{blx@uniquework}{#1}}
- \DeclareTypeOption[boolean]{uniquework}[true]{%
- \settoggle{blx@uniquework}{#1}}
- \DeclareBibliographyOption[boolean]{uniqueprimaryauthor}[true]{%
- \settoggle{blx@uniqueprimaryauthor}{#1}}
- \DeclareBibliographyOption[boolean]{defernumbers}[true]{%
- \settoggle{blx@defernumbers}{#1}%
- \iftoggle{blx@defernumbers}
- {\setkeys{blx@opt@pre}{labelnumber}%
- \let\blx@thelabelnumber\blx@addlabelnumber
- \let\abx@aux@number\blx@aux@number}
- {\let\blx@thelabelnumber\relax
- \let\abx@aux@number\@gobblefive}}
- \DeclareBibliographyOption[boolean]{locallabelwidth}[true]{%
- \blx@key@locallabelwidth{#1}}
- %{<switch>}{<patch>}{<pre>}{<post>}
- \def\blx@patchsection@switch#1#2#3#4{%
- \AtEndPreamble{%
- #3%
- \ifcase#1
- \or % 1: part
- \blx@refpatch@part{#2}%
- \or % 2: chapter
- \blx@refpatch@chapter{#2}%
- \or % 3: section
- \blx@refpatch@sect{section}{#2}{1}%
- \or % 4: subsection
- \blx@refpatch@sect{subsection}{#2}{2}%
- \or % 5: chapter+ = part, chapter
- \blx@refpatch@part{#2}%
- \blx@refpatch@chapter{#2}%
- \or % 6: section+ = part, chapter, section
- \blx@refpatch@part{#2}%
- \ifundef\chapter
- {}
- {\blx@refpatch@chapter{#2}}%
- \blx@refpatch@sect{section}{#2}{1}%
- \or % 7: subsection+ = part, chapter, section, subsection
- \blx@refpatch@part{#2}%
- \ifundef\chapter
- {}
- {\blx@refpatch@chapter{#2}}%
- \blx@refpatch@sect{section}{#2}{1}%
- \blx@refpatch@sect{subsection}{#2}{2}%
- \fi
- #4%
- }%
- }
- \DeclareBibliographyOption[string]{refsection}{%
- \ifcsdef{blx@opt@refsection@#1}
- {\letcs\blx@refsecreset@level{blx@opt@refsection@#1}}
- {\blx@err@invopt{refsection=#1}{}}}
- \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}
- \csdef{blx@opt@refsection@chapter+}{5}
- \csdef{blx@opt@refsection@section+}{6}
- \csdef{blx@opt@refsection@subsection+}{7}
- \blx@patchsection@switch{\blx@refsecreset@level}{\newrefsection}{}{}
- \DeclareBibliographyOption[string]{refsegment}{%
- \ifcsdef{blx@opt@refsegment@#1}
- {\letcs\blx@refsegreset@level{blx@opt@refsegment@#1}}
- {\blx@err@invopt{refsegment=#1}{}}}
- \csdef{blx@opt@refsegment@none}{0}
- \csdef{blx@opt@refsegment@part}{1}
- \csdef{blx@opt@refsegment@chapter}{2}
- \csdef{blx@opt@refsegment@section}{3}
- \csdef{blx@opt@refsegment@subsection}{4}
- \csdef{blx@opt@refsegment@chapter+}{5}
- \csdef{blx@opt@refsegment@section+}{6}
- \csdef{blx@opt@refsegment@subsection+}{7}
- \blx@patchsection@switch{\blx@refsegreset@level}
- {\newrefsegment}
- {\ifnumgreater\blx@refsegreset@level\z@
- {\ifnumgreater\blx@refsegreset@level\blx@refsecreset@level
- {}
- {\blx@err@confopt
- {refsegment/refsection}
- {The 'refsegment' option must point to a
- lower-level\MessageBreak document division
- than 'refsection'}%
- \def\blx@refsegreset@level{0}}}
- {}}
- {}
- \DeclareBibliographyOption[string]{citereset}{%
- \ifcsdef{blx@opt@citereset@#1}
- {\letcs\blx@citereset@level{blx@opt@citereset@#1}}
- {\blx@err@invopt{citereset=#1}{}}}
- \csdef{blx@opt@citereset@none}{0}
- \csdef{blx@opt@citereset@part}{1}
- \csdef{blx@opt@citereset@chapter}{2}
- \csdef{blx@opt@citereset@section}{3}
- \csdef{blx@opt@citereset@subsection}{4}
- \csdef{blx@opt@citereset@chapter+}{5}
- \csdef{blx@opt@citereset@section+}{6}
- \csdef{blx@opt@citereset@subsection+}{7}
- \blx@patchsection@switch{\blx@citereset@level}{\citereset\blx@inf@creset}{}{}
- \DeclareBibliographyOption[boolean]{bibwarn}[true]{%
- \ifstrequal{#1}{true}
- {\def\blx@bbl@thewarn{\blx@bbl@warn}}
- {\let\blx@bbl@thewarn\@gobble}}
- % Name field options
- \def\do#1{%
- \DeclareBibliographyOption[boolean]{use#1}[true]{%
- \settoggle{blx@use#1}{##1}}
- \DeclareTypeOption[boolean]{use#1}[true]{%
- \settoggle{blx@use#1}{##1}}
- \DeclareEntryOption[boolean]{use#1}[true]{%
- \settoggle{blx@use#1}{##1}}}
- \abx@donames
- % Entry options
- \DeclareBibliographyOption[boolean]{useprefix}[true]{%
- \settoggle{blx@useprefix}{#1}}
- \DeclareTypeOption[boolean]{useprefix}[true]{%
- \settoggle{blx@useprefix}{#1}}
- \DeclareEntryOption[boolean]{useprefix}[true]{%
- \settoggle{blx@useprefix}{#1}}
- \DeclareTypeOption[boolean]{skipbib}[true]{%
- \settoggle{blx@skipbib}{#1}}
- \DeclareEntryOption[boolean]{skipbib}[true]{%
- \settoggle{blx@skipbib}{#1}}
- \DeclareTypeOption[boolean]{skipbiblist}[true]{%
- \settoggle{blx@skipbiblist}{#1}}
- \DeclareEntryOption[boolean]{skipbiblist}[true]{%
- \settoggle{blx@skipbiblist}{#1}}
- \DeclareTypeOption[boolean]{skiplab}[true]{%
- \settoggle{blx@skiplab}{#1}}
- \DeclareEntryOption[boolean]{skiplab}[true]{%
- \settoggle{blx@skiplab}{#1}}
- \DeclareTypeOption[boolean]{dataonly}[true]{%
- \settoggle{blx@skipbib}{#1}%
- \settoggle{blx@skipbiblist}{#1}%
- \settoggle{blx@skiplab}{#1}}
- \DeclareEntryOption[boolean]{dataonly}[true]{%
- \settoggle{blx@skipbib}{#1}%
- \settoggle{blx@skipbiblist}{#1}%
- \settoggle{blx@skiplab}{#1}}
- % Option processor/scheduler
- \DeclareOption*{%
- \begingroup
- \def\blx@tempa#1=#2&{#1}%
- \edef\blx@tempa{%
- \expandafter\blx@tempa\CurrentOption=&}%
- \ifcsundef{KV@blx@opt@ldt@\blx@tempa}
- {\endgroup
- \eappto\blx@theoptions{\CurrentOption,}}
- {\edef\blx@tempa{\endgroup
- \noexpand\setkeys{blx@opt@ldt}{\CurrentOption}}%
- \blx@tempa}}
- \def\blx@processoptions{%
- \ifundef\blx@theoptions
- {}
- {\begingroup
- \edef\blx@tempa{\endgroup
- \noexpand\setkeys{blx@opt@pre}{\blx@theoptions}}%
- \blx@tempa}}
- %% Initial setup
- % Set defaults
- \setkeys{blx@opt@ldt}{style=numeric}
- \setkeys{blx@opt@pre}{%
- sorting=nty,sortlocale=auto,sortcase,sortupper,sortcites=false,
- maxnames=3,minnames=1,maxalphanames=3,minalphanames=1,
- maxitems=3,minitems=1,mincrossrefs=2,minxrefs=2,useauthor=true,useeditor=true,
- usetranslator=false,indexing=false,abbreviate=true,dateabbrev=true,dateera=astronomical,
- backref=false,backrefsetstyle=setonly,pagetracker=false,ibidtracker=false,
- idemtracker=false,opcittracker=false,loccittracker=false,citetracker=false,
- citecounter=false,block=none,language=autobib,clearlang=true,autolang=none,
- date=comp,labeldate=year,origdate=comp,eventdate=comp,urldate=short,
- autopunct=true,punctfont=false,defernumbers=false,timezeros=true,
- refsection=none,refsegment=none,citereset=none,hyperref=auto,
- parentracker,maxparens=3,bibencoding=auto,bibwarn,timezones=false,
- seconds=false,julian=false,labeltime=24h,locallabelwidth=false}
- % Load Unicode enhancements (only for LuaTeX and XeTeX)
- \ifboolexpr{
- not test {\ifundef\XeTeXrevision}
- or
- not test {\ifundef\luatexversion}}
- {\blx@inputonce{blx-unicode.def}{enhanced support for Unicode engines}{}{}{}{}}
- {}
- % Load compatibility code
- \blx@inputonce{blx-compat.def}{compatibility code}{}{}{}{}
- % Restore catcodes
- \blx@catcodes
- \undef\blx@catcodes
- % Process load-time options
- \ProcessOptions*
- % Switch to BibTeX support if requested
- \iftoggle{blx@bibtex}
- {\blx@inputonce{blx-bibtex.def}{BibTeX backend compatibility}{}{}{}{}}
- {}
- % Load citation and bibliography styles, configuration file
- \blx@inputonce{biblatex.def}{generic definitions}{}{}{}{}
- \iftoggle{blx@natbib}
- {\blx@inputonce{blx-natbib.def}{natbib compatibility}{}{}{}{}}
- {}
- \iftoggle{blx@mcite}
- {\blx@inputonce{blx-mcite.def}{mcite-like commands}{}{}{}{}}
- {}
- \RequireBibliographyStyle{\blx@bbxfile}
- \RequireCitationStyle{\blx@cbxfile}
- \blx@secinit
- \citereset
- \blx@inputonce{biblatex.cfg}{configuration file}{}{}{}{}
- % Process preamble options
- \blx@processoptions
- % Deferred setup at end of preamble
- \AtEndPreamble{%
- \blx@checkoptions@global
- \c@maxnames\blx@maxcitenames\relax
- \c@minnames\blx@mincitenames\relax
- \c@maxitems\blx@maxitems\relax
- \c@minitems\blx@minitems\relax
- \togglefalse{abx@bool@xinits}
- \def\do#1{\iftoggle{abx@bool@#1inits}{\toggletrue{abx@bool@xinits}}{}}
- \abx@donameparts
- \iftoggle{abx@bool@xinits}
- {\ifnumequal\blx@uniquename\blx@opt@uniquename@full
- {\blx@warn@conflopt{%
- '<namepart>inits' conflicts with 'uniquename=full'.\MessageBreak
- Setting 'uniquename=init'}%
- \setkeys{blx@opt@pre}{uniquename=init}}
- {}%
- \ifnumequal\blx@uniquename\blx@opt@uniquename@allfull
- {\blx@warn@conflopt{%
- '<namepart>inits' conflicts with 'uniquename=allfull'.\MessageBreak
- Setting 'uniquename=allinit}%
- \setkeys{blx@opt@pre}{uniquename=allinit}}
- {}%
- \ifnumequal\blx@uniquename\blx@opt@uniquename@minfull
- {\blx@warn@conflopt{%
- '<namepart>inits' conflicts with 'uniquename=minfull'.\MessageBreak
- Setting 'uniquename=mininit}%
- \setkeys{blx@opt@pre}{uniquename=mininit}}
- {}}
- {}%
- \nottoggle{blx@labeldateparts}
- {\ifnumequal\blx@uniquelist\blx@opt@uniquelist@minyear
- {\blx@warn@conflopt{%
- 'uniquelist=minyear' requires 'labeldateparts'.\MessageBreak
- Setting 'uniquelist=true'}%
- \setkeys{blx@opt@pre}{uniquelist}}
- {}}
- {}%
- \def\do#1{%
- \ifcsstring{blx@dateformat@#1}{iso}
- {\blx@stripfromendinto{#1}{date}\blx@datetype
- \ifdefstring\blx@dateera{astronomical}{}
- {\blx@warn@conflopt{%
- '#1=iso' requires 'dateera=astronomical'.\MessageBreak
- Setting 'dateera=astrononmical'}%
- \setkeys{blx@opt@pre}{dateera=astronomical}}%
- \ifcsstring{blx@timeformat@\blx@datetype time}{24h}%
- {}
- {\blx@warn@conflopt{%
- '#1=iso' requires '\blx@datetype time=24h'.\MessageBreak
- Setting '\blx@datetype time=24h'}%
- \setkeys{blx@opt@pre}{\blx@datetype time=24h}}%
- \iftoggle{blx@julian}
- {\blx@warn@conflopt{%
- '#1=iso' requires 'julian=false'.\MessageBreak
- Setting 'julian=false'}%
- \setkeys{blx@opt@pre}{julian=false}}
- {}%
- \nottoggle{blx@datezeros}
- {\blx@warn@conflopt{%
- '#1=iso' requires 'datezeros=true'.\MessageBreak
- Setting 'datezeros=true'}%
- \setkeys{blx@opt@pre}{datezeros=true}}
- {}%
- \nottoggle{blx@timezeros}
- {\blx@warn@conflopt{%
- '#1=iso' requires 'timezeros=true'.\MessageBreak
- Setting 'timezeros=true'}%
- \setkeys{blx@opt@pre}{timezeros=true}}
- {}%
- \nottoggle{blx@seconds}
- {\blx@warn@conflopt{%
- '#1=iso' requires 'seconds=true'.\MessageBreak
- Setting 'seconds=true'}%
- \setkeys{blx@opt@pre}{seconds=true}}
- {}}
- {}}%
- \abx@dodates
- \do{labeldate}}
- \def\blx@checkencoding{%
- \ifdef\blx@texencoding
- {\blx@info@noline{%
- Input encoding '\blx@texencoding' specified}}
- {\ifundef\inputencodingname
- {\ifundef\XeTeXrevision
- {\ifundef\luatexversion
- {\def\blx@texencoding{ascii}%
- \blx@info@noline{%
- No input encoding detected.\MessageBreak
- Assuming '\blx@texencoding'}}
- {\def\blx@texencoding{utf8}%
- \blx@info@noline{%
- LuaTeX detected.\MessageBreak
- Assuming input encoding '\blx@texencoding'}}}
- {\def\blx@texencoding{utf8}%
- \blx@info@noline{%
- XeTeX detected.\MessageBreak
- Assuming input encoding '\blx@texencoding'}}}
- {\ifcsdef{blx@inpenc@\inputencodingname}
- {\letcs\blx@texencoding{blx@inpenc@\inputencodingname}}
- {\let\blx@texencoding\inputencodingname}%
- \blx@info@noline{%
- Input encoding '\blx@texencoding' detected}}}%
- \ifdef\blx@bibencoding
- {\ifdefstring\blx@bibencoding{ascii}
- {\blx@info@noline{%
- Data encoding '\blx@bibencoding' specified.\MessageBreak
- No need to reencode data}}
- {\ifdefstring\blx@bibencoding{auto}
- {\let\blx@bibencoding\blx@texencoding
- \blx@info@noline{%
- Automatic encoding selection.\MessageBreak
- Assuming data encoding '\blx@bibencoding'}}
- {\ifdefstrequal\blx@bibencoding\blx@texencoding
- {\blx@info@noline{%
- Data encoding '\blx@bibencoding' specified.\MessageBreak
- No need to reencode data}}
- {\blx@info@noline{%
- Data encoding '\blx@bibencoding' specified.\MessageBreak
- Backend will reencode on the fly}}}}}
- {\def\blx@bibencoding{ascii}%
- \blx@info@noline{%
- Data encoding not specified.\MessageBreak
- Assuming '\blx@bibencoding'}}%
- \ifboolexpr{%
- togl {blx@safeinputenc}
- and ( test {\@ifpackageloaded{inputenc}}
- or
- test {\@ifpackageloaded{inputenx}} )
- }
- {\def\blx@texencoding{ascii}%
- \blx@info@noline{%
- Input encoding '\blx@texencoding' forced by\MessageBreak
- 'safeinputenc' option}}
- {}%
- }
- % Deferred last minute setup
- \AtBeginDocument{%
- \blx@auxwrite\@mainaux{}{\string\abx@aux@refcontext{\blx@refcontext@context}}
- \blx@checkencoding
- \if@filesw
- \blx@ctrlwrite
- \fi
- \blx@bblinput
- \blx@maxsection\z@
- \csuse{abx@preamble}%
- \blx@inf@refsec
- \blx@inf@refseg}
- \AtEndOfPackage{%
- % Data model macros are forbidden after package load is finished
- \def\blx@warn@dm#1{\blx@warning@noline{Data model macro '#1' cannot be used in preamble}}
- \def\ResetDatamodelEntrytypes{\blx@warn@dm{ResetDatamodelEntrytypes}}
- \def\ResetDatamodelFields{\blx@warn@dm{ResetDatamodelFields}}
- \def\ResetDatamodelEntryfields{\blx@warn@dm{ResetDatamodelEntryfields}}
- \def\ResetDatamodelConstraints{\blx@warn@dm{ResetDatamodelConstraints}}
- \renewcommand*{\DeclareDatamodelEntrytypes}[2][]{\blx@warn@dm{DeclareDatamodelEntrytypes}}
- \renewcommand*{\DeclareDatamodelFields}[2][]{\blx@warn@dm{DeclareDatamodelFields}}
- \renewcommand*{\DeclareDatamodelEntryfields}[2][]{\blx@warn@dm{DeclareDatamodelEntryfields}}
- \renewcommand*{\DeclareDatamodelConstraints}[2][]{\blx@warn@dm{DeclareDatamodelConstraints}}
- \renewcommand*{\DeclareDatamodelConstant}[3][]{\blx@warn@dm{DeclareDatamodelConstant}}
- \AtBeginDocument{%
- \let\do\undef
- \blx@dopreamblecmds
- \let\do\noexpand}}
- \def\BiblatexHungarianWarningOff{\global\let\lbx@hu@loadinfo\@empty}
- \endinput
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement