diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex/biblatex.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/biblatex/biblatex.sty | 1453 |
1 files changed, 871 insertions, 582 deletions
diff --git a/Master/texmf-dist/tex/latex/biblatex/biblatex.sty b/Master/texmf-dist/tex/latex/biblatex/biblatex.sty index 8cac4f17a05..a20692d4af3 100644 --- a/Master/texmf-dist/tex/latex/biblatex/biblatex.sty +++ b/Master/texmf-dist/tex/latex/biblatex/biblatex.sty @@ -1,5 +1,5 @@ % Copyright (c) 2006-2011 Philipp Lehman. -% 2012-2016 Philip Kime, Audrey Boruvka, Joseph Wright +% 2012-2017 Philip Kime, Audrey Boruvka, Joseph Wright % % Permission is granted to copy, distribute and/or modify this % software under the terms of the LaTeX Project Public License @@ -11,8 +11,8 @@ % particular purpose. % Set up the version strings here -\def\abx@date{2016/12/05} -\def\abx@version{3.7} +\def\abx@date{2017/11/05} +\def\abx@version{3.8a} \def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/JW/AB)} \def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/JW/AB)} \def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/JW/AB)} @@ -21,12 +21,12 @@ % 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.3} +\def\blx@bcfversion{3.4} % This is not updated by build script as the bbl version % does not necessarily change with the package version. % This is used when checking the .bbl -\def\blx@bblversion{2.8} +\def\blx@bblversion{2.9} \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{biblatex} @@ -52,6 +52,31 @@ This is a fatal error. I'm aborting now.}% \endinput} +\@ifpackagelater{xstring}{2013/10/13} + {} + {\PackageError{biblatex} + {Outdated 'xstring' package} + {Upgrade to xstring v1.7c (2013/10/13) or later.\MessageBreak + I found: '\csuse{xstringversion}'.\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{% @@ -75,6 +100,26 @@ %% Compatibility +\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{% \def\do#1{% \@ifpackageloaded{#1} @@ -85,7 +130,7 @@ \docsvlist{% amsrefs,apacite,babelbib,backref,bibtopic,bibunits,chapterbib, cite,citeref,drftcite,footbib,inlinebib,jurabib,mcite,mciteplus, - mlbib,multibbl,multibib,natbib,opcit,overcite,splitbib,ucs}% + mlbib,multibbl,multibib,natbib,opcit,overcite,splitbib,ucs,etextools}% \def\blx@langstrings{}% % Set up sortlocale defaults and default language if babel/polyglossia is not loaded \ifdefstring\blx@sortlocale{auto} @@ -99,7 +144,7 @@ \ifundef\xpg@loaded {\let\xpg@loaded\@empty \let\xpg@vloaded\@empty - \PackageWarningNoLine{biblatex}{Upgrade package 'polyglossia' to >v1.42.0 recommended}} + \PackageWarningNoLine{biblatex}{Upgrade package 'polyglossia' to > v1.42.0 recommended}} {}% \def\do#1{\blx@langsetup{#1}}% \expandafter\docsvlist\expandafter{\xpg@loaded}% @@ -138,21 +183,24 @@ \undef\blx@mkautolangbabel \undef\blx@mkautolangpoly \undef\blx@mknoautolang - \ifnum\blx@hyperref=\z@ - \blx@mknohyperref + \ifnum\blx@hyperref=\thr@@ \else - \@ifpackageloaded{hyperref} - {\blx@mkhyperref} - {\ifnum\blx@hyperref=\@ne - \blx@warning@noline{% - Missing 'hyperref' package.\MessageBreak - Setting hyperref=false}% - \fi - \blx@mknohyperref}% + \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}% - \undef\blx@mkhyperref - \undef\blx@mknohyperref \ifundef\TE@hook {\let\TE@hook\@empty \toggletrue{blx@tempa}% @@ -195,6 +243,9 @@ {\togglefalse{blx@tempa}} {}} {}% + \@ifpackageloaded{bidi}% bidi + {\blx@patchbidifootnotes} + {}% \@ifclassloaded{memoir} {\def\do#1{% \patchcmd#1% @@ -408,8 +459,8 @@ \def\themaxextratitle{\the\c@maxextratitle} \newcounter{maxextratitleyear} \def\themaxextratitleyear{\the\c@maxextratitleyear} -\newcounter{maxextrayear} -\def\themaxextrayear{\the\c@maxextrayear} +\newcounter{maxextradate} +\def\themaxextradate{\the\c@maxextradate} \newcounter{maxextraalpha} \def\themaxextraalpha{\the\c@maxextraalpha} \newcounter{abbrvpenalty} @@ -501,6 +552,7 @@ \newtoggle{blx@mcite} \newtoggle{blx@loadfiles} \newtoggle{blx@singletitle} +\newtoggle{blx@sortsets} \newtoggle{blx@crossrefsource} \newtoggle{blx@xrefsource} \newtoggle{blx@uniqueprimaryauthor} @@ -521,6 +573,7 @@ \newtoggle{blx@bibindex} \newtoggle{blx@localnumber} \newtoggle{blx@refcontext} +\newtoggle{blx@nosuffrecurse} % Nice command from etextools which causes too many problems if you load % the whole package @@ -546,18 +599,29 @@ \listadd\blx@allrefsections{0} % Used to track sorting name key specifications -\global\let\blx@sortingnamekeyspecs\@empty +\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 -% Initialise some lists which track changing citations/sortschemes +% 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@refcontexts\@empty \global\let\blx@lastrefcontexts\@empty -\global\let\blx@sortschemes\@empty -\global\let\blx@lastsortschemes\@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 @@ -576,18 +640,57 @@ % Deprecations \newrobustcmd*{\DeprecateField}[2]{% \csdef{abx@field@#1}{% - \ifcsundef{abx@field@legacy@warning@#1}{\blx@warning@noline{Field '#1' deprecated. #2}}{}% + \ifcsundef{abx@field@legacy@warning@#1}{\blx@warning@noline{Field '#1' is deprecated. #2}}{}% \global\csdef{abx@field@legacy@warning@#1}{}}}% \newrobustcmd*{\DeprecateList}[2]{% \csdef{abx@list@#1}{% - \ifcsundef{abx@list@legacy@warning@#1}{\blx@warning@noline{List '#1' deprecated. #2}}{}% + \ifcsundef{abx@list@legacy@warning@#1}{\blx@warning@noline{List '#1' is deprecated. #2}}{}% \global\csdef{abx@list@legacy@warning@#1}{}}}% \newrobustcmd*{\DeprecateName}[2]{% \csdef{abx@name@#1}{% - \ifcsundef{abx@name@legacy@warning@#1}{\blx@warning@noline{Name '#1' deprecated. #2}}{}% + \ifcsundef{abx@name@legacy@warning@#1}{\blx@warning@noline{Name '#1' is deprecated. #2}}{}% \global\csdef{abx@name@legacy@warning@#1}{}}}% -\DeprecateField{prefixnumber}{Please use 'labelprefix' instead} +\let\blx@aliasfields\@empty + +\newrobustcmd*{\DeprecateFieldWithReplacement}[2]{% + \appto\blx@aliasfields{% + \ifcsundef{abx@field@#2} + {} + {\csdef{abx@field@#1}{% + \csuse{abx@field@#2}% + \ifcsundef{abx@field@legacy@warning@#1} + {\blx@warning@noline{Field '#1' is deprecated.\MessageBreak + Please use '#2' instead.\MessageBreak + Using '#2' now}} + {}% + \global\csdef{abx@field@legacy@warning@#1}{}}}}} + +\newrobustcmd*{\DeprecateListWithReplacement}[2]{% + \appto\blx@aliasfields{% + \ifcsundef{abx@list@#2} + {} + {\csdef{abx@list@#1}{% + \csuse{abx@list@#2}% + \ifcsundef{abx@list@legacy@warning@#1} + {\blx@warning@noline{List '#1' is deprecated.\MessageBreak + Please use '#2' instead.\MessageBreak + Using '#2' now}} + {}% + \global\csdef{abx@list@legacy@warning@#1}{}}}}} + +\newrobustcmd*{\DeprecateNameWithReplacement}[2]{% + \appto\blx@aliasfields{% + \ifcsundef{abx@name@#2} + {} + {\csdef{abx@name@#1}{% + \csuse{abx@name@#2}% + \ifcsundef{abx@name@legacy@warning@#1} + {\blx@warning@noline{Name '#1' is deprecated.\MessageBreak + Please use '#2' instead.\MessageBreak + Using '#2' now}} + {}% + \global\csdef{abx@name@legacy@warning@#1}{}}}}} %% Initialisation \def\blx@blxinit{% @@ -939,8 +1042,8 @@ \def\blx@err@nosort#1{% \blx@error - {Sorting scheme '#1' not found} - {The sorting scheme '#1' does not seem to have been defined anywhere}} + {Sorting template '#1' not found} + {The sorting template '#1' does not seem to have been defined anywhere}} \def\blx@err@secfirst{% \blx@error @@ -1030,8 +1133,8 @@ \def\blx@inf@refsec{% \blx@info{Reference section=\the\c@refsection}}% -\def\blx@warn@delimdeclare#1#2{% - \blx@warning{Delimiter '#1' in context '#2' already defined, overwriting}} +\def\blx@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}} @@ -1310,7 +1413,7 @@ {\blx@defprefchars} {\let\blx@prefchars\@empty \blx@defprefchars}} -\DeclarePrefChars{'} +\DeclarePrefChars{'’-} \protected\def\blx@imc@ifprefchar{% \ifhmode @@ -1892,6 +1995,22 @@ \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 @@ -2163,7 +2282,7 @@ \begingroup \letcs\blx@tempa{abx@field@#2}% \letcs\blx@tempb{abx@field@#1}% - \csundef{abx@field@#1}% + \blx@resetdata \blx@getdata{\blx@tempa}% \blx@imc@iffieldequals{#1}\blx@tempb {\aftergroup\@firstoftwo} @@ -2189,7 +2308,7 @@ \begingroup \letcs\blx@tempa{abx@field@#2}% \letcs\blx@tempb{abx@list@#1}% - \csundef{abx@list@#1}% + \blx@resetdata \blx@getdata{\blx@tempa}% \blx@imc@iflistequals{#1}\blx@tempb {\aftergroup\@firstoftwo} @@ -2208,7 +2327,7 @@ \begingroup \letcs\blx@tempa{abx@field@#2}% \letcs\blx@tempb{abx@name@#1}% - \csundef{abx@name@#1}% + \blx@resetdata \blx@getdata{\blx@tempa}% \blx@imc@ifnameequals{#1}\blx@tempb {\aftergroup\@firstoftwo} @@ -2799,15 +2918,15 @@ % [<pagination>][<postpro>]{<string>} \newrobustcmd*{\blx@imc@mkpagetotal}[1][bookpagination]{% \begingroup - \def\blx@tempa{\blx@mkpagetotal{page}}% + \def\blx@tempa{\blx@mkpagetotal{pagetotal}}% \iffieldundef{#1} {} {\iffieldequalstr{#1}{none} {\def\blx@tempa{\blx@mkpagetotal@i}} - {\iffieldbibstring{#1} - {\edef\blx@tempa{\blx@mkpagetotal{\thefield{#1}}}} + {\iffieldbibstring{#1total} + {\edef\blx@tempa{\blx@mkpagetotal{\thefield{#1total}}}} {\blx@warning@entry{% - Unknown pagination type '\strfield{#1}'}}}}% + Unknown pagination type '\strfield{#1total}'}}}}% \@ifnextchar[%] {\blx@tempa} {\blx@tempa[\@firstofone]}} @@ -2844,8 +2963,6 @@ {\csuse{abx@range@#1}} {}} -\let\frangelen\rangelen % Legacy name for \rangelen - % <*>[<postpro>]{<string>} \newrobustcmd*{\mkcomprange}{% \begingroup @@ -3093,19 +3210,46 @@ {\blx@declaredelim@i{}{}{#2}{#3}} {\def\do##1{% \listcsgadd{blx@declaredelimcontexts@#2}{##1}% - \blx@declaredelim@i{blx@printdelim@##1@}{##1}{#2}{#3}} + \blx@declaredelim@i{blx@printdelim@##1@}{##1}{#2}{#3}}% \docsvlist{#1}}}% \def\blx@declaredelim@i#1#2#3#4{% \begingroup \def\do##1{% \ifcsdef{#1##1} - {\blx@warn@delimdeclare{##1}{#2}} + {\blx@inf@delimdeclare{##1}{#2}} {}% \csgdef{#1##1}{#4}}% - \docsvlist{#3} + \docsvlist{#3}% \endgroup} +% *[<contextname, ...>]{<alias>}{<delim>} +\newrobustcmd*{\DeclareDelimAlias}{% + \@ifstar + {\blx@declaredelimalias} + {\blx@declaredelimaliasauto}} + +\newrobustcmd*{\blx@declaredelimalias}[3][]{% + \ifblank{#1} + {\blx@declaredelimalias@i{}{#2}{#3}} + {\def\do##1{% + \blx@declaredelimalias@i{blx@printdelim@##1@}{#2}{#3}}% + \docsvlist{#1}}} + +\newrobustcmd*{\blx@declaredelimaliasauto}[2]{% + \blx@declaredelimalias@i{}{#1}{#2}% + \ifcsvoid{blx@declaredelimcontexts@#2} + {} + {\def\do##1{% + \blx@declaredelimalias@i{blx@printdelim@##1@}{#1}{#2}}% + \dolistcsloop{blx@declaredelimcontexts@#2}}} + +\def\blx@declaredelimalias@i#1#2#3{% + \ifcsdef{#1#2} + {\blx@inf@delimdeclare{#2}{#1}} + {}% + \global\csletcs{#1#2}{#1#3}} + \def\blx@delimcontext{none} \newcommand*{\printdelim}[2][]{% \ifblank{#1} @@ -3129,13 +3273,25 @@ \newcommand*{\DeclareDelimcontextAlias}[2]{% \csgdef{blx@delimcontextalias@#1}{#2}} -% {<init>}{<entrytype>} -\protected\def\blx@imc@usedriver#1#2{% - \begingroup +\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 + \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 @@ -3245,11 +3401,44 @@ \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}})}} + \blx@regimcs{% \ifdriver \thefield \strfield \csfield \usefield \thelist \strlist \thename \strname \clearfield \clearlist \clearname \restorefield \restorelist \restorename - \ifcategory \ifentrycategory \ifkeyword \ifentrykeyword - \ifciteseen \ifentryseen \ifentryinbib \ifciteibid \ifciteidem \ifopcit \ifloccit + \ifcategory \ifkeyword + \ifciteseen \ifciteibid \ifciteidem \ifopcit \ifloccit \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal \ifbibmacroundef \iffieldundef \iffieldxref \iflistequalcs \iflistequals @@ -3260,6 +3449,8 @@ \savelistcs \savename \savenamecs \usedriver \ifinteger \ifnumeral \ifnumerals \ifpages \iffieldint \iffieldnum \iffieldnums \iffieldpages + \iflabeldateisdate \ifdatehasyearonlyprecision \ifdatehastime + \ifdateshavedifferentprecision \mkpageprefix \mkpagetotal \newblock \newunit \setunit \printunit \finentry} @@ -3477,7 +3668,15 @@ \long\def\blx@mksc@ingroup#1{% \if\noexpand\@let@token\relax - \blx@mksc@locase{{#2}}% + \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} @@ -3568,7 +3767,7 @@ {\xifinlist{#1}\blx@cmksc@lang}} %% Main formatting commands -% The work by creating a \let alias: +% 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 @@ -3834,16 +4033,25 @@ {\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}{sortnamekeyscheme}{\def\blx@refcontext@sortingnamekey{#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}{sortnamekeyscheme}{\def\blx@refcontext@sortingnamekey{#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} @@ -4028,6 +4236,7 @@ \blx@getdata{#1}% \blx@setoptions@type\abx@field@entrytype \def\abx@field@entrysetcount{1}% + \blx@anchor \blx@entryset@precode \blx@driver{\blx@imc@thefield{entrytype}}% \blx@entryset@postcode @@ -4045,8 +4254,9 @@ \blx@setoptions@entry \addtocounter{instcount}\@ne \blx@execute - \blx@beglangbib \blx@begunit + \blx@anchor + \blx@beglangbib \blx@entryset@precode \blx@driver{\blx@imc@thefield{entrytype}} \blx@entryset@postcode @@ -4071,12 +4281,20 @@ \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 - \let\bibstring\blx@imc@bibxstring - \let\biblstring\blx@imc@bibxlstring - \let\bibsstring\blx@imc@bibxsstring + \blx@bibstringsimple \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa @@ -4099,9 +4317,7 @@ \protected\def\blx@bibcpstring#1#2#3{% \blx@begunit \blx@hyphenreset - \let\bibstring\blx@imc@bibxstring - \let\biblstring\blx@imc@bibxlstring - \let\bibsstring\blx@imc@bibxsstring + \blx@bibstringsimple \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa @@ -4122,9 +4338,7 @@ \protected\def\blx@biblcstring#1#2#3{% \blx@begunit \blx@hyphenreset - \let\bibstring\blx@imc@bibxstring - \let\biblstring\blx@imc@bibxlstring - \let\bibsstring\blx@imc@bibxsstring + \blx@bibstringsimple \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa @@ -4145,9 +4359,7 @@ \protected\def\blx@bibucstring#1#2#3{% \blx@begunit \blx@hyphenreset - \let\bibstring\blx@imc@bibxstring - \let\biblstring\blx@imc@bibxlstring - \let\bibsstring\blx@imc@bibxsstring + \blx@bibstringsimple \lowercase{\edef\blx@tempa{#3}}% \ifcsundef{#2@\blx@tempa} {\blx@warn@nostring\blx@tempa @@ -4377,6 +4589,9 @@ \do{withintroduction}% \do{withforeword}% \do{withafterword}% + \do{organizer}% + \do{organizers}% + \do{byorganizer}% \do{byeditortr}% \do{byeditorco}% \do{byeditoran}% @@ -4435,19 +4650,31 @@ \do{origpubin}% \do{astitle}% \do{bypublisher}% + \do{nodate}% \do{page}% \do{pages}% \do{column}% \do{columns}% \do{line}% \do{lines}% - \do{nodate}% \do{verse}% \do{verses}% \do{section}% \do{sections}% \do{paragraph}% \do{paragraphs}% + \do{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}% @@ -4513,6 +4740,7 @@ \do{december}% \do{langamerican}% \do{langbrazilian}% + \do{langbulgarian}% \do{langcatalan}% \do{langcroatian}% \do{langczech}% @@ -4522,6 +4750,7 @@ \do{langestonian}% \do{langfinnish}% \do{langfrench}% + \do{langgalician}% \do{langgerman}% \do{langgreek}% \do{langitalian}% @@ -4535,8 +4764,10 @@ \do{langslovene}% \do{langspanish}% \do{langswedish}% + \do{langukrainian}% \do{fromamerican}% \do{frombrazilian}% + \do{frombulgarian}% \do{fromcatalan}% \do{fromcroatian}% \do{fromczech}% @@ -4546,6 +4777,7 @@ \do{fromestonian}% \do{fromfinnish}% \do{fromfrench}% + \do{fromgalician}% \do{fromgerman}% \do{fromgreek}% \do{fromitalian}% @@ -4559,6 +4791,7 @@ \do{fromslovene}% \do{fromspanish}% \do{fromswedish}% + \do{fromukrainian}% \do{countryde}% \do{countryep}% \do{countryeu}% @@ -4607,6 +4840,7 @@ % in *.cbx/bbx/tex: (implicit) % in *.lbx: inherit = {<language>}, \define@key{blx@lbx}{inherit}{% + \global\toggletrue{blx@nosuffrecurse}% \blx@lbxinput{#1}{}{\blx@err@nolang{#1}}% \csuse{abx@strings@#1}} @@ -4650,6 +4884,7 @@ % {<language>}{<language>} \def\blx@letbibextras#1#2{% + \global\toggletrue{blx@nosuffrecurse}% \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}% \global\csletcs{abx@extras@#1}{abx@extras@#2} \global\csletcs{abx@noextras@#1}{abx@noextras@#2}}% @@ -4694,6 +4929,7 @@ % {<language>}{<language>} \def\blx@letbibstrings#1#2{% + \global\toggletrue{blx@nosuffrecurse}% \blx@lbxinput{#2}{}{\blx@err@nolang{#2}}% \global\csletcs{abx@strings@#1}{abx@strings@#2}}% @@ -4713,13 +4949,30 @@ \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@#1}{#2}% + \csgdef{blx@lng@explicit@#1}{#2}} \@onlypreamble\DeclareLanguageMapping % {<language>}{<success>}{<failure>} \def\blx@lbxinput#1{% + \ifdefempty\blx@lng@suff + {} + {\ifcsdef{blx@lng@explicit@#1}% \DeclareLanguageMapping overrides \DeclareLanguageMappingSuffix + {} + {\nottoggle{blx@nosuffrecurse} + {\csgdef{blx@lng@#1}{#1\blx@lng@suff}} + {}}}% + \blx@lbxinput@0{#1}} + +\def\blx@lbxinput@0#1{% \ifcsdef{blx@lng@#1} {\expandafter\expandafter\expandafter\blx@lbxinput@i \expandafter\expandafter\expandafter{% @@ -4731,12 +4984,19 @@ \global\csundef{blx@lng@#2}% \IfFileExists{#1.lbx} {\blx@lbxinput@ii{#2}{#1}{language '#2' -> '#1'}} - {\blx@warning@noline{% - File '#1.lbx' not found!\MessageBreak - Ignoring mapping '#2' -> '#1'}% - \blx@lbxinput{#2}}} + {\ifcsdef{blx@suffmaptried@#2} + {} + {\blx@warning@noline{% + File '#1.lbx' not found!\MessageBreak + Ignoring mapping '#2' -> '#1'}% + \cslet{blx@suffmaptried@#2}\@empty}% + \blx@lbxinput@0{#2}}} % {<language>}{<lbxfile>}{<message>} +% toggle 'blx@nosuffrecurse' is set to true at the places where recursion into here +% can occur when loading a .lbx otherwise, when using \DeclareLanguageMappingSuffix +% it is possible to get into infinite loops. We only want to apply the suffix to explicitly +% loaded languages, not those loaded by recursion. \def\blx@lbxinput@ii#1#2#3{% \begingroup \setbox\@tempboxa=\hbox\bgroup @@ -4747,7 +5007,7 @@ \global\cslet{abx@noextras@#1}\@empty \blx@maplang{#1}{#1}% \def\InheritBibliographyStrings{% - \blx@letbibstrings{#1}}% + \blx@letbibstrings{#1}}% \def\DeclareBibliographyStrings####1{% \begingroup \let\blx@defstring\blx@lbx@defstring @@ -4768,7 +5028,8 @@ \csuse{blx@hook@noextras@#1}% \csuse{blx@hook@noextras@#2}% \csuse{blx@hook@hyph@#1}% - \csuse{blx@hook@hyph@#2}} + \csuse{blx@hook@hyph@#2}% + \global\togglefalse{blx@nosuffrecurse}} {\aftergroup\@firstoftwo} {\aftergroup\@secondoftwo}% \egroup} @@ -4950,9 +5211,9 @@ \dateuncertainprint \dateeraprint{#2year}% \iffieldundef{#2endyear} - {\printfield{extrayear}} + {\printfield{extradate}} {\iffieldequalstr{#2endyear}{} - {\printfield{extrayear}% + {\printfield{extradate}% \printtext{\mbox{\bibdaterangesep}}} {\printtext{% \bibdaterangesep @@ -4962,7 +5223,7 @@ % Optionally print the time after the date \blx@printtime{#2}{end}} {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% - \printfield{extrayear}% + \printfield{extradate}% \enddateuncertainprint \dateeraprint{#2endyear}}}}}}} @@ -4985,14 +5246,14 @@ {\dateeraprint{#2year}}}} {\iffieldsequal{#2year}{#2endyear} {\csuse{mkbibseasondate#1}{}{#2season}} - {\csuse{mkbibseasondate#1}{#2year}{#2season} + {\csuse{mkbibseasondate#1}{#2year}{#2season}% \iffieldsequal{#2dateera}{#2enddateera}{} {\dateeraprint{#2year}}}}% \dateuncertainprint \iffieldundef{#2endyear} - {\printfield{extrayear}} + {\printfield{extradate}} {\iffieldequalstr{#2endyear}{} - {\printfield{extrayear}% + {\printfield{extradate}% \printtext{\mbox{\bibdaterangesep}}} {\printtext{% \bibdaterangesep @@ -5000,17 +5261,25 @@ \iffieldundef{#2season} {\csuse{mkbibdate#1}{#2endyear}{#2endmonth}{#2endday}} {\csuse{mkbibseasondate#1}{#2endyear}{#2endseason}}}% - \printfield{extrayear}% + \printfield{extradate}% \enddateuncertainprint \dateeraprint{#2endyear}}}}}}} \newrobustcmd*{\mkdaterangeyear}[1]{% + \blx@imc@clearfield{#1season}% \blx@imc@clearfield{#1month}% \blx@imc@clearfield{#1day}% - \blx@imc@clearfield{#1season}% + \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{#1endseason}% + \blx@imc@clearfield{#1endhour}% + \blx@imc@clearfield{#1endminute}% + \blx@imc@clearfield{#1endsecond}% + \blx@imc@clearfield{#1endtimezone}% \iffieldsequal{#1year}{#1endyear} {\blx@imc@clearfield{#1endyear}} {}% @@ -5056,7 +5325,7 @@ % Such a season component can only come from an EDTF 5.1.5 season which replaces % a normal month so if it exists, we know that a normal date print is ruled out \iffieldundef{#1season} - {\blx@ymddate[extrayear]{#1}{}% + {\blx@ymddate[extradate]{#1}{}% % Optionally print the time after the date \blx@printtime{#1}{}} {\csuse{mkbibseasondateshort}{#1year}{#1season}}% @@ -5077,7 +5346,7 @@ \enddateuncertainprint \dateeraprint{#1endyear}}}}}} -% [extrayear]{<datetype>}{''|end} +% [extradate]{<datetype>}{''|end} \newrobustcmd*{\blx@ymddate}[3][]{% \dateeraprintpre{#2#3year}% \mkyearzeros{\thefield{#2#3year}}\ifblank{#1}{}{\printfield{#1}}% @@ -5085,12 +5354,20 @@ \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{#1season}% + \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{#1endseason}% + \blx@imc@clearfield{#1endhour}% + \blx@imc@clearfield{#1endminute}% + \blx@imc@clearfield{#1endsecond}% + \blx@imc@clearfield{#1endtimezone}% \iffieldsequal{#1year}{#1endyear} {\blx@imc@clearfield{#1endyear}} {}% @@ -5108,7 +5385,7 @@ {}} \newrobustcmd*{\mkdaterangeedtf}[1]{% - \blx@metadateinfo{#1}% + \blx@metadateinfo{#1}% \def\bibdatetimesep{T}% \iffieldundef{#1year} {} @@ -5136,7 +5413,6 @@ {}% \enddateuncertainprint \enddatecircaprintedtf}}}} -\cslet{mkdaterangeiso8601}\mkdaterangeedtf% Legacy option support \newrobustcmd*{\mkdaterangeedtfextra}[1]{% \blx@metadateinfo{#1}% @@ -5144,7 +5420,7 @@ \iffieldundef{#1year} {} {\printtext[#1date]{% - \blx@edtfdate[extrayear]{#1}{}% + \blx@edtfdate[extradate]{#1}{}% \ifboolexpr{% togl {blx@#1dateusetime} and @@ -5167,9 +5443,8 @@ {}% \enddateuncertainprint \enddatecircaprintedtf}}} -\cslet{mkdaterangeiso8601extra}\mkdaterangeedtfextra% Legacy option support -% [extrayear]{<datetype>}{''|end} +% [extradate]{<datetype>}{''|end} \newrobustcmd*{\blx@edtfdate}[3][]{% \dateeraprintpre{#2#3year}% \blx@imc@forcezerosy{\thefield{#2#3year}}\ifblank{#1}{}{\printfield{#1}}% @@ -5207,7 +5482,6 @@ \newrobustcmd*{\bibdateeraendprefix}{\,\bibdateeraprefix} \newrobustcmd*{\bibdatesep}{\hyphen} \newrobustcmd*{\bibdaterangesep}{\bibrangedash} -\newrobustcmd*{\bibdatedash}{\bibrangedash}%LEGACY(<3.5) % date+times \newrobustcmd*{\bibdatetimesep}{\space} % ranges @@ -5294,23 +5568,6 @@ \blx@regimcs{\printlabeldate \printlabeltime \printlabeldateextra \stripzeros \forcezerosy \forcezerosmdt \mkyearzeros \mkmonthzeros \mkdayzeros \mktimezeros} -\protected\def\mkdatezeros{% - \blx@warning@noline{% - '\string\mkdatezeros' is deprecated, please use '\string\mkyearzeros',\MessageBreak - '\string\mkmonthzeros' or '\string\mkdayzeros' as appropriate. \MessageBreak - falling back to '\string\mkmonthzeros'}% - \mkmonthzeros} - -\protected\def\printdatelabel{% - \blx@warning@noline{% - '\string\printdatelabel' is deprecated, please use '\string\printlabeldate'}% - \blx@imc@printlabeldate} - -\protected\def\printdatelabelextra{% - \blx@warning@noline{% - '\string\printdatelabelextra' is deprecated, please use '\string\printlabeldateextra'}% - \blx@imc@printlabeldateextra} - % User macro for retrieving currrent language \def\currentlang{\blx@languagename} @@ -5351,8 +5608,8 @@ \gdef\blx@mkautolangbabel{% \ifundef\bbl@main@language {\blx@error - {No default babel language defined} - {You must define a default language for babel}} + {No default 'babel' language defined} + {You must define a default language for 'babel'}} {}% \pretocmd\select@language{\blx@langsetup{#1}} {\ifdef\blx@thelangenv @@ -5396,9 +5653,10 @@ \gdef\blx@mkautolangpoly{% \ifundef\bbl@main@language {\blx@error - {No default polyglossia language defined} - {You must define a default language for polyglossia}} + {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 @@ -5438,9 +5696,11 @@ {\csname\abx@field@langid\endcsname}} {\csname\blx@thelangenv\expandafter\endcsname\expandafter{\abx@field@langid}}% % These lines are equal to \blx@maplang - \blx@resetpunct - \csuse{abx@extras@\abx@field@langid}% - \csuse{abx@strings@\abx@field@langid}}} + \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 @@ -5457,7 +5717,7 @@ \blx@langsetup\bbl@main@language} {\blx@err@patch{'polyglossia' package}% \blx@mknoautolang}% - \catcode`\_=8} + \catcode`\_=\blx@saved@underscore@catcode\relax} \endgroup \def\blx@mknoautolang{% @@ -5610,7 +5870,7 @@ \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 +% 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} @@ -5621,9 +5881,22 @@ \blx@collectopts{boolean}{blx@namelistopts}{useprefix}% for passing to bcf \blx@collectopts{boolean}{blx@nameopts}{useprefix}% for passing to the .bcf -% sortnamekeyscheme namelist/name scope -\blx@collectopts{string}{blx@namelistopts}{sortnamekeyscheme}% for passing to bcf -\blx@collectopts{string}{blx@nameopts}{sortnamekeyscheme}% for passing to the .bcf +% 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 @@ -5750,7 +6023,8 @@ \def\do#1{% \listxadd\blx@namepartmetafields{#1namehash}% - \listxadd\blx@namepartmetafields{#1fullhash}} + \listxadd\blx@namepartmetafields{#1fullhash}% + \listxadd\blx@namepartmetafields{#1bibnamehash}} \abx@donameparts \def\do#1{% @@ -5758,7 +6032,6 @@ \abx@dodateparts \def\abx@dointernalfields{% - \do{childentrykey}% \do{clonesourcekey}% \do{labeldate}% \do{labeldatesource}% @@ -5771,7 +6044,7 @@ \do{extraalpha}% \do{extratitle}% \do{extratitleyear}% - \do{extrayear}% + \do{extradate}% \do{fullhash}% \do{labelalpha}% \do{labelnumber}% @@ -5779,6 +6052,7 @@ \do{labeltitleyear}% \do{localnumber}% \do{namehash}% + \do{bibnamehash}% \do{options}% \do{sortinit}% \do{sortinithash}% @@ -5883,76 +6157,76 @@ {}}}% \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}}}}% + \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 @@ -5974,12 +6248,6 @@ \settoggle{abx@bool@#1inits}{##1}}} \abx@donameparts -%LEGACY(<3.3) legacy name for \ifgiveninits which is autogenerated now -\def\iffirstinits{ - \blx@warning@noline{% - '\string\iffirstinits' is deprecated, use '\string\ifgiveninits'}% - \iftoggle{abx@bool@giveninits}} - \def\do#1{% % Define use<name> options scope for biber \blx@collectopts{boolean}{blx@globalopts}{use#1}% @@ -6396,6 +6664,7 @@ \csuse{blx@data@\the\c@refsection @\blx@refcontext@context @#1}% \blx@adjustyears \blx@getlabeldata + \blx@aliasfields \blx@setcitecounter} \def\blx@adjustyears{% @@ -6532,20 +6801,39 @@ {\edef\abx@field@labelendseason{\csuse{abx@field@\abx@field@labeldatesource endseason}}} {}}}} +% 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} - {\expandafter\expandafter\expandafter\blx@getdata - \expandafter\expandafter\expandafter{% - \csname blx@setc@\the\c@refsection @#1\endcsname}% - \blx@ifdata{#1} - {\def\abx@field@childentrykey{#1}% + {\blx@ifdata{#1} + {\def\abx@field@childentrykey{#1}%LEGACY(<3.8) + \edef\abx@field@childentrytype{\abx@field@entrytype}%LEGACY(<3.8) \begingroup - \blx@getdata{#1}% - \edef\blx@tempa{\endgroup - \def\noexpand\abx@field@childentrytype{\abx@field@entrytype}}% - \blx@tempa} + \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} {}} - {\blx@getdata{#1}}% + {}% \ifcsdef{blx@seti@\the\c@refsection @#1} {\letcs\abx@field@entrysetcount{blx@seti@\the\c@refsection @#1}} {}} @@ -6615,13 +6903,13 @@ \csgdef{blx@keyalias@\the\c@refsection @#1}{\detokenize{#2}}% \listcsgadd{blx@keyaliases@\the\c@refsection}{#1}} -% blx@slist@list@<section>@<scheme> - a list of list items in a scheme in a +% blx@dlist@list@<section>@<refcontext> - a list of list items in a refcontext in a % section (for tracking bibliography lists, % obeys skipbiblist) -% blx@slist@entry@<section>@<scheme> - a list of normal entries in a scheme in a +% blx@dlist@entry@<section>@<list> - a list of normal entries in a list in a % section (for tracking bibliographies, % obeys skipbib) -% blx@slist@centry@<section>@<scheme> - a list of normal entries in a scheme in a +% 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 @@ -6633,9 +6921,10 @@ \blx@setoptions@type{#2}% \blx@bbl@options{#3}% \blx@setoptions@entry - \edef\blx@bbl@data{blx@data@\the\c@refsection @\blx@slist@name @\abx@field@entrykey}% + \edef\blx@bbl@data{blx@data@\the\c@refsection @\blx@dlist@name @\abx@field@entrykey}% \csuse\blx@bbl@data \blx@bbl@addfield{entrykey}{\abx@field@entrykey}% + \listxadd\blx@entries{\abx@field@entrykey}% \blx@bbl@addfield{entrytype}{#2}% \blx@imc@iffieldundef{options} {} @@ -6653,9 +6942,9 @@ \toggletrue{blx@skipbiblist}% \toggletrue{blx@skiplab}}% \nottoggle{blx@skipbib} - {\expandafter\ifstrequal\expandafter{\blx@slist@type}{entry} - {\listcsxadd{blx@slist@entry@\the\c@refsection @\blx@slist@name}{\abx@field@entrykey}% - \listcsxadd{blx@slist@centry@\the\c@refsection @\blx@slist@name}{\abx@field@entrykey}% + {\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}} @@ -6663,9 +6952,9 @@ {}}% {}% \nottoggle{blx@skipbiblist} - {\expandafter\ifstrequal\expandafter{\blx@slist@type}{list} + {\expandafter\ifstrequal\expandafter{\blx@dlist@type}{list} {\blx@bbl@labelfields - \listcsxadd{blx@slist@\blx@slist@type @\the\c@refsection @\blx@slist@name}{\abx@field@entrykey}} + \listcsxadd{blx@dlist@\blx@dlist@type @\the\c@refsection @\blx@dlist@name}{\abx@field@entrykey}} {}}% {}% \nottoggle{blx@skiplab} @@ -6698,13 +6987,15 @@ % available in the current context sortlist. \def\blx@addset{% \begingroup - \letcs\blx@tempa{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}% - \global\cslet{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}\@empty - \forlistloop\blx@addset@i\blx@tempa + \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} + {\PackageWarningNoLine{biblatex}{Sorting template has changed}}% \endgroup} \def\blx@addset@i#1{% - \listcsgadd{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}{#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 @@ -6713,7 +7004,7 @@ {}} \def\blx@addset@ii#1{% - \listcsgadd{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}{#1}} + \listcsgadd{blx@dlist@centry@\the\c@refsection @\blx@refcontext@context}{#1}} \def\blx@bbl@labelfields{% \def\do##1{% @@ -6806,10 +7097,10 @@ \fi}} \def\blx@bbl@labeldate{% - \ifundef\abx@field@extrayear + \ifundef\abx@field@extradate {} - {\ifnum\abx@field@extrayear>\c@maxextrayear - \global\c@maxextrayear\abx@field@extrayear\relax + {\ifnum\abx@field@extradate>\c@maxextradate + \global\c@maxextradate\abx@field@extradate\relax \fi}} \def\blx@bbl@titles{% @@ -6852,8 +7143,8 @@ \let\endentry\blx@bbl@endentry \let\missing\blx@bbl@missing \let\keyalias\blx@bbl@keyalias - \let\sortlist\blx@bbl@slist - \let\endsortlist\blx@bbl@endslist + \let\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 @@ -6872,25 +7163,28 @@ \let\endlverb\blx@bbl@verblend \let\annotation\blx@bbl@annotationdef} -\def\blx@bblend{} +\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}}} -% {<sortschemename>} -% Get the saved information on which sorting schemes were mentioned last run -\protected\def\abx@aux@sortscheme#1{% - \listgadd\blx@lastsortschemes{#1}} - % {<refcontext>} % Get the saved information on which refcontexts were mentioned last run \protected\def\abx@aux@refcontext#1{% \listgadd\blx@lastrefcontexts{#1}} -% {<sortschemename>} -% Get the saved information on which shorthand sorting schemes were mentioned last run +% {<sortingtemplatename>} +% Get the saved information on which shorthand sorting templates were mentioned last run \protected\def\abx@aux@biblist#1{% \listgadd\blx@lastbiblists{#1}} @@ -6909,7 +7203,7 @@ \AtEndDocument{% % Here we run some tests to decide if we need to issue re-run % messages in certain circumstances. In general, if we add/remove - % any citations or add/remove any sorting schemes, we need to re-run + % 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. @@ -6921,15 +7215,15 @@ \begingroup \def\do#1{\ifinlist{#1}\blx@cites{}{\blx@logreq@active{}}\relax}% \dolistloop\blx@lastcites - % Special case - if we are using sortscheme "none" anywhere, then changes + % 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 sortschemes as nobody wants to sort biblists with + % to biblist sortingtemplates as nobody wants to sort biblists with % "none", since it makes no sense - \ifinlist{none}\blx@sortschemes + \ifinlist{none}\blx@sortingtemplatenames {\ifdefstrequal{\blx@cites}{\blx@lastcites} {} {\blx@logreq@active{}}} @@ -7002,29 +7296,31 @@ % 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} - {\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 - \csgdef{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 + \csgdef{blx@defer@\the\c@refsection @\blx@refcontext@context @\abx@field@entrykey}{}}} {}} {}}% {}} {}% \endgroup} -% {<sortlistname>} -\def\blx@bbl@slist[#1]#2{% +% {<datalistname>} +\def\blx@bbl@dlist[#1]#2{% \begingroup - \def\blx@slist@type{#1}% - \def\blx@slist@name{#2}} + \def\blx@dlist@type{#1}% + \def\blx@dlist@name{#2}} -\def\blx@bbl@endslist{% +\def\blx@bbl@enddlist{% \csnumgdef{blx@labelnumber@\the\c@refsection}{0}% \endgroup} @@ -7194,9 +7490,8 @@ \define@key{blx@bib1}{prenote}{} \define@key{blx@bib1}{postnote}{} \define@key{blx@bib1}{omitnumbers}[]{} -\define@key{blx@bib1}{prefixnumbers}{}%LEGACY(<3.4) legacy name for labelprefix % 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, +% 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}} @@ -7224,10 +7519,6 @@ \define@key{blx@biblist2}{section}{} \define@key{blx@biblist2}{sorting}{} -\define@key{blx@bib1}{sorting}{% - \blx@warning@noline{% - sorting option to \string\printbibliography\space is no longer supported, use 'sorting' option to \string\newrefcontext}} - \define@key{blx@bib1}{section}{% \ifcsundef{blx@sections@#1} {\blx@err@nosec{#1}} @@ -7240,10 +7531,6 @@ {\c@refsection#1\relax \def\blx@tempe{#1}}} -\define@key{blx@biblist1}{sorting}{% - \blx@warning@noline{% - sorting option to \string\printbiblist\space is no longer supported, use 'sorting' option to \string\newrefcontext}} - \define@key{blx@bbg}{section}{% \ifcsundef{blx@sections@#1} {\blx@err@nosec{#1}} @@ -7462,10 +7749,6 @@ Ignoring 'omitnumbers=true'}}} {}} -\define@key{blx@bib2}{prefixnumbers}{% - \blx@warning@noline{% - prefixnumbers option to \string\printbibliography\space is no longer supported, use 'labelprefix' option to \string\newrefcontext}} - % [<options>] \newrobustcmd*{\printbibheading}{% \begingroup @@ -7508,21 +7791,8 @@ \let\blx@thetitle\@empty % defaults \let\blx@tempa\@empty% before there is a .bbl, this must not be undef - \edef\blx@tempd{% - \blx@xml@sorting{% - \ifcsdef{blx@sortdef@locale@\blx@refcontext@sorting} - { locale="\csuse{blx@sortdef@locale@\blx@refcontext@sorting}"} - {}}{% - \csuse{blx@sorting@\blx@refcontext@sorting}}}% default to context \edef\blx@tempe{\the\c@refsection}% default refsection is current \blx@safe@actives - \edef\blx@tempd{% - \blx@xml@sorting{% - \ifcsdef{blx@sortdef@locale@\blx@refcontext@sorting} - { locale="\csuse{blx@sortdef@locale@\blx@refcontext@sorting}"} - {}}{% - \csuse{blx@sorting@\blx@refcontext@sorting}}}% - % \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 @@ -7533,9 +7803,9 @@ {} {\setkeys{blx@bib2}{resetnumbers}}}% \blx@rest@actives - \ifcsvoid{blx@slist@entry@\blx@tempe @\blx@refcontext@context} + \ifcsvoid{blx@dlist@entry@\blx@tempe @\blx@refcontext@context} {} - {\letcs\blx@tempa{blx@slist@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 @@ -7543,8 +7813,12 @@ \togglefalse{blx@omitnumbers}% \setkeys{blx@bib2}{#1}% ... now we have correct \blx@tempa, set rest of options \blx@rest@actives - \csxappto{blx@slists}{% - \blx@xml@slist{\blx@refcontext@context}{entry}{\blx@tempe}{\blx@refcontext@sorting}{\blx@refcontext@sortingnamekey}{\blx@refcontext@labelprefix}{\blx@tempd}{}}% + % Add datalist to list of seen datalists to prevent duplicates + \xifinlist{\blx@refcontext@context @entry}\blx@dlistnames + {} + {\listxadd\blx@dlistnames{\blx@refcontext@context @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}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{}}}% \ifdefvoid\blx@tempa {\blx@warn@bibempty\endgroup} {\blx@bibliography\blx@tempa}} @@ -7575,11 +7849,11 @@ \blx@refsections} \def\blx@refsections{% - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} + \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context} {} {\toggletrue{blx@tempa}% \begingroup - \expandafter\blx@bibliography\csname blx@slist@entry@\the\c@refsection @\blx@refcontext@context\endcsname}% + \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 @@ -7619,9 +7893,9 @@ {\toggletrue{blx@tempa}% \begingroup \let\blx@tempa\@empty - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} + \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context} {} - {\letcs\blx@tempa{blx@slist@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 @@ -7665,9 +7939,9 @@ \begingroup \blx@key@heading{#1}% \let\blx@tempa\@empty - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} + \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context} {} - {\letcs\blx@tempa{blx@slist@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}}% @@ -7901,14 +8175,6 @@ \appto\blx@mknohyperref{\let\blx@anchor\relax} -% Legacy alias for \printshorthands -\def\printshorthands{% - \@ifnextchar[%] - {\blx@printshorthands} - {\blx@printshorthands[]}} - -\def\blx@printshorthands[#1]{\printbiblist[#1]{shorthand}} - % Custom bibliography list % [<otions>]{biblistname} \newrobustcmd*{\printbiblist}[2][]{% @@ -7925,42 +8191,33 @@ \let\blx@thetitle\@empty % defaults \let\blx@tempa\@empty% before there is a .bbl, this must not be undef - % default sorting scheme and scheme name for list is same name as list + % 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@sorting@#2} + \ifcsdef{blx@sortingtemplate@#2} {#2} - {\blx@refcontext@sorting}}% - % locally define this since we want to fetch data from the slist named + {\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 - \edef\blx@refcontext@context{\blx@tempc/\blx@refcontext@sortingnamekey/\blx@refcontext@labelprefix}% - \edef\blx@tempd{% - \blx@xml@sorting - {\ifcsdef{blx@sortdef@locale@#2} - { locale="\csuse{blx@sortdef@locale@#2}"} - {}} - {\csuse{blx@sorting@\blx@tempc}}}% + \edef\blx@refcontext@context{\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 sortscheme to the list of sortschemes for this biblist + % 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}}}% - \edef\blx@tempd{% - \blx@xml@sorting{% - \ifcsdef{blx@sortdef@locale@\blx@tempc} - { locale="\csuse{blx@sortdef@locale@\blx@tempc}"} - {}}{% - \csuse{blx@sorting@\blx@tempc}}}% \setkeys{blx@biblist1}{#1}% Set section only, if present ... \blx@rest@actives - \ifcsvoid{blx@slist@list@\blx@tempe @\blx@refcontext@context} + \ifcsvoid{blx@dlist@list@\blx@tempe @\blx@refcontext@context} {} - {\letcs\blx@tempa{blx@slist@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 @@ -7969,8 +8226,12 @@ {}} {}% \blx@rest@actives - \csxappto{blx@slists}{% - \blx@xml@slist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@tempc}{\blx@refcontext@sortingnamekey}{\blx@refcontext@labelprefix}{\blx@tempd}{\csuse{blx@biblistfilters@#2}}}% + % Add datalist to list of seen datalists to prevent duplicates + \xifinlist{\blx@refcontext@context @list}\blx@dlistnames + {} + {\listxadd\blx@dlistnames{\blx@refcontext@context @list}% + \csxappto{blx@dlists}{% + \blx@xml@dlist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@tempc}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{\csuse{blx@biblistfilters@#2}}}}% \ifdefvoid\blx@tempa {\blx@warn@biblistempty{#2}\endgroup} {\blx@biblist\blx@tempa}} @@ -8011,12 +8272,6 @@ \endgroup \if@restonecol\twocolumn\fi} -% Legacy aliases -\def\AtBeginShorthands{\AtBeginBiblist{shorthand}} -\def\AtEveryLositem{\AtEveryBiblistitem{shorthand}} -\@onlypreamble\AtBeginShorthands -\@onlypreamble\AtEveryLositem - % {<biblistname>} \newrobustcmd*{\AtBeginBiblist}[1]{\csgappto{blx@hook@biblistinit@#1}} \newrobustcmd*{\AtEveryBiblistitem}[1]{\csgappto{blx@hook@biblistitem@#1}} @@ -8086,35 +8341,50 @@ {\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 sortscheme to the list of sortschemes so we can track + % 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@sorting\blx@sortschemes + \xifinlist\blx@refcontext@sortingtemplatename\blx@sortingtemplatenames {} - {\listxadd\blx@sortschemes\blx@refcontext@sorting - \blx@auxwrite\@mainaux{}{\string\abx@aux@sortscheme{\blx@refcontext@sorting}}}% - \xdef\blx@refcontext@context{\blx@refcontext@sorting/\blx@refcontext@sortingnamekey/\blx@refcontext@labelprefix}% + {\listxadd\blx@sortingtemplatenames\blx@refcontext@sortingtemplatename}% + \xdef\blx@refcontext@context{\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@sorting@\blx@refcontext@sorting} - {\blx@err@invopt{sorting=\blx@refcontext@sorting}{}} + \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@sortingnamekey@\blx@refcontext@sortingnamekey} - {\blx@err@invopt{sortingnamekeyscheme=\blx@refcontext@sortingnamekey}{}} + \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 - \xdef\blx@refcontext@sorting{\blx@sorting}% - \gdef\blx@refcontext@sortingnamekey{global}% - \xdef\blx@refcontext@context{\blx@refcontext@sorting/\blx@refcontext@sortingnamekey/}} - -\define@key{blx@refcontext}{sorting}{\gdef\blx@refcontext@sorting{#1}} -\define@key{blx@refcontext}{sortingnamekeyscheme}{\gdef\blx@refcontext@sortingnamekey{#1}} + \xdef\blx@refcontext@sortingtemplatename{\blx@sorting}% + \gdef\blx@refcontext@sortingnamekeytemplatename{global}% + \gdef\blx@refcontext@uniquenametemplatename{global}% + \gdef\blx@refcontext@labelalphanametemplatename{global}% + \xdef\blx@refcontext@context{\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}} \define@key{blx@refcontext}{labelprefix}{% \gdef\blx@refcontext@labelprefix{#1}% \iftoggle{blx@defernumbers} @@ -8124,11 +8394,6 @@ Option 'labelprefix' requires global\MessageBreak 'defernumbers=true'}} {}}} -\define@key{blx@refcontext}{prefixnumbers}{%LEGACY(<3.3) - \blx@warning@noline{% - prefixnumbers option to \string\newrefcontext\space has been renamed, - use 'labelprefix' option instead}% - \setkeys{blx@refcontext}{labelprefix=#1}} % [refcontext keys]{<keyword1>,<keyword2>,...} \newcommand*{\assignrefcontextkeyws}{% @@ -8140,10 +8405,12 @@ \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}} + \csxdef{blx@assignedrefcontextkeyws#1@\the\c@refsection @##1}{\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}} \docsvlist{#3}} % [refcontext keys]{<category1>,<category2>,...} @@ -8156,10 +8423,12 @@ \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}} + \csxdef{blx@assignedrefcontextcats#1@\the\c@refsection @##1}{\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}} \docsvlist{#3}} % [refcontext keys]{<entrykey1>,<entrykey2>,...} @@ -8172,14 +8441,24 @@ \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}}% + \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}{sortingnamekeyscheme}{\def\blx@tempb{#1}} +\define@key{blx@assignrefcontext}{sortingnamekeytemplatename}{\def\blx@tempb{#1}} \define@key{blx@assignrefcontext}{labelprefix}{\def\blx@tempc{#1}} +\define@key{blx@assignrefcontext}{uniquenametemplatename}{\def\blx@tempd{#1}} +\define@key{blx@assignrefcontext}{labelalphanametemplatename}{\def\blx@tempe{#1}} % Reference sections \newrobustcmd*{\newrefsection}{% @@ -8644,33 +8923,13 @@ \protected\def\abx@aux@segm#1#2#3{% \listcsxadd{blx@segm@#1@#2}{\detokenize{#3}}} -\def\blx@citation@set#1#2{% - \blx@citation@entry{#1}{#2}% - \begingroup - \def\do##1{\blx@citation@entry{##1}\blx@msg@cundef}% - \expandafter\expandafter\expandafter\docsvlist - \expandafter\expandafter\expandafter{% - \csname blx@setp@\the\c@refsection @#1\endcsname}% - \endgroup} - -\def\blx@citation@inset#1#2{% - \blx@citation@entry{#1}{#2}% - \expandafter\expandafter\expandafter\blx@citation@inset@i - \expandafter\expandafter\expandafter{% - \csname blx@setc@\the\c@refsection @#1\endcsname}\blx@msg@cundef} - -\def\blx@citation@inset@i#1{% - \ifcsdef{blx@setp@\the\c@refsection @#1} - {\blx@citation@set{#1}} - {\blx@citation@entry{#1}}} - \def\blx@citation@all{% \ifbool{citerequest} {\blx@bibreq{*}% \global\csletcs {blx@segm@\the\c@refsection @\the\c@refsegment} - {blx@slist@entry@\the\c@refsection @\blx@refcontext@context}% - \ifcsvoid{blx@slist@entry@\the\c@refsection @\blx@refcontext@context} + {blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}% + \ifcsvoid{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context} {\blx@logreq@active{}} {}} {}} @@ -8727,6 +8986,8 @@ % {<entrykey>,...} \protected\def\blx@citeloop#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}% % 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 @@ -8743,8 +9004,9 @@ \ifnum\blx@tempcntb>\z@ \multicitedelim \fi + \else + \blx@postpunct@saved \fi - \letcs\blx@tempb{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}% % \blx@tempb is a sorted list of all cites, \blx@tempa is the list of cites to % sort using this list \blx@thecitesort @@ -8799,7 +9061,7 @@ % refcontext defined \ifcsdef{blx@assignedrefcontextbib@\the\c@refsection @#1} {\letcs\blx@refcontext@context{blx@assignedrefcontextbib@\the\c@refsection @#1}} - {\edef\blx@refcontext@context{\blx@sorting/global/}}% + {\edef\blx@refcontext@context{\blx@sorting/global//global/global}}% % assignment via keyword list \ifdef\blx@assignedrefcontextkeywlist {\def\do##1{% @@ -8887,6 +9149,7 @@ \ifnum\c@citecount=\c@citetotal \def\blx@thecheckpunct{\blx@err@nestcite\@gobble}% \blx@postcode + \blx@postpunct@saved \fi \blx@endlangcite \endgroup @@ -9544,7 +9807,8 @@ \def\blx@precode{\delimcontext{#1}#2}% \def\blx@loopcode{#3}% \def\blx@dlimcode{#4}% - \def\blx@postcode{#5##4}% + \def\blx@postcode{#5}% + \def\blx@postpunct@saved{##4}% \blx@citeloop{##3}% \endgroup}} @@ -9806,9 +10070,10 @@ \abx@missing{#5}} {\printnames[#4]{#5}}}% \def\blx@dlimcode{\multicitedelim}% + \def\blx@postpunct@saved{#6}% \ifblank{#2} - {\def\blx@postcode{#6}} - {\def\blx@postcode{\usebibmacro{postnote}#6}}% + {\let\blx@postcode\@empty} + {\def\blx@postcode{\usebibmacro{postnote}}}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \blx@citeloop{#3}% @@ -9833,9 +10098,10 @@ \abx@missing{#5}} {\printlist[#4]{#5}}}% \def\blx@dlimcode{\multicitedelim}% + \def\blx@postpunct@saved{#6}% \ifblank{#2} - {\def\blx@postcode{#6}} - {\def\blx@postcode{\usebibmacro{postnote}#6}}% + {\let\blx@postcode\@empty} + {\def\blx@postcode{\usebibmacro{postnote}}}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \blx@citeloop{#3}% @@ -9861,9 +10127,10 @@ \abx@missing{#5}} {\printfield[#4]{#5}}}% \def\blx@dlimcode{\multicitedelim}% + \def\blx@postpunct@saved{#6}% \ifblank{#2} - {\def\blx@postcode{#6}} - {\def\blx@postcode{\usebibmacro{postnote}#6}}% + {\let\blx@postcode\@empty} + {\def\blx@postcode{\usebibmacro{postnote}}}% \boolfalse{citetracker}% \boolfalse{pagetracker}% \blx@citeloop{#3}% @@ -9957,7 +10224,13 @@ \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\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}}}}} % {<listmacro>}{<filtercsname>} => matches in <listmacro> \protected\def\blx@bibfilter#1#2{% @@ -10376,7 +10649,7 @@ ~~~~~~~~<bcf:map\string_step#1/>\blx@nl} \xdef\blx@xml@labelalphanametemplate#1#2{% - ~~<bcf:labelalphanametemplate type="#1">\blx@nl + ~~<bcf:labelalphanametemplate name="#1">\blx@nl #2% ~~</bcf:labelalphanametemplate>\blx@nl} \xdef\blx@xml@labelalphanametemplatenamepart#1#2#3{% @@ -10393,6 +10666,17 @@ \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% @@ -10440,18 +10724,18 @@ \xdef\blx@xml@nolabelwidthcount#1{% ~~~~<bcf:nolabelwidthcount value="#1"/>\blx@nl} -\xdef\blx@xml@uniquenametemplate#1{% - ~~<bcf:uniquenametemplate>\blx@nl% - #1% +\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@sortingnamekey#1#2{% - ~~<bcf:sortingnamekey keyscheme="#1">\blx@nl% +\xdef\blx@xml@sortingnamekeytemplate#1#2{% + ~~<bcf:sortingnamekeytemplate name="#1">\blx@nl% #2% - ~~</bcf:sortingnamekey>\blx@nl} + ~~</bcf:sortingnamekeytemplate>\blx@nl} \xdef\blx@xml@sortingnamekeykeypart#1#2{% ~~~~<bcf:keypart#1>\blx@nl @@ -10464,26 +10748,26 @@ \xdef\blx@xml@sortingnamekeyliteral#1#2{% ~~~~~~<bcf:part type="literal"#1>#2</bcf:part>\blx@nl} -\xdef\blx@xml@sorting#1#2{% - ~~<bcf:sorting#1>\blx@nl% - #2% - ~~</bcf:sorting>\blx@nl} +\xdef\blx@xml@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"}>% + ~~<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 + ~~<bcf:sortexclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl #2% - ~~~~</bcf:sortexclusion>\blx@nl} + ~~</bcf:sortexclusion>\blx@nl} \xdef\blx@xml@exclude#1{% - ~~~~~~<bcf:exclusion>#1</bcf:exclusion>\blx@nl} + ~~~~<bcf:exclusion>#1</bcf:exclusion>\blx@nl} \xdef\blx@xml@sortinclude#1#2{% - ~~~~<bcf:sortinclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl + ~~<bcf:sortinclusion\noexpand\ifblank{#1}{}{ type="#1"}>\blx@nl #2% - ~~~~</bcf:sortinclusion>\blx@nl} + ~~</bcf:sortinclusion>\blx@nl} \xdef\blx@xml@include#1{% - ~~~~~~<bcf:inclusion>#1</bcf:inclusion>\blx@nl} + ~~~~<bcf:inclusion>#1</bcf:inclusion>\blx@nl} \xdef\blx@xml@sort#1#2{% ~~~~<bcf:sort #1>\blx@nl #2% @@ -10495,17 +10779,24 @@ \xdef\blx@xml@endsection{% ~~</bcf:section>} -\xdef\blx@xml@slist#1#2#3#4#5#6#7#8{% - ~~<bcf:sortlist section="#3" name="#1" type="#2" sortscheme="#4" - sortnamekeyscheme="#5" labelprefix="#6">\blx@nl - #8% - #7% - ~~</bcf:sortlist>\blx@nl} -\xdef\blx@xml@slistfilterorbegin{% +\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@slistfilterorend{% +\xdef\blx@xml@dlistfilterorend{% ~~~~</bcf:filteror>\blx@nl} -\xdef\blx@xml@slistfilter#1#2{% +\xdef\blx@xml@dlistfilter#1#2{% ~~~~<bcf:filter type="#1">#2</bcf:filter>\blx@nl} \xdef\blx@xml@bibdata#1#2{% @@ -10560,7 +10851,8 @@ \blx@xml@toggle{singletitle}% \blx@xml@svalue{sortalphaothers}{\sortalphaothers}% \blx@xml@svalue{sortlocale}{\blx@sortlocale}% - \blx@xml@svalue{sortscheme}{\blx@sorting}% + \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}% @@ -10729,68 +11021,56 @@ {}}}} {}% % labelalpha name template - \eappto\blx@tempa{% - \blx@xml@comment{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@lantem@type + \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}}% - }% - }% + \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}% - }% - }% + \csuse{blx@inherit@data}}}% % noinit \ifcsdef{blx@noinit} {\eappto\blx@tempa{% \blx@xml@comment{NOINIT}% \blx@xml@noinits{% - \csuse{blx@noinit}% - }% - }} + \csuse{blx@noinit}}}}% {}% % nolabel \ifcsdef{blx@nolabel} {\eappto\blx@tempa{% \blx@xml@comment{NOLABEL}% \blx@xml@nolabels{% - \csuse{blx@nolabel}% - }% - }} + \csuse{blx@nolabel}}}}% {}% % nolabel \ifcsdef{blx@nolabelwidthcount} {\eappto\blx@tempa{% \blx@xml@comment{NOLABELWIDTHCOUNT}% \blx@xml@nolabelwidthcounts{% - \csuse{blx@nolabelwidthcount}% - }% - }} + \csuse{blx@nolabelwidthcount}}}}% {}% % nosort \ifcsdef{blx@nosort} {\eappto\blx@tempa{% \blx@xml@comment{NOSORT}% \blx@xml@nosorts{% - \csuse{blx@nosort}% - }% - }} + \csuse{blx@nosort}}}}% {}% % transliteration \ifdefempty\blx@translits @@ -10800,16 +11080,18 @@ \eappto\blx@tempa{\blx@xml@transliteration{##1}{\csuse{blx@translit@##1}}}}% \dolistloop\blx@translits}% % uniquenametemplate - \eappto\blx@tempa{\blx@xml@comment{UNIQUENAME TEMPLATE}}% - \eappto\blx@tempa{\blx@xml@uniquenametemplate{\blx@uniquenametemplate}}% - % sortingnamekey - \eappto\blx@tempa{\blx@xml@comment{SORTING NAME KEY}}% + \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@sortingnamekey{##1}{% - \csuse{blx@sortingnamekey@##1}}}}% - \dolistloop\blx@sortingnamekeyspecs - % sorting + \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}}% @@ -10817,14 +11099,9 @@ \abx@doentrytypes \do{*}% entrytype wildcard \eappto\blx@tempa{% - \blx@xml@comment{SORTING}% - \blx@xml@sorting{}{% - \blx@bcf@presort - \blx@bcf@exclude - \blx@bcf@include - \csuse{blx@sorting@\blx@sorting}% - }% - }% + \blx@bcf@presort + \blx@bcf@exclude + \blx@bcf@include}% % datamodel \eappto\blx@tempa{% \blx@xml@comment{DATA MODEL}% @@ -10856,9 +11133,18 @@ \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 - \csuse{blx@slists}% + \blx@xml@comment{SORTING TEMPLATES}% + \csuse{blx@sortingtemplates}% + \blx@xml@comment{DATALISTS}% + \csuse{blx@dlists}% \blx@xml@endfile}% \immediate\closeout\blx@bcfout}} @@ -11147,29 +11433,25 @@ \define@key{blx@sourcemap@step}{replace}{% characters \eappto\blx@tempf{ map\string_replace="#1"}} -% [<entrytype>]{<spec>} +% [<specname>]{<spec>} \newrobustcmd*{\DeclareLabelalphaNameTemplate}[2][]{% - \ifblank{#1} - {\blx@lantem{#2}{global}} - {\forcsvlist{\blx@lantem{#2}}{#1}}} -\@onlypreamble\DeclareLabelalphaNameTemplate -\blx@collectopts{xml}{blx@globalopts}{labelalphanametemplate}% for passing to the .bcf -\blx@collectopts{xml}{blx@typeopts}{labelalphanametemplate}% for passing to the .bcf - -\def\blx@lantem#1#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@ - #1% - \ifdef\blx@lantem@type - {\ifinlist{#2}\blx@lantem@type - {\global\cslet{blx@labelalphanametemplate@#2}\blx@tempa} - {\listgadd\blx@lantem@type{#2}% - \global\cslet{blx@labelalphanametemplate@#2}\blx@tempa}} - {\listgadd\blx@lantem@type{#2}% - \global\cslet{blx@labelalphanametemplate@#2}\blx@tempa}% + #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 @@ -11250,23 +11532,6 @@ \eappto\blx@tempb{% \blx@xml@labelalpha@part{\blx@tempc}{#2}}} -% Legacy options moved to \namepart in \DeclareLabelalphaNameTemplate -\define@key{blx@latem@field}{compound}{% deprecated - \blx@warning@noline{% - Ignored 'compound' option to \string\field\space in \string\DeclareLabelalphaNameTemplate\MessageBreak - This is now the 'compound' option of \string\namepart\space in\MessageBreak - \string\DeclareLabelalphaNameTemplate}} -\define@key{blx@latem@field}{pcompound}{% deprecated - \blx@warning@noline{% - Ignored 'pcompound' option to \string\field\space in \string\DeclareLabelalphaNameTemplate\MessageBreak - This is now the 'compound' option of \string\namepart\space in\MessageBreak - \string\DeclareLabelalphaNameTemplate}} -\define@key{blx@latem@field}{pstrwidth}{% deprecated - \blx@warning@noline{% - Ignored 'pstrwidth' option to \string\field\space in \string\DeclareLabelalphaNameTemplate\MessageBreak - This is now the 'strwidth' option of \string\namepart\space in\MessageBreak - \string\DeclareLabelalphaNameTemplate}} - \define@key{blx@latem@field}{uppercase}[true]{% true|false \ifstrequal{#1}{true} {\appto\blx@tempc{ uppercase="1"}} @@ -11426,16 +11691,16 @@ \@onlypreamble\DeclareBiblistFilter \newcommand*{\blx@biblistfilteror}[1]{% - \eappto\blx@tempa{\blx@xml@slistfilterorbegin}% + \eappto\blx@tempa{\blx@xml@dlistfilterorbegin}% #1% - \eappto\blx@tempa{\blx@xml@slistfilterorend}} + \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@slistfilter{\blx@tempc}{\blx@tempd}}} + \blx@xml@dlistfilter{\blx@tempc}{\blx@tempd}}} \define@key{blx@biblistfilter@filter}{type}{% \def\blx@tempc{#1}} @@ -11468,17 +11733,25 @@ \eappto\blx@tempb{% \blx@xml@translit{#1}{#2}{#3}}} -% {<spec>} -\newrobustcmd*{\DeclareUniquenameTemplate}[1]{% +% [<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@ - #1% - \global\let\blx@uniquenametemplate\blx@tempa + #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 @@ -11500,8 +11773,11 @@ {\appto\blx@tempc{ base="1"}} {}} -% [<specname>]{<spec>} -\newrobustcmd*{\DeclareSortingNamekeyScheme}[2][]{% +\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 @@ -11512,19 +11788,23 @@ \let\blx@tempa\@empty \blx@tempcnta\z@ #2% - \global\cslet{blx@sortingnamekey@\blx@snkname}\blx@tempa - \xifinlist\blx@snkname\blx@sortingnamekeyspecs + \global\cslet{blx@sortingnamekeytemplate@\blx@snkname}\blx@tempa + \xifinlist\blx@snkname\blx@sortingnamekeytemplates {} - {\listxadd\blx@sortingnamekeyspecs\blx@snkname}% + {\listxadd\blx@sortingnamekeytemplates\blx@snkname}% \endgroup} -\@onlypreamble\DeclareSortingNamekeyScheme -\blx@collectopts{xml}{blx@globalopts}{sortingnamekey}% for passing to the .bcf -\DeclareEntryOption[string]{sortnamekeyscheme}{% - \def\blx@refcontext@sortingnamekey{#1}} - -% User-mode macro for checking sorting name key scheme -\def\ifsortnamekeyscheme#1{% - \expandafter\ifstrequal\expandafter{\blx@refcontext@sortingnamekey}{#1}} +\@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 @@ -11562,8 +11842,8 @@ {\appto\blx@tempc{ inits="1"}} {\appto\blx@tempc{ inits="0"}}} -% {<name>}{<spec>} -\newrobustcmd*{\DeclareSortingScheme}[3][]{% +% [options]{<templatename>}{<template>} +\newrobustcmd*{\DeclareSortingTemplate}[3][]{% \ifblank{#1} {} {\setkeys{blx@sortdef@sorting}{#1}% @@ -11584,10 +11864,10 @@ \blx@tempcnta\z@ \let\blx@tempa\@empty #3% - \global\cslet{blx@sorting@#2}\blx@tempa + \global\cslet{blx@sortingtemplate@#2}\blx@tempa \endgroup} -\@onlypreamble\DeclareSortingScheme -\blx@collectopts{xml}{blx@globalopts}{sortscheme}% for passing to the .bcf +\@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}} @@ -11656,7 +11936,6 @@ \blx@xml@sortitem{order="\the\blx@tempcntb"}{\blx@tempe}}} % [<type,type,...>]{<string>} - \newrobustcmd*{\DeclarePresort}[2][]{% \begingroup \blx@xmlsanitizeafter{\def\blx@tempa}{#2}% @@ -11714,6 +11993,29 @@ \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 @@ -11747,10 +12049,6 @@ \blx@collectopts{xml}{blx@globalopts}{labeltitlespec}% for passing to the .bcf \blx@collectopts{xml}{blx@typeopts}{labeltitlespec}% for passing to the .bcf -\newrobustcmd*{\DeclareLabelyear}[2][]{% - \blx@warning@noline{% - 'DeclareLabelyear' is deprecated, please use 'DeclareLabeldate'}} - \newrobustcmd*{\DeclareLabeldate}[2][]{% \begingroup \let\blx@tempa\@empty @@ -11914,21 +12212,29 @@ \settoggle{blx@safeinputenc}{#1}} \newtoggle{blx@safeinputenc} -\DeclareBibliographyOption[string]{sorting}{% +% 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@sorting{#1}} + \def\blx@refcontext@sortingtemplatename{#1}} +\blx@collectopts{string}{blx@globalopts}{sortingtemplatename}% for passing to the .bcf \AtEndPreamble{% - \ifcsdef{blx@sorting@\blx@sorting} + \ifcsdef{blx@sortingtemplate@\blx@sorting} {} {\blx@err@invopt{sorting=\blx@sorting}{}% \def\blx@sorting{nty}% - \def\blx@refcontext@sorting{nty}}% - \listxadd\blx@sortschemes\blx@sorting - \def\blx@refcontext@sortingnamekey{global}% - \let\blx@refcontext@labelprefix\@empty - \xdef\blx@refcontext@context{\blx@refcontext@sorting/\blx@refcontext@sortingnamekey/\blx@refcontext@labelprefix}% - \listxadd\blx@refcontexts\blx@refcontext@context} + \def\blx@refcontext@sortingtemplatename{nty}}% + \listxadd\blx@sortingtemplatenames\blx@sorting + \def\blx@refcontext@sortingnamekeytemplatename{global}% + \let\blx@refcontext@labelprefix\@empty + \def\blx@refcontext@uniquenametemplatename{global}% + \def\blx@refcontext@labelalphanametemplatename{global}% + \xdef\blx@refcontext@context{\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}} @@ -11936,10 +12242,6 @@ \DeclareBibliographyOption[boolean]{sortupper}[true]{% \settoggle{blx@sortupper}{#1}} -\DeclareBibliographyOption[string]{sortlos}{% - \blx@warning@noline{% - sortlos option is deprecated, use 'sorting' option to \string\printbiblist}} - \DeclareBibliographyOption[integer]{maxnames}{% \numdef\blx@maxcitenames{#1}% \numdef\blx@maxbibnames{#1}} @@ -12082,22 +12384,6 @@ #3=#4} {}} -% Legacy for giveninits -\DeclareBibliographyOption[boolean]{firstinits}[true]{% - \blx@warning@noline{% - 'firstinits' option is deprecated, use 'giveninits' instead}% - \settoggle{abx@bool@giveninits}{#1}} - -% Legacy for sortfirstinits/sortgiveninits -\DeclareBibliographyOption[boolean]{sortfirstinits}[true]{% - \blx@warning@noline{% - 'sortfirstinits' option is deprecated, use 'inits' option\MessageBreak - to \string\namepart\space in \string\DeclareSortingNamekeyScheme}} -\DeclareBibliographyOption[boolean]{sortgiveninits}{% - \blx@warning@noline{% - 'sortgiveninits' option is deprecated, use 'inits' option\MessageBreak - to \string\namepart\space in \string\DeclareSortingNamekeyScheme}} - \DeclareBibliographyOption[boolean]{terseinits}[true]{% \ifstrequal{#1}{true} {\toggletrue{blx@terseinits} @@ -12159,11 +12445,6 @@ \DeclareBibliographyOption[boolean]{clearlang}[true]{% \settoggle{blx@clearlang}{#1}} -\DeclareBibliographyOption[string]{babel}{% - \blx@warning@noline{% - 'babel' option is deprecated, use 'autolang' instead}% - \blx@autolang@i{#1}} - \DeclareBibliographyOption[string]{autolang}{% \blx@autolang@i{#1}} @@ -12226,6 +12507,9 @@ {\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}} @@ -12233,6 +12517,35 @@ \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} @@ -12526,7 +12839,7 @@ test {\ifstrequal{#1}{false}}} {\blx@warning@noline{% 'labeldate' option used to determine whether to provide label date fields and\MessageBreak - extrayear field is renamed to 'labeldateparts', setting this instead. This option is + 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} @@ -12551,11 +12864,6 @@ \protected\def\blx@imc@printlabeldateextra{\csuse{mkbibrange#1extra}{label}}} {\blx@err@invopt{labeldate=#1}{}}}}} -\DeclareBibliographyOption[string]{datelabel}{% - \blx@warning@noline{% - 'datelabel' option is deprecated, use 'labeldate' instead}% - \setkeys{blx@opt@pre}{labeldate=#1}} - \DeclareBibliographyOption[string]{labeltime}{% \ifcsdef{mktimerange#1} {\def\blx@timeformat@labeltime{#1}% @@ -12771,15 +13079,6 @@ \DeclareTypeOption[boolean]{labeldateparts}[true]{% \settoggle{blx@labeldateparts}{#1}} -\DeclareBibliographyOption[boolean]{labelyear}[true]{% - \blx@warning@noline{% - 'labelyear' option is deprecated, use 'labeldateparts' instead}% - \settoggle{blx@labeldateparts}{#1}} -\DeclareTypeOption[boolean]{labelyear}[true]{% - \blx@warning@noline{% - 'labelyear' option is deprecated, use 'labeldateparts' instead}% - \settoggle{blx@labeldateparts}{#1}} - \DeclareBibliographyOption[boolean]{uniquelist}[true]{% \ifcsdef{blx@opt@uniquelist@#1} {\letcs\blx@uniquelist{blx@opt@uniquelist@#1}} @@ -12953,15 +13252,6 @@ \DeclareEntryOption[boolean]{skipbib}[true]{% \settoggle{blx@skipbib}{#1}} -\DeclareTypeOption[boolean]{skiplos}{% - \blx@warning@noline{% - skiplos option is deprecated, use 'skipbiblist' instead}% - \settoggle{blx@skipbiblist}{#1}} -\DeclareEntryOption[boolean]{skiplos}{% - \blx@warning@noline{% - skiplos option is deprecated, use 'skipbiblist' instead}% - \settoggle{blx@skipbiblist}{#1}} - \DeclareTypeOption[boolean]{skipbiblist}[true]{% \settoggle{blx@skipbiblist}{#1}} \DeclareEntryOption[boolean]{skipbiblist}[true]{% @@ -13192,7 +13482,6 @@ % Deferred last minute setup \AtBeginDocument{% - \blx@auxwrite\@mainaux{}{\string\abx@aux@sortscheme{\blx@sorting}}% \blx@auxwrite\@mainaux{}{\string\abx@aux@refcontext{\blx@refcontext@context}} \blx@checkencoding \if@filesw |