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.md4
-rw-r--r--macros/latex-dev/base/alltt.pdfbin223819 -> 223819 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin242888 -> 242888 bytes
-rw-r--r--macros/latex-dev/base/changes.txt69
-rw-r--r--macros/latex-dev/base/classes.pdfbin560350 -> 560350 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin402780 -> 402780 bytes
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin292376 -> 292376 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin239689 -> 239689 bytes
-rw-r--r--macros/latex-dev/base/doc-code.pdfbin1074045 -> 1073837 bytes
-rw-r--r--macros/latex-dev/base/doc.pdfbin747885 -> 747709 bytes
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin503616 -> 503815 bytes
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1316459 -> 1316459 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.pdfbin502880 -> 502880 bytes
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin161713 -> 161713 bytes
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin220565 -> 220565 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.dtx38
-rw-r--r--macros/latex-dev/base/latexrelease.ins2
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin281895 -> 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.pdfbin337629 -> 337448 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/ltbibl.dtx37
-rw-r--r--macros/latex-dev/base/ltcmd.dtx34
-rw-r--r--macros/latex-dev/base/ltcmdhooks-code.pdfbin719840 -> 719912 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks-doc.pdfbin478680 -> 478752 bytes
-rw-r--r--macros/latex-dev/base/ltexpl.dtx20
-rw-r--r--macros/latex-dev/base/ltfilehook-code.pdfbin796171 -> 799522 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook-doc.pdfbin546618 -> 546499 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook.dtx51
-rw-r--r--macros/latex-dev/base/ltfinal.dtx34
-rw-r--r--macros/latex-dev/base/lthooks-code.pdfbin1090969 -> 1090905 bytes
-rw-r--r--macros/latex-dev/base/lthooks-doc.pdfbin702594 -> 702540 bytes
-rw-r--r--macros/latex-dev/base/ltkeys.dtx119
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin317700 -> 317700 bytes
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin1163142 -> 1169020 bytes
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin161518 -> 161518 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin159792 -> 159792 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin159332 -> 159332 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin152525 -> 152525 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin174494 -> 174494 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin142849 -> 142849 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin137811 -> 137811 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin155053 -> 155053 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin129570 -> 129570 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin169416 -> 169416 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin111948 -> 111948 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin156551 -> 156551 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin182225 -> 182225 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin170473 -> 170473 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin130309 -> 130309 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin138073 -> 138073 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin166228 -> 166228 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin38033 -> 38033 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin230028 -> 230028 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin318548 -> 318548 bytes
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin244867 -> 244867 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin317773 -> 317773 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin286591 -> 286591 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin265279 -> 265279 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin204935 -> 204935 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin379462 -> 379462 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin250592 -> 250592 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin376643 -> 376643 bytes
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin455107 -> 455107 bytes
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin511909 -> 511909 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin526323 -> 526323 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin546160 -> 546160 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.pdfbin522412 -> 522412 bytes
-rw-r--r--macros/latex-dev/base/ltnews34.pdfbin508044 -> 508044 bytes
-rw-r--r--macros/latex-dev/base/ltnews35.pdfbin507071 -> 516486 bytes
-rw-r--r--macros/latex-dev/base/ltnews35.tex154
-rw-r--r--macros/latex-dev/base/ltpara-code.pdfbin666453 -> 666388 bytes
-rw-r--r--macros/latex-dev/base/ltpara-doc.pdfbin559920 -> 559858 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-code.pdfbin819275 -> 819211 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-doc.pdfbin564643 -> 564577 bytes
-rw-r--r--macros/latex-dev/base/ltvers.dtx22
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin219349 -> 219349 bytes
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin233208 -> 233208 bytes
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin165821 -> 165821 bytes
-rw-r--r--macros/latex-dev/base/modguide.pdfbin243605 -> 243605 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.pdfbin375286 -> 375286 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin234191 -> 234191 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin5617293 -> 5629371 bytes
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin189707 -> 189527 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.pdfbin430994 -> 430994 bytes
-rw-r--r--macros/latex-dev/base/usrguide3.pdfbin390416 -> 403394 bytes
-rw-r--r--macros/latex-dev/base/usrguide3.tex58
-rw-r--r--macros/latex-dev/base/utf8ienc.dtx46
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin352642 -> 352824 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin146198 -> 146198 bytes
100 files changed, 559 insertions, 129 deletions
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index 6029313c56..65c4673cca 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2022-06-01 pre-release 2
+Release 2022-06-01 pre-release 3
Overview
--------
@@ -94,6 +94,6 @@ version 1.3c or later.
-----
-<p>Copyright (C) 1989-2021 The LaTeX Project <br />
+<p>Copyright (C) 1989-2022 The LaTeX Project <br />
<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
All rights reserved.</p>
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index 16f4934d9d..d612e91b3b 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 f1d9b18a00..e96dd1eadd 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 0768de673b..b9bea0a54a 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -1,4 +1,3 @@
-
================================================================================
This file lists changes to the LaTeX2e files in reverse chronological order of
publication (therefore the dates might be out of sequence if there are hotfixes).
@@ -7,11 +6,65 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
================================================================================
+2022-03-10 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * ltfilehook.dtx (subsection{Selecting a file (\cs{set@curr@file})}):
+ Add \set@curr@file@nosearch, to ignore \input@path and \l_file_search_path_seq.
+
+2022-03-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltbibl.dtx (section{Bibliography Generation}):
+ Ensure that an empty argument given to \cite generates
+ a warning (gh/790)
+
+2022-02-28 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * ltvers.dtx (subsection{Declaring an all-new module}):
+ Detect a missing \IncludeInRelease{0000/00/00} in a new module.
+
+2022-02-28 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * latexrelease.dtx, ltexpl.dtx, ltcmd.dtx:
+ Move most make-harmless redefinitions right after ltexpl.dtx.
+
+2022-02-21 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltkeys.dtx:
+ More efficient module expansion
+
+2022-02-19 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltcmd.dtx (subsection{User functions}):
+ Added \IfBlankTF and friends to test if a received argument
+ is empty or contains only normal space characters.
+
+2022-02-19 David Carlisle <David.Carlisle@latex-project.org>
+
+ * utf8ienc.dtx: use \protected definitions.
+ also avoid global definitions for gh/762
+
+2022-02-16 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltkeys.dtx:
+ Allow for active characters in module argument
+ \DeclareUnknownKeyHandler better than with the "s"
+
+2022-02-15 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltkeys.dtx:
+ Expand optional module argument in design-level commands
+ Add \DeclareUnknownKeysHandler
+
+2022-02-07 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltkeys.dtx:
+ Correct definition of .code property
+
2022-02-05 Joseph Wright <Joseph.Wright@latex-project.org>
- * ltkeys.dtx (section{Plain \TeX}):
- Create key properties at the 2e layer
- Add .code property
+ * ltkeys.dtx:
+ Create key properties at the 2e layer
+ Add .code property
2022-01-25 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -34,12 +87,12 @@ are not part of the distribution.
* ltexpl.dtx (section{Document-level command names for expl3 functions}):
Adjust document-level names for \exp_args:Nc and the like
-2021-12-30 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+2021-12-30 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* ltmeta.dtx:
Adapted bundle name to new name `LaTeX-lab'
-2021-12-31 Phelype Oleinik <phelype.oleinik@latex-project.org>
+2021-12-31 Phelype Oleinik <phelype.oleinik@latex-project.org>
* ltcmd.dtx (subsubsection{Showing the definition of a command}):
Make \ShowCommand stop for interaction with ltcmd (gh/739)
@@ -169,7 +222,7 @@ All changes above are only part of the development branch for the next release.
# 2021-11-15 Release
#########################
-2021-10-20 Phelype Oleinik <phelype.oleinik@latex-project.org>
+2021-10-20 Phelype Oleinik <phelype.oleinik@latex-project.org>
* ltcmdhooks.dtx (subsubsection{Patching by expansion and redefinition}):
Fix patching of commands that contain parameter tokens (gh/697)
@@ -207,7 +260,7 @@ All changes above are only part of the development branch for the next release.
* classes.dtx, doc.dtx, makeindx.dtx, preload.dtx, slides.dtx, array.dtx
Removed old references to latex.tex or latex.dtx (gh/685)
-2021-09-28 Phelype Oleinik <phelype.oleinik@latex-project.org>
+2021-09-28 Phelype Oleinik <phelype.oleinik@latex-project.org>
* ltcmdhooks.dtx (subsection{Patching commands}):
Make patching of commands with generic cmd hooks a global operation (gh/674)
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index f9554c7255..9d7cd6a797 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 bb6d34b20c..77158a1f32 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 1519514358..a281182d36 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 6efe42e1b8..f03a3e508b 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 69c7ad4bbe..d9fa6ad544 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 733e15b624..7963d5c27a 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 d1fb196f58..da31ca03b2 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 7581f0b892..5d607801b2 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 5ca05e6672..69119b9f01 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 f763dd53f2..eb83169c23 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 dadcf600b2..83e562aba3 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 1567c9ceb0..655a201a8d 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 3580e40dd4..08266fb274 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 139633cba1..5d0a747d3c 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 105bf5c869..1e39b271b2 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.dtx b/macros/latex-dev/base/latexrelease.dtx
index efdfa8c418..294007553d 100644
--- a/macros/latex-dev/base/latexrelease.dtx
+++ b/macros/latex-dev/base/latexrelease.dtx
@@ -40,7 +40,7 @@
%<*latexrelease>
% \fi
% \ProvidesFile{latexrelease.dtx}
- [2021/04/29 v1.0n LaTeX release emulation and tests
+ [2022/02/28 v1.0o LaTeX release emulation and tests
(including releases up to \latexreleaseversion)]
% \iffalse
%</latexrelease>
@@ -487,10 +487,9 @@
% \begin{macro}{\sourceLaTeXdate}
% \changes{v1.0l}{2021/01/23}{\cs{sourceLaTeXdate} added}
% \changes{v1.0m}{2021/03/18}{Define \cs{sourceLaTeXdate} conditionally}
-% Store the original \LaTeX{} format version
-% as a number in the format |YYYYMMDD|. This macro has to
-% be defined conditionally, so that it isn't changed in case
-% \file{latexrelease.sty} is loaded twice (for tests), but it
+% Store the original \LaTeX{} format version as a number in the format
+% |YYYYMMDD |. This macro has to be defined conditionally, so that it
+% isn't changed in case \file{latexrelease.sty} is reloaded, but it
% can't be defined in the kernel only, otherwise
% \file{latexrelease.sty} wouldn't work in older \LaTeX{} due
% to the missing macro.
@@ -619,7 +618,7 @@ of this package available from CTAN}
\catcode58=11 % :
\catcode126=10 % ~
\catcode32=09 % <space>
- \xdef\latexrelease@postexpl{\unexpanded{%
+ \xdef\latexrelease@postltexpl{\unexpanded{%
%<@@=latexrelease>
% \end{macrocode}
%
@@ -691,14 +690,13 @@ of this package available from CTAN}
% store each in \cs{l_@@_restores_tl}, save a copy, and redefine each.
% \begin{macrocode}
\tl_clear_new:N \l_@@_restores_tl
-\cs_gset:Npn \@@_tmp:w #1 #2
+\cs_gset:Npn \@@_redefines:w #1 #2
{
- \quark_if_recursion_tail_stop_do:Nn #1
- { \cs_undefine:N \@@_tmp:w }
+ \quark_if_recursion_tail_stop:N #1
\tl_put_right:Nn \l_@@_restores_tl {#1}
\cs_set_eq:cN { @@_ \cs_to_str:N #1 } #1
\cs_set_eq:NN #1 #2
- \@@_tmp:w
+ \@@_redefines:w
}
% \end{macrocode}
%
@@ -731,12 +729,12 @@ of this package available from CTAN}
% \end{description}
% And here we go:
% \begin{macrocode}
-\@@_tmp:w
+\@@_redefines:w
\__kernel_chk_if_free_cs:N \use_none:n
\e@alloc \@@_e@alloc:NnnnnN
\__kernel_msg_error:nnx \use_none:nnn
\msg_new:nnnn \msg_gset:nnnn
- \NewDocumentCommand \DeclareDocumentCommand
+ % \NewDocumentCommand \DeclareDocumentCommand % after ltcmd.dtx
\newcommand \@@_declare_command:w
% \end{macrocode}
% Temp addition \ldots
@@ -752,6 +750,22 @@ of this package available from CTAN}
\msg_redirect_name:nnn { hooks } { exists } { none }
% \end{macrocode}
%
+% Now a one-off for |ltcmd.dtx|: we need to make \cs{NewDocumentCommand}
+% not complain on an already existing command, but it has to be done
+% after \cs{NewDocumentCommand} is defined, so this is separate from
+% the \cs{latexrelease@postltexpl} actions above:
+% \changes{v1.0o}{2022/02/28}
+% {Move most redefinitions to right after ltexpl.dtx}
+% \begin{macrocode}
+\cs_gset_protected:Npn \latexrelease@postltcmd
+ {
+ \@@_redefines:w
+ \NewDocumentCommand \DeclareDocumentCommand
+ \q_recursion_tail \q_recursion_tail
+ \q_recursion_stop
+ }
+% \end{macrocode}
+%
% \begin{macrocode}
}}%
\endgroup
diff --git a/macros/latex-dev/base/latexrelease.ins b/macros/latex-dev/base/latexrelease.ins
index 42cb588568..cfba0f5c6e 100644
--- a/macros/latex-dev/base/latexrelease.ins
+++ b/macros/latex-dev/base/latexrelease.ins
@@ -93,7 +93,7 @@ extension .ins) which are part of the distribution.
\from{ltluatex.dtx} {latexrelease}% empty
\from{ltexpl.dtx} {latexrelease}% empty
\from{ltdefns.dtx} {latexrelease}%
- \from{ltcmd.dtx} {latexrelease}%
+ \from{ltcmd.dtx} {latexrelease}% L3 layer module
\from{lthooks.dtx} {latexrelease}% L3 layer module
\from{ltcmdhooks.dtx} {latexrelease}% L3 layer module
\from{ltalloc.dtx} {latexrelease}% empty
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index ca626e9ead..c0c395ee65 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 0f5279c10e..5b1fc23b4e 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 6e74caa24b..a7ae8aa79c 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 026c2a5a37..0b843b79a0 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 59fb751186..a644e1fb93 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 eea50258ae..cafe15d94c 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/ltbibl.dtx b/macros/latex-dev/base/ltbibl.dtx
index 9824ca539f..4c219657b8 100644
--- a/macros/latex-dev/base/ltbibl.dtx
+++ b/macros/latex-dev/base/ltbibl.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltbibl.dtx}
- [2020/12/10 v1.1s LaTeX Kernel (Bibliography)]
+ [2022/03/10 v1.1t LaTeX Kernel (Bibliography)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltbibl.dtx}
@@ -199,8 +199,41 @@
% \begin{macro}{\cite}
% \changes{v1.1j}{1995/10/16}{(DPC) Make robust}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease> {\cite}{check for blank}%
\DeclareRobustCommand\cite{%
- \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+ \@ifnextchar [{\@tempswatrue\@citex@checkblank}{\@tempswafalse\@citex@checkblank[]}}
+% \end{macrocode}
+% Due to the way \cs{@for} as used in \cs{@citex} behaves an empty
+% argument to \cs{cite} did not produce any warning for a missing
+% citation. So we now inject a command before calling \cs{@citex} that
+% does the checking for us. It is not done in \cs{@citex} directly,
+% because that command is altered by a number of packages/classes
+% and this way it is more likely that the check survives.
+% \changes{v1.1t}{2022/03/10}{Ensure that an empty argument generates
+% a warning (gh/790)}
+% \begin{macrocode}
+\def\@citex@checkblank[#1]#2{%
+ \IfBlankTF {#2}%
+ {\@citex[#1]{\space}}%
+ {\@citex[#1]{#2}}%
+}
+%</2ekernel|latexrelease>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\cite}{check for blank}%
+%<latexrelease>
+%<latexrelease>\DeclareRobustCommand\cite{%
+%<latexrelease> \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+%<latexrelease>\let\@citex@checkblank\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/ltcmd.dtx b/macros/latex-dev/base/ltcmd.dtx
index bf7ae4ea24..f52b32479e 100644
--- a/macros/latex-dev/base/ltcmd.dtx
+++ b/macros/latex-dev/base/ltcmd.dtx
@@ -34,8 +34,8 @@
%%% From File: ltcmd.dtx
%
% \begin{macrocode}
-\def\ltcmdversion{v1.0j}
-\def\ltcmddate{2021-12-31}
+\def\ltcmdversion{v1.0k}
+\def\ltcmddate{2022-02-28}
% \end{macrocode}
%
%<*driver>
@@ -4716,6 +4716,27 @@
% \end{macrocode}
% \end{macro}
%
+%
+% \begin{macro}{\IfBlankT, \IfBlankF, \IfBlankTF}
+% Another simple re-naming.
+% \changes{v1.0k}{2022/02/19}{Added \cs{IfBlankTF} and friends}
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2022/06/01}%
+%<latexrelease> {\IfBlankTF}{Testing~for~empty~or~blank}%
+\cs_new_eq:NN \IfBlankF \tl_if_blank:nF
+\cs_new_eq:NN \IfBlankT \tl_if_blank:nT
+\cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2021/11/15}%
+%<latexrelease> {\IfBlankTF}{Testing~for~empty~or~blank}%
+%<latexrelease>\cs_undefine:N \IfBlankF
+%<latexrelease>\cs_undefine:N \IfBlankT
+%<latexrelease>\cs_undefine:N \IfBlankTF
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\ProcessedArgument}
% Processed arguments are returned using this name, which is reserved
% here although the definition will change.
@@ -4779,7 +4800,14 @@
%<latexrelease>
%<latexrelease>\EndModuleRelease
\ExplSyntaxOff
-%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postexpl}
+% \end{macrocode}
+%
+% Now in |latexrelease| mode, redefine \cs{NewDocumentCommand} to not
+% complain on commands already defined.
+% \changes{v1.0k}{2022-02-28}
+% {Move latexrelease redefinitions from ltcmd.dtx}
+% \begin{macrocode}
+%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postltcmd}
%<latexrelease>\catcode`\^^@=\@latexrelease@catcode@null\relax
%</2ekernel|latexrelease>
% \end{macrocode}
diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf
index 1e0744a2a4..12928555fb 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 149ae90ad6..e4e197446f 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/ltexpl.dtx b/macros/latex-dev/base/ltexpl.dtx
index e6a83d5725..aab189bec2 100644
--- a/macros/latex-dev/base/ltexpl.dtx
+++ b/macros/latex-dev/base/ltexpl.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltexpl.dtx}
- [2022/01/06 v1.3e LaTeX Kernel (expl3-dependent code)]
+ [2022/02/28 v1.3f LaTeX Kernel (expl3-dependent code)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltexpl.dtx}
@@ -288,6 +288,14 @@
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
%
+% Now in |latexrelease| mode, redefine a few commands to avoid ``already
+% defined'' errors.
+% \changes{v1.3f}{2022/02/28}
+% {Move latexrelease redefinitions from ltcmd.dtx}
+% \begin{macrocode}
+%<latexrelease>\@ifundefined{ExplSyntaxOff}{}{\latexrelease@postltexpl}
+% \end{macrocode}
+%
% \changes{v1.3a}{2021/01/21}
% {Move \pkg{xparse} rollback code to \texttt{ltcmd.dtx}}
%
@@ -432,17 +440,17 @@
%<latexrelease>\IncludeInRelease{2022/06/01}%
%<latexrelease> {\fpeval}{fp and int calculations}%
\ExplSyntaxOn
-\cs_new_eq:NN \fpeval \fp_eval:n
+\cs_new_eq:NN \fpeval \fp_eval:n
% \end{macrocode}
% And a few more, this time wrappers around the e\TeX{} primitives.
% \begin{macrocode}
-\cs_new_eq:NN \inteval \int_eval:n
+\cs_new_eq:NN \inteval \int_eval:n
% \end{macrocode}
%
% \changes{v1.3d}{2021/12/07}{Added \cs{dimeval} and \cs{skipeval} (gh/711)}
% \begin{macrocode}
-\cs_new_eq:NN \dimeval \dim_eval:n
-\cs_new_eq:NN \skipeval \skip_eval:n
+\cs_new_eq:NN \dimeval \dim_eval:n
+\cs_new_eq:NN \skipeval \skip_eval:n
\ExplSyntaxOff
% \end{macrocode}
% \end{macro}
@@ -452,7 +460,6 @@
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
%<latexrelease> {\fpeval}{fp and int calculations}%
-
%<latexrelease>
%<latexrelease>\let\fpeval\@undefined
%<latexrelease>\let\inteval\@undefined
@@ -503,7 +510,6 @@
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
%<latexrelease> {\ExpandArgs}{Some pre-expansion commands}%
-
%<latexrelease>
%<latexrelease>\let\UseName\@undefined
%<latexrelease>\let\ExpandArgs\@undefined
diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf
index d9cbaf1a3d..58f4b7c4a4 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 5e3ed3d4ab..d2b75528d2 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/ltfilehook.dtx b/macros/latex-dev/base/ltfilehook.dtx
index 533aacbf2b..af503b262f 100644
--- a/macros/latex-dev/base/ltfilehook.dtx
+++ b/macros/latex-dev/base/ltfilehook.dtx
@@ -31,8 +31,8 @@
%%% From File: ltfilehook.dtx
%
% \begin{macrocode}
-\providecommand\ltfilehookversion{v1.0l}
-\providecommand\ltfilehookdate{2021/08/27}
+\providecommand\ltfilehookversion{v1.0m}
+\providecommand\ltfilehookdate{2022/03/10}
% \end{macrocode}
%
%<*driver>
@@ -1046,7 +1046,8 @@
%
% \subsection{Selecting a file (\cs{set@curr@file})}
%
-% \begin{macro}{\set@curr@file,\@curr@file,\@curr@file@reqd}
+% \begin{macro}{\set@curr@file,\set@curr@file@nosearch}
+% \begin{macro}{\@curr@file,\@curr@file@reqd}
% \changes{v1.0f}{2021/01/31}{set \cs{protect} to \cs{string} gh/481}
% Now we hook into \cs{set@curr@file} to resolve a possible file
% substitution, and add \cs{@expl@@@filehook@set@curr@file@@nNN}
@@ -1070,13 +1071,23 @@
% control sequence.
% \changes{v1.0i}{2021/04/20}
% {Make \string~ expand to a string (tracks change in l3kernel)}
+% \changes{v1.0m}{2022/03/10}
+% {Add \cs{set@curr@file@nosearch} for \pkg{graphicx}}
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2021/06/01}%
+%<latexrelease>\IncludeInRelease{2022/06/01}%
%<latexrelease> {\set@curr@file}{Setting current file name}%
-\def\set@curr@file#1{%
+\def\set@curr@file{%
+ \begingroup
+ \set@curr@file@aux}
+\edef\set@curr@file@nosearch{%
\begingroup
+ \let\noexpand\input@path\noexpand\@empty
+ \csname seq_clear:N\endcsname
+ \expandafter\noexpand\csname l_file_search_path_seq\endcsname
+ \noexpand\set@curr@file@aux}
+\def\set@curr@file@aux#1{%
\escapechar\m@ne
\let\protect\string
\edef~{\string~}%
@@ -1117,6 +1128,32 @@
% \end{macrocode}
%
% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2021/06/01}%
+%<latexrelease> {\set@curr@file}{Setting current file name}%
+%<latexrelease>\def\set@curr@file#1{%
+%<latexrelease> \begingroup
+%<latexrelease> \escapechar\m@ne
+%<latexrelease> \let\protect\string
+%<latexrelease> \edef~{\string~}%
+%<latexrelease> \expandafter\def\csname\expandafter\endcsname
+%<latexrelease> \expandafter{\csname\endcsname}%
+%<latexrelease> \@expl@@@filehook@if@no@extension@@nTF{#1}%
+%<latexrelease> {\@tempswatrue}{\@tempswafalse}%
+%<latexrelease> \@kernel@make@file@csname\@curr@file
+%<latexrelease> \@expl@@@filehook@resolve@file@subst@@w {#1}%
+%<latexrelease> \@expl@@@filehook@if@file@replaced@@TF
+%<latexrelease> {\@kernel@make@file@csname\@curr@file@reqd
+%<latexrelease> \@expl@@@filehook@normalize@file@name@@w{#1}%
+%<latexrelease> \if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file@reqd \fi}%
+%<latexrelease> {\if@tempswa \@expl@@@filehook@drop@extension@@N\@curr@file \fi
+%<latexrelease> \global\let\@curr@file@reqd\@curr@file}%
+%<latexrelease> \@expl@@@filehook@clear@replacement@flag@@
+%<latexrelease> \endgroup}
+%<latexrelease>\let\set@curr@file@nosearch\@undefined
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
%<latexrelease>\IncludeInRelease{2020/10/01}%
%<latexrelease> {\set@curr@file}{Setting current file name}%
%<latexrelease>\def\set@curr@file#1{%
@@ -1136,6 +1173,7 @@
%<latexrelease> \global\let\@curr@file@reqd\@curr@file}%
%<latexrelease> \@expl@@@filehook@clear@replacement@flag@@
%<latexrelease> \endgroup}
+%<latexrelease>\let\set@curr@file@nosearch\@undefined
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
%
@@ -1152,6 +1190,7 @@
%<latexrelease> \csname\@firstofone#1\@empty\endcsname}}%
%<latexrelease> \endgroup
%<latexrelease>}
+%<latexrelease>\let\set@curr@file@nosearch\@undefined
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
%
@@ -1159,10 +1198,12 @@
%<latexrelease>\IncludeInRelease{0000/00/00}%
%<latexrelease> {\set@curr@file}{Setting current file name}%
%<latexrelease>\let\set@curr@file\@undefined
+%<latexrelease>\let\set@curr@file@nosearch\@undefined
%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
%
%
diff --git a/macros/latex-dev/base/ltfinal.dtx b/macros/latex-dev/base/ltfinal.dtx
index 46c7ded4aa..4f3b3f15a1 100644
--- a/macros/latex-dev/base/ltfinal.dtx
+++ b/macros/latex-dev/base/ltfinal.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltfinal.dtx}
- [2021/12/07 v2.2q LaTeX Kernel (Final Settings)]
+ [2022/02/20 v2.2r LaTeX Kernel (Final Settings)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfinal.dtx}
@@ -1037,10 +1037,14 @@
% \begin{macro}{\MakeUppercase}
% \begin{macro}{\MakeUppercase}
% \begin{macro}{\@uclclist}
+% \begin{macro}{\@expl@text@lowercase@@n}
+% \begin{macro}{\@expl@text@uppercase@@n}
+% \begin{macro}{\@uclclist}
+%
%
% \changes{v1.1a}{1997/10/20}{Removed \cs{aa} and \cs{AA} from
% \cs{@uclclist} as these are macros.}
-%
+% \changes{v2.2r}{2022/02/20}{use \cs{text_lowercase:n}}%
% And whilst we're doing things with uc/lc tables, here are two
% commands to upper- and lower-case a string.
%
@@ -1051,7 +1055,18 @@
% mathematics, environment names, labels, etc. A much better
% long-term solution is to use all-caps fonts, but these aren't
% generally available.
+%
+% Two wrappers around the L3 case changing functions.
+% |\protected| to make them mostly safe as replacements for |uppercase|
+% and |\lowercase|.
% \begin{macrocode}
+\ExplSyntaxOn
+\protected\def\@expl@text@lowercase@@n{\text_lowercase:n}
+\protected\def\@expl@text@uppercase@@n{\text_uppercase:n}
+\ExplSyntaxOff
+% \end{macrocode}
+
+%% \begin{macrocode}
\DeclareRobustCommand{\MakeUppercase}[1]{{%
\def\i{I}\def\j{J}%
\def\reserved@a##1##2{\let##1##2\reserved@a}%
@@ -1059,20 +1074,16 @@
% \end{macrocode}
% Tell UTF-8 processing to process chars even though we are in an \cs{protected@edef}.
% \changes{v2.1h}{2019/09/14}{Expand UTF8 chars when case changing (github/177)}
+% \changes{v2.2r}{2022/02/20}
+% {Use \cs{@expl@text@uppercase@@n}, removing local redefinition of \cs{UTF@two@octets@noexpand}}%
% \begin{macrocode}
- \let\UTF@two@octets@noexpand\@empty
- \let\UTF@three@octets@noexpand\@empty
- \let\UTF@four@octets@noexpand\@empty
- \protected@edef\reserved@a{\uppercase{#1}}%
+ \protected@edef\reserved@a{\@expl@text@uppercase@@n{#1}}%
\reserved@a
}}
\DeclareRobustCommand{\MakeLowercase}[1]{{%
\def\reserved@a##1##2{\let##2##1\reserved@a}%
\expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}%
- \let\UTF@two@octets@noexpand\@empty
- \let\UTF@three@octets@noexpand\@empty
- \let\UTF@four@octets@noexpand\@empty
- \protected@edef\reserved@a{\lowercase{#1}}%
+ \protected@edef\reserved@a{\@expl@text@lowercase@@n{#1}}%
\reserved@a
}}
% \end{macrocode}
@@ -1108,6 +1119,9 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \changes{v1.0h}{1994/05/13}{Added output enc stuff}
% \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts}
diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf
index a4b7ca6c7d..41ad4ad269 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 94156c25b5..9c58a21a15 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 0ff3d9cfa3..c606d8284d 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/02/04 v1.0b LaTeX Kernel (Kevyal options)]
+ [2022/02/21 v1.0e LaTeX Kernel (Kevyal options)]
% \iffalse
\documentclass{l3doc}
\GetFileInfo{ltkeys.dtx}
@@ -103,6 +103,17 @@
% \cs{ProcessKeyOptions}/\cs{ProcessKeyPackageOptions} act as package options.
% \end{function}
%
+% \begin{function}{\DeclareUnknownKeyHandler}
+% \begin{syntax}
+% \cs{DeclareUnknownKeyHandler} \oarg{family} \marg{code}
+% \end{syntax}
+% The function \cs{DeclareUnknownKeyHandler} may be used to define
+% the behavior when an undefined key is encountered. The \meta{code}
+% will receive the unknown key name as |#1| and the value as |#2|.
+% These can then be processed as appropriate, e.g.~by forwarding
+% to another package.
+% \end{function}
+%
% \begin{function}{\ProcessKeyOptions}
% \begin{syntax}
% \cs{ProcessKeyOptions} \oarg{family}
@@ -153,6 +164,10 @@
% \subsection{Key properties}
%
% \begin{macro}{.code, .if, .store, .usage}
+% \changes{v1.0b}{2022/02/05}
+% {Create properties in \texttt{ltlkeys}}
+% \changes{v1.0c}{2022/02/07}
+% {Correct \texttt.{.code} property}
% \begin{macrocode}
\group_begin:
\cs_set_protected:Npn \@@_tmp:nn #1#2
@@ -164,7 +179,7 @@
\@@_tmp:nn
}
\@@_tmp:nn
- { code } { code }
+ { code:n } { code }
{ legacy_if_set:n } { if }
{ tl_set:N } { store }
{ usage:n } { usage }
@@ -196,7 +211,8 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\@@_options:Nn, \@@_options:NV}
+% \begin{macro}{\@@_options:Nn}
+% \begin{macro}{\@@_options:nN}
% \changes{v1.0b}{2022/01/15}
% {Clear option list in end-of-package hook}
% \begin{macro}{\@@_options_end:}
@@ -211,15 +227,17 @@
% in all cases.
% \begin{macrocode}
\cs_new_protected:Npn \@@_options:Nn #1#2
+ { \@@_options_expand_module:Nn \@@_options:nN {#2} #1 }
+\cs_new_protected:Npn \@@_options:nN #1#2
{
- \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#2}
+ \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#1}
\cs_set_protected:Npn \@@_option_end: { }
\clist_clear:N \l_@@_options_clist
- \@@_options_global:Nn #1 {#2}
+ \@@_options_global:Nn #2 {#1}
\@@_options_local:
- \keys_if_exist:nnF {#2} { unknown }
+ \keys_if_exist:nnF {#1} { unknown }
{
- \keys_define:nn {#2}
+ \keys_define:nn {#1}
{
unknown .code:n =
{
@@ -228,16 +246,15 @@
}
}
\cs_set_protected:Npn \@@_option_end:
- { \keys_define:nn {#2} { unknown .undefine: } }
+ { \keys_define:nn {#1} { unknown .undefine: } }
}
\bool_set_true:N \l_@@_options_loading_bool
- \keys_set:nV {#2} \l_@@_options_clist
+ \keys_set:nV {#1} \l_@@_options_clist
\bool_set_false:N \l_@@_options_loading_bool
\AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
\@@_option_end:
- \@@_options_loaded:n {#2}
+ \@@_options_loaded:n {#1}
}
-\cs_generate_variant:Nn \@@_options:Nn { NV }
\msg_new:nnnn { keys } { option-unknown }
{ Unknown~option~'#1'~for~package~#2. }
{
@@ -247,6 +264,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_options_global:Nn}
% Global (class) options are handled differently for \LaTeXe{} packages
@@ -355,38 +373,72 @@
%
% \subsection{The document interfaces}
%
+% \begin{macrocode}
+\cs_generate_variant:Nn \keys_define:nn { nx }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_options_expand_module:Nn}
+% \changes{v1.0e}{2022/02/21}
+% {Faster approach to module expansion}
+% \begin{macro}{\@@_options_expand_module:nN}
+% To deal with active characters inside the module argument whilst also
+% expanding that argument, we use a combination of \texttt{c}- and
+% \texttt{f}-type expansion. This works as the definitions for active
+% UTF-8 bytes contain an \cs{ifincsname} test.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_options_expand_module:Nn #1#2
+ {
+ \cs:w @@_options_expand_module:nN \use:e { \cs_end: {#2} } #1
+ }
+\cs_new_protected:Npn \@@_options_expand_module:nN #1#2
+ { #2 {#1} }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\DeclareKeys}
+% \changes{v1.0c}{2022/02/15}{Expand module argument}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
% Defining key options is quite straight-forward: we have an intermediate
% function to allow for potential set-up steps.
% \begin{macrocode}
-\NewDocumentCommand \DeclareKeys { o +m }
+\NewDocumentCommand \DeclareKeys { O { \@currname } +m }
+ { \@@_options_expand_module:Nn \keys_define:nn {#1} {#2} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareUnknownKeyHandler}
+% \changes{v1.0c}{2022/02/15}{Added \cs{DeclareUnknownKeysHandler}}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
+% \changes{v1.0d}{2022/02/16}
+% {Rename \cs{DeclareUnknownKeysHandler} to \cs{DeclareUnknownKeyHandler}}
+% \begin{macrocode}
+\NewDocumentCommand \DeclareUnknownKeyHandler { O { \@currname } +m }
{
- \IfNoValueTF {#1}
- { \exp_args:NV \keys_define:nn \@currname }
- { \keys_define:nn {#1} }
- {#2}
+ \cs_set_protected:cpn { @@_unknown_handler_ #1 :nn } ##1##2 {#2}
+ \@@_options_expand_module:Nn \keys_define:nx {#1}
+ {
+ unknown .code:n =
+ \exp_not:N \exp_args:NV
+ \exp_not:c { @@_unknown_handler_ #1 :nn }
+ \exp_not:N \l_keys_key_str {####1}
+ }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ProcessKeyOptions, \ProcessKeyPackageOptions}
+% \changes{v1.0c}{2022/02/15}{Expand module argument}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
% We need to deal with the older interface from \pkg{l3keys2e} here: it had
% a mandatory argument. We can mop that up using a look-ahead, and then
% exploit that information to determine whether the package option handling
% is set up for the new approach for clash handling.
% \begin{macrocode}
-\NewDocumentCommand \ProcessKeyOptions { o }
- {
- \IfNoValueTF {#1}
- { \@@_options:NV \c_true_bool \@currname }
- { \@@_options:Nn \c_true_bool {#1} }
- }
-\NewDocumentCommand \ProcessKeyPackageOptions { o }
- {
- \IfNoValueTF {#1}
- { \@@_options:NV \c_false_bool \@currname }
- { \@@_options:Nn \c_false_bool {#1} }
- }
+\NewDocumentCommand \ProcessKeyOptions { O { \@currname } }
+ { \@@_options:Nn \c_true_bool {#1} }
+\NewDocumentCommand \ProcessKeyPackageOptions { O { \@currname } }
+ { \@@_options:Nn \c_false_bool {#1} }
\@onlypreamble \ProcessKeyOptions
\@onlypreamble \ProcessKeyPackageOptions
% \end{macrocode}
@@ -462,15 +514,12 @@
% \subsection{General key setting}
%
% \begin{macro}{\SetKeys}
+% \changes{v1.0c}{2022/02/15}{Expand module argument}
+% \changes{v1.0d}{2022/02/16}{Allow for active characters in module argument}
% A simple wrapper.
% \begin{macrocode}
-\NewDocumentCommand \SetKeys { o +m }
- {
- \IfNoValueTF {#1}
- { \keys_set:Vn \@currname }
- { \keys_set:nn {#1} }
- {#2}
- }
+\NewDocumentCommand \SetKeys { O { \@currname } +m }
+ { \@@_options_expand_module:Nn \keys_set:nn {#1} {#2} }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index 7e4f07d3bb..819c98563f 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/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index 628393f727..b841c40b85 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 dd2500ff78..ae346eb39f 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 6f416864b1..103776ed43 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 50442a37c6..06119e7712 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 d532b318b1..2d752b5815 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 2de0565e99..dc337c3faa 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 46d4be0fcc..87816972de 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 a4783c5844..e8992a1f63 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 47223098d7..8318a2ae51 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 b5978dba84..5388d757e3 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 b4a88ee9d5..628b86746c 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 6f5c117b22..a37246fb94 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 73ef1dcb79..2e38696a7e 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 a6c3c88fde..4a04a54aa9 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 0662b70afe..7ef8a64932 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 2049e1cde6..a4aa674bb8 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 b3073b168d..d243dc4e78 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 306a567782..018b605443 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 6b4b445c08..912c134dfa 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 551ee12be4..4821f6f528 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 e0b015c09e..1a198102ad 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 9ad04a02c5..5c8dcdbf48 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 96543a8e39..86b9829d51 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 f82c5e1aba..d13112eab4 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 1eeeb95b92..d33dc9585b 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 eef51d2b0a..4779fd294e 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 98b38ea900..0de0ca04fa 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 df69fd7649..a395576c01 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 7d0afe54d9..1bbcb49c28 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 1ef4e3ce57..584d2f88c1 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 b9955d97fc..543b322d65 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 466e2bcf9f..6a97e28863 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 f99da0ca4c..bf985ad362 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 176ced9da8..4825971649 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 bc02bb3bf1..d2c0df1bd0 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 045089749a..34695cb058 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/ltnews35.tex b/macros/latex-dev/base/ltnews35.tex
index e798d4c2e4..671d6d337a 100644
--- a/macros/latex-dev/base/ltnews35.tex
+++ b/macros/latex-dev/base/ltnews35.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019-2021
+% Copyright 2021-2022
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -186,14 +186,44 @@ and also in the documentation of the \pkg{pdfmanagement-testphase} package.
\section{The \pkg{latex-lab} bundle}
-\emph{write about it}
+We added a new \pkg{latex-lab}oratory bundle in which we place new
+code that is going to be available only through a
+\cs{DocumentMetadata} declaration and that is\Dash most
+importantly\Dash work under development and subject to
+change without further notice. This means, that commands and interfaces provided there may
+get altered or removed again after some public testing. The code can
+be accessed through the \cs{DocumentMetadata} key \texttt{testphase}.
+Currently supported values are \texttt{phase-I} and \texttt{phase-II}
+that enable code of the tagged PDF project (phase-I is frozen and
+phase-II the phase we are currently working on). With
+\begin{verbatim}
+\DocumentMetadata{testphase=phase-II}
+\end{verbatim}
+you currently enable tagging for paragraphs and footnotes, more
+document elements will follow soon.
+
+For more detailed testing it is also possible to pass other values to
+\texttt{testphase}, for example, the first incarnation of a template
+design interface based on \pkg{l3keys} can be accessed through the
+value \texttt{prototype}, thus
+\begin{verbatim}
+\DocumentMetadata{testphase={phase-II,prototype}}
+\end{verbatim}
+will enable all of phase-II plus the draft template interface (which
+is not yet integrated in phase-II).
+
+Eventually, code will move (once considered stable) from the
+testphase into the \LaTeX{} kernel itself. Tagging will continue to
+require a \cs{DocumentMetadata} declaration, but you will then be able
+to drop the \texttt{testphase} key setting.
+
\section{New or improved commands}
-\subsection{A kevyal approach to option handling}
+\subsection{A keyval approach to option handling}
The classical \LaTeXe{} method for handling options, using \cs{ProcessOptions},
treats each entry in the list as a string. Many package authors have sought to
@@ -217,7 +247,7 @@ unless explicitly given as an optional argument.
A version which does not consider global options,
\cs{ProcessKeyPackageOptions}, is also available.
-To support creating key options in for this mechanism, the new command
+To support creating key options for this mechanism, the new command
\cs{DeclareKeys} has been added. This works using the same general
approach as \pkg{l3keys} or \pkg{pgfkeys}: each key has one or more
\emph{properties} which define its behavior.
@@ -315,19 +345,80 @@ layer)) which was also used in the example above.
\githubissue{735}
+\subsection{Testing for (nearly) empty arguments}
+%
+In addition to \cs{IfNoValueTF} to test if an optional argument was
+provided or not, there is now also \cs{IfBlankTF}, which tests if the
+argument is empty or contains only blanks. Based on the result it
+selects a true or false code branch. As usual, the variants
+\cs{IfBlankT} and \cs{IfBlankF} are also provided for use when only one
+branch leads to some action. Further details and examples are given
+in \file{usrguide3.pdf}.
+
+This test can also be useful if you set up key/value options and want
+to test if a key was specified without giving a value or through
+specifying \enquote{\textit{key}\texttt{ = ,}}.
+
+
+\subsection{Better allocator for Lua command ids}
+
+In \LuaTeX\ we already had the \cs{newluafunction} macro which allocates
+a Lua function identifier which can be used to define commands
+with \cs{luadef}. But this always required two steps: \cs{newluafunction}
+defines the passed control sequence as an integer, which then has to be used
+to define the actual Lua command with \cs{luadef}. After that, the integer is
+no longer needed. This was inconsistent with other allocators. Therefore we
+added two new allocators \cs{newluacmd} and \cs{newexpandableluacmd} which
+directly define a control sequences invoking the allocated Lua function.
+The first one defines a non-expandable Lua command, the second one an expandable
+one. Of course, the associated Lua function still has to be defined by assigning
+a function to the \verb|lua.get_functions_table()| table. The required index is
+available in \cs{allocationnumber}.
+
+An example could be
+\begin{verbatim}
+\newluacmd \greeting
+\directlua {
+lua.get_functions_table()
+ [tex.count.allocationnumber]
+ = function()
+ local name = token.scan_argument()
+ tex.sprint('Hello ', name, '!')
+ end
+}
-\subsection{???}
+\greeting{world}
+\end{verbatim}
%
-\githubissue{???}
+\githubissue{536}
+
+
+
\section{Code improvements}
+\subsection{\cs{protected} UTF-8 character definitions}
+The characters defined via \file{utf8.def} are now defined as \cs{protected}
+macros. This makes them safe to use in expansion contexts where the
+classic \cs{protect} mechanism is not enabled, notably L3 programming
+layer \texttt{e} and \texttt{x} arguments.
+
+Related to this change \cs{MakeUppercase} and \cs{MakeLowercase} have
+been updated to use the Unicode-aware case changing functions
+\cs{text\string_lowercase:n} in place of the \TeX-primitive \cs{lowercase}.
+A similar change will be made in the \pkg{textcase} package.
+
+Note for technical reasons these low level character handling changes
+will not be rolled back if the format version is rolled back using the
+\pkg{latexrelease} package rollback mechanism.
+%
+\githubissue{780}
\subsection{A small update to \cs{obeylines} and \cs{obeyspaces}}
The plain \TeX{} versions of \cs{obeylines} and \cs{obeyspaces} make
-\verb=^^M= and \verb*= = active and force them to execute \cs{par}
+\verb=^^M= and \verb*= = active and force them to execute \cs{par} %*
and \cs{space}, respectively. Don Knuth makes a remark in the \TeX{}book
that one can then use a trick such as
\begin{verbatim}
@@ -445,7 +536,7 @@ displaying different data in the footer line on recto and verso pages.
\subsection{Croatian character support}
The default \pkg{inputenc} support has been extended to support the 9 characters
-D\v Z, D\v z, d\v z, LJ, Lj, lj, NJ, Nj, nj, input as single UTF-8 codepoints
+D\v Z, D\v z, d\v z, LJ, Lj, lj, NJ, Nj, nj, input as single UTF-8 code points
in the range U+01C4 to U+01CC.
%
\githubissue{gh/723}
@@ -455,7 +546,7 @@ in the range U+01C4 to U+01CC.
When declaring encoding specific commands for the Unicode (TU)
encoding some declarations (e.g., \cs{DeclareUnicodeComposite}) do not
-have an explicit argument for the the encoding name, but instead use
+have an explicit argument for the encoding name, but instead use
the command \cs{UnicodeEncodingName} internally. There was one
exception though: \cs{DeclareUnicodeAccent} required an explicit
encoding argument. This inconsistency has now been removed and the
@@ -474,10 +565,6 @@ argument as their general purpose counterparts do.
-\subsection{???}
-%
-\githubissue{???}
-
\section{Bug fixes}
@@ -503,6 +590,21 @@ is now fixed.
+\subsection{Make \cs{cite}\texttt{\textbraceleft\textbraceright} produce a warning}
+
+When the \cs{cite} command can't resolve a citation label it issue a
+warning \enquote{Citation `\meta{label}' on page \meta{page}
+ undefined}. However, due to some implementation details a completely
+empty argument was always silently accepted. Given that there are probably
+people who write \verb=\cite{}= with the intention to fill in the
+correct label later it is rather unfortunate if that is not generating
+a warning that something in the document is still amiss.
+This has finally been corrected and a warning is now generated also in this case.
+%
+\githubissue{790}
+
+
+
\section{Changes to packages in the \pkg{amsmath} category}
@@ -512,7 +614,7 @@ is now fixed.
The package \pkg{amsopn} used to define \cs{operator@font} but this
command is already provided by the \LaTeX{} format (for at least 14
years). As a result the definition in \pkg{amsopn} is equivalent to a
-reset to the kernel definition, which is unnecessary and suprising if
+reset to the kernel definition, which is unnecessary and surprising if
you alter the math setup (e.g., by loading a package) and at a later
stage add \pkg{amsmath}, which then undoes part of your setup. For
this reason the definition was taken out and
@@ -528,9 +630,15 @@ after loading the package.
%
\githubissue{734}
-\subsection{???}
+\subsection{\pkg{amsmath} Error in \cs{shoveleft}}
+
+If \cs{shoveleft} started out with the words \enquote{plus} or
+\enquote{minus} it was misunderstood as part of a rubber length and
+led either to an error or was swallowed without trace. By adding a
+\cs{relax} this erroneous scanning into the argument of \cs{shoveleft}
+is now prevented.
%
-\githubissue{???}
+\githubissue{714}
\section{Changes to packages in the \pkg{graphics} category}
@@ -576,9 +684,19 @@ This command is \emph{only} allowed in formulas.
For details and further examples, see \file{mathcolor.pdf}.
-\subsection{???}
+\subsection{Fix locating files with \cs{graphicspath}}
%
-\githubissue{???}
+
+If a call to \cs{includegraphics} asked for a file (say, \file{image})
+without extension, and if both \file{A/image.pdf} and \file{B/image.tex}
+existed (both \file{A/} and \file{B/} in \cs{graphicspath}, but neither
+in a folder searched by kpse), then \file{A/image.pdf} would not be
+found, and a \enquote{file not found} error would be incorrectly thrown.
+The issue is now fixed and the graphics file is correctly found.
+%
+\githubissue{776}
+\sxissue{q/630167}
+
diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf
index ff766c2947..1447a6bfa8 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 cf0795adb8..11c181ecaa 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 a650b930de..fe21c18e00 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 cc986f8a19..7ce31427b4 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 0bf753f210..e46851de01 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltvers.dtx}
- [2021/08/10 v1.1h LaTeX Kernel (Version Info)]
+ [2022/02/28 v1.1i LaTeX Kernel (Version Info)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltvers.dtx}
@@ -115,7 +115,7 @@
{2022-06-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-2}
+\def\patch@level{-3}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
@@ -365,6 +365,8 @@
% \changes{v1.1f}{2021/03/18}{Added \cs{NewModuleRelease}.}
% \changes{v1.1g}{2021/04/16}
% {\cs{NewModuleRelease} with the same arguments as \cs{IncludeInRelease}.}
+% \changes{v1.1i}{2022/02/28}
+% {Detect a missing \cs{IncludeInRelease}\texttt{\{0000/00/00\}}.}
% \begin{macrocode}
\let\if@skipping@module\iffalse
\def\@skipping@moduletrue{\let\if@skipping@module\iftrue}
@@ -379,7 +381,7 @@
\GenericInfo{}{BEGIN module: \new@modulename\space (\new@moduledate)}%
\GenericInfo{}{ \@spaces\@spaces\@spaces\space#3\@gobble}%
\ifnum\sourceLaTeXdate<%
- \expandafter\@parse@version\new@moduledate//00\@nil\relax
+ \expandafter\@parse@version\new@moduledate//00\@nil\relax
\ifnum\expandafter\@parse@version\fmtversion//00\@nil<%
\expandafter\@parse@version\new@moduledate//00\@nil\relax
\GenericInfo{}{Skipping module \new@modulename}%
@@ -394,7 +396,19 @@
\@skipping@moduletrue
\expandafter\new@module@skip
\fi}
-\long\def\new@module@skip#1\IncludeInRelease{\IncludeInRelease}
+\long\def\new@module@skip#1\IncludeInRelease{%
+ \long\def\reserved@a##1\EndModuleRelease{}%
+ \if\relax\detokenize\expandafter{\reserved@a#1{}{}\EndModuleRelease}\relax
+ \else
+ \@latex@error{Missing mandatory \string\IncludeInRelease{0000/00/00}}\@ehc
+ \expandafter\@secondoftwo
+ \fi
+ \@gobble
+ {\@expandtwoargs\IncludeInRelease
+ {0000/00/00}{\new@modulename}%
+ {ERROR! Emergency recovery}%
+ #1}%
+ \IncludeInRelease}
\def\EndModuleRelease{%
\ifx\new@modulename\@empty
\@latex@error{Extra \string\EndModuleRelease.}\@eha
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index 9c8852094d..372a87f113 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 1889d2644c..b2a6e7ec7f 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 2c0af1153a..82ecf21cf9 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 25abeace24..884f6e754d 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 c8702a68de..edcf7dc43f 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 575422342c..927dd76514 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 52546f7385..0b519f6511 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 624a5b5123..76dd3c9655 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 c9f5168a05..88211e8807 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 3f14932015..7298566aea 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 c9c761680e..f4d49885f2 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 4aac3efb42..929194014a 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.pdf b/macros/latex-dev/base/usrguide.pdf
index fe712da807..5975d1567f 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/usrguide3.pdf b/macros/latex-dev/base/usrguide3.pdf
index 5e0cd66224..a15d3c431b 100644
--- a/macros/latex-dev/base/usrguide3.pdf
+++ b/macros/latex-dev/base/usrguide3.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide3.tex b/macros/latex-dev/base/usrguide3.tex
index 249b708943..efec9ad2a2 100644
--- a/macros/latex-dev/base/usrguide3.tex
+++ b/macros/latex-dev/base/usrguide3.tex
@@ -37,7 +37,7 @@
\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\
All rights reserved.}
-\date{2022-01-03}
+\date{2022-02-19}
\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
\NewDocumentCommand\marg{m}{\arg{#1}}
@@ -356,6 +356,8 @@ defaults with testing for missing values.
Optional arguments make use of dedicated variables to return information about
the nature of the argument received.
+
+
\begin{decl}
|\IfNoValueTF| \arg{arg} \arg{true code} \arg{false code} \\
|\IfNoValueT| \arg{arg} \arg{true code} \\
@@ -391,11 +393,12 @@ will be logically \texttt{false}.
When two optional arguments follow each other (a syntax we typically
discourage), it can make sense to allow users of the command to
specify only the second argument by providing an empty first
-argument. Rather than testing separately for emptiness and for
+argument.
+\NEWdescription{2022/06/01}
+Rather than testing separately for emptiness and for
|-NoValue-| it is then best to use the argument type~|O| with an
-empty default value, and simply test for emptiness using the
-\pkg{expl3} conditional \cs{tl_if_blank:nTF} or its \pkg{etoolbox}
-analogue \cs{ifblank}.
+empty default value, and then test for emptiness using the
+conditional \cs{IfBlankTF} (described below) instead.
\begin{decl}
|\IfValueTF| \arg{arg} \arg{true code} \arg{false code} \\
@@ -406,6 +409,51 @@ The reverse form of the \cs{IfNoValue(TF)} tests are also available
as \cs{IfValue(TF)}. The context will determine which logical
form makes the most sense for a given code scenario.
+
+
+
+
+\begin{decl}[2022/06/01]
+ |\IfBlankTF| \arg{arg} \arg{true code} \arg{false code} \\
+ |\IfBlankT| \arg{arg} \arg{true code} \\
+ |\IfBlankF| \arg{arg} \arg{false code}
+\end{decl}
+
+
+The \cs{IfNoValueTF} command chooses the \meta{true code} if the optional argument has not
+been used at all (and it returns the special \texttt{-NoValue-}
+marker), but not if it has been given an empty value. In contrast
+\cs{IfBlankTF} returns true if its argument is either truly empty or
+only contains one or more normal blanks.
+For example
+\begin{verbatim}
+\NewDocumentCommand\foo{m!o}{\par #1:
+ \IfNoValueTF{#2}{No optional}%
+ {\IfBlankTF{#2}{Blanks in or empty}%
+ {Real content in}}%
+ \space argument!}
+\foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
+\end{verbatim}
+results
+in the following output:
+\begin{quote}
+ \NewDocumentCommand\foo{m!o}{\par #1:
+ \IfNoValueTF{#2}{No optional}%
+ {\IfBlankTF{#2}{Blanks in or empty}%
+ {Real content in}}%
+ \space argument!}
+ \foo{1}[bar] \foo{2}[ ] \foo{3}[] \foo{4}[\space] \foo{5} [x]
+\end{quote}
+
+Note that the \cs{space} in (4) is considered real content---because it is
+a command and not a \enquote{space} character---even though it results
+in producing a space. You can also observe in (5) the effect of the
+\texttt{!} specifier, preventing the last \cs{foo}
+from interpreting \texttt{[x]} as its optional argument.
+
+
+
+
\begin{decl}
|\BooleanFalse| \\
|\BooleanTrue|
diff --git a/macros/latex-dev/base/utf8ienc.dtx b/macros/latex-dev/base/utf8ienc.dtx
index a0c96357a0..8789dd35ef 100644
--- a/macros/latex-dev/base/utf8ienc.dtx
+++ b/macros/latex-dev/base/utf8ienc.dtx
@@ -216,7 +216,7 @@
%<+ts1> \ProvidesFile{ts1enc.dfu}
%<+x2> \ProvidesFile{x2enc.dfu}
%<+all> \ProvidesFile{utf8enc.dfu}
-%<-utf8-2018> [2021/12/13 v1.2o UTF-8 support]
+%<-utf8-2018> [2022/02/13 v1.3a UTF-8 support]
% \end{macrocode}
%
% \begin{macrocode}
@@ -363,11 +363,12 @@
% \begin{macro}{\UTFviii@two@octets@noexpand}
% \begin{macro}{\UTFviii@three@octets@noexpand}
% \begin{macro}{\UTFviii@four@octets@noexpand}
+% \changes{v1.3a}{2022/02/19}{Use \cs{unexpanded} rather than \cs{noexpand} so only takes one expansion step}%
% These temporarily prevent the active chars from expanding.
% \begin{macrocode}
-\long\def\UTF@two@octets@noexpand#1#2{\noexpand#2\noexpand}
-\long\def\UTF@three@octets@noexpand#1#2#3{\noexpand#2\noexpand#3\noexpand}
-\long\def\UTF@four@octets@noexpand#1#2#3#4{\noexpand#2\noexpand#3\noexpand#4\noexpand}
+\long\def\UTF@two@octets@noexpand#1#2#3{\unexpanded{#2#3}}
+\long\def\UTF@three@octets@noexpand#1#2#3#4{\unexpanded{#2#3#4}}
+\long\def\UTF@four@octets@noexpand#1#2#3#4#5{\unexpanded{#2#3#4#5}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -376,11 +377,12 @@
% \begin{macro}{\UTFviii@two@octets@string}
% \begin{macro}{\UTFviii@three@octets@string}
% \begin{macro}{\UTFviii@four@octets@string}
+% \changes{v1.3a}{2022/02/19}{Use \cs{detokenize} rather than \cs{string} so only takes one expansion step}%
% And the same with \cs{string} for use in \cs{csname} constructions.
% \begin{macrocode}
-\long\def\UTF@two@octets@string#1#2{\string#2\string}
-\long\def\UTF@three@octets@string#1#2#3{\string#2\string#3\string}
-\long\def\UTF@four@octets@string#1#2#3#4{\string#2\string#3\string#4\string}
+\long\def\UTF@two@octets@string#1#2#3{\detokenize{#2#3}}
+\long\def\UTF@three@octets@string#1#2#3#4{\detokenize{#2#3#4}}
+\long\def\UTF@four@octets@string#1#2#3#4#5{\detokenize{#2#3#4#5}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -542,15 +544,24 @@
% |\count@| and ending at |\@tempcnta|${} - 1$, each time executing
% the code in |\UTFviii@tmp|.
%
-% All this is done in a group so that temporary catcode changes
-% etc.~vanish after everything is set up.
+% Store current settings so can restore after the loops without using a group (gh/762).
+%
+% \begin{macrocode}
+\edef\reserved@a{%
+\catcode`\noexpand\~=\the\catcode`\~\relax
+\catcode`\noexpand\"=\the\catcode`\"\relax
+\uccode`\noexpand\~=\the\uccode`\~\relax
+\count@=\the\count@\relax
+\@tempcnta=\the\@tempcnta\relax
+\let\noexpand\reserved@a\relax}
+% \end{macrocode}
%
% \begin{macrocode}
-\begingroup
\catcode`\~13
\catcode`\"12
% \end{macrocode}
%
+% \changes{v1.3a}{2022/02/19}{Use local protected definitions in the character definitions}%
% \begin{macrocode}
\def\UTFviii@loop{%
\uccode`\~\count@
@@ -566,7 +577,7 @@
% C0 controls are valid UTF-8 but defined to give the ``Character not defined error''
% They may be defined with |\DeclareUnicodeCharacter|.
% \begin{macrocode}
- \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@undefined@err{:\string~}}}
+ \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@undefined@err{:\string~}}}
% 0 ^^@ null
\count@"1
\@tempcnta9
@@ -588,7 +599,7 @@
% \begin{macrocode}
\count@"80
\@tempcnta"C2
- \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@invalid@err\string~}}
+ \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@invalid@err\string~}}
\UTFviii@loop
% \end{macrocode}
%
@@ -597,7 +608,7 @@
% \begin{macrocode}
\count@"C2
\@tempcnta"E0
- \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@two@octets\noexpand~}}
+ \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@two@octets\noexpand~}}
\UTFviii@loop
% \end{macrocode}
%
@@ -605,7 +616,7 @@
% \begin{macrocode}
\count@"E0
\@tempcnta"F0
- \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@three@octets\noexpand~}}
+ \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@three@octets\noexpand~}}
\UTFviii@loop
% \end{macrocode}
%
@@ -614,7 +625,7 @@
% \begin{macrocode}
\count@"F0
\@tempcnta"F5
- \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@four@octets\noexpand~}}
+ \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@four@octets\noexpand~}}
\UTFviii@loop
% \end{macrocode}
%
@@ -623,12 +634,13 @@
% \begin{macrocode}
\count@"F5
\@tempcnta"100
- \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@invalid@err\string~}}
+ \def\UTFviii@tmp{\protected\edef~{\noexpand\UTFviii@invalid@err\string~}}
\UTFviii@loop
% \end{macrocode}
%
+% Restore values after the loops.
% \begin{macrocode}
-\endgroup
+\reserved@a
% \end{macrocode}
%
% \end{macro}
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index e60bfe78d6..8f58daf638 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 4eee052d2b..e8bd3d23b1 100644
--- a/macros/latex-dev/base/webcomp.pdf
+++ b/macros/latex-dev/base/webcomp.pdf
Binary files differ