summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/biblatex/biblatex.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/biblatex/biblatex.sty')
-rw-r--r--Master/texmf-dist/tex/latex/biblatex/biblatex.sty1453
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&#2{%
\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