summaryrefslogtreecommitdiff
path: root/macros/latex-dev/base
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex-dev/base')
-rw-r--r--macros/latex-dev/base/README.md2
-rw-r--r--macros/latex-dev/base/alltt.pdfbin223831 -> 223831 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin264112 -> 264112 bytes
-rw-r--r--macros/latex-dev/base/changes.txt44
-rw-r--r--macros/latex-dev/base/classes.pdfbin560611 -> 560611 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin414419 -> 414419 bytes
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin292160 -> 292160 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin257314 -> 257314 bytes
-rw-r--r--macros/latex-dev/base/doc-code.pdfbin1077609 -> 1077527 bytes
-rw-r--r--macros/latex-dev/base/doc.pdfbin755152 -> 755064 bytes
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin504627 -> 504553 bytes
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1318126 -> 1318126 bytes
-rw-r--r--macros/latex-dev/base/exscale.pdfbin204711 -> 204711 bytes
-rw-r--r--macros/latex-dev/base/fix-cm.pdfbin287733 -> 287733 bytes
-rw-r--r--macros/latex-dev/base/fntguide.pdfbin517838 -> 517838 bytes
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin161713 -> 161713 bytes
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin221211 -> 221211 bytes
-rw-r--r--macros/latex-dev/base/inputenc.pdfbin318204 -> 318204 bytes
-rw-r--r--macros/latex-dev/base/lamport-manual.pdfbin170878 -> 170878 bytes
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin281906 -> 281906 bytes
-rw-r--r--macros/latex-dev/base/latexsym.pdfbin200760 -> 200760 bytes
-rw-r--r--macros/latex-dev/base/lb2.pdfbin252140 -> 252140 bytes
-rw-r--r--macros/latex-dev/base/letter.pdfbin337294 -> 337630 bytes
-rw-r--r--macros/latex-dev/base/lgc2.pdfbin215684 -> 215684 bytes
-rw-r--r--macros/latex-dev/base/lppl.pdfbin132382 -> 132382 bytes
-rw-r--r--macros/latex-dev/base/ltclass.dtx39
-rw-r--r--macros/latex-dev/base/ltcmdhooks-code.pdfbin719285 -> 719104 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks-doc.pdfbin478781 -> 478606 bytes
-rw-r--r--macros/latex-dev/base/ltdefns.dtx17
-rw-r--r--macros/latex-dev/base/ltfilehook-code.pdfbin803118 -> 803024 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook-doc.pdfbin547986 -> 547895 bytes
-rw-r--r--macros/latex-dev/base/ltfinal.dtx60
-rw-r--r--macros/latex-dev/base/lthooks-code.pdfbin1091718 -> 1091409 bytes
-rw-r--r--macros/latex-dev/base/lthooks-doc.pdfbin701768 -> 701468 bytes
-rw-r--r--macros/latex-dev/base/ltkeys.dtx26
-rw-r--r--macros/latex-dev/base/ltluatex.dtx224
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin318919 -> 325457 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-code.pdfbin715934 -> 715524 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-doc.pdfbin586305 -> 585896 bytes
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin1225147 -> 1243036 bytes
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin161519 -> 161518 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin159802 -> 159792 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin159347 -> 159332 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin152526 -> 152525 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin174493 -> 174494 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin142861 -> 142849 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin137791 -> 137811 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin155050 -> 155053 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin129572 -> 129570 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin169425 -> 169416 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin111974 -> 111948 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin156556 -> 156551 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin182252 -> 182225 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin170452 -> 170473 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin130324 -> 130309 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin138082 -> 138073 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin166226 -> 166228 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin38028 -> 38033 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin230031 -> 230028 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin318587 -> 318548 bytes
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin244885 -> 244867 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin317795 -> 317773 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin286598 -> 286591 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin265290 -> 265279 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin204955 -> 204935 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin379476 -> 379462 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin250597 -> 250592 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin376643 -> 376643 bytes
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin455126 -> 455107 bytes
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin511917 -> 511909 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin526372 -> 526323 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin546153 -> 546160 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.pdfbin522387 -> 522412 bytes
-rw-r--r--macros/latex-dev/base/ltnews34.pdfbin508096 -> 508044 bytes
-rw-r--r--macros/latex-dev/base/ltnews35.pdfbin563132 -> 563089 bytes
-rw-r--r--macros/latex-dev/base/ltnews36.pdfbin495767 -> 517577 bytes
-rw-r--r--macros/latex-dev/base/ltnews36.tex223
-rw-r--r--macros/latex-dev/base/ltpara-code.pdfbin667444 -> 667097 bytes
-rw-r--r--macros/latex-dev/base/ltpara-doc.pdfbin560308 -> 559976 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-code.pdfbin818922 -> 818741 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-doc.pdfbin563691 -> 563518 bytes
-rw-r--r--macros/latex-dev/base/ltvers.dtx4
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin219349 -> 219349 bytes
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin242645 -> 242645 bytes
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin165821 -> 165821 bytes
-rw-r--r--macros/latex-dev/base/modguide.pdfbin257804 -> 257804 bytes
-rw-r--r--macros/latex-dev/base/nfssfont.pdfbin211180 -> 211180 bytes
-rw-r--r--macros/latex-dev/base/proc.pdfbin227059 -> 227059 bytes
-rw-r--r--macros/latex-dev/base/slides.pdfbin375518 -> 375518 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin234191 -> 234191 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin5750608 -> 5769593 bytes
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin189680 -> 189704 bytes
-rw-r--r--macros/latex-dev/base/tlc2.pdfbin290615 -> 290615 bytes
-rw-r--r--macros/latex-dev/base/tulm.pdfbin162772 -> 162772 bytes
-rw-r--r--macros/latex-dev/base/usrguide-historic.pdfbin438515 -> 438515 bytes
-rw-r--r--macros/latex-dev/base/usrguide.pdfbin473895 -> 473980 bytes
-rw-r--r--macros/latex-dev/base/usrguide.tex11
-rw-r--r--macros/latex-dev/base/utf8ienc.dtx4
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin353663 -> 353237 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin146198 -> 146198 bytes
100 files changed, 536 insertions, 118 deletions
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index f3b01200a8..8fb5e8e894 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2022-11-01 pre-release 2
+Release 2023-05-01 pre-release 0
Overview
--------
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index 637fe1ad6b..35b709a563 100644
--- a/macros/latex-dev/base/alltt.pdf
+++ b/macros/latex-dev/base/alltt.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf
index e2b3128fa4..3a048a4bfc 100644
--- a/macros/latex-dev/base/cfgguide.pdf
+++ b/macros/latex-dev/base/cfgguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt
index 874426197d..0ae9b55c03 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -6,6 +6,46 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
================================================================================
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2022-11-01 Release
+#########################
+
+2022-10-26 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltfinal.dtx:
+ Introduce optional argument for case-changing commands
+ Make case changing commands language-aware
+ Auto-detect babel locale for case changing
+
+2022-10-22 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltclass.dtx, ltdefns.dtx: Further \protect guards for gh/932
+
+ * utf8ienc.dtx: Correct the description of UTF-8 octets.
+
+2022-10-22 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltkeys.dtx: Correct handling of unknown option list
+
+2022-10-20 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltclass.dtx, ltkeys.dtx:
+ Correct an argument for a message
+ Define key option handler in ltkeys
+
+2022-10-10 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltclass.dtx: use \protected@edef rather than \edef when expanding option lists
+
+2022-10-03 Marcel Krüger <marcel.krueger@latex-project.org>
+
+ * ltluatex.dtx:
+ Add ordering rules for callback handlers
+
2022-09-20 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* ltfssdcl.dtx (section{Interface Commands}):
@@ -92,10 +132,6 @@ are not part of the distribution.
* cmfonts.fdd
Add font definitions for slanted small caps (gh/782)
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
#########################
# 2022-06-01 PL5 Release
#########################
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index 7a69e40f0d..0f3e7a5cce 100644
--- a/macros/latex-dev/base/classes.pdf
+++ b/macros/latex-dev/base/classes.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf
index 0385ff7c86..f164e9b482 100644
--- a/macros/latex-dev/base/clsguide.pdf
+++ b/macros/latex-dev/base/clsguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf
index 928b09bd48..9293df614a 100644
--- a/macros/latex-dev/base/cmfonts.pdf
+++ b/macros/latex-dev/base/cmfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf
index 7157148a52..ad43e0b7f1 100644
--- a/macros/latex-dev/base/cyrguide.pdf
+++ b/macros/latex-dev/base/cyrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc-code.pdf b/macros/latex-dev/base/doc-code.pdf
index 7fd9fd58aa..5da305cde9 100644
--- a/macros/latex-dev/base/doc-code.pdf
+++ b/macros/latex-dev/base/doc-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf
index d6977bd556..ba56cfe561 100644
--- a/macros/latex-dev/base/doc.pdf
+++ b/macros/latex-dev/base/doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf
index 9ec37ba5f9..f3ef8b3fc3 100644
--- a/macros/latex-dev/base/docstrip.pdf
+++ b/macros/latex-dev/base/docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf
index 98832bbcfc..255563550b 100644
--- a/macros/latex-dev/base/encguide.pdf
+++ b/macros/latex-dev/base/encguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf
index f4ce14e8d9..38a778e1b6 100644
--- a/macros/latex-dev/base/exscale.pdf
+++ b/macros/latex-dev/base/exscale.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf
index 0337544f01..90892c6caa 100644
--- a/macros/latex-dev/base/fix-cm.pdf
+++ b/macros/latex-dev/base/fix-cm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf
index 784debd628..d0644e8279 100644
--- a/macros/latex-dev/base/fntguide.pdf
+++ b/macros/latex-dev/base/fntguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf
index d737597a7f..bc70a0cf14 100644
--- a/macros/latex-dev/base/graphpap.pdf
+++ b/macros/latex-dev/base/graphpap.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf
index d01f901ebd..35f52dca6e 100644
--- a/macros/latex-dev/base/ifthen.pdf
+++ b/macros/latex-dev/base/ifthen.pdf
Binary files differ
diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf
index 2810415e32..90f5aac0cb 100644
--- a/macros/latex-dev/base/inputenc.pdf
+++ b/macros/latex-dev/base/inputenc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lamport-manual.pdf b/macros/latex-dev/base/lamport-manual.pdf
index 9d43e51ca6..f18b52c99e 100644
--- a/macros/latex-dev/base/lamport-manual.pdf
+++ b/macros/latex-dev/base/lamport-manual.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index 48609a519f..35b2875861 100644
--- a/macros/latex-dev/base/latexrelease.pdf
+++ b/macros/latex-dev/base/latexrelease.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf
index d224c50148..0abf36f12f 100644
--- a/macros/latex-dev/base/latexsym.pdf
+++ b/macros/latex-dev/base/latexsym.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf
index fb1cdf8ab3..394252b206 100644
--- a/macros/latex-dev/base/lb2.pdf
+++ b/macros/latex-dev/base/lb2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf
index 91f4b7da0b..08b5b52d86 100644
--- a/macros/latex-dev/base/letter.pdf
+++ b/macros/latex-dev/base/letter.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf
index 060cbdec9f..bc13c55acb 100644
--- a/macros/latex-dev/base/lgc2.pdf
+++ b/macros/latex-dev/base/lgc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf
index 7e069bfc09..1240d11e78 100644
--- a/macros/latex-dev/base/lppl.pdf
+++ b/macros/latex-dev/base/lppl.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index 35c4251fce..a525b6f573 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltclass.dtx}
- [2022/06/20 v1.5c LaTeX Kernel (Class & Package Interface)]
+ [2022/10/22 v1.5e LaTeX Kernel (Class & Package Interface)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltclass.dtx}
@@ -1302,7 +1302,10 @@
{\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}%
\reserved@a\reserved@b
\@expl@@@filehook@clear@replacement@flag@@
- \expandafter\xdef\csname opt@\reserved@a\endcsname{%
+% \end{macrocode}
+% \changes{v1.5d}{2022/10/10}{Use \cs{protected@xdef}.}
+% \begin{macrocode}
+ \expandafter\protected@xdef\csname opt@\reserved@a\endcsname{%
\@ifundefined{opt@\reserved@a}\@empty
{\csname opt@\reserved@a\endcsname,}%
\zap@space#2 \@empty}%
@@ -1476,10 +1479,12 @@
% {Star form added.}
% \changes{v0.2c}{1993/11/17}
% {restoring \cs{@fileswith@pti@ns} added.}
+% \changes{v1.5d}{2022/10/10}
+% {Use \cs{protected@edef}.}
% \begin{macrocode}
\def\ProcessOptions{%
\let\ds@\@empty
- \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+ \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
\@ifstar\@xprocess@ptions\@process@ptions}
\@onlypreamble\ProcessOptions
% \end{macrocode}
@@ -1505,6 +1510,7 @@
% \changes{v0.2y}{1994/02/07}
% {Add extra ,s so `two' is not matched with `twocolumn'}
% \changes{v1.3z}{2021/03/05}{modify so braces to not give errors (gh/513)}
+% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}}
% \begin{macrocode}
%</2ekernel>
%<latexrelease>\IncludeInRelease{2021/06/01}%
@@ -1515,7 +1521,7 @@
\ifx\@classoptionslist\relax\else
\@for\CurrentOption:=\@classoptionslist\do{%
\ifx\CurrentOption\@empty\else
- \@ifundefined{ds@\CurrentOption}{}{%
+ \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{%
\@use@ption
\expandafter\let\csname ds@\CurrentOption\endcsname\@empty
}%
@@ -1552,6 +1558,7 @@
% \end{macrocode}
%
% The common part of |\ProcessOptions| and |\ProcessOptions*|.
+% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}}
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
@@ -1559,7 +1566,7 @@
%<latexrelease> {\@process@pti@ns}{Unused options issue}%
\def\@process@pti@ns{%
\@for\CurrentOption:=\@curroptions\do{%
- \@ifundefined{ds@\CurrentOption}%
+ \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}%
{\@use@ption
\default@ds}%
% \end{macrocode}
@@ -1627,6 +1634,7 @@
% \changes{v1.0e}{1994/05/17}
% {Execute option after removing from list, not before}
% \changes{v1.3x}{2021/02/18}{filter out =value from unused option list (gh/85)}
+% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}}
% \begin{macrocode}
%</2ekernel>
%<latexrelease>\IncludeInRelease{2021/06/01}%
@@ -1636,7 +1644,7 @@
\@expandtwoargs\@removeelement
{\expandafter\@remove@eq@value\CurrentOption=\@nil}%
\@unusedoptionlist\@unusedoptionlist
- \csname ds@\CurrentOption\endcsname}
+ \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
@@ -1988,6 +1996,7 @@
% \changes{v2.1b}{2016/11/09}
% {Improve \cs{ifx} tests PR/4497}
% \changes{v1.3x}{2021/02/18}{save raw class option list (gh/85)}
+% \changes{v1.5e}{2022/10/22}{Use \cs{protected@xdef}.}
% \begin{macrocode}
%</2ekernel>
%<latexrelease>\IncludeInRelease{2020/10/01}%
@@ -1996,7 +2005,7 @@
\def\@fileswith@pti@ns#1[#2]#3[#4]{%
\ifx#1\@clsextension
\ifx\@classoptionslist\relax
- \xdef\@classoptionslist{\zap@space#2 \@empty}%
+ \protected@xdef\@classoptionslist{\zap@space#2 \@empty}%
% \end{macrocode}
% Save raw class list.
% \begin{macrocode}
@@ -2177,21 +2186,24 @@
% \end{macrocode}
% \changes{v1.5b}{2022/03/18}{Switch to \cs{ProcessKeyOptions}}
% \changes{v1.5c}{2022/06/20}{Pass raw options to \cs{ProcessKeyOptions}}
+% \changes{v1.5e}{2022/10/20}
+% {Define key option handler in \pkg{ltkeys}}
% In the current preferred approach, a key family name will exist for
% processing using \pkg{ltkeys}. In that case, we replace the previous
% package options with the new ones, then call the key handler.
% Otherwise, we use the more classical clash handler.
% \begin{macrocode}
{%
- \@ifundefined{opt@fam@\@currname.\@currext}
+ \@ifundefined{opt@handler@\@currname.\@currext}
{\@onefilewithoptions@clashchk{#2}}
{%
- \expandafter\edef\csname opt@\@currname.\@currext\endcsname
+% \end{macrocode}
+% \changes{v1.5d}{2022/10/10}{Use \cs{protected@edef}.}
+% \begin{macrocode}
+ \expandafter\protected@edef\csname opt@\@currname.\@currext\endcsname
{\zap@space#2 \@empty}%
\@namedef{@raw@opt@\@currname.\@currext}{#2}%
- \expandafter\expandafter\expandafter\ProcessKeyOptions
- \expandafter\expandafter\expandafter
- [\csname opt@fam@\@currname.\@currext\endcsname]%
+ \@nameuse{opt@handler@\@currname.\@currext}%
}%
}%
{\makeatletter
@@ -2693,10 +2705,11 @@
% \changes{v0.2v}{1994/01/29}
% {Macro added.}
% \changes{v1.0t}{1995/11/14}{Allow empty option}
+% \changes{v1.5d}{2022/10/10}{Use \cs{protected@edef}.}
% \begin{macrocode}
\def\@@unprocessedoptions{%
\ifx\@currext\@pkgextension
- \edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
+ \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}%
\@for\CurrentOption:=\@curroptions\do{%
\ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}%
\fi}
diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf
index a01a26c272..654c4f6a2d 100644
--- a/macros/latex-dev/base/ltcmdhooks-code.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltcmdhooks-doc.pdf b/macros/latex-dev/base/ltcmdhooks-doc.pdf
index 87d2d0245b..a036d2e748 100644
--- a/macros/latex-dev/base/ltcmdhooks-doc.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltdefns.dtx b/macros/latex-dev/base/ltdefns.dtx
index 9e1fa43fad..bd820e7cf2 100644
--- a/macros/latex-dev/base/ltdefns.dtx
+++ b/macros/latex-dev/base/ltdefns.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltdefns.dtx}
- [2022/05/13 v1.5q LaTeX Kernel (definition commands)]
+ [2022/05/22 v1.5r LaTeX Kernel (definition commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltdefns.dtx}
@@ -966,9 +966,22 @@
%
% \begin{macro}{\@expandtwoargs}
% A macro to totally expand two arguments to another macro
+% \changes{v1.5r}{2022/10/22}{Use \cs{protected@edef}.}
% \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2022/11/01}%
+%<latexrelease> {\@expandtwoargs}{protected edef}%
+%<*2ekernel|latexrelease>
\def\@expandtwoargs#1#2#3{%
-\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a}
+\protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{00/00/00}%
+%<latexrelease> {\@expandtwoargs}{protected edef}%
+%<latexrelease>\def\@expandtwoargs#1#2#3{%
+%<latexrelease>\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf
index 2956089442..24cc0545ec 100644
--- a/macros/latex-dev/base/ltfilehook-code.pdf
+++ b/macros/latex-dev/base/ltfilehook-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfilehook-doc.pdf b/macros/latex-dev/base/ltfilehook-doc.pdf
index 804b62bd6b..65e8fade02 100644
--- a/macros/latex-dev/base/ltfilehook-doc.pdf
+++ b/macros/latex-dev/base/ltfilehook-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfinal.dtx b/macros/latex-dev/base/ltfinal.dtx
index 69ea7bc942..7f4bef3bcc 100644
--- a/macros/latex-dev/base/ltfinal.dtx
+++ b/macros/latex-dev/base/ltfinal.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltfinal.dtx}
- [2022/08/29 v2.2w LaTeX Kernel (Final Settings)]
+ [2022/10/26 v2.2x LaTeX Kernel (Final Settings)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfinal.dtx}
@@ -1085,6 +1085,9 @@
% \changes{v2.2t}{2022/04/21}{Support \cs{noexpand} in argument of \cs{@expl@text@uppercase@@n}}
% \changes{v2.2v}{2022/06/30}{Just use \cs{text_lowercase:n} without \cs{protectd@edf} gh/881x}%
% \changes{v2.2w}{2022/07/04}{Introduced \cs{CaseSwitch}, \cs{DeclareCaseChangeEquivalent} and \cs{MakeTitlecase} to support hooking into case changing gh/889}%
+% \changes{v2.2x}{2022/10/26}{Introduce optional argument for case-changing commands}
+% \changes{v2.2x}{2022/10/26}{Make case changing commands language-aware}
+% \changes{v2.2x}{2022/10/26}{Auto-detect \pkg{babel} locale}
% Wrappers around the L3 case changing functions.
% |\protected| to make them mostly safe as replacements for |uppercase|
% and |\lowercase|.
@@ -1109,12 +1112,55 @@
% functions.
% \begin{macrocode}
\ExplSyntaxOn
-\cs_new_protected_nopar:cpn{MakeUppercase~}{\text_uppercase:n}
-\cs_set_nopar:Npx\MakeUppercase#1{\use:c{MakeUppercase~}{#1}}
-\cs_new_protected_nopar:cpn{MakeLowercase~}{\text_lowercase:n}
-\cs_set_nopar:Npx\MakeLowercase#1{\use:c{MakeLowercase~}{#1}}
-\cs_new_protected_nopar:cpn{MakeTitlecase~}{\text_titlecase:n}
-\cs_set_nopar:Npx\MakeTitlecase#1{\use:c{MakeTitlecase~}{#1}}
+\keys_define:nn { __kernel }
+ {
+ lang .str_set:N = \reserved@a ,
+ locale .str_set:N = \reserved@a
+ }
+\cs_new_protected:Npn \@@text@case@aux #1#2#3
+ {
+ \cs_set_nopar:Npn \reserved@a { }
+ \tl_if_blank:nTF {#2}
+ { \@@text@case@aux@ }
+ { \keys_set:nn { __kernel } {#2} }
+ \use:c { text_ #1 case:Vn } \reserved@a {#3}
+ }
+\cs_new_protected:Npn \@@text@case@aux@ { }
+\tl_gput_right:Nn \@kernel@after@begindocument
+ {
+ \@ifpackageloaded { babel }
+ {
+ \@ifpackagelater { babel } { 2020-01-15 }
+ {
+ \cs_gset_protected:Npn \@@text@case@aux@
+ {
+ \str_set:Nx \reserved@a
+ { \localeinfo* { tag.bcp47 } }
+ }
+ }
+ { }
+ }
+ { }
+ }
+\exp_args_generate:n { cnx }
+% \end{macrocode}
+% The odd use of \emph{three} spaces here is needed as \pkg{ltcmd} uses the
+% name with one and two spaces to give a `friendly' error message for a runaway
+% argument: that means we can't use it here.
+% \begin{macrocode}
+\cs_set_protected:Npn \reserved@a #1
+ {
+ \cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V }
+ \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2
+ { \exp_not:N \@@text@case@aux { \str_lowercase:n {#1} } {##1} {##2} }
+ \ExpandArgs { cnx } \NewExpandableDocumentCommand
+ { Make#1case }
+ { O{} +m }
+ { \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} }
+ }
+\reserved@a { Upper }
+\reserved@a { Lower }
+\reserved@a { Title }
% \end{macrocode}
%
% \changes{v2.2u}{2022/06/02}{Add \cs{NoCaseChange}}
diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf
index 88c2bc642e..9a8066d7e5 100644
--- a/macros/latex-dev/base/lthooks-code.pdf
+++ b/macros/latex-dev/base/lthooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lthooks-doc.pdf b/macros/latex-dev/base/lthooks-doc.pdf
index 151c4c286b..0fd3ab67ac 100644
--- a/macros/latex-dev/base/lthooks-doc.pdf
+++ b/macros/latex-dev/base/lthooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltkeys.dtx b/macros/latex-dev/base/ltkeys.dtx
index 88f9315f8a..edf12f7cb2 100644
--- a/macros/latex-dev/base/ltkeys.dtx
+++ b/macros/latex-dev/base/ltkeys.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltkeys.dtx}
- [2022/08/21 v1.0k LaTeX Kernel (Keyval options)]
+ [2022/10/22 v1.0l LaTeX Kernel (Keyval options)]
% \iffalse
\documentclass{l3doc}
\GetFileInfo{ltkeys.dtx}
@@ -209,6 +209,8 @@
% \begin{macro}{\@@_options_aux:n}
% \changes{v1.0b}{2022/01/15}
% {Clear option list in end-of-package hook}
+% \changes{v1.0l}{2022/10/20}
+% {Define key option handler in \pkg{ltkeys}}
% \changes{v1.0i}{2022/07/05}{Support \cs{CurrentOption}}
% \begin{macro}{\@@_options_end:}
% The main function calls functions to collect up the global and local
@@ -225,7 +227,8 @@
{ \@@_options_expand_module:Nn \@@_options_aux:n {#1} }
\cs_new_protected:Npn \@@_options_aux:n #1
{
- \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#1}
+ \cs_gset_protected:cpn { opt@handler@\@currname.\@currext }
+ { \ProcessKeyOptions [ #1 ] }
\cs_set_protected:Npn \@@_option_end: { }
\clist_clear:N \l_@@_options_clist
\@@_options_global:n {#1}
@@ -294,6 +297,7 @@
% \begin{macro}{\@@_options_class:nnn}
% \changes{v1.0h}{2022/06/20}{New function}
% \changes{v1.0i}{2022/07/05}{Correct naming of raw class options storage}
+% \changes{v1.0l}{2022/10/22}{Correct handling of unused option list}
% For classes, each option (stripped of any content after |=|)
% is checked for existence as a key. If found, the option is added to
% the combined list for processing. On the other hand, unused options
@@ -323,11 +327,12 @@
\cs_new_protected:Npn \@@_options_class:nnn #1#2#3
{
\keys_if_exist:nnTF {#3} {#1}
- { \clist_put_right:Nn \l_@@_options_clist {#2} }
{
- \str_if_eq:eeF
- { \exp_not:v { @raw@opt@ \@currname . \@currext } }
- { \exp_not:V \@raw@classoptionslist }
+ \clist_put_right:Nn \l_@@_options_clist {#2}
+ \clist_remove_all:Nn \@unusedoptionlist {#1}
+ }
+ {
+ \clist_if_in:NnF \@unusedoptionlist {#1}
{ \clist_put_right:Nn \@unusedoptionlist {#1} }
}
}
@@ -475,6 +480,7 @@
%
% \begin{macro}{\@@_options_loaded:n}
% \begin{macro}{\@@_options_loaded:nn}
+% \changes{v1.0l}{2022/10/20}{Correct an argument for a message}
% Indicates that the load-time options for a package have been processed:
% once this has happened, make them unavailable either with a warning or
% an error.
@@ -496,11 +502,9 @@
\cs_new_protected:Npn \@@_options_loaded:nn #1#2
{
\bool_if:NTF \l_@@_options_loading_bool
- {
- \msg_warning:nnxx { keys } { load-option-ignored }
- { \use:c { opt@fam@\@currname.\@currext } } {#2}
- }
- { \msg_error:nnnn { keys } { load-only } {#1} {#2} }
+ { \msg_warning:nnnn { keys } { load-option-ignored } }
+ { \msg_error:nnnn { keys } { load-only } }
+ {#1} {#2}
}
% \end{macrocode}
% \changes{v1.0j}{2022/07/23}
diff --git a/macros/latex-dev/base/ltluatex.dtx b/macros/latex-dev/base/ltluatex.dtx
index ab81c3620a..6c66a96be0 100644
--- a/macros/latex-dev/base/ltluatex.dtx
+++ b/macros/latex-dev/base/ltluatex.dtx
@@ -28,7 +28,7 @@
\ProvidesFile{ltluatex.dtx}
%</driver>
%<*tex>
-[2022/08/13 v1.1y
+[2022/10/03 v1.2a
%</tex>
%<plain> LuaTeX support for plain TeX (core)
%<*tex>
@@ -380,7 +380,7 @@
%
% \noindent
% \DescribeMacro{create_callback}
-% |luatexbase.create_callback(|\meta{name},meta{type},\meta{default}|)|
+% |luatexbase.create_callback(|\meta{name},\meta{type},\meta{default}|)|
% Defines a user defined callback. The last argument is a default
% function or |false|.
%
@@ -389,6 +389,34 @@
% |luatexbase.call_callback(|\meta{name},\ldots|)|
% Calls a user defined callback with the supplied arguments.
%
+% \noindent
+% \DescribeMacro{declare_callback_rule}
+% |luatexbase.declare_callback_rule(|\meta{name}, \meta{first}, \meta{relation}, \meta{second}|)|
+% Adds an ordering constraint between two callback functions for callback \meta{name}.
+%
+% The kind of constraint added depends on \meta{relation}:
+% \begin{description}
+% \item[before] The callback function with description \meta{first} will be
+% executed before the function with description \meta{second}.
+% \item[after] The callback function with description \meta{first} will be
+% executed after the function with description \meta{second}.
+% \item[incompatible-warning] When both a callback function with description \meta{first}
+% and with description \meta{second} is registered, then a warning is printed when
+% the callback is executed.
+% \item[incompatible-error] When both a callback function with description \meta{first}
+% and with description \meta{second} is registered, then an error is printed when
+% the callback is executed.
+% \item[unrelated] Any previously declared callback rule between \meta{first}
+% and \meta{second} gets disabled.
+% \end{description}
+% Every call to \texttt{declare_callback_rule} with a specific callback \meta{name}
+% and descriptions \meta{first} and \meta{second} overwrites all previous calls with
+% same callback and descriptions.
+%
+% The callback functions do not have to be registered yet when the functions is called.
+% Ony the constraints for which both callback descriptions refer to callbacks
+% registered at the time the callback is called will have an effect.
+%
% \endgroup
%
% \MaybeStop{}
@@ -1288,8 +1316,120 @@ luatexbase.new_luafunction = new_luafunction
% actual function as |func| and the identifying description as |description|.
% Only callbacks with a non-empty list of functions have an entry in this
% list.
-% \begin{macrocode}
-local callbacklist = callbacklist or { }
+%
+% Actually there are two tables: |realcallbacklist| directly contains the entries
+% as described above while |callbacklist| only directly contains the already sorted
+% entries. Other entries can be queried through |callbacklist| too which triggers a
+% resort.
+%
+% Additionally |callbackrules| describes the ordering constraints: It contains two
+% element tables with the descriptions of the constrained callback implementations.
+% It can additionally contain a |type| entry indicating the kind of rule. A missing
+% value indicates a normal ordering contraint.
+%
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
+% \begin{macrocode}
+local realcallbacklist = {}
+local callbackrules = {}
+local callbacklist = setmetatable({}, {
+ __index = function(t, name)
+ local list = realcallbacklist[name]
+ local rules = callbackrules[name]
+ if list and rules then
+ local meta = {}
+ for i, entry in ipairs(list) do
+ local t = {value = entry, count = 0, pos = i}
+ meta[entry.description], list[i] = t, t
+ end
+ local count = #list
+ local pos = count
+ for i, rule in ipairs(rules) do
+ local rule = rules[i]
+ local pre, post = meta[rule[1]], meta[rule[2]]
+ if pre and post then
+ if rule.type then
+ if not rule.hidden then
+ assert(rule.type == 'incompatible-warning' and luatexbase_warning
+ or rule.type == 'incompatible-error' and luatexbase_error)(
+ "Incompatible functions \"" .. rule[1] .. "\" and \"" .. rule[2]
+ .. "\" specified for callback \"" .. name .. "\".")
+ rule.hidden = true
+ end
+ else
+ local post_count = post.count
+ post.count = post_count+1
+ if post_count == 0 then
+ local post_pos = post.pos
+ if post_pos ~= pos then
+ local new_post_pos = list[pos]
+ new_post_pos.pos = post_pos
+ list[post_pos] = new_post_pos
+ end
+ list[pos] = nil
+ pos = pos - 1
+ end
+ pre[#pre+1] = post
+ end
+ end
+ end
+ for i=1, count do -- The actual sort begins
+ local current = list[i]
+ if current then
+ meta[current.value.description] = nil
+ for j, cur in ipairs(current) do
+ local count = cur.count
+ if count == 1 then
+ pos = pos + 1
+ list[pos] = cur
+ else
+ cur.count = count - 1
+ end
+ end
+ list[i] = current.value
+ else
+ -- Cycle occured. TODO: Show cycle for debugging
+ -- list[i] = ...
+ local remaining = {}
+ for name, entry in next, meta do
+ local value = entry.value
+ list[#list + 1] = entry.value
+ remaining[#remaining + 1] = name
+ end
+ table.sort(remaining)
+ local first_name = remaining[1]
+ for j, name in ipairs(remaining) do
+ local entry = meta[name]
+ list[i + j - 1] = entry.value
+ for _, post_entry in ipairs(entry) do
+ local post_name = post_entry.value.description
+ if not remaining[post_name] then
+ remaining[post_name] = name
+ end
+ end
+ end
+ local cycle = {first_name}
+ local index = 1
+ local last_name = first_name
+ repeat
+ cycle[last_name] = index
+ last_name = remaining[last_name]
+ index = index + 1
+ cycle[index] = last_name
+ until cycle[last_name]
+ local length = index - cycle[last_name] + 1
+ table.move(cycle, cycle[last_name], index, 1)
+ for i=2, length//2 do
+ cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i]
+ end
+ error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length))
+ end
+ end
+ end
+ realcallbacklist[name] = list
+ t[name] = list
+ return list
+ end
+})
% \end{macrocode}
%
% Numerical codes for callback types, and name-to-value association (the
@@ -1731,6 +1871,7 @@ luatexbase.call_callback=call_callback
% \changes{v1.0a}{2015/09/24}{Function added}
% Add a function to a callback. First check arguments.
% \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)}
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
% \begin{macrocode}
local function add_to_callback(name, func, description)
if not name or name == "" then
@@ -1751,10 +1892,10 @@ local function add_to_callback(name, func, description)
% Then test if this callback is already in use. If not, initialise its list
% and register the proper handler.
% \begin{macrocode}
- local l = callbacklist[name]
+ local l = realcallbacklist[name]
if l == nil then
l = { }
- callbacklist[name] = l
+ realcallbacklist[name] = l
% \end{macrocode}
% \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks}
% Handle count for shared engine callbacks.
@@ -1773,6 +1914,7 @@ local function add_to_callback(name, func, description)
end
end
% \end{macrocode}
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
% Actually register the function and give an error if more than one
% |exclusive| one is registered.
% \begin{macrocode}
@@ -1780,7 +1922,6 @@ local function add_to_callback(name, func, description)
func = func,
description = description,
}
- local priority = #l + 1
if callbacktypes[name] == exclusive then
if #l == 1 then
luatexbase_error(
@@ -1788,25 +1929,76 @@ local function add_to_callback(name, func, description)
name .. "'")
end
end
- table.insert(l, priority, f)
+ table.insert(l, f)
+ callbacklist[name] = nil
% \end{macrocode}
% Keep user informed.
% \begin{macrocode}
luatexbase_log(
- "Inserting `" .. description .. "' at position "
- .. priority .. " in `" .. name .. "'."
+ "Inserting `" .. description .. "' in `" .. name .. "'."
)
end
luatexbase.add_to_callback = add_to_callback
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{declare_callback_rule}
+% \changes{v1.2a}{2022/10/03}{Add function}
+% Add an ordering constraint between two callback implementations
+% \begin{macrocode}
+local function declare_callback_rule(name, desc1, relation, desc2)
+ if not callbacktypes[name] or
+ not desc1 or not desc2 or
+ desc1 == "" or desc2 == "" then
+ luatexbase_error(
+ "Unable to create ordering constraint. "
+ .. "Correct usage:\n"
+ .. "declare_callback_rule(<callback>, <description_a>, <description_b>)"
+ )
+ end
+ if relation == 'before' then
+ relation = nil
+ elseif relation == 'after' then
+ desc2, desc1 = desc1, desc2
+ relation = nil
+ elseif relation == 'incompatible-warning' or relation == 'incompatible-error' then
+ elseif relation == 'unrelated' then
+ else
+ luatexbase_error(
+ "Unknown relation type in declare_callback_rule"
+ )
+ end
+ callbacklist[name] = nil
+ local rules = callbackrules[name]
+ if rules then
+ for i, rule in ipairs(rules) do
+ if rule[1] == desc1 and rule[2] == desc2 or rule[1] == desc2 and rule[2] == desc1 then
+ if relation == 'unrelated' then
+ table.remove(rules, i)
+ else
+ rule[1], rule[2], rule.type = desc1, desc2, relation
+ end
+ return
+ end
+ end
+ if relation ~= 'unrelated' then
+ rules[#rules + 1] = {desc1, desc2, type = relation}
+ end
+ elseif relation ~= 'unrelated' then
+ callbackrules[name] = {{desc1, desc2, type = relation}}
+ end
+end
+luatexbase.declare_callback_rule = declare_callback_rule
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{remove_from_callback}
% \changes{v1.0a}{2015/09/24}{Function added}
% \changes{v1.0k}{2015/12/02}{adjust initialization of cb local (PHG)}
% \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)}
% \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks}
% \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks}
+% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
% Remove a function from a callback. First check arguments.
% \begin{macrocode}
local function remove_from_callback(name, description)
@@ -1823,7 +2015,7 @@ local function remove_from_callback(name, description)
.. "remove_from_callback(<callback>, <description>)"
)
end
- local l = callbacklist[name]
+ local l = realcallbacklist[name]
if not l then
luatexbase_error(
"No callback list for `" .. name .. "'\n")
@@ -1851,6 +2043,7 @@ local function remove_from_callback(name, description)
"Removing `" .. description .. "' from `" .. name .. "'."
)
if #l == 0 then
+ realcallbacklist[name] = nil
callbacklist[name] = nil
local shared = shared_callbacks[name]
if shared then
@@ -1876,12 +2069,12 @@ luatexbase.remove_from_callback = remove_from_callback
local function in_callback(name, description)
if not name
or name == ""
- or not callbacklist[name]
+ or not realcallbacklist[name]
or not callbacktypes[name]
or not description then
return false
end
- for _, i in pairs(callbacklist[name]) do
+ for _, i in pairs(realcallbacklist[name]) do
if i.description == description then
return true
end
@@ -1898,7 +2091,7 @@ luatexbase.in_callback = in_callback
% this functionality.
% \begin{macrocode}
local function disable_callback(name)
- if(callbacklist[name] == nil) then
+ if(realcallbacklist[name] == nil) then
callback_register(name, false)
else
luatexbase_error("Callback list for " .. name .. " not empty")
@@ -1912,12 +2105,13 @@ luatexbase.disable_callback = disable_callback
% \changes{v1.0a}{2015/09/24}{Function added}
% \changes{v1.0h}{2015/11/27}{Match test in in-callback latex/4445}
% List the descriptions of functions registered for the given callback.
+% This will sort the list if necessary.
% \begin{macrocode}
local function callback_descriptions (name)
local d = {}
if not name
or name == ""
- or not callbacklist[name]
+ or not realcallbacklist[name]
or not callbacktypes[name]
then
return d
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index 6c5f3e375b..19a3267767 100644
--- a/macros/latex-dev/base/ltluatex.pdf
+++ b/macros/latex-dev/base/ltluatex.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks-code.pdf b/macros/latex-dev/base/ltmarks-code.pdf
index 77dcb07b25..4e28cba0f7 100644
--- a/macros/latex-dev/base/ltmarks-code.pdf
+++ b/macros/latex-dev/base/ltmarks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks-doc.pdf b/macros/latex-dev/base/ltmarks-doc.pdf
index e57a5bbc75..9ee6c42916 100644
--- a/macros/latex-dev/base/ltmarks-doc.pdf
+++ b/macros/latex-dev/base/ltmarks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index 2a94513721..7074281150 100644
--- a/macros/latex-dev/base/ltnews.pdf
+++ b/macros/latex-dev/base/ltnews.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf
index 8dcc676577..8f5c23193e 100644
--- a/macros/latex-dev/base/ltnews01.pdf
+++ b/macros/latex-dev/base/ltnews01.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf
index 06ec628848..332a568c99 100644
--- a/macros/latex-dev/base/ltnews02.pdf
+++ b/macros/latex-dev/base/ltnews02.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf
index d79869c107..10dcd6dabb 100644
--- a/macros/latex-dev/base/ltnews03.pdf
+++ b/macros/latex-dev/base/ltnews03.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf
index 408e9fe942..140ae9bfc0 100644
--- a/macros/latex-dev/base/ltnews04.pdf
+++ b/macros/latex-dev/base/ltnews04.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf
index 85dd03bbe3..b533e823d3 100644
--- a/macros/latex-dev/base/ltnews05.pdf
+++ b/macros/latex-dev/base/ltnews05.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf
index 56b64f624d..ab0e8e6b0a 100644
--- a/macros/latex-dev/base/ltnews06.pdf
+++ b/macros/latex-dev/base/ltnews06.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf
index 4b964b32da..b572c2afbb 100644
--- a/macros/latex-dev/base/ltnews07.pdf
+++ b/macros/latex-dev/base/ltnews07.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf
index 75c6b0f9ca..cfe3a2e383 100644
--- a/macros/latex-dev/base/ltnews08.pdf
+++ b/macros/latex-dev/base/ltnews08.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf
index 4de2a8541e..e0d106d0f6 100644
--- a/macros/latex-dev/base/ltnews09.pdf
+++ b/macros/latex-dev/base/ltnews09.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf
index 45d74b33a0..4c9e88504a 100644
--- a/macros/latex-dev/base/ltnews10.pdf
+++ b/macros/latex-dev/base/ltnews10.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf
index 8a23382d32..8f61d02d4d 100644
--- a/macros/latex-dev/base/ltnews11.pdf
+++ b/macros/latex-dev/base/ltnews11.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf
index dc2e7713df..10deb7706e 100644
--- a/macros/latex-dev/base/ltnews12.pdf
+++ b/macros/latex-dev/base/ltnews12.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf
index 0601a775a7..098589bd93 100644
--- a/macros/latex-dev/base/ltnews13.pdf
+++ b/macros/latex-dev/base/ltnews13.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf
index b5757c7fab..9c3dc54f14 100644
--- a/macros/latex-dev/base/ltnews14.pdf
+++ b/macros/latex-dev/base/ltnews14.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf
index 72b9e5858a..7678526dbc 100644
--- a/macros/latex-dev/base/ltnews15.pdf
+++ b/macros/latex-dev/base/ltnews15.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf
index 86df687d2f..e81dd332d6 100644
--- a/macros/latex-dev/base/ltnews16.pdf
+++ b/macros/latex-dev/base/ltnews16.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf
index 71afff14a1..a3bf39bcf2 100644
--- a/macros/latex-dev/base/ltnews17.pdf
+++ b/macros/latex-dev/base/ltnews17.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf
index 18036c2afc..e754202b75 100644
--- a/macros/latex-dev/base/ltnews18.pdf
+++ b/macros/latex-dev/base/ltnews18.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf
index 46f8a55e17..3288407f59 100644
--- a/macros/latex-dev/base/ltnews19.pdf
+++ b/macros/latex-dev/base/ltnews19.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf
index a6ad55fa8d..dd66d032cd 100644
--- a/macros/latex-dev/base/ltnews20.pdf
+++ b/macros/latex-dev/base/ltnews20.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf
index b571a97560..18b01c53e1 100644
--- a/macros/latex-dev/base/ltnews21.pdf
+++ b/macros/latex-dev/base/ltnews21.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf
index 17704aab46..fa05f6a59f 100644
--- a/macros/latex-dev/base/ltnews22.pdf
+++ b/macros/latex-dev/base/ltnews22.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf
index 301b414a82..fa67d7822e 100644
--- a/macros/latex-dev/base/ltnews23.pdf
+++ b/macros/latex-dev/base/ltnews23.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf
index 7f75b085a9..a991678ddd 100644
--- a/macros/latex-dev/base/ltnews24.pdf
+++ b/macros/latex-dev/base/ltnews24.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf
index 105f319373..52aef54c0c 100644
--- a/macros/latex-dev/base/ltnews25.pdf
+++ b/macros/latex-dev/base/ltnews25.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf
index 25924bd89e..09e49e79ae 100644
--- a/macros/latex-dev/base/ltnews26.pdf
+++ b/macros/latex-dev/base/ltnews26.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf
index 3e55d0ca17..fa8a5fcf11 100644
--- a/macros/latex-dev/base/ltnews27.pdf
+++ b/macros/latex-dev/base/ltnews27.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf
index 7c89f1b6d5..ac868bf0ed 100644
--- a/macros/latex-dev/base/ltnews28.pdf
+++ b/macros/latex-dev/base/ltnews28.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf
index 86e5464566..80a19569bf 100644
--- a/macros/latex-dev/base/ltnews29.pdf
+++ b/macros/latex-dev/base/ltnews29.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf
index cd2a1f7dd4..68d5d8afb1 100644
--- a/macros/latex-dev/base/ltnews30.pdf
+++ b/macros/latex-dev/base/ltnews30.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf
index 40458d5948..54e5e2a830 100644
--- a/macros/latex-dev/base/ltnews31.pdf
+++ b/macros/latex-dev/base/ltnews31.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf
index 8ad63d92ca..17264132fc 100644
--- a/macros/latex-dev/base/ltnews32.pdf
+++ b/macros/latex-dev/base/ltnews32.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews33.pdf b/macros/latex-dev/base/ltnews33.pdf
index ac27d49883..d91676a1c0 100644
--- a/macros/latex-dev/base/ltnews33.pdf
+++ b/macros/latex-dev/base/ltnews33.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews34.pdf b/macros/latex-dev/base/ltnews34.pdf
index ceef597c19..9074b39850 100644
--- a/macros/latex-dev/base/ltnews34.pdf
+++ b/macros/latex-dev/base/ltnews34.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews35.pdf b/macros/latex-dev/base/ltnews35.pdf
index 1226f431cb..bffff429ce 100644
--- a/macros/latex-dev/base/ltnews35.pdf
+++ b/macros/latex-dev/base/ltnews35.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews36.pdf b/macros/latex-dev/base/ltnews36.pdf
index 24a0b791fe..bd3fd8be10 100644
--- a/macros/latex-dev/base/ltnews36.pdf
+++ b/macros/latex-dev/base/ltnews36.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews36.tex b/macros/latex-dev/base/ltnews36.tex
index 55de98628c..d6df801db2 100644
--- a/macros/latex-dev/base/ltnews36.tex
+++ b/macros/latex-dev/base/ltnews36.tex
@@ -123,7 +123,7 @@
\tubcommand{\input{tubltmac}}
\publicationmonth{November}
-\publicationyear{2022 --- DRAFT version for upcoming release}
+\publicationyear{2022} % --- DRAFT version for upcoming release}
\publicationissue{36}
@@ -143,16 +143,30 @@
\section{Introduction}
-\emph{to be written}
+The 2022-11 release of \LaTeX{} is largely a consolidation release
+where we made a number of minor improvements to fix some bugs or
+improve one or the other interface.
+The only really important functionality that was added is described in
+the next section: the ability to easily define document-level commands
+and environments that accept a key/value list in one of its (usually
+optional) arguments, including the ability to determine if the argument
+does in fact contain such a key/value list or just a single
+\enquote{classical} value.
-\subsection{Auto-detecting key--value arguments}
+For the \enquote{Tagged \LaTeX{} Project} this functionality is very
+important because many document-level commands will need to accept
+such key/value lists, for example, to specify alternative text or
+overwrite default tagging if that becomes necessary in a document.
+
+
+\section{Auto-detecting key/value arguments}
To allow extension of the core \LaTeX{} syntax, \pkg{ltcmd} now supports
-a \texttt{={...}} modifier when grabbing arguments. This modifier instructs
+a \texttt{={...}}\ modifier when grabbing arguments. This modifier instructs
\LaTeX{} that the argument should be passed to the underlying code as
-a set of keyvals. If the argument does not \enquote{look like} a set
-of keyvals, it will be converted into a single key--value pair, with
+a set of key/values. If the argument does not \enquote{look like} a set
+of key/values, it will be converted into a single key/value pair, with
the argument to \texttt{=} specifying the name of that key. For
example, the \cs{caption} command could be defined as
\begin{verbatim}
@@ -161,26 +175,29 @@ example, the \cs{caption} command could be defined as
{...}
\end{verbatim}
which would mean that if the optional argument does \emph{not}
-contain keyval data, it will be converted to a single keyval
+contain key/value data, it will be converted to a single key/value
pair with the key name \texttt{short-text}.
Arguments which begin with \texttt{=,} are always interpreted as
-keyvals even if they do not contain further \texttt{=} signs.
+key/values even if they do not contain further \texttt{=} signs.
Any \texttt{=} signs enclosed within \verb|$...$| or \verb|\(...\)|,
i.e.~in inline math mode, are ignored, meaning that
only \texttt{=} outside of math mode will generally cause
-interpretation as keyval material.
+interpretation as key/value material.
In case the argument contains a \enquote{textual} \texttt{=} sign that
-is mistaken as key/value indicator you can hide it using a brace
+is mistaken as a key/value indicator you can hide it using a brace
group as you would do in other places, e.g.,
\begin{verbatim}
\caption[{Use of = signs}]
{Use of = signs in optional arguments}
\end{verbatim}
-However, because a \texttt{=} sign in math mode are already ignored, this
+However, because \texttt{=} signs in math mode are already ignored, this
should seldom be necessary.
+
+\section{A note for font package developers}
+
\subsection{Encoding subsets for \texttt{TS1} encoded fonts}
The text companion encoding \texttt{TS1} is unfortunately not very
@@ -204,29 +221,51 @@ glyphs that are actually available in the font.\footnote{The \LaTeX{}
%
\githubissue{905}
-
-
\section{New or improved commands}
+\subsection{Better language handling for case-changing commands}
+
+The commands \cs{MakeUppercase}, \cs{MakeLowercase} and \cs{MakeTitlecase} now
+automatically detect the locale currently in use when \pkg{babel} is loaded.
+This allows automatic adjustment of letter mappings where appropriate. They
+also accept a leading optional argument. This accepts a key--value list of
+control settings. At present, there is one key available: \texttt{locale},
+which can also be accessed via the alias \texttt{lang}. This is intended to
+allow local setting of the language, which can be done using a BCP-47
+descriptor. For example, this could be used to force Turkish case changing in
+otherwise English input
+\begin{verbatim}
+\MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}
+\end{verbatim}
+yields
+ \MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}.
+% RAGIP HULÛS\.I ÖZDEM. %TUB
\section{Code improvements}
-\subsection{Support for slanted small caps in the EC-fonts }
-Since some time \LaTeX{} supports the combination of the shapes
-small caps and italic/slanted. The EC-fonts contain slanted small caps fonts
+\subsection{Support for slanted small caps in the EC fonts}
+For some time \LaTeX{} has supported the combination of the shapes
+small caps and italic/slanted. The EC fonts contain slanted small caps fonts
but using them required the loading of an external package. Suitable font definitions
have now been added to \pkg{t1cmd.fd} and so from now on
\begin{verbatim}
- \textsc{\textsl{slanted small}}
- \textsc{\textit{italic small caps}}
+\usepackage[T1]{fontenc}
+...
+ \textsc{\textsl{Slanted Small Caps}};
+ \textsc{\textit{Italic Small Caps}};
\bfseries
- \textsc{\textsl{bold slanted small caps}}
- \textsc{\textit{bold italic small caps}}
+ \textsc{\textsl{Bold Slanted Small Caps}};
+ \textsc{\textit{Bold Italic Small Caps}}.
\end{verbatim}
will give the expected result: {\fontfamily{cmr}
-\textsc{\textsl{slanted small}} \textsc{\textit{italic small caps}}
+\textsc{\textsl{Slanted Small Caps}}; \textsc{\textit{Italic Small Caps}};
\bfseries
-\textsc{\textsl{bold slanted small caps}} \textsc{\textit{bold italic small caps}}}
+\textsc{\textsl{Bold Slanted Small Caps}}; \textsc{\textit{Bold Italic Small Caps}}}.
+
+Given that the Computer Modern fonts in \texttt{T1} do not have real italic small caps but only
+slanted small caps, the latter is substituted for the former, which is
+why above both work but you see no difference between the two (and in the log you get a
+substitution warning for the \cs{textit}\cs{textsc} shape combination).
%
\githubissue{782}
@@ -242,28 +281,56 @@ font instead.
\githubissue{879}
+
+\subsection{Improve font series handling with incorrect \texttt{.fd} files}
+
+By convention, the font series value is supposed to contain no
+\texttt{m}, unless you refer to the \enquote{medium} series (which is
+represented by a single \texttt{m}). For example, one should write
+\texttt{c} for \enquote{medium weight, condensed width} and not
+\texttt{mc}. This was one of the many space-conserving methods
+necessary in the early days of \LaTeXe.
+
+Some older \texttt{.fd} files
+do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in
+their declarations. As a result, some font selection scheme
+functionality was not working when confronted with such \texttt{.fd}
+files. We have therefore augmented \cs{DeclareSymbolFont} and
+\cs{SetSymbolFont} to strip any surplus \texttt{m} from their series argument
+so that they do not unnecessarily trigger font
+substitutions. Regardless of this support such
+\texttt{.fd} files should get fixed by their maintainers.
+%
+\githubissue{918}
+
+
+
+
\subsection{Detect nested \texttt{minipage} environments}
Nesting of \texttt{minipage} environments is only partially supported
in \LaTeX{} and can lead to incorrect output, such as overfull boxes
or footnotes appearing in the wrong place;
see~\cite[p.~106]{36:Lamport}. However, until now there was no warning
-if that happpened. This has been changed and the environment now
+if that happened. This has been changed and the environment now
warns if you nest it in another \texttt{minipage} environment that
already contains footnotes.
%
\githubissue{168}
-
-\subsection{\LuaTeX\ callback efficiency improvement}
-
-The mechanism for providing the
-\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has
-been improved to make it more reusable and to avoid overhead if these
-callbacks are not used.
+\subsection{Robust commands in package options}
+With the standard key-based option handler added in the last release,
+or with contributed packages offering similar features, users may
+expect to be able to use a package option such as
+\verb|[font=\bfseries]|.
+Previously this failed with internal errors as the option list was
+expanded via \verb|\edef|. This has now been changed to use the
+existing command \verb|\protected@edef| so that any \LaTeX\ robust
+command should be safe to pass to a key value option.
%
-\githubissue{830}
+\githubissue{932}
+
@@ -282,35 +349,56 @@ approach.
-\subsection{Improve font series handling with incorrect \texttt{.fd} files}
-
-By convention, the font series value is supposed to contain no
-\texttt{m}, unless you refer to the \enquote{medium} series (which is
-represented by a single \texttt{m}). For example, one should write
-\texttt{c} for \enquote{medium weight, condensed width} and not
-\texttt{mc}. This was one of the many space-conserving methods
-necessary in the early days of \LaTeXe.
+\subsection{\LuaTeX\ callback efficiency improvement}
-Some older \texttt{.fd} files
-do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in
-their declarations. As a result, some font selection scheme
-functionality was not working when confronted with such \texttt{.fd}
-files. We have therefore augmented \cs{DeclareSymbolFont} and
-\cs{SetSymbolFont} to strip their series argument from any surplus
-\texttt{m} so that they do not unnecessarily trigger font
-substitutions. Regardless of this support such
-\texttt{.fd} files should get fixed by their maintainers.
+The mechanism for providing the
+\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has
+been improved to make it more reusable and to avoid overhead if these
+callbacks are not used.
%
-\githubissue{918}
+\githubissue{830}
+
+
+\subsection{Rule-based ordering for \LuaTeX\ callback handlers}
+
+In \hologo{LuaLaTeX} the callback handlers used to be called in the order
+in which they were registered in, but this was often rather fragile.
+It depends a lot on the load order and any attempts to enforce a
+different order required unregistering and reregistering the handlers to
+be reordered. Additionally, even if some ordering constraints where
+enforced that way, another package loaded later could accidentally
+overwrite it.
+
+To improve this, we now order the callback handlers based on ordering
+rules similar to the hook rules.
+
+When registering a callback which should run before or after another
+callback, \verb+luatexbase.declare_callback_rule+ can now be used to
+record this ordering constraint.
+For example
+\begin{verbatim}
+luatexbase.add_to_callback
+ ('pre_shaping_filter', my_handler, 'my_name')
+luatexbase.declare_callback_rule
+ ('pre_shaping_filter',
+ 'my_name', 'before', 'other_name')
+\end{verbatim}
+will ensure that \verb+my_handler+ will always be called before the
+handler registered as \verb+other_name+.
+
+This also means that the order in which callbacks are registered no
+longer implicitly defines an order.
+Code which relied on this implicit order should now define the order
+rules explicitly.
\section{Bug fixes}
-\subsection{Prevent \TeX{} from loosing a \cs{smash}}
+\subsection{Prevent \TeX{} from losing a \cs{smash}}
When \TeX{} is typesetting a fraction, it will rebox the material in
-either numerator or the denumerator depending on which is wider. If
+either the numerator or denominator, depending on which is wider. If
the repackaged part consists of a single box, that box gets new
dimensions and if it was built using a \cs{smash} that effect vanishes
(because a smash is nothing other than zeroing some box dimension,
@@ -321,28 +409,36 @@ which now got undone). For example, in the line
\end{verbatim}
the $2$ in the denominators was not always at the same vertical position, because
the second \cs{smash} was ignored due to reboxing:
+\vspace{-1.2\baselineskip}
\[
\makeatletter
\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} % old definition
\makeatother
\newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }}
+\qquad
\frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq
\frac{100}{\smash{2^X}}
+\pagebreak % not TUB
\]
-The differences are subtle but noticeable. This is now corrected and the \cs{smash} is always
+The differences are subtle but noticeable.
+This is now corrected and the \cs{smash} is always
honored. Thus now you get this output:
+\vspace{-1.2\baselineskip}
\[
\newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }}
+\qquad
\frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq
\frac{100}{\smash{2^X}}
\]
+\par
+\vspace{-1.5\baselineskip}
%
\githubissue{517}
\subsection{Resolve an issue with \cs{mathchoice} and \texttt{localalphabets}}
-The code for keeping a number of math alphabetcs local (introduced in
+The code for keeping a number of math alphabets local (introduced in
2021; see~\cite{36:ltnews34}) used \cs{aftergroup} to do some cleanup actions after a
formula had finished. Unfortunately, \cs{aftergroup} can't be used
inside the arguments of the \cs{mathchoice} primitive and as a result one
@@ -352,19 +448,28 @@ approach altogether.
%
\githubissue{921}
+\subsection{Reporting of unused global options when using key/value processing}
+
+Using the new key/value option processor did not properly report any unused
+global options when it was used in handling class options. This has now been
+corrected.
+%
+\githubissue{938}
-\section{Changes to packages in the \pkg{amsmath} category}
+%\section{Changes to packages in the \pkg{amsmath} category}
+%\newpage TUB?
+
\section{Changes to packages in the \pkg{graphics} category}
\subsection{Fix a \cs{mathcolor} bug}
-The \cs{mathcolor} command intorduced in \cite{36:ltnews35} needs to
-scan for following sub and superscripts, but if it did so at the end
+The \cs{mathcolor} command introduced in \cite{36:ltnews35} needs to
+scan for following sub- and superscripts, but if it did so at the end
of an alignment cell, e.g., in a \texttt{array} environment, the
-\texttt{\&} was evaluated too early causing some internal errors. This
+\texttt{\&} was evaluated too early, causing some internal errors. This
is now properly guarded for.
%
\githubissue{901}
@@ -375,7 +480,7 @@ is now properly guarded for.
\subsection{\pkg{array}: Correctly identify single-line m-cells}
-Cells in m-columns that only contain a single line are supposed to
+Cells in m-columns that contain only a single line are supposed to
behave like single-line p-cells and align at the same baseline. To
test for the condition, \pkg{array} used to compare the height of the cell to
the height of the strut used for the table rows. However, the height of that
@@ -388,7 +493,7 @@ tall, in which case aligning is pointless anyway).
\githubissue{766}
-\medskip
+%\medskip
\begin{thebibliography}{9}
diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf
index 4fa9f79b83..0fbaccad7a 100644
--- a/macros/latex-dev/base/ltpara-code.pdf
+++ b/macros/latex-dev/base/ltpara-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltpara-doc.pdf b/macros/latex-dev/base/ltpara-doc.pdf
index d55cb69019..847135c79c 100644
--- a/macros/latex-dev/base/ltpara-doc.pdf
+++ b/macros/latex-dev/base/ltpara-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf
index 1e7c996884..b05e3da93d 100644
--- a/macros/latex-dev/base/ltshipout-code.pdf
+++ b/macros/latex-dev/base/ltshipout-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout-doc.pdf b/macros/latex-dev/base/ltshipout-doc.pdf
index b9cfbf5e67..61d3c87b9f 100644
--- a/macros/latex-dev/base/ltshipout-doc.pdf
+++ b/macros/latex-dev/base/ltshipout-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx
index 429ee4d8d1..a170ce98e1 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -112,10 +112,10 @@
%</2ekernel>
%<latexrelease>\edef\latexreleaseversion
%<*2ekernel|latexrelease>
- {2022-11-01}
+ {2023-05-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-2}
+\def\patch@level{-0}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index b09d2b874e..fd0ac95b4c 100644
--- a/macros/latex-dev/base/ltx3info.pdf
+++ b/macros/latex-dev/base/ltx3info.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf
index c094004aea..aff4835ebb 100644
--- a/macros/latex-dev/base/ltxdoc.pdf
+++ b/macros/latex-dev/base/ltxdoc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf
index 79d65d507b..07c7f3aa06 100644
--- a/macros/latex-dev/base/makeindx.pdf
+++ b/macros/latex-dev/base/makeindx.pdf
Binary files differ
diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf
index ab7f6c6c68..f818b299ac 100644
--- a/macros/latex-dev/base/modguide.pdf
+++ b/macros/latex-dev/base/modguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf
index 57f0853abe..fd2dcfb5cc 100644
--- a/macros/latex-dev/base/nfssfont.pdf
+++ b/macros/latex-dev/base/nfssfont.pdf
Binary files differ
diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf
index e29b28e895..2005fa583b 100644
--- a/macros/latex-dev/base/proc.pdf
+++ b/macros/latex-dev/base/proc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf
index a3efc155d2..002f38d707 100644
--- a/macros/latex-dev/base/slides.pdf
+++ b/macros/latex-dev/base/slides.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf
index c8992d4024..b73bb5a036 100644
--- a/macros/latex-dev/base/slifonts.pdf
+++ b/macros/latex-dev/base/slifonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf
index 4006bc5fd9..42f74b42cd 100644
--- a/macros/latex-dev/base/source2e.pdf
+++ b/macros/latex-dev/base/source2e.pdf
Binary files differ
diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf
index 140e61e512..fd876bf802 100644
--- a/macros/latex-dev/base/syntonly.pdf
+++ b/macros/latex-dev/base/syntonly.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf
index acc7b86da5..2d3d123d1f 100644
--- a/macros/latex-dev/base/tlc2.pdf
+++ b/macros/latex-dev/base/tlc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf
index 41383d94a5..d57694c1d0 100644
--- a/macros/latex-dev/base/tulm.pdf
+++ b/macros/latex-dev/base/tulm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide-historic.pdf b/macros/latex-dev/base/usrguide-historic.pdf
index 9b2ee642c7..325eac0a87 100644
--- a/macros/latex-dev/base/usrguide-historic.pdf
+++ b/macros/latex-dev/base/usrguide-historic.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf
index 2f2069018a..52c0370645 100644
--- a/macros/latex-dev/base/usrguide.pdf
+++ b/macros/latex-dev/base/usrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.tex b/macros/latex-dev/base/usrguide.tex
index 8069403665..32e12a1397 100644
--- a/macros/latex-dev/base/usrguide.tex
+++ b/macros/latex-dev/base/usrguide.tex
@@ -39,7 +39,7 @@
\footnote{This file may distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
- \texttt{usrguide3.tex} for full details.}%
+ \texttt{usrguide.tex} for full details.}%
}
\date{2022-07-05}
@@ -75,7 +75,7 @@
\section{Introduction}
\LaTeXe{} was released in 1994 and added a number of then-new concepts to
-\LaTeX{}. These are described in \texttt{usrguide-old}, which has largely remained
+\LaTeX{}. These are described in \texttt{usrguide-historic}, which has largely remained
unchanged. Since then, the \LaTeX{} team have worked on a number of ideas,
firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of
tools for document authors which build on that language. Here, we describe
@@ -1166,6 +1166,13 @@ engines match those available in standard input encodings (|T1|, |T2|, |LGR|).
\end{tabular}
\end{quotation}
+The case-changing commands take an optional argument which can be used to
+tailor the output. This optional argument accepts the key \texttt{locale},
+also available under the alias \texttt{lang},
+which can be used to give a language identifier in BCP-47
+format. This is then applied to select language-specific features during
+case-changing.
+
The input given to these commands is `expanded' before case changing is
applied. This means that any commands within the input that convert to pure
text will be case changed. Mathematical content is automatically excluded, as
diff --git a/macros/latex-dev/base/utf8ienc.dtx b/macros/latex-dev/base/utf8ienc.dtx
index 363998a853..a2b25fd3ab 100644
--- a/macros/latex-dev/base/utf8ienc.dtx
+++ b/macros/latex-dev/base/utf8ienc.dtx
@@ -152,9 +152,9 @@
% from \texttt{"C2} to \texttt{"DF} are defined to parse for a
% second octet following, the characters from \texttt{"E0} to
% \texttt{"EF} are defined to parse for two more octets and finally
-% the characters from \texttt{"F0} to \texttt{"F3} are defined to
+% the characters from \texttt{"F0} to \texttt{"F4} are defined to
% parse for three additional octets. These additional octets are
-% always in the range \texttt{"80} to \texttt{"B9}.
+% always in the range \texttt{"80} to \texttt{"BF}.
%
% Thus, when such a character is encountered in the document (so
% long as expansion is not prohibited) a defined number of
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index 1633aff353..5bbc4da5f0 100644
--- a/macros/latex-dev/base/utf8ienc.pdf
+++ b/macros/latex-dev/base/utf8ienc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf
index db1a1e9eba..45d2350e67 100644
--- a/macros/latex-dev/base/webcomp.pdf
+++ b/macros/latex-dev/base/webcomp.pdf
Binary files differ