diff options
Diffstat (limited to 'macros/latex/contrib/biblatex/latex/biblatex.sty')
-rw-r--r-- | macros/latex/contrib/biblatex/latex/biblatex.sty | 240 |
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 |