From 8ff328d8d6a3cf9e4ce34a6cd1ee676afe63be33 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 4 Nov 2017 21:10:04 +0000 Subject: biblatex (4nov17) git-svn-id: svn://tug.org/texlive/trunk@45690 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/biblatex/bbx/alphabetic.bbx | 19 +- .../tex/latex/biblatex/bbx/authortitle.bbx | 10 +- .../tex/latex/biblatex/bbx/authoryear.bbx | 112 +- Master/texmf-dist/tex/latex/biblatex/bbx/draft.bbx | 2 +- .../texmf-dist/tex/latex/biblatex/bbx/numeric.bbx | 6 +- .../texmf-dist/tex/latex/biblatex/bbx/standard.bbx | 22 +- Master/texmf-dist/tex/latex/biblatex/biblatex.def | 428 +++--- Master/texmf-dist/tex/latex/biblatex/biblatex.sty | 1453 ++++++++++++-------- .../texmf-dist/tex/latex/biblatex/blx-bibtex.def | 23 +- .../texmf-dist/tex/latex/biblatex/blx-compat.def | 222 ++- Master/texmf-dist/tex/latex/biblatex/blx-dm.def | 414 ++---- .../tex/latex/biblatex/cbx/alphabetic-verb.cbx | 9 +- .../tex/latex/biblatex/cbx/alphabetic.cbx | 14 +- .../tex/latex/biblatex/cbx/authortitle-comp.cbx | 16 +- .../tex/latex/biblatex/cbx/authortitle-ibid.cbx | 16 +- .../tex/latex/biblatex/cbx/authortitle-icomp.cbx | 32 +- .../tex/latex/biblatex/cbx/authortitle-tcomp.cbx | 36 +- .../tex/latex/biblatex/cbx/authortitle-terse.cbx | 22 +- .../tex/latex/biblatex/cbx/authortitle-ticomp.cbx | 58 +- .../tex/latex/biblatex/cbx/authortitle.cbx | 16 +- .../tex/latex/biblatex/cbx/authoryear-comp.cbx | 70 +- .../tex/latex/biblatex/cbx/authoryear-ibid.cbx | 45 +- .../tex/latex/biblatex/cbx/authoryear-icomp.cbx | 72 +- .../tex/latex/biblatex/cbx/authoryear.cbx | 43 +- .../tex/latex/biblatex/cbx/numeric-comp.cbx | 6 +- .../texmf-dist/tex/latex/biblatex/cbx/numeric.cbx | 11 +- .../tex/latex/biblatex/cbx/verbose-ibid.cbx | 10 +- .../tex/latex/biblatex/cbx/verbose-inote.cbx | 10 +- .../tex/latex/biblatex/cbx/verbose-note.cbx | 10 +- .../tex/latex/biblatex/cbx/verbose-trad1.cbx | 10 +- .../tex/latex/biblatex/cbx/verbose-trad2.cbx | 8 +- .../tex/latex/biblatex/cbx/verbose-trad3.cbx | 18 +- .../tex/latex/biblatex/lbx/brazilian.lbx | 192 +-- .../texmf-dist/tex/latex/biblatex/lbx/british.lbx | 7 +- .../tex/latex/biblatex/lbx/bulgarian.lbx | 593 ++++++++ .../texmf-dist/tex/latex/biblatex/lbx/catalan.lbx | 33 +- .../texmf-dist/tex/latex/biblatex/lbx/croatian.lbx | 25 +- Master/texmf-dist/tex/latex/biblatex/lbx/czech.lbx | 29 +- .../texmf-dist/tex/latex/biblatex/lbx/danish.lbx | 25 +- Master/texmf-dist/tex/latex/biblatex/lbx/dutch.lbx | 39 +- .../texmf-dist/tex/latex/biblatex/lbx/english.lbx | 37 +- .../texmf-dist/tex/latex/biblatex/lbx/estonian.lbx | 275 ++-- .../texmf-dist/tex/latex/biblatex/lbx/finnish.lbx | 35 +- .../texmf-dist/tex/latex/biblatex/lbx/french.lbx | 130 +- .../texmf-dist/tex/latex/biblatex/lbx/galician.lbx | 527 +++++++ .../texmf-dist/tex/latex/biblatex/lbx/german.lbx | 41 +- Master/texmf-dist/tex/latex/biblatex/lbx/greek.lbx | 23 +- .../tex/latex/biblatex/lbx/icelandic.lbx | 25 +- .../texmf-dist/tex/latex/biblatex/lbx/italian.lbx | 25 +- .../tex/latex/biblatex/lbx/naustrian.lbx | 2 + .../texmf-dist/tex/latex/biblatex/lbx/ngerman.lbx | 2 + Master/texmf-dist/tex/latex/biblatex/lbx/norsk.lbx | 525 ++++++- .../tex/latex/biblatex/lbx/norwegian.lbx | 502 ------- .../tex/latex/biblatex/lbx/nswissgerman.lbx | 4 +- .../texmf-dist/tex/latex/biblatex/lbx/nynorsk.lbx | 42 +- .../texmf-dist/tex/latex/biblatex/lbx/polish.lbx | 19 + .../tex/latex/biblatex/lbx/portuguese.lbx | 128 +- .../texmf-dist/tex/latex/biblatex/lbx/russian.lbx | 23 +- .../texmf-dist/tex/latex/biblatex/lbx/slovak.lbx | 37 +- .../texmf-dist/tex/latex/biblatex/lbx/slovene.lbx | 39 +- .../tex/latex/biblatex/lbx/slovenian.lbx | 7 + .../texmf-dist/tex/latex/biblatex/lbx/spanish.lbx | 49 +- .../texmf-dist/tex/latex/biblatex/lbx/swedish.lbx | 25 +- .../tex/latex/biblatex/lbx/swissgerman.lbx | 2 +- .../tex/latex/biblatex/lbx/ukrainian.lbx | 595 ++++++++ 65 files changed, 4926 insertions(+), 2379 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/biblatex/lbx/bulgarian.lbx create mode 100644 Master/texmf-dist/tex/latex/biblatex/lbx/galician.lbx delete mode 100644 Master/texmf-dist/tex/latex/biblatex/lbx/norwegian.lbx create mode 100644 Master/texmf-dist/tex/latex/biblatex/lbx/slovenian.lbx create mode 100644 Master/texmf-dist/tex/latex/biblatex/lbx/ukrainian.lbx (limited to 'Master/texmf-dist/tex/latex/biblatex') diff --git a/Master/texmf-dist/tex/latex/biblatex/bbx/alphabetic.bbx b/Master/texmf-dist/tex/latex/biblatex/bbx/alphabetic.bbx index 06d91ba6c07..8a41db44fa8 100644 --- a/Master/texmf-dist/tex/latex/biblatex/bbx/alphabetic.bbx +++ b/Master/texmf-dist/tex/latex/biblatex/bbx/alphabetic.bbx @@ -4,10 +4,16 @@ \RequireBibliographyStyle{standard} \ExecuteBibliographyOptions{labelalpha,sorting=anyt} +\providebool{bbx:subentry} + +\DeclareBibliographyOption[boolean]{subentry}[true]{% + \setbool{bbx:subentry}{#1}} + \DeclareNameAlias{author}{default} \DeclareNameAlias{editor}{default} \DeclareNameAlias{translator}{default} +\DeclareFieldFormat{bibentrysetcount}{\mkbibparens{\mknumalph{#1}}} \DeclareFieldFormat{labelalphawidth}{\mkbibbrackets{#1}} \DeclareFieldFormat{shorthandwidth}{\mkbibbrackets{#1}} @@ -15,7 +21,7 @@ {\list {\printtext[labelalphawidth]{% \printfield{labelprefix}% - \printfield{labelalpha}% + \printfield{labelalpha}% \printfield{extraalpha}}} {\setlength{\labelwidth}{\labelalphawidth}% \setlength{\leftmargin}{\labelwidth}% @@ -40,4 +46,15 @@ {\endlist} {\item} +\DeclareBibliographyDriver{set}{% + \entryset + {\ifbool{bbx:subentry} + {\printfield[bibentrysetcount]{entrysetcount}% + \printunit*{\addnbspace}} + {}} + {}% + \newunit\newblock + \usebibmacro{setpageref}% + \finentry} + \endinput diff --git a/Master/texmf-dist/tex/latex/biblatex/bbx/authortitle.bbx b/Master/texmf-dist/tex/latex/biblatex/bbx/authortitle.bbx index a3f26dd9fe2..cd89399bfaa 100644 --- a/Master/texmf-dist/tex/latex/biblatex/bbx/authortitle.bbx +++ b/Master/texmf-dist/tex/latex/biblatex/bbx/authortitle.bbx @@ -69,8 +69,8 @@ {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames{author}% - \setunit{\addcomma\space}% - \usebibmacro{bbx:savehash}}% + \setunit{\printdelim{authortypedelim}}% + \usebibmacro{bbx:savehash}}% \usebibmacro{authorstrg}} {\global\undef\bbx@lasthash}} @@ -87,8 +87,8 @@ {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames{editor}% - \setunit{\addcomma\space}% - \usebibmacro{bbx:savehash}}% + \setunit{\printdelim{editortypedelim}}% + \usebibmacro{bbx:savehash}}% \usebibmacro{#1}% \clearname{editor}} {\global\undef\bbx@lasthash}} @@ -106,7 +106,7 @@ {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames{translator}% - \setunit{\addcomma\space}% + \setunit{\printdelim{translatortypedelim}}% \usebibmacro{bbx:savehash}}% \usebibmacro{#1}% \clearname{translator}} diff --git a/Master/texmf-dist/tex/latex/biblatex/bbx/authoryear.bbx b/Master/texmf-dist/tex/latex/biblatex/bbx/authoryear.bbx index e27b18904e2..62df365d2d7 100644 --- a/Master/texmf-dist/tex/latex/biblatex/bbx/authoryear.bbx +++ b/Master/texmf-dist/tex/latex/biblatex/bbx/authoryear.bbx @@ -17,59 +17,80 @@ {Valid values are 'maximum', 'compact', 'basic', 'minimum',\MessageBreak 'true' (=compact), and 'false'.}}} -\providebibmacro*{date+extrayear}{} +\providebibmacro*{date+extradate}{} +\providebibmacro*{date+extrayear}{\usebibmacro{date+extradate}} \def\bbx@opt@mergedate@true{\bbx@opt@mergedate@compact} % merge date/issue with date label \def\bbx@opt@mergedate@maximum{% - \renewbibmacro*{date+extrayear}{% + \renewbibmacro*{date+extradate}{% \iffieldundef{labelyear} + {} + {\printtext[parens]{% + \iflabeldateisdate + {\printfield{issue}% + \setunit*{\addspace}% + \printdateextra} + {\printlabeldateextra}}}}% + \renewbibmacro*{date}{% + \iflabeldateisdate + {} + {\printdate}}% + \renewbibmacro*{issue+date}{% + \iflabeldateisdate {} {\printtext[parens]{% \printfield{issue}% \setunit*{\addspace}% - \iffieldsequal{year}{labelyear} - {\printlabeldateextra}% - {\printfield{labelyear}% - \printfield{extrayear}}}}}% - \renewbibmacro*{date}{}% - \renewbibmacro*{issue+date}{}} + \printdate}}}} % merge date with date label \def\bbx@opt@mergedate@compact{% - \renewbibmacro*{date+extrayear}{% + \renewbibmacro*{date+extradate}{% \iffieldundef{labelyear} {} {\printtext[parens]{% - \iffieldsequal{year}{labelyear} - {\printlabeldateextra}% - {\printfield{labelyear}% - \printfield{extrayear}}}}}% - \renewbibmacro*{date}{}% - \renewbibmacro*{issue+date}{% - \iffieldundef{issue} + \iflabeldateisdate + {\printdateextra} + {\printlabeldateextra}}}}% + \renewbibmacro*{date}{% + \iflabeldateisdate {} - {\printtext[parens]{\printfield{issue}}}% + {\printdate}}% + \renewbibmacro*{issue+date}{% + \ifboolexpr{not test {\iffieldundef{issue}} + or not test {\iflabeldateisdate}} + {\printtext[parens]{% + \printfield{issue}% + \setunit*{\addspace}% + \iflabeldateisdate + {} + {\printdate}}} + {}% \newunit}} % merge year-only date with date label \def\bbx@opt@mergedate@basic{% - \renewbibmacro*{date+extrayear}{% + \renewbibmacro*{date+extradate}{% \iffieldundef{labelyear} {} - {\printtext[parens]{% - \printfield{labelyear}% - \printfield{extrayear}}}}% + {\printtext[parens]{\printlabeldateextra}}}% \renewbibmacro*{date}{% - \iffieldundef{month} + \ifboolexpr{ + test {\iflabeldateisdate} + and + not test {\ifdateshavedifferentprecision{label}{}} + } {} {\printdate}}% \renewbibmacro*{issue+date}{% \ifboolexpr{ - test {\iffieldundef{issue}} + test {\iflabeldateisdate} and - test {\iffieldundef{month}} + not test {\ifdateshavedifferentprecision{label}{}} + and + test {\iffieldundef{issue}} } {} {\printtext[parens]{% @@ -80,27 +101,29 @@ % merge year-only date with year-only date label \def\bbx@opt@mergedate@minimum{% - \renewbibmacro*{date+extrayear}{% + \renewbibmacro*{date+extradate}{% \iffieldundef{labelyear} {} - {\printtext[parens]{% - \printfield{labelyear}% - \printfield{extrayear}}}}% + {\printtext[parens]{\printlabeldateextra}}}% \renewbibmacro*{date}{% \ifboolexpr{ - test {\iffieldundef{month}} + test {\iflabeldateisdate} and - test {\iffieldundef{extrayear}} + not test {\ifdateshavedifferentprecision{label}{}} + and + test {\iffieldundef{extradate}} } {} {\printdate}}% \renewbibmacro*{issue+date}{% \ifboolexpr{ - test {\iffieldundef{issue}} + test {\iflabeldateisdate} + and + not test {\ifdateshavedifferentprecision{label}{}} and - test {\iffieldundef{month}} + test {\iffieldundef{extradate}} and - test {\iffieldundef{extrayear}} + test {\iffieldundef{issue}} } {} {\printtext[parens]{% @@ -111,21 +134,18 @@ % don't merge date/issue with date label \def\bbx@opt@mergedate@false{% - \renewbibmacro*{date+extrayear}{% + \renewbibmacro*{date+extradate}{% \iffieldundef{labelyear} {} - {\printtext[parens]{% - \printfield{labelyear}% - \printfield{extrayear}}}}% + {\printtext[parens]{\printlabeldateextra}}}% \renewbibmacro*{date}{\printdate}% \renewbibmacro*{issue+date}{% \printtext[parens]{% \printfield{issue}% \setunit*{\addspace}% - \printdate}% + \usebibmacro{date}}% \newunit}} -% n.b. the default labeldate=year overrides merging of months and days \ExecuteBibliographyOptions{labeldateparts,sorting=nyt,pagetracker,mergedate} \DeclareFieldFormat{shorthandwidth}{#1} @@ -189,7 +209,7 @@ \printnames{author}% \iffieldundef{authortype} {\setunit{\printdelim{nameyeardelim}}} - {\setunit{\addcomma\space}}}% + {\setunit{\printdelim{authortypedelim}}}}% \iffieldundef{authortype} {} {\usebibmacro{authorstrg}% @@ -197,7 +217,7 @@ {\global\undef\bbx@lasthash \usebibmacro{labeltitle}% \setunit*{\printdelim{nonameyeardelim}}}% - \usebibmacro{date+extrayear}} + \usebibmacro{date+extradate}} \renewbibmacro*{editor}{% \usebibmacro{bbx:editor}{editorstrg}} @@ -212,7 +232,7 @@ {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames{editor}% - \setunit{\addcomma\space}% + \setunit{\printdelim{editortypedelim}}% \usebibmacro{bbx:savehash}}% \usebibmacro{#1}% \clearname{editor}% @@ -220,7 +240,7 @@ {\global\undef\bbx@lasthash \usebibmacro{labeltitle}% \setunit*{\printdelim{nonameyeardelim}}}% - \usebibmacro{date+extrayear}} + \usebibmacro{date+extradate}} \renewbibmacro*{translator}{% \usebibmacro{bbx:translator}{translatorstrg}} @@ -235,15 +255,15 @@ {\usebibmacro{bbx:dashcheck} {\bibnamedash} {\printnames{translator}% - \setunit{\addcomma\space}% + \setunit{\printdelim{translatortypedelim}}% \usebibmacro{bbx:savehash}}% - \usebibmacro{translator+othersstrg}% + \usebibmacro{#1}% \clearname{translator}% \setunit{\printdelim{nameyeardelim}}}% {\global\undef\bbx@lasthash \usebibmacro{labeltitle}% \setunit*{\printdelim{nonameyeardelim}}}% - \usebibmacro{date+extrayear}} + \usebibmacro{date+extradate}} \newbibmacro*{bbx:dashcheck}[2]{% \ifboolexpr{ diff --git a/Master/texmf-dist/tex/latex/biblatex/bbx/draft.bbx b/Master/texmf-dist/tex/latex/biblatex/bbx/draft.bbx index e86e97ac041..1c573251577 100644 --- a/Master/texmf-dist/tex/latex/biblatex/bbx/draft.bbx +++ b/Master/texmf-dist/tex/latex/biblatex/bbx/draft.bbx @@ -18,7 +18,7 @@ \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}% \renewcommand*{\makelabel}[1]{% - \hspace\labelsep\bfseries##1}}} + \hspace\labelsep\bfseries##1}}} {\endlist} {\item} diff --git a/Master/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx b/Master/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx index 5458f8a5957..70c2134c4eb 100644 --- a/Master/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx +++ b/Master/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx @@ -20,8 +20,8 @@ \defbibenvironment{bibliography} {\list {\printtext[labelnumberwidth]{% - \printfield{labelprefix}% - \printfield{labelnumber}}} + \printfield{labelprefix}% + \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% @@ -49,7 +49,7 @@ \entryset {\ifbool{bbx:subentry} {\printfield[bibentrysetcount]{entrysetcount}% - \printunit*{\addnbspace}} + \printunit*{\addnbspace}} {}} {}% \newunit\newblock diff --git a/Master/texmf-dist/tex/latex/biblatex/bbx/standard.bbx b/Master/texmf-dist/tex/latex/biblatex/bbx/standard.bbx index d5bf3f198d1..8edb549d154 100644 --- a/Master/texmf-dist/tex/latex/biblatex/bbx/standard.bbx +++ b/Master/texmf-dist/tex/latex/biblatex/bbx/standard.bbx @@ -719,10 +719,10 @@ {\iffieldundef{maintitle} {} {\usebibmacro{maintitle}% - \newunit\newblock - \iffieldundef{volume} - {} - {\printfield{volume}% + \newunit\newblock + \iffieldundef{volume} + {} + {\printfield{volume}% \printfield{part}% \setunit{\addcolon\space}}}}% \usebibmacro{title}% @@ -771,11 +771,7 @@ {\newunit \printfield{series}% \setunit{\addspace}}% - \printfield{volume}% - \setunit*{\adddot}% - \printfield{number}% - \setunit{\addcomma\space}% - \printfield{eid}% + \usebibmacro{volume+number+eid}% \setunit{\addspace}% \usebibmacro{issue+date}% \setunit{\addcolon\space}% @@ -784,11 +780,9 @@ \newbibmacro*{issue+date}{% \printtext[parens]{% - \iffieldundef{issue} - {\usebibmacro{date}} - {\printfield{issue}% - \setunit*{\addspace}% - \usebibmacro{date}}}% + \printfield{issue}% + \setunit*{\addspace}% + \usebibmacro{date}}% \newunit} \newbibmacro*{event+venue+date}{% diff --git a/Master/texmf-dist/tex/latex/biblatex/biblatex.def b/Master/texmf-dist/tex/latex/biblatex/biblatex.def index 653677f34e4..2d0d142a570 100644 --- a/Master/texmf-dist/tex/latex/biblatex/biblatex.def +++ b/Master/texmf-dist/tex/latex/biblatex/biblatex.def @@ -19,7 +19,8 @@ \def\do#1{% \csdef{mkbibname#1}##1{##1}% \define@key{blx@opt@namepart}{#1}{\csdef{namepart#1}{##1}}% - \define@key{blx@opt@namepart}{#1i}{\csdef{namepart#1i}{##1}}} + \define@key{blx@opt@namepart}{#1i}{\csdef{namepart#1i}{##1}}% + \define@key{blx@opt@namepart}{#1un}{\csdef{namepart#1un}{##1}}} \expandafter\docsvlist\expandafter{\blx@datamodel@constant@nameparts} % legacy aliases @@ -32,63 +33,66 @@ \ifdefempty\mkbibnamelast {\let\@mkbibnamelastsaved\mkbibnamefamily}% not redefined by user {\blx@warning@noline{% - Attempt to redefine deprecated \string\mkbibnamelast\space, please - use \string\mkbibnamefamily\space instead. Using - \string\mkbibnamefamily}% + Attempt to redefine deprecated '\string\mkbibnamelast'.\MessageBreak + Please use '\string\mkbibnamefamily' instead.\MessageBreak + Using '\string\mkbibnamefamily'}% \let\@mkbibnamelastsaved\mkbibnamelast \let\mkbibnamefamily\@mkbibnamelastsaved}% % Now redefine it in case it's used \def\mkbibnamelast{% \blx@warning@noline{% - \string\mkbibnamelast\space is deprecated, please use - \string\mkbibnamefamily. Using \string\mkbibnamefamily}% + '\string\mkbibnamelast' is deprecated.\MessageBreak + Please use '\string\mkbibnamefamily'.\MessageBreak + Using '\string\mkbibnamefamily'}% \@mkbibnamelastsaved} \ifdefempty\mkbibnamefirst {\let\@mkbibnamefirstsaved\mkbibnamegiven}% not redefined by user {\blx@warning@noline{% - Attempt to redefine deprecated \string\mkbibnamefirst\space, please - use \string\mkbibnamegiven\space instead. Using - \string\mkbibnamegiven}% + Attempt to redefine deprecated '\string\mkbibnamefirst'.\MessageBreak + Please use '\string\mkbibnamegiven' instead.\MessageBreak + Using '\string\mkbibnamegiven'}% \let\@mkbibnamefirstsaved\mkbibnamefirst \let\mkbibnamegiven\@mkbibnamefirstsaved}% % Now redefine it in case it's used \def\mkbibnamefirst{% \blx@warning@noline{% - \string\mkbibnamefirst\space is deprecated, please use - \string\mkbibnamegiven. Using \string\mkbibnamegiven}% + '\string\mkbibnamefirst' is deprecated.\MessageBreak + Please use '\string\mkbibnamegiven'.\MessageBreak + Using '\string\mkbibnamegiven'}% \@mkbibnamefirstsaved} \ifdefempty\mkbibnameaffix {\let\@mkbibnameaffixsaved\mkbibnamesuffix}% not redefined by user {\blx@warning@noline{% - Attempt to redefine deprecated \string\mkbibnameaffix\space, please - use \string\mkbibnamesuffix\space instead. Using - \string\mkbibnamesuffix}% + Attempt to redefine deprecated '\string\mkbibnameaffix'.\MessageBreak + Please use '\string\mkbibnamesuffix' instead.\MessageBreak + Using '\string\mkbibnamesuffix'}% \let\@mkbibnameaffixsaved\mkbibnameaffix \let\mkbibnamesuffix\@mkbibnameaffixsaved}% % Now redefine it in case it's used \def\mkbibnameaffix{% \blx@warning@noline{% - \string\mkbibnameaffix\space is deprecated, please use - \string\mkbibnamesuffix. Using \string\mkbibnamesuffix}% + '\string\mkbibnameaffix' is deprecated.\MessageBreak + Please use '\string\mkbibnamesuffix'.\MessageBreak + Using \string\mkbibnamesuffix}% \@mkbibnameaffixsaved}} \newcommand*{\bibellipsis}{[\textellipsis\unkern]\midsentence} % Delimiters used in citations, bibliography and bibliography lists -\newcommand*{\multinamedelim}{\addcomma\space} -\newcommand*{\finalnamedelim}{% +\DeclareDelimFormat{multinamedelim}{\addcomma\space} +\DeclareDelimFormat{finalnamedelim}{% \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}% \addspace\bibstring{and}\space} -\newcommand*{\revsdnamedelim}{} -\newcommand*{\andothersdelim}{\addspace} +\DeclareDelimFormat{revsdnamedelim}{} +\DeclareDelimFormat{andothersdelim}{\addspace} -\newcommand*{\multilistdelim}{\addcomma\space} -\newcommand*{\finallistdelim}{% +\DeclareDelimFormat{multilistdelim}{\addcomma\space} +\DeclareDelimFormat{finallistdelim}{% \ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}% \addspace\bibstring{and}\space} -\newcommand*{\andmoredelim}{\addspace} +\DeclareDelimFormat{andmoredelim}{\addspace} \newcommand*{\multicitedelim}{\addsemicolon\space} \newcommand*{\compcitedelim}{\addcomma\space} @@ -105,21 +109,26 @@ {\iftextcitepunct{\addsemicolon}{\addcomma}}% \space} + % context-sensitive delimiters -% retain compatibility with \labelnamepunct +% retain compatibility with \labelnamepunct et al. +% The seemingly redundant definitions are needed because +% hard-coded punctuation was replaced by context-sensitive +% delimiters, changes to here need to be made explicitly +% to avoid unwanted effects of redefining the global delimiter. +\DeclareDelimFormat{authortypedelim}{\addcomma\space} +\DeclareDelimFormat{editortypedelim}{\addcomma\space} +\DeclareDelimFormat{translatortypedelim}{\addcomma\space} \DeclareDelimFormat{namelabeldelim}{\addspace} \DeclareDelimFormat{nametitledelim}{\addcomma\space} -\DeclareDelimFormat[bib]{nametitledelim}{\labelnamepunct} -\DeclareDelimFormat[biblist]{nametitledelim}{\labelnamepunct} +\DeclareDelimFormat[bib,biblist]{nametitledelim}{\labelnamepunct} \DeclareDelimFormat[textcite]{nametitledelim}{\addspace} \DeclareDelimFormat{nameyeardelim}{\addspace} \DeclareDelimFormat[textcite]{nameyeardelim}{\addspace} -\DeclareDelimFormat[bib]{nameyeardelim}{\addspace} -\DeclareDelimFormat[biblist]{nameyeardelim}{\addspace} +\DeclareDelimFormat[bib,biblist]{nameyeardelim}{\addspace} \DeclareDelimFormat{nonameyeardelim}{\addspace} \DeclareDelimFormat[textcite]{nonameyeardelim}{\addspace} -\DeclareDelimFormat[bib]{nonameyeardelim}{\addspace} -\DeclareDelimFormat[biblist]{nonameyeardelim}{\addspace} +\DeclareDelimFormat[bib,biblist]{nonameyeardelim}{\addspace} \DeclareDelimFormat{dateeradelim}{\addspace} \DeclareDelimFormat{datecircadelim}{\addspace} @@ -399,17 +408,10 @@ \ifbibstring{#1}{\bibstring{#1}}{\mkyearzeros{#1}}} \DeclareFieldFormat{labelendyear}{% = the '1995' part in 'Jones 1995a' \ifbibstring{#1}{\bibstring{#1}}{\mkyearzeros{#1}}} -% If labeldatesource is a defined field, they -% Don't check labelyear directly as it is already processed into a range with markers -% and so is never nums due to unexpandable parts of labelyear determination -\DeclareFieldFormat{extrayear}{% - \iffieldundef{\thefield{labeldatesource}} - {\iffieldnums{\thefield{labeldatesource}year} - {\mknumalph{#1}} - {\mkbibparens{\mknumalph{#1}}}} - {\iffieldnums{\thefield{labeldatesource}} - {\mknumalph{#1}} - {\mkbibparens{\mknumalph{#1}}}}}% +\DeclareFieldFormat{extradate}{% + \iffieldnums{labelyear} + {\mknumalph{#1}} + {\mkbibparens{\mknumalph{#1}}}} \DeclareFieldFormat{labelalpha}{#1}% \DeclareFieldFormat{extraalpha}{\mknumalph{#1}}% \DeclareFieldFormat{shorthand}{#1\isdot} @@ -469,7 +471,7 @@ \iffieldundef{eprintclass} {} {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}} - {\nolinkurl{#1} + {\nolinkurl{#1}% \iffieldundef{eprintclass} {} {\addspace\texttt{\mkbibbrackets{\thefield{eprintclass}}}}}} @@ -587,6 +589,55 @@ {#1}}% \usebibmacro{list:andothers}} +\DeclareListFormat{origlanguage}{% + \usebibmacro{list:delim}{% + \ifbibstring{#1} + {\bibxstring{#1}} + {\ifbibstring{lang#1} + {\bibxstring{lang#1}} + {#1}}}% + \ifbibstring{#1} + {\bibstring{#1}} + {\ifbibstring{lang#1} + {\bibstring{lang#1}} + {#1}}% + \usebibmacro{list:andothers}} + + +\DeclareListFormat{lfromoriglanguage}{% + \begingroup + \blx@bibstringnormal + \usebibmacro{list:delim}{% + \ifbibstring{from#1} + {\bibxlstring{from#1}} + {\ifbibstring{lang#1} + {\bibxlstring{lang#1}} + {#1}}}% + \ifbibstring{from#1} + {\bibstring{from#1}} + {\ifbibstring{lang#1} + {\biblstring{lang#1}} + {#1}}% + \usebibmacro{list:andothers}% + \endgroup} + +\DeclareListFormat{sfromoriglanguage}{% + \begingroup + \blx@bibstringnormal + \usebibmacro{list:delim}{% + \ifbibstring{from#1} + {\bibxsstring{from#1}} + {\ifbibstring{lang#1} + {\bibxsstring{lang#1}} + {#1}}}% + \ifbibstring{from#1} + {\bibstring{from#1}} + {\ifbibstring{lang#1} + {\bibsstring{lang#1}} + {#1}}% + \usebibmacro{list:andothers}% + \endgroup} + \DeclareListFormat{location}{% \usebibmacro{list:delim}{#1}% #1\isdot @@ -626,13 +677,13 @@ or test \ifmoreitems } - {\multilistdelim} + {\printdelim{multilistdelim}} {\lbx@finallistdelim{#1}}} {}} \newbibmacro*{list:plain}{% \ifnumgreater{\value{listcount}}{\value{liststart}} - {\multilistdelim} + {\printdelim{multilistdelim}} {}} \newbibmacro*{list:andothers}{% @@ -644,7 +695,7 @@ {\ifnumgreater{\value{liststop}}{1} {\finalandcomma} {}% - \andmoredelim\bibstring{andmore}} + \printdelim{andmoredelim}\bibstring{andmore}} {}} \newbibmacro*{pageref:init}{% @@ -677,7 +728,7 @@ \numdef\abx@range@diff{\abx@range@diff+1}} {\usebibmacro{pageref:dump}% \ifnumgreater{\abx@range@last}{-1} - {\multilistdelim} + {\printdelim{multilistdelim}} {}% \ifhyperref {\hyperlink{page.#1}{#1}} @@ -685,7 +736,7 @@ \edef\abx@range@prev{\abx@range@num}} {\usebibmacro{pageref:dump}% \ifnumgreater{\abx@range@last}{-1} - {\multilistdelim} + {\printdelim{multilistdelim}} {}% \ifhyperref {\hyperlink{page.#1}{#1}} @@ -702,7 +753,7 @@ {\abx@range@hold}% \or % three \ifnumless{\abx@range@diff}{2} - {\multilistdelim} + {\printdelim{multilistdelim}} {\bibrangedash}% \ifhyperref {\hyperlink{page.\abx@range@hold}{\abx@range@hold}} @@ -886,6 +937,7 @@ \DeclareFieldFormat{authortype}{#1} \DeclareFieldFormat{editortype}{#1} +\DeclareFieldFormat{translatortype}{#1} % Auxiliary macros for name formatting directives % ------------------------------------------------------------------ @@ -965,7 +1017,7 @@ or test \ifmorenames } - {\multinamedelim} + {\printdelim{multinamedelim}} {\lbx@finalnamedelim{#1}}} {}} @@ -979,7 +1031,7 @@ or test {\ifnumequal{\value{liststop}}{2}} } - {\revsdnamedelim} + {\printdelim{revsdnamedelim}} {}} \newbibmacro*{name:andothers}{% @@ -991,7 +1043,7 @@ {\ifnumgreater{\value{liststop}}{1} {\finalandcomma} {}% - \andothersdelim\bibstring{andothers}} + \printdelim{andothersdelim}\bibstring{andothers}} {}} % ------------------------------------------------------------------ @@ -1213,6 +1265,13 @@ \literal{nodate} } +\DeclareExtradate{% + \scope{ + \field{labelyear} + \field{year} + } +} + \DeclareLabeltitle{% \field{shorttitle} \field{title} @@ -1231,7 +1290,7 @@ \field[strwidth=1,strside=left]{labelname} } \labelelement{ - \field[strwidth=2,strside=right]{year} + \field[strwidth=2,strside=right]{year} } } @@ -1258,7 +1317,7 @@ % SORTING % ------------------------------------------------------------------ -\DeclareSortingNamekeyScheme{ +\DeclareSortingNamekeyTemplate{ \keypart{ \namepart[use=true]{prefix} } @@ -1278,7 +1337,7 @@ \DeclarePresort{mm} -\DeclareSortingScheme{shorthand}{ +\DeclareSortingTemplate{shorthand}{ \sort[final]{ \field{sortshorthand} } @@ -1287,17 +1346,17 @@ } } -\DeclareSortingScheme{none}{ +\DeclareSortingTemplate{none}{ \sort{\citeorder} } -\DeclareSortingScheme{debug}{ +\DeclareSortingTemplate{debug}{ \sort{ \field{entrykey} } } -\DeclareSortingScheme{nty}{ +\DeclareSortingTemplate{nty}{ \sort{ \field{presort} } @@ -1326,7 +1385,7 @@ } } -\DeclareSortingScheme{nyt}{ +\DeclareSortingTemplate{nyt}{ \sort{ \field{presort} } @@ -1355,7 +1414,7 @@ } } -\DeclareSortingScheme{nyvt}{ +\DeclareSortingTemplate{nyvt}{ \sort{ \field{presort} } @@ -1384,7 +1443,7 @@ } } -\DeclareSortingScheme{anyt}{ +\DeclareSortingTemplate{anyt}{ \sort{ \field{presort} } @@ -1416,7 +1475,7 @@ } } -\DeclareSortingScheme{anyvt}{ +\DeclareSortingTemplate{anyvt}{ \sort{ \field{presort} } @@ -1448,7 +1507,7 @@ } } -\DeclareSortingScheme{ynt}{ +\DeclareSortingTemplate{ynt}{ \sort{ \field{presort} } @@ -1474,7 +1533,7 @@ } } -\DeclareSortingScheme{ydnt}{ +\DeclareSortingTemplate{ydnt}{ \sort{ \field{presort} } @@ -1607,18 +1666,18 @@ \newcommand*{\lbx@initnamehook}[1]{} \newcommand*{\lbx@inittitlehook}[1]{} -\newcommand*{\lbx@finalnamedelim}[1]{\finalnamedelim} -\newcommand*{\lbx@finallistdelim}[1]{\finallistdelim} +\newcommand*{\lbx@finalnamedelim}[1]{\printdelim{finalnamedelim}} +\newcommand*{\lbx@finallistdelim}[1]{\printdelim{finallistdelim}} \newcommand*{\lbx@lfromlang}{% - \iffieldundef{origlanguage} + \iflistundef{origlanguage} {\unspace} - {\biblstring{from\thefield{origlanguage}}}} + {\printlist[lfromoriglanguage]{origlanguage}}} \newcommand*{\lbx@sfromlang}{% - \iffieldundef{origlanguage} + \iflistundef{origlanguage} {\unspace} - {\bibsstring{from\thefield{origlanguage}}}} + {\printlist[sfromoriglanguage]{origlanguage}}} % ------------------------------------------------------------------ % MISCELLANEOUS @@ -1691,27 +1750,56 @@ \defbibheading{none}{} +\def\abx@MakeMarkcase{\MakeUppercase} +\AtEndPreamble{% + \ifcsundef{MakeMarkcase}{}{\def\abx@MakeMarkcase{\MakeMarkcase}}% + \providecommand*{\@mkdouble}[1]{\@mkboth{#1}{#1}}% + \providecommand*{\@mkright}{% + \begingroup + \ifx\@mkboth\markboth \aftergroup\markright + \else + \ifx\@mkboth\@gobbletwo \aftergroup\@gobble + \else \def\@gobbletwo##1##2{}% + \ifx \@mkboth\@gobbletwo \aftergroup\@gobble + \else + \PackageWarning{biblatex}{% changed for biblatex + package incompatibility detected!\MessageBreak + \string\@mkboth it neither \string\markboth nor any\MessageBreak + kind of two arguments gobbling,\MessageBreak + e.g., \string\@gobbletwo.\MessageBreak + So I don't known, what to do\MessageBreak + with \string\@mkright.\MessageBreak + Nevertheless, \string\markright\space will be\MessageBreak + used% + }% + \aftergroup\markright + \fi + \fi + \fi + \endgroup + }} + \ifcase\abx@classtype\relax % article \defbibheading{bibliography}[\refname]{% \section*{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblist}[\biblistname]{% \section*{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibintoc}[\refname]{% \section*{#1}% \addcontentsline{toc}{section}{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblistintoc}[\biblistname]{% \section*{#1}% \addcontentsline{toc}{section}{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibnumbered}[\refname]{% \section{#1}% - \if@twoside\markright{\MakeUppercase{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{biblistnumbered}[\biblistname]{% \section{#1}% - \if@twoside\markright{\MakeUppercase{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibliography}[\refname]{% \subsection*{#1}} \defbibheading{subbibintoc}[\refname]{% @@ -1723,131 +1811,144 @@ \or % book/report \defbibheading{bibliography}[\bibname]{% \chapter*{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblist}[\biblistname]{% \chapter*{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibintoc}[\bibname]{% \chapter*{#1}% \addcontentsline{toc}{chapter}{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblistintoc}[\biblistname]{% \chapter*{#1}% \addcontentsline{toc}{chapter}{#1}% - \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibnumbered}[\bibname]{% \chapter{#1}% - \if@twoside\markright{\MakeUppercase{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{biblistnumbered}[\biblistname]{% \chapter{#1}% - \if@twoside\markright{\MakeUppercase{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibliography}[\refname]{% \section*{#1}% - \if@twoside\markright{\MakeUppercase{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibintoc}[\refname]{% \section*{#1}% \addcontentsline{toc}{section}{#1}% - \if@twoside\markright{\MakeUppercase{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibnumbered}[\refname]{% \section{#1}} \or % scrartcl \defbibheading{bibliography}[\refname]{% - \ifkomabibtotocnumbered - {\section{#1}} - {\ifkomabibtotoc - {\addsec{#1}} - {\section*{#1}}% - \markboth{#1}{#1}}} + \ifcsundef{bibliography@heading} + {\ifkomabibtotocnumbered + {\section{#1}% + \@mkdouble{\abx@MakeMarkcase{\sectionmarkformat#1}}} + {\ifkomabibtotoc + {\addsec{#1}} + {\section*{#1}}% + \@mkdouble{\abx@MakeMarkcase{#1}}}} + {\bibliography@heading{#1}}} \defbibheading{biblist}[\biblistname]{% - \ifkomabibtotocnumbered - {\section{#1}} - {\ifkomabibtotoc - {\addsec{#1}} - {\section*{#1}}% - \markboth{#1}{#1}}} + \ifcsundef{bibliography@heading} + {\ifkomabibtotocnumbered + {\section{#1}% + \@mkdouble{\abx@MakeMarkcase{\sectionmarkformat#1}}} + {\ifkomabibtotoc + {\addsec{#1}} + {\section*{#1}}% + \@mkdouble{\abx@MakeMarkcase{#1}}}} + {\bibliography@heading{#1}}} \defbibheading{bibintoc}[\refname]{% \addsec{#1}% - \markboth{#1}{#1}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblistintoc}[\biblistname]{% \addsec{#1}% - \markboth{#1}{#1}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibnumbered}[\refname]{% \section{#1}% - \markboth{\sectionmarkformat#1}{\sectionmarkformat#1}} + \@mkdouble{\abx@MakeMarkcase{\sectionmarkformat#1}}} \defbibheading{biblistnumbered}[\biblistname]{% \section{#1}% - \markboth{\sectionmarkformat#1}{\sectionmarkformat#1}} + \@mkdouble{\abx@MakeMarkcase{\sectionmarkformat#1}}} \defbibheading{subbibliography}[\refname]{% - \subsection*{#1}} + \subsection*{#1}% + \@mkright{\abx@MakeMarkcase{#1}}} \defbibheading{subbibintoc}[\refname]{% \subsection*{#1}% - \addcontentsline{toc}{subsection}{#1}} + \addcontentsline{toc}{subsection}{#1}% + \@mkright{\abx@MakeMarkcase{#1}}} \defbibheading{subbibnumbered}[\refname]{% \subsection{#1}} \or % scrbook/scrreprt \defbibheading{bibliography}[\bibname]{% - \ifkomabibtotocnumbered - {\chapter{#1}} - {\ifkomabibtotoc - {\addchap{#1}} - {\chapter*{#1}}% - \markboth{#1}{#1}}} + \ifcsundef{bibliography@heading} + {\ifkomabibtotocnumbered + {\chapter{#1}% + \@mkdouble{\abx@MakeMarkcase{\chaptermarkformat#1}}} + {\ifkomabibtotoc + {\addchap{#1}} + {\chapter*{#1}}% + \@mkdouble{\abx@MakeMarkcase{#1}}}} + {\bibliography@heading{#1}}} \defbibheading{biblist}[\biblistname]{% - \ifkomabibtotocnumbered - {\chapter{#1}} - {\ifkomabibtotoc - {\addchap{#1}} - {\chapter*{#1}}% - \markboth{#1}{#1}}} + \ifcsundef{bibliography@heading} + {\ifkomabibtotocnumbered + {\chapter{#1}% + \@mkdouble{\abx@MakeMarkcase{\chaptermarkformat#1}}} + {\ifkomabibtotoc + {\addchap{#1}} + {\chapter*{#1}}% + \@mkdouble{\abx@MakeMarkcase{#1}}}} + {\bibliography@heading{#1}}} \defbibheading{bibintoc}[\bibname]{% \addchap{#1}% - \markboth{#1}{#1}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblistintoc}[\biblistname]{% \addchap{#1}% - \markboth{#1}{#1}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibnumbered}[\bibname]{% \chapter{#1}% - \markboth{\chaptermarkformat#1}{\chaptermarkformat#1}} + \@mkdouble{\abx@MakeMarkcase{\chaptermarkformat#1}}} \defbibheading{biblistnumbered}[\biblistname]{% \chapter{#1}% - \markboth{\chaptermarkformat#1}{\chaptermarkformat#1}} + \@mkdouble{\abx@MakeMarkcase{\chaptermarkformat#1}}} \defbibheading{subbibliography}[\refname]{% \section*{#1}% - \if@twoside\markright{#1}\fi} + \@mkright{\abx@MakeMarkcase{#1}}} \defbibheading{subbibintoc}[\refname]{% - \addsec{#1}% - \markboth{#1}{#1}} + \addsec{#1}} \defbibheading{subbibnumbered}[\refname]{% \section{#1}} \or % memoir (article) - \ifdef\memUChead{}{\let\memUChead\MakeUppercase} + \ifcsundef{memUChead}{}{\def\abx@MakeMarkcase{\memUChead}}% \defbibheading{bibliography}[\refname]{% \chapter*{#1}% \ifmemoirbibintoc {\phantomsection \addcontentsline{toc}{chapter}{#1}} {}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblist}[\biblistname]{% \chapter*{#1}% \ifmemoirbibintoc {\phantomsection \addcontentsline{toc}{chapter}{#1}} {}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibintoc}[\refname]{% \chapter*{#1}% \phantomsection \addcontentsline{toc}{chapter}{#1}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblistintoc}[\biblistname]{% \chapter*{#1}% \phantomsection \addcontentsline{toc}{chapter}{#1}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibnumbered}[\refname]{% \chapter{#1}} \defbibheading{biblistnumbered}[\biblistname]{% @@ -1858,59 +1959,59 @@ {\phantomsection \addcontentsline{toc}{section}{#1}} {}% - \if@twoside\markright{\memUChead{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibintoc}[\refname]{% \section*{#1}% \phantomsection \addcontentsline{toc}{section}{#1}% - \if@twoside\markright{\memUChead{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibnumbered}[\refname]{% \section{#1}} \or % memoir (book) - \ifdef\memUChead{}{\let\memUChead\MakeUppercase} + \ifcsundef{memUChead}{}{\def\abx@MakeMarkcase{\memUChead}}% \defbibheading{bibliography}[\bibname]{% \chapter*{#1}% \ifmemoirbibintoc {\phantomsection \addcontentsline{toc}{chapter}{#1}} {}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblist}[\biblistname]{% \chapter*{#1}% \ifmemoirbibintoc {\phantomsection \addcontentsline{toc}{chapter}{#1}} {}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibintoc}[\bibname]{% \chapter*{#1}% \phantomsection \addcontentsline{toc}{chapter}{#1}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{biblistintoc}[\biblistname]{% \chapter*{#1}% \phantomsection \addcontentsline{toc}{chapter}{#1}% - \markboth{\memUChead{#1}}{\memUChead{#1}}} + \@mkdouble{\abx@MakeMarkcase{#1}}} \defbibheading{bibnumbered}[\bibname]{% \chapter{#1}% - \if@twoside\markright{\memUChead{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{biblistnumbered}[\biblistname]{% \chapter{#1}% - \if@twoside\markright{\memUChead{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibliography}[\refname]{% \section*{#1}% \ifmemoirbibintoc {\phantomsection \addcontentsline{toc}{section}{#1}} {}% - \if@twoside\markright{\memUChead{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibintoc}[\refname]{% \section*{#1}% \phantomsection \addcontentsline{toc}{section}{#1}% - \if@twoside\markright{\memUChead{#1}}\fi} + \if@twoside\markright{\abx@MakeMarkcase{#1}}\fi} \defbibheading{subbibnumbered}[\refname]{% \section{#1}} @@ -1992,7 +2093,7 @@ {\boolfalse{citetracker}% \boolfalse{pagetracker}% \usebibmacro{prenote}} - {\printfield{year}\printfield{extrayear}} + {\printfield{year}\printfield{extradate}} {\multicitedelim} {\usebibmacro{postnote}} @@ -2248,7 +2349,7 @@ {\printnames{author}% \iffieldundef{authortype} {} - {\setunit{\addcomma\space}% + {\setunit{\printdelim{authortypedelim}}% \usebibmacro{authorstrg}}} {}} @@ -2259,7 +2360,7 @@ not test {\ifnameundef{editor}} } {\printnames{editor}% - \setunit{\addcomma\space}% + \setunit{\printdelim{editortypedelim}}% \usebibmacro{editorstrg}% \clearname{editor}} {}} @@ -2271,7 +2372,7 @@ not test {\ifnameundef{editor}} } {\printnames{editor}% - \setunit{\addcomma\space}% + \setunit{\printdelim{editortypedelim}}% \usebibmacro{editor+othersstrg}% \clearname{editor}} {}} @@ -2283,7 +2384,7 @@ not test {\ifnameundef{translator}} } {\printnames{translator}% - \setunit{\addcomma\space}% + \setunit{\printdelim{translatortypedelim}}% \usebibmacro{translatorstrg}% \clearname{translator}} {}} @@ -2295,7 +2396,7 @@ not test {\ifnameundef{translator}} } {\printnames{translator}% - \setunit{\addcomma\space}% + \setunit{\printdelim{translatortypedelim}}% \usebibmacro{translator+othersstrg}% \clearname{translator}} {}} @@ -2377,13 +2478,14 @@ {\usebibmacro{editorstrg}}} \newbibmacro*{translatorstrg}{% - \ifboolexpr{ - test {\ifnumgreater{\value{translator}}{1}} - or - test {\ifandothers{translator}} - } - {\bibstring{translators}} - {\bibstring{translator}}} + \printtext[translatortype]{% + \ifboolexpr{ + test {\ifnumgreater{\value{translator}}{1}} + or + test {\ifandothers{translator}} + } + {\bibstring{translators}} + {\bibstring{translator}}}} \newbibmacro*{translator+othersstrg}{% \ifboolexpr{ @@ -2410,7 +2512,7 @@ {\appto\abx@tempa{af}% \clearname{afterword}} {}}}% - \bibstring{\abx@tempa}} + \printtext[translatortype]{\bibstring{\abx@tempa}}} \newbibmacro*{byauthor}{% \ifboolexpr{ @@ -2640,7 +2742,11 @@ \printfield{maintitleaddon}} \newbibmacro*{journal}{% - \iffieldundef{journaltitle} + \ifboolexpr{ + test {\iffieldundef{journaltitle}} + and + test {\iffieldundef{journalsubtitle}} + } {} {\printtext[journaltitle]{% \printfield[titlecase]{journaltitle}% @@ -2648,7 +2754,11 @@ \printfield[titlecase]{journalsubtitle}}}} \newbibmacro*{periodical}{% - \iffieldundef{title} + \ifboolexpr{ + test {\iffieldundef{title}} + and + test {\iffieldundef{subtitle}} + } {} {\printtext[title]{% \printfield[titlecase]{title}% @@ -2656,7 +2766,11 @@ \printfield[titlecase]{subtitle}}}} \newbibmacro*{issue}{% - \iffieldundef{issuetitle} + \ifboolexpr{ + test {\iffieldundef{issuetitle}} + and + test {\iffieldundef{issuesubtitle}} + } {} {\printtext[issuetitle]{% \printfield[titlecase]{issuetitle}% @@ -2726,9 +2840,9 @@ {}}% \renewbibmacro*{related:init}{}% \DeclareNameAlias{sortname}{default}% - \ifbibmacroundef{date+extrayear} + \ifbibmacroundef{date+extradate} {} - {\renewbibmacro*{date+extrayear}{}% + {\renewbibmacro*{date+extradate}{}% \renewbibmacro*{date}{\printdate}}% \renewbibmacro*{pageref}{}} {\thefield{entrytype}}}} @@ -2766,7 +2880,7 @@ test {\ifnamesequal{author}{savedauthor}} or test {\ifnameundef{author}} - } + } {} {\usebibmacro{bytypestrg}{author}{author}% \setunit{\addspace}% @@ -2776,7 +2890,7 @@ test {\ifnamesequal{editor}{savededitor}} or test {\ifnameundef{editor}} - } + } {} {\usebibmacro{byeditor+others}% \newunit\newblock}% diff --git a/Master/texmf-dist/tex/latex/biblatex/biblatex.sty b/Master/texmf-dist/tex/latex/biblatex/biblatex.sty index 8cac4f17a05..4d72ad97533 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/04} +\def\abx@version{3.8} \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} +% {}{} +\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}}} + % {} \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 @@ % [][]{} \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 - % <*>[]{} \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} +% *[]{}{} +\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}} -% {}{} -\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} + +% {}{} +\protected\def\blx@imc@usedriver#1#2{% + \begingroup + \csuse{blx@hook@usedriver}% \csuse{blx@hook@bbxinit}#1% \delimcontext{bib}% \blx@beglangbib @@ -3245,11 +3401,44 @@ \blx@setunit\entrysetpunct \global\toggletrue{blx@block}} +\def\ifentryseen{\blx@imc@ifentryseen} +\def\ifentryinbib{\blx@imc@ifentryinbib} +\def\ifentrycategory{\blx@imc@ifentrycategory} +\def\ifentrykeyword{\blx@imc@ifentrykeyword} + +\def\blx@imc@iflabeldateisdate{% + \ifboolexpr{% + togl {blx@labeldateparts} + and not test {\iffieldundef{labeldatesource}} + and + (test {\iffieldequalstr{labeldatesource}{}} + or test {\iffieldequalstr{labeldatesource}{year}})}} + +\def\blx@imc@ifdatehasyearonlyprecision#1{% + \ifboolexpr{not test {\iffieldundef{#1year}} + and (test {\ifcsstring{blx@dateformat@#1date}{year}} + or (test {\iffieldundef{#1month}} + and test {\iffieldundef{#1season}}))}} + +\def\blx@imc@ifdatehastime#1{% + \ifboolexpr{togl {blx@#1dateusetime} + and not test {\iffieldundef{#1hour}}}} + +\def\blx@imc@ifdateshavedifferentprecision#1#2{% + \ifboolexpr{ (test {\ifdatehasyearonlyprecision{#1}} + and not test {\ifdatehasyearonlyprecision{#2}}) + or (not test {\ifdatehasyearonlyprecision{#1}} + and test {\ifdatehasyearonlyprecision{#2}}) + or (test {\ifdatehastime{#1}} + and not test {\ifdatehastime{#2}}) + or (not test {\ifdatehastime{#1}} + and test {\ifdatehastime{#2}})}} + \blx@regimcs{% \ifdriver \thefield \strfield \csfield \usefield \thelist \strlist \thename \strname \clearfield \clearlist \clearname \restorefield \restorelist \restorename - \ifcategory \ifentrycategory \ifkeyword \ifentrykeyword - \ifciteseen \ifentryseen \ifentryinbib \ifciteibid \ifciteidem \ifopcit \ifloccit + \ifcategory \ifkeyword + \ifciteseen \ifciteibid \ifciteidem \ifopcit \ifloccit \ifcurrentfield \ifcurrentlist \ifcurrentname \ifentrytype \iffieldequalcs \iffieldequals \iffieldequalstr \iffieldsequal \ifbibmacroundef \iffieldundef \iffieldxref \iflistequalcs \iflistequals @@ -3260,6 +3449,8 @@ \savelistcs \savename \savenamecs \usedriver \ifinteger \ifnumeral \ifnumerals \ifpages \iffieldint \iffieldnum \iffieldnums \iffieldpages + \iflabeldateisdate \ifdatehasyearonlyprecision \ifdatehastime + \ifdateshavedifferentprecision \mkpageprefix \mkpagetotal \newblock \newunit \setunit \printunit \finentry} @@ -3477,7 +3668,15 @@ \long\def\blx@mksc@ingroup#1{% \if\noexpand\@let@token\relax - \blx@mksc@locase{{#2}}% + \ifx\@let@token\blx@mkcp@sgl + \blx@mksc@nocase{{#2}}% + \else + \ifx\@let@token\blx@mkcp@dbl + \blx@mksc@nocase{{#2}}% + \else + \blx@mksc@locase{{#2}}% + \fi + \fi \else \blx@mksc@nocase{{#2}}% \fi} @@ -3568,7 +3767,7 @@ {\xifinlist{#1}\blx@cmksc@lang}} %% Main formatting commands -% The work by creating a \let alias: +% They work by creating a \let alias: % \abx@@@ -> \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 = {}, \define@key{blx@lbx}{inherit}{% + \global\toggletrue{blx@nosuffrecurse}% \blx@lbxinput{#1}{}{\blx@err@nolang{#1}}% \csuse{abx@strings@#1}} @@ -4650,6 +4884,7 @@ % {}{} \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 @@ % {}{} \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}} +% {} +\newrobustcmd*{\DeclareLanguageMappingSuffix}[1]{% + \gdef\blx@lng@suff{#1}} +\@onlypreamble\DeclareLanguageMappingSuffix +\let\blx@lng@suff\@empty + % {}{} \newrobustcmd*{\DeclareLanguageMapping}[2]{% - \csgdef{blx@lng@#1}{#2}} + \csgdef{blx@lng@#1}{#2}% + \csgdef{blx@lng@explicit@#1}{#2}} \@onlypreamble\DeclareLanguageMapping % {}{}{} \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}}} % {}{}{} +% 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]{}{''|end} +% [extradate]{}{''|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]{}{''|end} +% [extradate]{}{''|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 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@
@ - a list of list items in a scheme in a +% blx@dlist@list@
@ - a list of list items in a refcontext in a % section (for tracking bibliography lists, % obeys skipbiblist) -% blx@slist@entry@
@ - a list of normal entries in a scheme in a +% blx@dlist@entry@
@ - a list of normal entries in a list in a % section (for tracking bibliographies, % obeys skipbib) -% blx@slist@centry@
@ - a list of normal entries in a scheme in a +% blx@dlist@centry@
@ - 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} + {}} % {} % Get the saved information on which citations were mentioned last run \protected\def\abx@aux@cite#1{% \listxadd\blx@lastcites{\detokenize{#1}}} -% {} -% Get the saved information on which sorting schemes were mentioned last run -\protected\def\abx@aux@sortscheme#1{% - \listgadd\blx@lastsortschemes{#1}} - % {} % Get the saved information on which refcontexts were mentioned last run \protected\def\abx@aux@refcontext#1{% \listgadd\blx@lastrefcontexts{#1}} -% {} -% Get the saved information on which shorthand sorting schemes were mentioned last run +% {} +% 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} -% {} -\def\blx@bbl@slist[#1]#2{% +% {} +\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}} - % [] \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 % []{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 - % {} \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]{,,...} \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]{,,...} @@ -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]{,,...} @@ -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 @@ % {,...} \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}}}}} % {}{} => matches in \protected\def\blx@bibfilter#1#2{% @@ -10376,7 +10649,7 @@ ~~~~~~~~\blx@nl} \xdef\blx@xml@labelalphanametemplate#1#2{% - ~~\blx@nl + ~~\blx@nl #2% ~~\blx@nl} \xdef\blx@xml@labelalphanametemplatenamepart#1#2#3{% @@ -10393,6 +10666,17 @@ \xdef\blx@xml@labelalpha@part#1#2{% ~~~~~~#2\blx@nl} +\xdef\blx@xml@extradate#1{% + ~~\blx@nl + #1% + ~~\blx@nl} +\xdef\blx@xml@extradatescope#1{% + ~~~~\blx@nl + #1% + ~~~~\blx@nl} +\xdef\blx@xml@edordered#1#2{% + ~~~~~~#2\blx@nl} + \xdef\blx@xml@inheritance#1{% ~~\blx@nl #1% @@ -10440,18 +10724,18 @@ \xdef\blx@xml@nolabelwidthcount#1{% ~~~~\blx@nl} -\xdef\blx@xml@uniquenametemplate#1{% - ~~\blx@nl% - #1% +\xdef\blx@xml@uniquenametemplate#1#2{% + ~~\blx@nl% + #2% ~~\blx@nl} \xdef\blx@xml@uniquenametemplatenamepart#1#2#3{% ~~~~#3\blx@nl} -\xdef\blx@xml@sortingnamekey#1#2{% - ~~\blx@nl% +\xdef\blx@xml@sortingnamekeytemplate#1#2{% + ~~\blx@nl% #2% - ~~\blx@nl} + ~~\blx@nl} \xdef\blx@xml@sortingnamekeykeypart#1#2{% ~~~~\blx@nl @@ -10464,26 +10748,26 @@ \xdef\blx@xml@sortingnamekeyliteral#1#2{% ~~~~~~#2\blx@nl} -\xdef\blx@xml@sorting#1#2{% - ~~\blx@nl% - #2% - ~~\blx@nl} +\xdef\blx@xml@sortingtemplate#1#2#3{% + ~~\blx@nl% + #3% + ~~\blx@nl} \xdef\blx@xml@presort#1#2{% - ~~~~% + ~~% #2\blx@nl} \xdef\blx@xml@sortexclude#1#2{% - ~~~~\blx@nl + ~~\blx@nl #2% - ~~~~\blx@nl} + ~~\blx@nl} \xdef\blx@xml@exclude#1{% - ~~~~~~#1\blx@nl} + ~~~~#1\blx@nl} \xdef\blx@xml@sortinclude#1#2{% - ~~~~\blx@nl + ~~\blx@nl #2% - ~~~~\blx@nl} + ~~\blx@nl} \xdef\blx@xml@include#1{% - ~~~~~~#1\blx@nl} + ~~~~#1\blx@nl} \xdef\blx@xml@sort#1#2{% ~~~~\blx@nl #2% @@ -10495,17 +10779,24 @@ \xdef\blx@xml@endsection{% ~~} -\xdef\blx@xml@slist#1#2#3#4#5#6#7#8{% - ~~\blx@nl - #8% - #7% - ~~\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{% + ~~\blx@nl + #5% + ~~\blx@nl} +\xdef\blx@xml@dlistfilterorbegin{% ~~~~\blx@nl} -\xdef\blx@xml@slistfilterorend{% +\xdef\blx@xml@dlistfilterorend{% ~~~~\blx@nl} -\xdef\blx@xml@slistfilter#1#2{% +\xdef\blx@xml@dlistfilter#1#2{% ~~~~#2\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"}} -% []{} +% []{} \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}}} -% {} -\newrobustcmd*{\DeclareUniquenameTemplate}[1]{% +% []{} +\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"}} {}} -% []{} -\newrobustcmd*{\DeclareSortingNamekeyScheme}[2][]{% +\define@key{blx@untemp@namepart}{disambiguation}{% disambiguation option for namepart none|inits|full|fullonly + \appto\blx@tempc{ disambiguation="#1"}} + +% []{