summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/biblatex/latex/biblatex.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/biblatex/latex/biblatex.sty')
-rw-r--r--macros/latex/contrib/biblatex/latex/biblatex.sty290
1 files changed, 168 insertions, 122 deletions
diff --git a/macros/latex/contrib/biblatex/latex/biblatex.sty b/macros/latex/contrib/biblatex/latex/biblatex.sty
index 60f1674d7f..775d3ecfb3 100644
--- a/macros/latex/contrib/biblatex/latex/biblatex.sty
+++ b/macros/latex/contrib/biblatex/latex/biblatex.sty
@@ -12,8 +12,8 @@
% particular purpose.
% Set up the version strings here
-\def\abx@date{2019/08/31}
-\def\abx@version{3.13a}
+\def\abx@date{2019/12/01}
+\def\abx@version{3.14}
\def\abx@bbxid{\abx@date\space v\abx@version\space biblatex bibliography style (PK/MW)}
\def\abx@cbxid{\abx@date\space v\abx@version\space biblatex citation style (PK/MW)}
\def\abx@lbxid{\abx@date\space v\abx@version\space biblatex localization (PK/MW)}
@@ -22,7 +22,7 @@
% 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.6}
+\def\blx@bcfversion{3.7}
% This is not updated by build script as the bbl version
% does not necessarily change with the package version.
@@ -52,21 +52,6 @@
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
@@ -117,6 +102,9 @@
\endgroup}}
%% Compatibility
+% this hook is executed once at the beginning of loading the package
+% just a few lines down
+% and again later in an \AtEndPreamble hook
\def\blx@packageincompatibility{%
\def\do##1{%
\@ifpackageloaded{##1}
@@ -166,8 +154,15 @@
% still gives a weird error.
\blx@packageincompatibility
-% people should not be abusing noerroretextools, so warn if it is not needed
+% this part is only executed now
+\@ifpackageloaded{polyglossia}
+ {\global\cslet{blx@pkgloaded@polyglossia}\@empty}
+ {}
+
+% this part is deferred to \AtEndPreamble
\def\blx@packageincompatibility@endpreambleonly{%
+ % people should not be abusing noerroretextools,
+ % so warn if it is not needed
\ifcsdef{blx@noerroretextools}
{\@ifpackageloaded{etextools}
{}
@@ -176,7 +171,34 @@
but 'etextools' is not loaded.\MessageBreak
Please do not define '\string\blx@noerroretextools'\MessageBreak
unless you really need it}}}
- {}}
+ {}%
+ % polyglossia pretends to be babel, so the nested structure helps
+ % to make sure that babel really is babel
+ \@ifpackageloaded{polyglossia}
+ {\ifcsundef{blx@pkgloaded@polyglossia}
+ {\blx@error
+ {'polyglossia' loaded after biblatex}
+ {'polyglossia' must be loaded before biblatex}}
+ {}%
+ \@ifpackagelater{polyglossia}{2019/10/27}
+ {}
+ {\blx@warning@noline
+ {biblatex works best with 'polyglossia' 1.45\MessageBreak
+ or above.\MessageBreak
+ Please update 'polyglossia' to v1.45 (2019/10/27)\MessageBreak
+ or later.\MessageBreak
+ Variant detection will not work properly with\MessageBreak
+ older versions}}}
+ {\@ifpackageloaded{babel}
+ {\@ifpackagelater{babel}{2016/04/23}
+ {}
+ {\blx@error
+ {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}}
+ {}}}
\begingroup
\catcode`\#=12
@@ -201,69 +223,6 @@
\AtEndPreamble{%
\blx@packageincompatibility
\blx@packageincompatibility@endpreambleonly
- \def\blx@langstrings{}%
- % Set up sortlocale defaults and default language if babel/polyglossia is not loaded
- \ifdefstring\blx@sortlocale{auto}
- {\ifdef\bbl@main@language% babel or polyglossia is loaded
- {\edef\blx@sortlocale{\bbl@main@language}}
- {\def\blx@sortlocale{english}}}
- {}%
- \@ifpackageloaded{polyglossia}
- {% polyglossia support is not great when it comes to language variants,
- % so we better warn about it.
- \ifundef\blx@nowarnpolyglossia
- {\blx@warning@noline{%
- Package 'polyglossia' detected.\MessageBreak
- Please note that biblatex's polyglossia\MessageBreak
- interface has some rough edges.\MessageBreak
- Language variants are not picked up correctly.\MessageBreak
- You can disable this warning by defining the macro\MessageBreak
- '\string\blx@nowarnpolyglossia' in the preamble}}
- {}%
- % This is required for languages which are never explicitly selected
- % This check because \xpg@loaded is not defined in polyglossia <= v1.42.0
- \ifundef\xpg@loaded
- {\let\xpg@loaded\@empty
- \let\xpg@vloaded\@empty
- \blx@warning@noline{Upgrade package 'polyglossia' to > v1.42.0 recommended}}
- {}%
- \def\do#1{\blx@langsetup{#1}}%
- \expandafter\docsvlist\expandafter{\xpg@loaded}%
- \expandafter\docsvlist\expandafter{\xpg@vloaded}%
- \ifboolexpr{
- not togl {blx@autolangbib}
- and
- not togl {blx@autolangcite}}
- {\blx@mknoautolang}
- {\blx@mkautolangpoly}}
- {\@ifpackageloaded{babel}
- {% This is required for languages which are never explicitly selected
- \def\do#1{\blx@langsetup{#1}}%
- \expandafter\docsvlist\expandafter{\bbl@loaded}%
- \ifboolexpr{
- not togl {blx@autolangbib}
- and
- not togl {blx@autolangcite}}
- {\blx@mknoautolang}
- {\blx@mkautolangbabel}}
- {\blx@mknoautolang}}%
- % These already have defaults set to basically do nothing
- % so if the toggles are true, we need to define again since
- % mkautolang* redefines \blx@beglang
- % In turn, \blx@beglang defines \blx@endlang and so \blx@beglangcite and
- % \blx@endlangcite need redefining inside \blx@beglang after \blx@endlang
- % has been defined.
- \iftoggle{blx@autolangbib}
- {\let\blx@beglangbib\blx@beglang}
- {}%
- \iftoggle{blx@autolangcite}
- {\let\blx@beglangcite\blx@beglang}
- {}%
- \csuse{abx@extras@\blx@languagename}%
- \csuse{abx@strings@\blx@languagename}%
- \undef\blx@mkautolangbabel
- \undef\blx@mkautolangpoly
- \undef\blx@mknoautolang
\ifnum\blx@hyperref=\thr@@
\else
\ifnum\blx@hyperref=\z@
@@ -488,6 +447,75 @@
\sfcode`\'=\z@}}%
\let\do\noexpand}
+% no longer needed, keep for backwards compatibility
+\let\blx@langstrings\relax
+
+\def\blx@ifhyphenationundef#1{\ifcsundef{l@#1}}
+
+% polyglossia makes heavy use of \AtBeginDocument, so we need to use
+% it too to get in later than polyglossia's setup.
+% This means that load-order is relevant, boo ...
+\AtBeginDocument{%
+ \@ifpackageloaded{polyglossia}
+ {\ifundef\xpg@ifdefined
+ {}
+ {\def\blx@ifhyphenationundef#1#2#3{\xpg@ifdefined{#1}{#3}{#2}}}%
+ % This is required for languages which are never explicitly selected
+ % \xpg@bloaded is not defined in polyglossia < v1.45
+ \ifundef\xpg@bloaded
+ {\ifundef\xpg@loaded
+ {\let\xpg@bloaded\@empty}
+ {\let\xpg@bloaded\xpg@loaded}}
+ {}%
+ \global\let\blx@maplang\blx@maplang@polyglossia
+ \def\do#1{\blx@langsetup{#1}}%
+ \expandafter\docsvlist\expandafter{\xpg@bloaded}%
+ \ifboolexpr{
+ not togl {blx@autolangbib}
+ and
+ not togl {blx@autolangcite}}
+ {\blx@mknoautolang}
+ {\blx@mkautolangpoly}%
+ }
+ {\global\let\blx@maplang\blx@maplang@babel
+ \@ifpackageloaded{babel}
+ {% This is required for languages which are never explicitly selected
+ \def\do#1{\blx@langsetup{#1}}%
+ \expandafter\docsvlist\expandafter{\bbl@loaded}%
+ \ifboolexpr{
+ not togl {blx@autolangbib}
+ and
+ not togl {blx@autolangcite}}
+ {\blx@mknoautolang}
+ {\blx@mkautolangbabel}}
+ {\blx@mknoautolang}}%
+ % These already have defaults set to basically do nothing
+ % so if the toggles are true, we need to define again since
+ % mkautolang* redefines \blx@beglang
+ % In turn, \blx@beglang defines \blx@endlang and so \blx@beglangcite and
+ % \blx@endlangcite need redefining inside \blx@beglang after \blx@endlang
+ % has been defined.
+ \iftoggle{blx@autolangbib}
+ {\let\blx@beglangbib\blx@beglang}
+ {}%
+ \iftoggle{blx@autolangcite}
+ {\let\blx@beglangcite\blx@beglang}
+ {}%
+ \csuse{abx@extras@\blx@languagename}%
+ \csuse{abx@strings@\blx@languagename}%
+ \undef\blx@mkautolangbabel
+ \undef\blx@mkautolangpoly
+ \undef\blx@mknoautolang
+ % pick up the main document language as sortlocale if
+ % auto-detection is desired
+ \ifdefstring\blx@sortlocale{auto}
+ {\ifdef\blx@main@language% babel or polyglossia is loaded
+ {\edef\blx@sortlocale{\blx@main@language}}
+ {\def\blx@sortlocale{english}}}
+ {}%
+}
+
+
\begingroup
\@makeother\#
% \relax: gobble newline -> titletoc.sty
@@ -3994,8 +4022,8 @@
{\xifinlist\abx@field@langid\blx@cmksc@lang
{\blx@mksc@ii}
{\@firstofone}}
- {\ifdef\bbl@main@language
- {\xifinlist\bbl@main@language\blx@cmksc@lang
+ {\ifdef\blx@main@language
+ {\xifinlist\blx@main@language\blx@cmksc@lang
{\blx@mksc@ii}
{\@firstofone}}
{\xifinlist\blx@languagename\blx@cmksc@lang
@@ -5446,14 +5474,14 @@
% {<language>}{<exceptions>}
\newrobustcmd*{\DefineHyphenationExceptions}[2]{%
- \ifcsundef{l@#1}
+ \blx@ifhyphenationundef{#1}
{\blx@warn@nohyph{#1}}
{}%
\csgappto{blx@hook@hyph@#1}{\blx@hyphexcept{#1}{#2}}}
\@onlypreamble\DefineHyphenationExceptions
\def\blx@hyphexcept#1#2{%
- \ifcsundef{l@#1}
+ \blx@ifhyphenationundef{#1}
{\blx@warn@nohyph{#1}}
{\begingroup
\language\csname l@#1\endcsname\relax
@@ -6326,7 +6354,7 @@
\def\currentlang{\blx@languagename}
% {<language>}{<strings>}
-\def\blx@maplang#1#2{%
+\def\blx@maplang@babel#1#2{%
\csgappto{extras#1}{%
\blx@resetpunct
\csuse{abx@extras@#2}%
@@ -6335,6 +6363,19 @@
\blx@resetpunct
\csuse{abx@noextras@#2}}}
+\def\blx@maplang@polyglossia#1#2{%
+ \csgappto{blockextras@bbl@#1}{%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{inlinextras@bbl@#1}{%
+ \blx@resetpunct
+ \csuse{abx@extras@#2}%
+ \csuse{abx@strings@#2}}%
+ \csgappto{noextras@bbl@#1}{%
+ \blx@resetpunct
+ \csuse{abx@noextras@#2}}}
+
%% babel/polyglossia interface
\def\blx@beglang{\blx@clearlang\begingroup}
\def\blx@endlang{\endgroup}
@@ -6346,7 +6387,7 @@
\let\blx@hook@initlang\@empty
\let\blx@imc@mainlang\@empty
\def\blx@hyphenreset{%
- \ifcsundef{l@\blx@languagename}
+ \blx@ifhyphenationundef{\blx@languagename}
{}
{\language\csname l@\blx@languagename\endcsname\relax}%
\ifcsundef{\blx@languagename hyphenmins}
@@ -6364,7 +6405,7 @@
{\blx@error
{No default 'babel' language defined}
{You must define a default language for 'babel'}}
- {}%
+ {\let\blx@main@language\bbl@main@language}%
\pretocmd\select@language{\blx@langsetup{#1}}
{\ifdef\blx@thelangenv
{\def\blx@beglang{%
@@ -6381,7 +6422,7 @@
{\let\abx@field@langid\blx@forcelanguagename}
{}%
\let\blx@languagename\abx@field@langid% track global language
- \ifcsundef{l@\abx@field@langid}
+ \blx@ifhyphenationundef{\abx@field@langid}
{\blx@warn@nohyph{\abx@field@langid}}
{\blx@hook@initlang
\def\blx@endlang{%
@@ -6398,37 +6439,38 @@
\expandafter{\abx@field@langid}}}
{}}}
{}%
- \def\blx@langstrings{}%
- \def\blx@imc@mainlang{\select@language{\bbl@main@language}}%
- \blx@langsetup\bbl@main@language}
+ \def\blx@imc@mainlang{\select@language{\blx@main@language}}%
+ \blx@langsetup\blx@main@language}
{\blx@err@patch{'babel' package}%
\blx@mknoautolang}}
\gdef\blx@mkautolangpoly{%
- \ifundef\bbl@main@language
- {\blx@error
- {No default 'polyglossia' language defined}
- {You must define a default language for 'polyglossia'}}
- {}%
+ \ifundef\mainbabelname
+ {\ifundef\bbl@main@language
+ {\blx@error
+ {No default 'polyglossia' language defined}
+ {You must define a default language for 'polyglossia'}}
+ {\let\blx@main@language\bbl@main@language}}
+ {\let\blx@main@language\mainbabelname}%
\edef\blx@saved@underscore@catcode{\the\catcode`\_}%
\catcode`\_=11% polyglossia uses "_" as a letter
- \pretocmd\select@language{\blx@langsetup{#1}}
+ \pretocmd\select@language{\blx@langsetup{\babelname}}
{\ifdef\blx@thelangenv
{\def\blx@beglang{%
\blx@clearlang
\begingroup
- % Need to override all entries, regardless of if there is a langid
- % if language=<language> option is given
- \ifboolexpr { test {\ifdef\abx@field@langid }
- or
- test {\ifdef\blx@forcelanguagename} }
+ % Need to override all entries, regardless of if there is a
+ % langid if language=<language> option is given
+ \ifboolexpr { test {\ifdef\abx@field@langid }
+ or
+ test {\ifdef\blx@forcelanguagename} }
% override local langid if we forced it with
% language=<language> option
{\ifdef\blx@forcelanguagename
{\let\abx@field@langid\blx@forcelanguagename}
{}%
\let\blx@languagename\abx@field@langid% track global language
- \ifcsundef{l@\abx@field@langid}
+ \blx@ifhyphenationundef{\abx@field@langid}
{\blx@warn@nohyph{\abx@field@langid}}
{\blx@hook@initlang
\def\blx@endlang{%
@@ -6457,18 +6499,8 @@
\csuse{abx@strings@\abx@field@langid}}}}
{}}}
{}%
- % polyglossia needs this - it doesn't get the
- % strings automatically set for some reason
- \def\blx@langstrings{%
- \csuse{abx@extras@\languagename}%
- \csuse{abx@strings@\languagename}}%
- \def\blx@imc@mainlang{%
- \select@language{\bbl@main@language}%
- % These lines are equal to \blx@maplang
- \blx@resetpunct
- \csuse{abx@extras@\bbl@main@language}%
- \csuse{abx@strings@\bbl@main@language}}%
- \blx@langsetup\bbl@main@language}
+ \def\blx@imc@mainlang{\select@language{\blx@main@language}}%
+ \blx@langsetup\blx@main@language}
{\blx@err@patch{'polyglossia' package}%
\blx@mknoautolang}%
\catcode`\_=\blx@saved@underscore@catcode\relax}
@@ -9126,7 +9158,6 @@
\blx@safe@actives
\setkeys{blx@bhd}{#1}%
\blx@rest@actives
- \blx@langstrings
\blx@bibheading\blx@theheading\blx@thetitle
\endgroup}
@@ -9316,7 +9347,6 @@
% {<entrykey>,...}
\def\blx@bibliography#1{%
- \blx@langstrings
\blx@bibheading\blx@theheading\blx@thetitle
\blx@bibnote\blx@theprenote
\begingroup
@@ -9666,7 +9696,6 @@
\else
\@restonecolfalse
\fi
- \blx@langstrings
\blx@bibheading\blx@theheading\blx@thetitle
\blx@bibnote\blx@theprenote
\begingroup
@@ -11407,7 +11436,6 @@
{}
{\toggletrue{blx@citation}}%
\blx@blxinit
- \blx@langstrings
\citesetup
\blx@setsfcodes
\blx@postpunct@agroup
@@ -12888,6 +12916,7 @@
\blx@bcf@datamodel@fields
}%
\blx@bcf@datamodel@entryfields
+ \blx@bcf@datamodel@multiscript@entryfields
\blx@bcf@datamodel@constraints
}%
}%
@@ -13153,6 +13182,22 @@
\ifstrequal{#1}{true}
{\appto\blx@tempf{ map\string_final="1"}}
{}}
+\define@key{blx@sourcemap@step}{cited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_cited="1"}}
+ {}}
+\define@key{blx@sourcemap@step}{nocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_nocited="1"}}
+ {}}
+\define@key{blx@sourcemap@step}{citedornocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_citedornocited="1"}}
+ {}}
+\define@key{blx@sourcemap@step}{allnocited}[true]{% true|false
+ \ifstrequal{#1}{true}
+ {\appto\blx@tempf{ map\string_entrykey\string_allnocited="1"}}
+ {}}
\define@key{blx@sourcemap@step}{fieldsource}{% characters
\eappto\blx@tempf{ map\string_field\string_source="#1"}}
\define@key{blx@sourcemap@step}{notfield}{% characters
@@ -15264,6 +15309,7 @@
\def\ResetDatamodelFields{\blx@warn@dm{ResetDatamodelFields}}
\def\ResetDatamodelEntryfields{\blx@warn@dm{ResetDatamodelEntryfields}}
\def\ResetDatamodelConstraints{\blx@warn@dm{ResetDatamodelConstraints}}
+ \renewcommand*{\DeclareDatamodelMultiscriptEntryfields}[1]{\blx@warn@dm{DeclareDatamodelMultiscriptEntryfields}}
\renewcommand*{\DeclareDatamodelEntrytypes}[2][]{\blx@warn@dm{DeclareDatamodelEntrytypes}}
\renewcommand*{\DeclareDatamodelFields}[2][]{\blx@warn@dm{DeclareDatamodelFields}}
\renewcommand*{\DeclareDatamodelEntryfields}[2][]{\blx@warn@dm{DeclareDatamodelEntryfields}}