summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/biblatex/latex/biblatex.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/biblatex/latex/biblatex.sty')
-rw-r--r--macros/latex/contrib/biblatex/latex/biblatex.sty240
1 files changed, 179 insertions, 61 deletions
diff --git a/macros/latex/contrib/biblatex/latex/biblatex.sty b/macros/latex/contrib/biblatex/latex/biblatex.sty
index a006c5ecd2..316786d238 100644
--- a/macros/latex/contrib/biblatex/latex/biblatex.sty
+++ b/macros/latex/contrib/biblatex/latex/biblatex.sty
@@ -12,22 +12,23 @@
% particular purpose.
% Set up the version strings here
-\def\abx@date{2023/03/05}
-\def\abx@version{3.19}
+\def\abx@date{2024/03/21}
+\def\abx@version{3.20}
\def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/MW)}
\def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/MW)}
\def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/MW)}
\def\abx@cptid{\abx@date\space v\abx@version\space biblatex compatibility (PK/MW)}
+\def\abx@dmid{\abx@date\space v\abx@version\space biblatex datamodel (PK/MW)}
% This is not updated by build script as the control file version
% does not necessarily change with the package version.
% This is used when writing the .bcf
-\def\blx@bcfversion{3.10}
+\def\blx@bcfversion{3.11}
% This is not updated by build script as the bbl version
% does not necessarily change with the package version.
% This is used when checking the .bbl
-\def\blx@bblversion{3.2}
+\def\blx@bblversion{3.3}
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{biblatex}
@@ -340,21 +341,11 @@
\toggletrue{blx@tempa}%
% kernel definition
\patchcmd\addtocontents
- {\let\glossary\@gobble}
- {\let\glossary\@gobble
- \blx@contentssafe@citecommands}
+ {\let}
+ {\blx@contentssafe@citecommands
+ \let}
{}
- {\togglefalse{blx@tempa}}%
- % try tag.sto's definition
- \iftoggle{blx@tempa}
- {}
- {\patchcmd\addtocontents
- {\let\glossary\Gobble}
- {\let\glossary\Gobble
- \blx@contentssafe@citecommands}
- {}
- {% give up
- \blx@err@patch{\string\addtocontents}}}%
+ {\blx@err@patch{\string\addtocontents}}%
% patch footnote
\toggletrue{blx@tempa}%
\def\do#1{%
@@ -1003,6 +994,9 @@
% Used to track uniquename templates
\global\let\blx@untemplatespecs\@empty
+% Used to track namehash templates
+\global\let\blx@nhtemplatespecs\@empty
+
% Used to track labelalphaname templates
\global\let\blx@lantemplatespecs\@empty
@@ -1166,7 +1160,7 @@
\undef\blx@do
\undef\blx@done}
-% {<listmacro>}{<listcsname>} => matches in <listmacro>
+% {<listmacro>}{<listcsname>} => elements of <listmacro> that are in <listcsname>
\protected\def\blx@filter#1#2{%
\def\do##1{%
\ifinlistcs{##1}{#2}
@@ -1191,7 +1185,7 @@
{}}%
\blx@runfilter#1}
-% {<listmacro>}{<listcsname>} => neg. matches in <listmacro>
+% {<listmacro>}{<listcsname>} => elements of <listmacro> that are not in <listcsname>
\protected\def\blx@notfilter#1#2{%
\def\do##1{%
\ifinlistcs{##1}{#2}
@@ -6404,6 +6398,7 @@
\newrobustcmd*{\bibdateeraprefix}{\ifdef\textminus\textminus\textendash}
\newrobustcmd*{\bibdateeraendprefix}{\,\bibdateeraprefix}
\newrobustcmd*{\bibdatesep}{\hyphen}
+\newrobustcmd*{\bibdatendsep}{\hyphen}
\newrobustcmd*{\bibdaterangesep}{\bibrangedash}
% date+times
\newrobustcmd*{\bibdatetimesep}{\space}
@@ -6766,7 +6761,7 @@
{\blx@hook@initlang
\def\blx@endlang{%
\blx@hook@endlang
- \csname end\blx@thelangenv\endcsname
+ \expandafter\end\expandafter{\blx@thelangenv}%
\endgroup}%
\iftoggle{blx@autolangbib}
{\let\blx@endlangbib\blx@endlang}
@@ -6774,8 +6769,10 @@
\iftoggle{blx@autolangcite}
{\let\blx@endlangcite\blx@endlang}
{}%
- \csname\blx@thelangenv\expandafter\endcsname
- \expandafter{\abx@field@langid}}}
+ \expandafter\expandafter\expandafter\begin
+ \expandafter\expandafter\expandafter{%
+ \expandafter\blx@thelangenv\expandafter}%
+ \expandafter{\abx@field@langid}}}
{}}}
{}%
\def\blx@imc@mainlang{%
@@ -6843,8 +6840,8 @@
\blx@hook@endlang
% Polyglossia language envs are \<lang>[]
\ifcsstring{blx@thelangenv}{langname}
- {\csname end\abx@field@langid\endcsname}
- {\csname end\blx@thelangenv\endcsname}%
+ {\expandafter\end\expandafter{\abx@field@langid}}
+ {\expandafter\end\expandafter{\blx@thelangenv}}%
\endgroup}%
\iftoggle{blx@autolangbib}
{\let\blx@endlangbib\blx@endlang}
@@ -6854,11 +6851,15 @@
{}%
\ifcsstring{blx@thelangenv}{langname}
{\ifdef\abx@field@langidopts
- {\csname\abx@field@langid\expandafter\endcsname
- \expandafter[\abx@field@langidopts]}
- {\csname\abx@field@langid\endcsname}}
- {\csname\blx@thelangenv\expandafter\endcsname
- \expandafter{\abx@field@langid}}%
+ {\expandafter\expandafter\expandafter\begin
+ \expandafter\expandafter\expandafter{%
+ \expandafter\abx@field@langid\expandafter}%
+ \expandafter[\abx@field@langidopts]}
+ {\expandafter\begin\expandafter{\abx@field@langid}}}
+ {\expandafter\expandafter\expandafter\begin
+ \expandafter\expandafter\expandafter{%
+ \expandafter\blx@thelangenv\expandafter}%
+ \expandafter{\abx@field@langid}}%
\blx@beglang@spacefactors}}
{}}}
{}%
@@ -7162,11 +7163,11 @@
% this meta option is resolved by Biber
\blx@DeclareBackendOption{entry,namelist,name}[string]{nametemplates}
\gdef\blx@bcf@backendin@entry@nametemplates{sortingnamekeytemplatename,%
- uniquenametemplatename,labelalphanametemplatename}%
+ uniquenametemplatename,labelalphanametemplatename,namehashtemplatename}%
\gdef\blx@bcf@backendin@namelist@nametemplates{sortingnamekeytemplatename,%
- uniquenametemplatename,labelalphanametemplatename}%
+ uniquenametemplatename,labelalphanametemplatename,namehashtemplatename}%
\gdef\blx@bcf@backendin@name@nametemplates{sortingnamekeytemplatename,%
- uniquenametemplatename,labelalphanametemplatename}%
+ uniquenametemplatename,labelalphanametemplatename,namehashtemplatename}%
@@ -7250,6 +7251,7 @@
\def\do#1{%
\listxadd\blx@namepartmetafields{#1namehash}%
\listxadd\blx@namepartmetafields{#1fullhash}%
+ \listxadd\blx@namepartmetafields{#1fullhashraw}%
\listxadd\blx@namepartmetafields{#1bibnamehash}}
\abx@donameparts
@@ -7289,6 +7291,7 @@
\do{extratitleyear}%
\do{extradate}%
\do{fullhash}%
+ \do{fullhashraw}%
\do{labelalpha}%
\do{labelnumber}%
\do{labelprefix}%
@@ -8531,9 +8534,11 @@
% does not obey skipbib).
% Same as @entry@, but includes skipbib'd entries
% and set children
-%
-% {<entrykey>}{<entrytype>}{<options>}
-\protected\def\blx@bbl@entry#1#2#3{%
+
+% {<entrykey>}{<entrytype>}{<options>}{<citecount>}
+% citecount is just ignored as it's already calculated from actual cites
+% It's in the .bbl to force the .bbl to change when only the citecount changes.
+\protected\def\blx@bbl@entry#1#2#3#4{%
\begingroup
\edef\abx@field@entrykey{\detokenize{#1}}%
\blx@setoptions@type{#2}%
@@ -8767,7 +8772,8 @@
\csuse{blx@labelnumber@\the\c@refsection}+1}%
\edef\abx@field@localnumber{%
\csuse{blx@labelnumber@\the\c@refsection}}%
- \blx@bbl@fieldedef{labelnumber}{\abx@field@localnumber}}%
+ \blx@bbl@fieldedef{labelnumber}{\abx@field@localnumber}%
+ \blx@bbl@fieldedef{localnumber}{\abx@field@localnumber}}%
\iftoggle{blx@skipbib}
{}
{\blx@bbl@labelnumberwidth@numeric{}}}
@@ -9580,6 +9586,8 @@
\blx@key@bibnote{\blx@theprenote}{#1}}
\blx@kv@defkey{blx@bbc}{prenote}{%
\blx@key@bibnote{\blx@theprenote}{#1}}
+\blx@kv@defkey{blx@bhd}{prenote}{%
+ \blx@key@bibnote{\blx@theprenote}{#1}}
\let\blx@default@thepostnote\@empty
\blx@kv@defkey{blx@bibdefaults}{postnote}{%
@@ -9594,7 +9602,8 @@
\blx@key@bibnote{\blx@thepostnote}{#1}}
\blx@kv@defkey{blx@bbc}{postnote}{%
\blx@key@bibnote{\blx@thepostnote}{#1}}
-
+\blx@kv@defkey{blx@bhd}{postnote}{%
+ \blx@key@bibnote{\blx@thepostnote}{#1}}
\blx@kv@defkey{blx@bibdefaults}{locallabelwidth}{%
\blx@key@locallabelwidth{#1}}
@@ -9647,12 +9656,16 @@
\def\blx@printbibheading[#1]{%
\let\blx@theheading\blx@default@theheading
\let\blx@thetitle\blx@default@thetitle
+ \let\blx@theprenote\blx@default@theprenote
+ \let\blx@thepostnote\blx@default@thepostnote
\undef\blx@thelabel
\blx@safe@actives
\blx@kv@setkeys{blx@bhd}{#1}%
\blx@rest@actives
\blx@bibheading\blx@theheading\blx@thetitle
\blx@biblabel\blx@thelabel
+ \blx@bibnote\blx@theprenote
+ \blx@bibnote\blx@thepostnote
\endgroup}
% We use this to determine whether an explicit value for resetnumbers is passed to
@@ -9711,7 +9724,7 @@
{}
{\listxadd\blx@dlistnames{\blx@refcontext@context @\blx@tempe @entry}%
\xappto\blx@dlists{%
- \blx@xml@dlist{\blx@refcontext@context}{entry}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@refcontext@sortingtemplatename}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{}}}%
+ \blx@xml@dlist{\blx@refcontext@context}{entry}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@refcontext@sortingtemplatename}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}{\blx@refcontext@namehashtemplatename}}{}}}%
\ifdefvoid\blx@tempa
{\blx@warn@bibempty\endgroup}
{\blx@bibliography\blx@tempa}}
@@ -9876,7 +9889,8 @@
\blx@locallabelwidth@finish
\endgroup
\blx@bibnote\blx@thepostnote
- \endgroup}
+ \expandafter\endgroup\if@endpe\@doendpe\fi
+ \par}
\def\blx@bibheading#1#2{%
\begingroup
@@ -10144,7 +10158,8 @@
\blx@refcontext@sortingnamekeytemplatename/%
\blx@refcontext@labelprefix/%
\blx@refcontext@uniquenametemplatename/%
- \blx@refcontext@labelalphanametemplatename}%
+ \blx@refcontext@labelalphanametemplatename/%
+ \blx@refcontext@namehashtemplatename}%
\xifinlist\blx@tempc\blx@sortingtemplatenames
{}
{\listxadd\blx@sortingtemplatenames\blx@tempc}%
@@ -10175,7 +10190,7 @@
{}
{\listxadd\blx@dlistnames{\blx@refcontext@context @\blx@tempe @list}%
\xappto\blx@dlists{%
- \blx@xml@dlist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@tempc}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}}{\csuse{blx@biblistfilters@\blx@thebiblistfilter}}}}%
+ \blx@xml@dlist{\blx@refcontext@context}{list}{\blx@tempe}{\blx@xml@dlist@refcontext{\blx@tempc}{\blx@refcontext@sortingnamekeytemplatename}{\blx@refcontext@labelprefix@real}{\blx@refcontext@uniquenametemplatename}{\blx@refcontext@labelalphanametemplatename}{\blx@refcontext@namehashtemplatename}}{\csuse{blx@biblistfilters@\blx@thebiblistfilter}}}}%
\ifdefvoid\blx@tempa
{\blx@warn@biblistempty{#2}\endgroup}
{\blx@biblist\blx@tempa}}
@@ -10225,8 +10240,9 @@
\blx@locallabelwidth@finish
\endgroup
\blx@bibnote\blx@thepostnote
- \endgroup
- \if@restonecol\twocolumn\fi}
+ \expandafter\endgroup\if@endpe\@doendpe\fi
+ \if@restonecol\twocolumn\fi
+ \par}
% {<biblistname>}
\newrobustcmd*{\AtBeginBiblist}[1]{\csgappto{blx@hook@biblistinit@#1}}
@@ -10321,7 +10337,8 @@
\blx@refcontext@sortingnamekeytemplatename/%
\blx@refcontext@labelprefix/%
\blx@refcontext@uniquenametemplatename/%
- \blx@refcontext@labelalphanametemplatename}%
+ \blx@refcontext@labelalphanametemplatename/%
+ \blx@refcontext@namehashtemplatename}%
% Add the refcontext to the list of refcontexts so we can compare on next run
\xifinlist\blx@refcontext@context\blx@refcontexts
{}
@@ -10338,6 +10355,9 @@
{}%
\ifcsundef{blx@labelalphanametemplate@\blx@refcontext@labelalphanametemplatename}
{\blx@err@invopt{labelalphanametemplate=\blx@refcontext@labelalphanametemplatename}{}}
+ {}%
+ \ifcsundef{blx@namehashtemplate@\blx@refcontext@namehashtemplatename}
+ {\blx@err@invopt{namehashtemplate=\blx@refcontext@namehashtemplatename}{}}
{}}}
% Reset to global sorting etc. when we leave a ref context (since they can't be nested)
@@ -10349,12 +10369,14 @@
\gdef\blx@refcontext@sortingnamekeytemplatename{global}%
\gdef\blx@refcontext@uniquenametemplatename{global}%
\gdef\blx@refcontext@labelalphanametemplatename{global}%
+ \gdef\blx@refcontext@namehashtemplatename{global}%
\blx@xdef@refcontext{%
\blx@refcontext@sortingtemplatename/%
\blx@refcontext@sortingnamekeytemplatename/%
/%
\blx@refcontext@uniquenametemplatename/%
- \blx@refcontext@labelalphanametemplatename}}
+ \blx@refcontext@labelalphanametemplatename/%
+ \blx@refcontext@namehashtemplatename}}
% local version of \newrefcontext
\def\localrefcontext{%
@@ -10388,7 +10410,8 @@
\blx@refcontext@sortingnamekeytemplatename/%
\blx@refcontext@labelprefix/%
\blx@refcontext@uniquenametemplatename/%
- \blx@refcontext@labelalphanametemplatename}%
+ \blx@refcontext@labelalphanametemplatename/%
+ \blx@refcontext@namehashtemplatename}%
% Add the refcontext to the list of refcontexts so we can compare on next run
\xifinlist\blx@refcontext@context\blx@refcontexts
{}
@@ -10405,6 +10428,9 @@
{}%
\ifcsundef{blx@labelalphanametemplate@\blx@refcontext@labelalphanametemplatename}
{\blx@err@invopt{labelalphanametemplate=\blx@refcontext@labelalphanametemplatename}{}}
+ {}%
+ \ifcsundef{blx@namehashtemplate@\blx@refcontext@namehashtemplatename}
+ {\blx@err@invopt{namehashtemplate=\blx@refcontext@namehashtemplatename}{}}
{}}
\def\blx@gdef@or@def{\gdef}
@@ -10414,12 +10440,14 @@
\blx@kv@defkey{blx@refcontext}{nametemplates}{%
\blx@gdef@or@def\blx@refcontext@sortingnamekeytemplatename{#1}%
\blx@gdef@or@def\blx@refcontext@uniquenametemplatename{#1}%
- \blx@gdef@or@def\blx@refcontext@labelalphanametemplatename{#1}}
+ \blx@gdef@or@def\blx@refcontext@labelalphanametemplatename{#1}%
+ \blx@gdef@or@def\blx@refcontext@namehashtemplatename{#1}}
\blx@kv@defkey{blx@refcontext}{sorting}{\blx@gdef@or@def\blx@refcontext@sortingtemplatename{#1}}
\blx@kv@defkey{blx@refcontext}{sortingnamekeytemplatename}{\blx@gdef@or@def\blx@refcontext@sortingnamekeytemplatename{#1}}
\blx@kv@defkey{blx@refcontext}{uniquenametemplatename}{\blx@gdef@or@def\blx@refcontext@uniquenametemplatename{#1}}
\blx@kv@defkey{blx@refcontext}{labelalphanametemplatename}{\blx@gdef@or@def\blx@refcontext@labelalphanametemplatename{#1}}
+\blx@kv@defkey{blx@refcontext}{namehashtemplatename}{\blx@gdef@or@def\blx@refcontext@namehashtemplatename{#1}}
% labelprefix cannot be used as is because it is used to construct the internal
% refcontext name which is referenced/expanded a lot all over the place. So,
@@ -10451,12 +10479,13 @@
\let\blx@tempc\@empty%
\def\blx@tempd{global}%
\def\blx@tempe{global}%
+ \def\blx@tempg{global}%
\blx@kv@setkeys{blx@assignrefcontextmeta}{#2}%
\blx@kv@setkeys{blx@assignrefcontext}{#2}%
\def\do##1{%
\listxadd\blx@assignedrefcontextkeywlist{##1}%
\csxdef{blx@assignedrefcontextkeyws#1@\the\c@refsection @##1}%
- {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
+ {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe/\blx@tempg}}%
\docsvlist{#3}}
% [refcontext keys]{<category1>,<category2>,...}
@@ -10471,12 +10500,13 @@
\let\blx@tempc\@empty%
\def\blx@tempd{global}%
\def\blx@tempe{global}%
+ \def\blx@tempg{global}%
\blx@kv@setkeys{blx@assignrefcontextmeta}{#2}%
\blx@kv@setkeys{blx@assignrefcontext}{#2}%
\def\do##1{%
\listxadd\blx@assignedrefcontextcatlist{##1}%
\csxdef{blx@assignedrefcontextcats#1@\the\c@refsection @##1}%
- {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
+ {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe/\blx@tempg}}%
\docsvlist{#3}}
% [refcontext keys]{<entrykey1>,<entrykey2>,...}
@@ -10491,11 +10521,12 @@
\let\blx@tempc\@empty%
\def\blx@tempd{global}%
\def\blx@tempe{global}%
+ \def\blx@tempg{global}%
\blx@kv@setkeys{blx@assignrefcontextmeta}{#2}%
\blx@kv@setkeys{blx@assignrefcontext}{#2}%
\def\do##1{%
\csxdef{blx@assignedrefcontextkeys#1@\the\c@refsection @##1}%
- {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe}}%
+ {\blx@tempa/\blx@tempb/\blx@tempc/\blx@tempd/\blx@tempe/\blx@tempg}}%
\docsvlist{#3}}
% This makes sure that named refcontexts set options first
@@ -10513,18 +10544,21 @@
\blx@kv@defkey{blx@assignrefcontextmeta}{labelprefix}{}
\blx@kv@defkey{blx@assignrefcontextmeta}{uniquenametemplatename}{}
\blx@kv@defkey{blx@assignrefcontextmeta}{labelalphanametemplatename}{}
+\blx@kv@defkey{blx@assignrefcontextmeta}{namehashtemplatename}{}
% Meta option to set all name template options
\blx@kv@defkey{blx@assignrefcontext}{name}{}
\blx@kv@defkey{blx@assignrefcontext}{nametemplates}{%
\def\blx@tempb{#1}%
\def\blx@tempd{#1}%
- \def\blx@tempe{#1}}
+ \def\blx@tempe{#1}%
+ \def\blx@tempg{#1}}
\blx@kv@defkey{blx@assignrefcontext}{sorting}{\def\blx@tempa{#1}}
\blx@kv@defkey{blx@assignrefcontext}{sortingnamekeytemplatename}{\def\blx@tempb{#1}}
\blx@kv@defkey{blx@assignrefcontext}{labelprefix}{\edef\blx@tempc{\blx@mdfivesum{#1}}}
\blx@kv@defkey{blx@assignrefcontext}{uniquenametemplatename}{\def\blx@tempd{#1}}
\blx@kv@defkey{blx@assignrefcontext}{labelalphanametemplatename}{\def\blx@tempe{#1}}
+\blx@kv@defkey{blx@assignrefcontext}{namehashtemplatename}{\def\blx@tempg{#1}}
% Manually force a refcontext datalist in the .bcf
\newcommand*{\GenRefcontextData}[1]{%
@@ -10535,15 +10569,16 @@
\def\blx@tempe{global}%
\let\blx@tempf\blx@sorting%
\let\blx@tempg\@empty%
+ \def\blx@temph{global}%
\ifblank{#1}
{}
{\blx@kv@setkeys{blx@refcontextmanual}{#1}}%
- \def\blx@tempa{\blx@tempf/\blx@tempc/\blx@tempg/\blx@tempd/\blx@tempe}%
+ \def\blx@tempa{\blx@tempf/\blx@tempc/\blx@tempg/\blx@tempd/\blx@tempe/\blx@temph}%
\xifinlist{\blx@tempa @\blx@tempb @entry}\blx@dlistnames
{}
{\listxadd\blx@dlistnames{\blx@tempa @\blx@tempb @entry}%
\xappto\blx@dlists{%
- \blx@xml@dlist{\blx@tempa}{entry}{\blx@tempb}{\blx@xml@dlist@refcontext{\blx@tempf}{\blx@tempc}{\blx@tempg}{\blx@tempd}{\blx@tempe}}{}}}%
+ \blx@xml@dlist{\blx@tempa}{entry}{\blx@tempb}{\blx@xml@dlist@refcontext{\blx@tempf}{\blx@tempc}{\blx@tempg}{\blx@tempd}{\blx@tempe}{\blx@temph}}{}}}%
\endgroup}
% Meta option to set all name template options
@@ -10555,6 +10590,7 @@
\blx@kv@defkey{blx@refcontextmanual}{sortingnamekeytemplatename}{\def\blx@tempc{#1}}
\blx@kv@defkey{blx@refcontextmanual}{uniquenametemplatename}{\def\blx@tempd{#1}}
\blx@kv@defkey{blx@refcontextmanual}{labelalphanametemplatename}{\def\blx@tempe{#1}}
+\blx@kv@defkey{blx@refcontextmanual}{namehashtemplatename}{\def\blx@temph{#1}}
\blx@kv@defkey{blx@refcontextmanual}{labelprefix}{%
\def\blx@tempg{#1}%
\iftoggle{blx@defernumbers}
@@ -10575,6 +10611,8 @@
{}%
\gappto\blx@hook@refsection@next}
+\newrobustcmd*{\AtFollowingRefsections}{\gappto\blx@hook@refsection@following}
+
\newrobustcmd*{\newrefsection}{%
\endrefcontext
\ifnum\c@refsection>\z@
@@ -10608,6 +10646,7 @@
\stepcounter{blx@maxsection}%
\setcounter{refsection}{\value{blx@maxsection}}%
\csuse{blx@hook@refsectioninit}%
+ \csuse{blx@hook@refsection@following}%
\csuse{blx@hook@refsection@next}%
\xifinlist{\the\c@refsection}\blx@allrefsections
{}
@@ -10930,8 +10969,13 @@
{\noexpand\blx@refpatch@sect@memoir@i{\string#1}{#1}{#2}}
{}{\noexpand\blx@err@patch{\string\memsecstarinfo}}}
-\def\blx@refpatch@sect@memoir@i#1#2#3{%
- \ifstrequal{#1}{#2}{#3}{}}
+% we have to expand the section csname, because
+% memoir saves it in a helper macro
+\protected\def\blx@refpatch@sect@memoir@i#1#2#3{%
+ \begingroup
+ \edef\blx@tempa{\endgroup
+ \noexpand\ifstrequal{#1}{#2}}%
+ \blx@tempa{#3}{}}
% The standard classes have \@startsection, \@sect and \@ssect.
% \@startsection is used by unstarred and starred sections alike
@@ -11512,7 +11556,7 @@
% refcontext defined
\ifcsdef{blx@assignedrefcontextbib@aux@\the\c@refsection @#1}
{\letcs\blx@refcontext@context{blx@assignedrefcontextbib@aux@\the\c@refsection @#1}}
- {\blx@edef@refcontext{\blx@sorting/global//global/global}}%
+ {\blx@edef@refcontext{\blx@sorting/global//global/global/global}}%
% assignment via keyword list
\ifdef\blx@assignedrefcontextkeywlist
{\def\do##1{%
@@ -13346,6 +13390,14 @@
\xdef\blx@xml@uniquenametemplatenamepart#1#2#3{%
~~~~<bcf:namepart #1#2>#3</bcf:namepart>\blx@nl}
+\xdef\blx@xml@namehashtemplate#1#2{%
+ ~~<bcf:namehashtemplate name="#1">\blx@nl%
+ #2%
+ ~~</bcf:namehashtemplate>\blx@nl}
+
+\xdef\blx@xml@namehashtemplatenamepart#1#2#3{%
+ ~~~~<bcf:namepart #1#2>#3</bcf:namepart>\blx@nl}
+
\xdef\blx@xml@sortingnamekeytemplate#1#2#3{%
~~<bcf:sortingnamekeytemplate name="#1" visibility="#2">\blx@nl%
#3%
@@ -13393,12 +13445,13 @@
\xdef\blx@xml@endsection{%
~~</bcf:section>}
-\xdef\blx@xml@dlist@refcontext#1#2#3#4#5{%
+\xdef\blx@xml@dlist@refcontext#1#2#3#4#5#6{%
~~~~~~~~~~~~~~~~sortingtemplatename="#1"\blx@nl
~~~~~~~~~~~~~~~~sortingnamekeytemplatename="#2"\blx@nl
~~~~~~~~~~~~~~~~labelprefix="#3"\blx@nl
~~~~~~~~~~~~~~~~uniquenametemplatename="#4"\blx@nl
- ~~~~~~~~~~~~~~~~labelalphanametemplatename="#5"}
+ ~~~~~~~~~~~~~~~~labelalphanametemplatename="#5"\blx@nl
+ ~~~~~~~~~~~~~~~~namehashtemplatename="#6"}
\xdef\blx@xml@dlist#1#2#3#4#5{%
~~<bcf:datalist section="#3"\blx@nl
~~~~~~~~~~~~~~~~name="#1"\blx@nl
@@ -13731,6 +13784,12 @@
\eappto\blx@tempa{%
\blx@xml@uniquenametemplate{##1}{\csuse{blx@uniquenametemplate@##1}}}}%
\dolistloop\blx@untemplatespecs
+ % namehashtemplate
+ \eappto\blx@tempa{\blx@xml@comment{NAME HASH TEMPLATES}}%
+ \def\do##1{%
+ \eappto\blx@tempa{%
+ \blx@xml@namehashtemplate{##1}{\csuse{blx@namehashtemplate@##1}}}}%
+ \dolistloop\blx@nhtemplatespecs
% sortingnamekeytemplate
\eappto\blx@tempa{\blx@xml@comment{SORTING NAME KEY TEMPLATES}}%
\def\do##1{%
@@ -14151,6 +14210,11 @@
\def\blx@refcontext@labelalphanametemplatename{#1}}
\newcommand*{\blx@lantem@namepart}[2][]{%
+ \ifinlist{#2}\blx@datamodel@constants@nameparts@l
+ {}
+ {\blx@error
+ {Invalid namepart '#2'}
+ {Namepart '#2' in labelalphaname template declaration '\blx@lantname' is not defined in the data model}}%
\advance\blx@tempcntb\@ne
\edef\blx@tempe{order="\the\blx@tempcntb"}%
\let\blx@tempc\@empty
@@ -14463,6 +14527,11 @@
\def\blx@refcontext@uniquenametemplatename{#1}}
\newcommand*{\blx@untemp@namepart}[2][]{%
+ \ifinlist{#2}\blx@datamodel@constants@nameparts@l
+ {}
+ {\blx@error
+ {Invalid namepart '#2'}
+ {Namepart '#2' in uniquename template declaration '\blx@untname' is not defined in the data model}}%
\advance\blx@tempcntb\@ne
\edef\blx@tempe{order="\the\blx@tempcntb"}%
\let\blx@tempc\@empty
@@ -14485,6 +14554,43 @@
\blx@kv@defkey{blx@untemp@namepart}{disambiguation}{% disambiguation option for namepart none|inits|full|fullonly
\appto\blx@tempc{ disambiguation="#1"}}
+% [<specname>]{<spec>}
+\newrobustcmd*{\DeclareNamehashTemplate}[2][]{%
+ \begingroup
+ \ifblank{#1}
+ {\def\blx@nhtname{global}}% default
+ {\def\blx@nhtname{#1}}%
+ \let\namepart\blx@nhtemp@namepart
+ \let\blx@tempa\@empty
+ \blx@tempcnta\z@
+ #2%
+ \global\cslet{blx@namehashtemplate@\blx@nhtname}\blx@tempa
+ \xifinlist\blx@nhtname\blx@nhtemplatespecs
+ {}
+ {\listxadd\blx@nhtemplatespecs\blx@nhtname}%
+ \endgroup}
+\@onlypreamble\DeclareNamehashTemplate
+\blx@DeclareBackendOption{global}[xml]{namehashtemplate}
+\DeclareBiblatexOption{entry,namelist,name}[string]{namehashtemplatename}{%
+ \def\blx@refcontext@namehashtemplatename{#1}}
+
+\newcommand*{\blx@nhtemp@namepart}[2][]{%
+ \ifinlist{#2}\blx@datamodel@constants@nameparts@l
+ {}
+ {\blx@error
+ {Invalid namepart '#2'}
+ {Namepart '#2' in name hash template declaration '\blx@nhtname' is not defined in the data model}}%
+ \advance\blx@tempcntb\@ne
+ \edef\blx@tempe{order="\the\blx@tempcntb"}%
+ \let\blx@tempc\@empty
+ \ifblank{#1}
+ {}
+ {\blx@kv@setkeys{blx@nhtemp@namepart}{#1}}%
+ \eappto\blx@tempa{%
+ \blx@xml@namehashtemplatenamepart{\blx@tempe}{\blx@tempc}{#2}}}
+
+\blx@kv@defkey{blx@nhtemp@namepart}{hashscope}{\def\blx@tempc{ hashscope="#1"}}
+
% [<templatename>]{<template>}
\newrobustcmd*{\DeclareSortingNamekeyTemplate}[2][]{%
\begingroup
@@ -14514,6 +14620,8 @@
\expandafter\ifstrequal\expandafter{\blx@refcontext@uniquenametemplatename}{#1}}
\def\iflabelalphanametemplatename#1{%
\expandafter\ifstrequal\expandafter{\blx@refcontext@labelalphanametemplatename}{#1}}
+\def\ifnamehashtemplatename#1{%
+ \expandafter\ifstrequal\expandafter{\blx@refcontext@namehashtemplatename}{#1}}
\def\ifsortingnamekeytemplatename#1{%
\expandafter\ifstrequal\expandafter{\blx@refcontext@sortingnamekeytemplatename}{#1}}
@@ -14841,7 +14949,6 @@
%% Package options
% [<entrytype,entrytype,...>]{<options>}
-
\newrobustcmd*{\ExecuteBibliographyOptions}[2][]{%
\ifblank{#1}
{\blx@kv@setkeys{blx@opt@pre}{#2}}
@@ -14974,12 +15081,14 @@
\let\blx@refcontext@labelprefix@real\@empty
\def\blx@refcontext@uniquenametemplatename{global}%
\def\blx@refcontext@labelalphanametemplatename{global}%
+ \def\blx@refcontext@namehashtemplatename{global}%
\blx@xdef@refcontext{%
\blx@refcontext@sortingtemplatename/%
\blx@refcontext@sortingnamekeytemplatename/%
\blx@refcontext@labelprefix/%
\blx@refcontext@uniquenametemplatename/%
- \blx@refcontext@labelalphanametemplatename}%
+ \blx@refcontext@labelalphanametemplatename/%
+ \blx@refcontext@namehashtemplatename}%
\listxadd\blx@refcontexts\blx@refcontext@context}
\DeclareBibliographyOption[boolean]{sortcase}[true]{%
@@ -15868,6 +15977,8 @@
\def\blx@opt@uniquename@allfull{allfull}
\def\blx@opt@uniquename@mininit{mininit}
\def\blx@opt@uniquename@minfull{minfull}
+\def\blx@opt@uniquename@minyearinit{minyearinit}
+\def\blx@opt@uniquename@minyearfull{minyearfull}
\blx@DeclareBackendOption{entry,namelist,name}[string]{uniquename}
@@ -16244,6 +16355,12 @@
Setting 'uniquename=allinit}%
\blx@kv@setkeys{blx@opt@pre}{uniquename=allinit}}
{}%
+ \ifdefstrequal\blx@uniquename\blx@opt@uniquename@minyearfull
+ {\blx@warn@conflopt{%
+ '<namepart>inits' conflicts with 'uniquename=minyearfull'.\MessageBreak
+ Setting 'uniquename=minyearinit}%
+ \blx@kv@setkeys{blx@opt@pre}{uniquename=minyearinit}}
+ {}
\ifdefstrequal\blx@uniquename\blx@opt@uniquename@minfull
{\blx@warn@conflopt{%
'<namepart>inits' conflicts with 'uniquename=minfull'.\MessageBreak
@@ -16357,6 +16474,7 @@
\blx@bblinput
\setcounter{blx@maxsection}{0}%
\csuse{blx@hook@refsectioninit}%
+ \csuse{blx@hook@refsection@following}%
\csuse{blx@hook@refsection@next}%
\csuse{abx@preamble}%
\blx@inf@refsec