summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/hvextern/Changes1
-rw-r--r--macros/latex/contrib/hvextern/README4
-rw-r--r--macros/latex/contrib/hvextern/doc/hvextern.pdfbin1483008 -> 1498836 bytes
-rw-r--r--macros/latex/contrib/hvextern/latex/hvextern.sty20
-rw-r--r--[-rwxr-xr-x]macros/latex/contrib/hvextern/script/hvextern-checkfile.lua0
-rw-r--r--macros/latex/contrib/l3experimental/CHANGELOG.md16
-rw-r--r--macros/latex/contrib/l3experimental/README.md11
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.pdfbin308534 -> 308820 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3bitset.ins62
-rw-r--r--macros/latex/contrib/l3experimental/l3bitset.pdfbin404410 -> 0 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-boxes.dtx42
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-code.pdfbin681452 -> 682740 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-layers.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-paths.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-points.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-scopes.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-softpath.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-state.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-transforms.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.dtx17
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.pdfbin517829 -> 518932 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.pdfbin408914 -> 409197 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.pdfbin383641 -> 383921 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.pdfbin313597 -> 313872 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.pdfbin368029 -> 368314 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.pdfbin348053 -> 348328 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.pdfbin394481 -> 394766 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.pdfbin299636 -> 299916 bytes
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md40
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin623311 -> 623407 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1766729 -> 1772521 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3.ins1
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3bitset.dtx (renamed from macros/latex/contrib/l3experimental/l3bitset.dtx)172
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx13
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx149
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx195
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin558186 -> 558435 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin151991 -> 152023 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx34
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx34
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-functions.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-symbolic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-types.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx9
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx56
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx8
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx14
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin396222 -> 396222 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin122959 -> 122959 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin150919 -> 150919 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin148747 -> 148747 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin114754 -> 114754 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin112524 -> 112524 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin151591 -> 151591 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin128344 -> 128344 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin163484 -> 163484 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin250159 -> 250159 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin150302 -> 150302 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin170102 -> 170102 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin205020 -> 205020 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3pdf.dtx31
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.csv9
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin82683 -> 82696 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx21
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx194
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx101
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296454 -> 296516 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin243093 -> 243162 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx13
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin218244 -> 218315 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3text-map.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-build.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx88
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx182
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7492256 -> 7508388 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/source3body.tex15
-rw-r--r--macros/latex/contrib/onedown/Examples/Bidding.tex (renamed from macros/latex/contrib/onedown/examples/Bidding.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/CardSymbols.tex (renamed from macros/latex/contrib/onedown/examples/CardSymbols.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Compass.tex (renamed from macros/latex/contrib/onedown/examples/Compass.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/ExpertQuiz.tex (renamed from macros/latex/contrib/onedown/examples/ExpertQuiz.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/FancyColors.tex49
-rw-r--r--macros/latex/contrib/onedown/Examples/Fontsizes.tex (renamed from macros/latex/contrib/onedown/examples/Fontsizes.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Hands.tex (renamed from macros/latex/contrib/onedown/examples/Hands.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Languages.tex (renamed from macros/latex/contrib/onedown/examples/Languages.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Legends.tex (renamed from macros/latex/contrib/onedown/examples/Legends.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Play.tex (renamed from macros/latex/contrib/onedown/examples/Play.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Select-Hands.tex (renamed from macros/latex/contrib/onedown/examples/Select-Hands.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Suits.tex (renamed from macros/latex/contrib/onedown/examples/Suits.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/Wrapping.tex (renamed from macros/latex/contrib/onedown/examples/Wrapping.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/bidAll.tex (renamed from macros/latex/contrib/onedown/examples/bidAll.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/bidEW.tex (renamed from macros/latex/contrib/onedown/examples/bidEW.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/bidNE.tex (renamed from macros/latex/contrib/onedown/examples/bidNE.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/bidNS.tex (renamed from macros/latex/contrib/onedown/examples/bidNS.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/bidNW.tex (renamed from macros/latex/contrib/onedown/examples/bidNW.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/onedown-examples.pdfbin0 -> 903899 bytes
-rw-r--r--macros/latex/contrib/onedown/Examples/onedown-examples.tex (renamed from macros/latex/contrib/onedown/examples/onedown-examples.tex)50
-rw-r--r--macros/latex/contrib/onedown/Examples/onedown-ref.pdfbin0 -> 397989 bytes
-rw-r--r--macros/latex/contrib/onedown/Examples/onedown-ref.tex (renamed from macros/latex/contrib/onedown/examples/onedown-ref.tex)37
-rw-r--r--macros/latex/contrib/onedown/Examples/showAll.tex (renamed from macros/latex/contrib/onedown/examples/showAll.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/showNS-align.tex (renamed from macros/latex/contrib/onedown/examples/showNS-align.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/showNS-warn-I.tex (renamed from macros/latex/contrib/onedown/examples/showNS-warn-I.tex)0
-rw-r--r--macros/latex/contrib/onedown/Examples/showNS-warn-II.tex (renamed from macros/latex/contrib/onedown/examples/showNS-warn-II.tex)2
-rw-r--r--macros/latex/contrib/onedown/ODw-French.dict2
-rw-r--r--macros/latex/contrib/onedown/ODw-Italian.dict174
-rw-r--r--macros/latex/contrib/onedown/README6
-rw-r--r--macros/latex/contrib/onedown/examples/Compass.pdfbin415404 -> 0 bytes
-rw-r--r--macros/latex/contrib/onedown/examples/Fontsizes.pdfbin245668 -> 0 bytes
-rw-r--r--macros/latex/contrib/onedown/examples/onedown-examples.pdfbin874153 -> 0 bytes
-rw-r--r--macros/latex/contrib/onedown/examples/onedown-ref.pdfbin227662 -> 0 bytes
-rw-r--r--macros/latex/contrib/onedown/onedown.dtx33
-rw-r--r--macros/latex/contrib/onedown/onedown.pdfbin1026845 -> 1106351 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/README.md28
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex116
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex40
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex2
-rwxr-xr-x[-rw-r--r--]macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex71
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.pdfbin0 -> 537824 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdfbin532726 -> 537824 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua9
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua11
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua32
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua67
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua7
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua6
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua67
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua19
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua13
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua21
197 files changed, 1508 insertions, 1164 deletions
diff --git a/macros/latex/contrib/hvextern/Changes b/macros/latex/contrib/hvextern/Changes
index a68cd3d68f..3f870a713e 100644
--- a/macros/latex/contrib/hvextern/Changes
+++ b/macros/latex/contrib/hvextern/Changes
@@ -1,5 +1,6 @@
hvextern.sty ----------------
+v 0.38 2023-12-08 - change internal macroname \Write@Ex to \hv@Write@EX
v 0.37b 2023-11-22 - fix typo in documentation
v 0.37a 2023-11-20 - fix bug in documentation
v 0.37 2023-08-29 - do not write files without --shell-escape
diff --git a/macros/latex/contrib/hvextern/README b/macros/latex/contrib/hvextern/README
index adbd87ba71..c79f2266ee 100644
--- a/macros/latex/contrib/hvextern/README
+++ b/macros/latex/contrib/hvextern/README
@@ -6,11 +6,11 @@ The main LaTeX document must be run with the option --shell-escape
%% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3c
+%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
-%% and version 1.3c or later is part of all distributions of LaTeX
+%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
diff --git a/macros/latex/contrib/hvextern/doc/hvextern.pdf b/macros/latex/contrib/hvextern/doc/hvextern.pdf
index 43c19c90f5..d78c943a84 100644
--- a/macros/latex/contrib/hvextern/doc/hvextern.pdf
+++ b/macros/latex/contrib/hvextern/doc/hvextern.pdf
Binary files differ
diff --git a/macros/latex/contrib/hvextern/latex/hvextern.sty b/macros/latex/contrib/hvextern/latex/hvextern.sty
index 0883697e79..cfdd56053d 100644
--- a/macros/latex/contrib/hvextern/latex/hvextern.sty
+++ b/macros/latex/contrib/hvextern/latex/hvextern.sty
@@ -1,4 +1,4 @@
-%% $Id: hvextern.sty 824 2023-11-22 12:26:34Z herbert $
+%% $Id: hvextern.sty 833 2023-12-08 19:31:08Z herbert $
%% This is file `hvextern.sty',
%%
%% Copyright (C) 2016-23
@@ -12,8 +12,8 @@
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-\def\hvexternFileversion{0.37b}
-\ProvidesFile{hvextern}[2023/11/22 v\hvexternFileversion: package for running external documents (HV)]
+\def\hvexternFileversion{0.38}
+\ProvidesFile{hvextern}[2023/12/08 v\hvexternFileversion: package for running external documents (HV)]
\newif\ifhv@extern@checkCode
\hv@extern@checkCodefalse
@@ -842,14 +842,14 @@
\Write@Postamble
\immediate\closeout\FV@OutFile\endgroup\@esphack}
-\newcommand\Write@Ex[1]{%
+\newcommand\hv@Write@EX[1]{%
\begingroup
\let\protect\@unexpandable@protect
\edef\reserved@a{\immediate\write\FV@OutFile{#1}}%
\reserved@a
\endgroup}
-\newcommand\Write@ExOne[1]{{%
+\newcommand\hv@Write@EXOne[1]{{%
\@temptokena\expandafter{#1}%
\immediate\write\FV@OutFile{\the\@temptokena}}}
@@ -869,17 +869,17 @@
%
\newcommand\Write@Preamble@PST{%
- \Write@Ex{\string\documentclass[pstricks]{standalone}}%
- \Write@Ex{\string\pagestyle{empty}}%
+ \hv@Write@EX{\string\documentclass[pstricks]{standalone}}%
+ \hv@Write@EX{\string\pagestyle{empty}}%
\ifx\Preamble@Commands\@empty\else
- \Write@Ex{\Preamble@Commands}%
+ \hv@Write@EX{\Preamble@Commands}%
\fi
- \Write@Ex{\string\begin{document}}%
+ \hv@Write@EX{\string\begin{document}}%
}
%
%\hv@extern@ExampleType{ltx}
% {\Write@Preamble@LaTeX}
-% {\Write@Ex{\string\end{document}}}
+% {\hv@Write@EX{\string\end{document}}}
% {\string\begin{document}}
% {\string\end{document}}
% {\perCent StartShownPreambleCommands}
diff --git a/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua b/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
index ea163c6a72..ea163c6a72 100755..100644
--- a/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
+++ b/macros/latex/contrib/hvextern/script/hvextern-checkfile.lua
diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md
index 7d3becf388..d6e3645c59 100644
--- a/macros/latex/contrib/l3experimental/CHANGELOG.md
+++ b/macros/latex/contrib/l3experimental/CHANGELOG.md
@@ -7,6 +7,15 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2023-12-08]
+
+### Added
+- `\draw_box_use:Nn` and `\draw_coffin_use:Nnnn` to allow
+ placement of boxed material at an offset (issue \#1357)
+
+### Removed
+- `l3bitset`: moved to `l3kernel`
+
## [2023-11-01]
### Changed
@@ -151,7 +160,6 @@ this project uses date-based 'snapshot' version identifiers.
- Support for multiple color models (see #739)
### Removed
-
- `l3cctab`: moved to `l3kernel`
## [2020-06-18]
@@ -226,8 +234,7 @@ this project uses date-based 'snapshot' version identifiers.
## [2019-05-03]
-## Fixed
-
+### Fixed
- Clipping of paths by `l3draw`
## [2019-03-05]
@@ -286,7 +293,8 @@ this project uses date-based 'snapshot' version identifiers.
- New `l3color` module using `xcolor`-like expression syntax
- New `l3draw` module, based on `pgf` layer of the TikZ system
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-11-01...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2023-12-08...HEAD
+[2023-12-08]: https://github.com/latex3/latex3/compare/2023-11-01...2023-12-08
[2023-11-01]: https://github.com/latex3/latex3/compare/2023-10-10...2023-11-01
[2023-10-10]: https://github.com/latex3/latex3/compare/2023-05-11...2023-10-10
[2023-05-11]: https://github.com/latex3/latex3/compare/2023-04-19...2023-05-11
diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md
index 138d797530..52c7d97926 100644
--- a/macros/latex/contrib/l3experimental/README.md
+++ b/macros/latex/contrib/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2023-11-01
+Release 2023-12-08
Overview
--------
@@ -22,7 +22,6 @@ is updated at the same time.
Currently included in the CTAN release of l3experimental are the following
bundles:
* `l3benchmark`
-* `l3bitset`
* `l3draw`
* `l3graphics`
* `l3opacity`
@@ -36,14 +35,6 @@ bundles:
This module provides support for benchmarking the performance of code.
-`l3bitset`
--------------
-
-This module provides a `bitset` data type, a vector of bits, which can be set
-and unset using their individual index in the vector, or using names assigned to
-each position in the vector. The bitset can be returned as a string of bits or
-as a decimal integer.
-
`l3draw`
--------
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx
index 26feb420ab..bc21191d4b 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.dtx
+++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -122,7 +122,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3benchmark}{2023-11-01}{}
+\ProvidesExplPackage{l3benchmark}{2023-12-08}{}
{L3 Experimental benchmarking}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf
index 382968cbf2..83471b67fd 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.pdf
+++ b/macros/latex/contrib/l3experimental/l3benchmark.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3bitset.ins b/macros/latex/contrib/l3experimental/l3bitset.ins
deleted file mode 100644
index 1d91118d90..0000000000
--- a/macros/latex/contrib/l3experimental/l3bitset.ins
+++ /dev/null
@@ -1,62 +0,0 @@
-\iffalse meta-comment
-
-File: l3bitset.ins
-
-Copyright (C) 2020,2021 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- http://www.latex-project.org/lppl.txt
-
-This file is part of the "l3experimental bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
------------------------------------------------------------------------
-
-The development version of the bundle can be found at
-
- https://github.com/latex3/latex3
-
-for those people who are interested.
-
------------------------------------------------------------------------
-
-Any modification of this file should ensure that the copyright and
-license information is placed in the derived files.
-
-\fi
-
-\input docstrip %
-\askforoverwritefalse
-
-\preamble
-
-Copyright (C) 2020 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of
-the LaTeX Project Public License (LPPL), either version 1.3c of
-this license or (at your option) any later version. The latest
-version of this license is in the file:
-
- http://www.latex-project.org/lppl.txt
-
-This file is part of the "l3experimental bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-\generate{\file{l3bitset.sty}
- {
- \from{l3bitset.dtx} {package}
- }
-}
-
-\endbatchfile
diff --git a/macros/latex/contrib/l3experimental/l3bitset.pdf b/macros/latex/contrib/l3experimental/l3bitset.pdf
deleted file mode 100644
index 17b59d8a2b..0000000000
--- a/macros/latex/contrib/l3experimental/l3bitset.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
index 44989999a5..b8f68e90a8 100644
--- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -71,6 +71,8 @@
% \end{variable}
%
% \begin{macro}{\draw_box_use:N}
+% \begin{macro}{\draw_box_use:Nn}
+% \begin{macro}{\@@_box_use:nNnnnnn}
% \begin{macro}{\@@_box_use:Nnnnn}
% Before inserting a box, we need to make sure that the bounding box is being
% updated correctly. As drawings track transformations as a whole, rather
@@ -79,10 +81,22 @@
% \begin{macrocode}
\cs_new_protected:Npn \draw_box_use:N #1
{
- \@@_box_use:Nnnnn #1
+ \@@_box_use:Nnnnnnn #1
{ 0pt } { -\box_dp:N #1 } { \box_wd:N #1 } { \box_ht:N #1 }
}
-\cs_new_protected:Npn \@@_box_use:Nnnnn #1#2#3#4#5
+\cs_new_protected:Npn \draw_box_use:Nn #1#2
+ {
+ \@@_box_use:nNnnnn {#2} #1
+ { 0pt } { -\box_dp:N #1 } { \box_wd:N #1 } { \box_ht:N #1 }
+ }
+\cs_new_protected:Npn \@@_box_use:nNnnnn #1#2#3#4#5#6
+ {
+ \draw_scope_begin:
+ \draw_transform_shift:n {#1}
+ \@@_box_use:Nnnnnnn #2 {#3} {#4} {#5} {#6}
+ \draw_scope_end:
+ }
+\cs_new_protected:Npn \@@_box_use:Nnnnnnn #1#2#3#4#5
{
\bool_if:NT \l_draw_bb_update_bool
{
@@ -126,18 +140,32 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\draw_coffin_use:Nnn}
+% \begin{macro}{\draw_coffin_use:Nnnn}
+% \begin{macro}{\@@_coffin_use:nNnn}
% Slightly more than a shortcut: we have to allow for the fact that coffins
% have no apparent width before the reference point.
% \begin{macrocode}
\cs_new_protected:Npn \draw_coffin_use:Nnn #1#2#3
{
+ \@@_coffin_use:nNnn { \@@_box_use:Nnnnnnn }
+ #1 {#2} {#3}
+ }
+\cs_new_protected:Npn \draw_coffin_use:Nnnn #1#2#3#4
+ {
+ \@@_coffin_use:nNnn { \@@_box_use:nNnnnn {#4} }
+ #1 {#2} {#3}
+ }
+\cs_new_protected:Npn \@@_coffin_use:nNnn #1#2#3#4
+ {
\group_begin:
\hbox_set:Nn \l_@@_tmp_box
- { \coffin_typeset:Nnnnn #1 {#2} {#3} { 0pt } { 0pt } }
- \@@_box_use:Nnnnn \l_@@_tmp_box
- { \box_wd:N \l_@@_tmp_box - \coffin_wd:N #1 }
+ { \coffin_typeset:Nnnnn #2 {#3} {#4} { 0pt } { 0pt } }
+ #1 \l_@@_tmp_box
+ { \box_wd:N \l_@@_tmp_box - \coffin_wd:N #2 }
{ -\box_dp:N \l_@@_tmp_box }
{ \box_wd:N \l_@@_tmp_box }
{ \box_ht:N \l_@@_tmp_box }
@@ -145,6 +173,8 @@
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</package>
diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf
index 8c79d0a1b7..c2e80fc340 100644
--- a/macros/latex/contrib/l3experimental/l3draw-code.pdf
+++ b/macros/latex/contrib/l3experimental/l3draw-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
index 1337427dc2..cf2c2091cb 100644
--- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
index 5d8b63247f..53032f4d61 100644
--- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx
index ba47cddd4c..f722873237 100644
--- a/macros/latex/contrib/l3experimental/l3draw-points.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
index 5917a0c6bc..ae8869d6b7 100644
--- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
index 9419015a91..56a7c78d9d 100644
--- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx
index 36b30cdecc..c288fe0c58 100644
--- a/macros/latex/contrib/l3experimental/l3draw-state.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
index 31d8b95ea2..8115e1c4fc 100644
--- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx
index 8f0467519c..e0cbdff3d4 100644
--- a/macros/latex/contrib/l3experimental/l3draw.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw.dtx
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -961,9 +961,10 @@
%
% \subsection{Boxes and coffins}
%
-% \begin{function}{\draw_box_use:N}
+% \begin{function}{\draw_box_use:N, \draw_box_use:Nn}
% \begin{syntax}
% \cs{draw_box_use:N} \meta{box}
+% \cs{draw_box_use:Nn} \meta{box} \Arg{point}
% \end{syntax}
% Inserts the \meta{box} into a drawing, taking account of the current
% transformation matrix and shift, and adjusting the drawing bounding
@@ -990,11 +991,14 @@
% \draw_box_use:N \l_tmpa_box
% \draw_end:
% \end{demo}
+% If the \meta{point} is given, the reference point of the box is placed there:
+% otherwise it is positioned at the origin of the drawing.
% \end{function}
%
-% \begin{function}{\draw_coffin_use:Nnn}
+% \begin{function}{\draw_coffin_use:Nnn, \draw_coffin_use:Nnnn}
% \begin{syntax}
-% \cs{draw_coffin_use:N} \meta{coffin} \Arg{hpole} \Arg{vpole}
+% \cs{draw_coffin_use:Nnn} \meta{coffin} \Arg{hpole} \Arg{vpole}
+% \cs{draw_coffin_use:Nnnn} \meta{coffin} \Arg{hpole} \Arg{vpole} \Arg{point}
% \end{syntax}
% Inserts the \meta{coffin} into a drawing, taking account of the current
% transformation matrix and shift, and adjusting the drawing bounding
@@ -1012,6 +1016,9 @@
% \draw_coffin_use:Nnn \l_tmpa_coffin { hc } { vc }
% \draw_end:
% \end{demo}
+% If the \meta{point} is given, the pole intersection of the coffine is
+% placed there: otherwise it is positioned at the origin of the drawing.
+
% \end{function}
%
% \subsection{Transformations}
@@ -1173,7 +1180,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3draw}{2023-11-01}{}
+\ProvidesExplPackage{l3draw}{2023-12-08}{}
{L3 Experimental core drawing support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf
index 583e37966b..6b8a5e9a92 100644
--- a/macros/latex/contrib/l3experimental/l3draw.pdf
+++ b/macros/latex/contrib/l3experimental/l3draw.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx
index 7aaf367785..7b150d5dc5 100644
--- a/macros/latex/contrib/l3experimental/l3galley.dtx
+++ b/macros/latex/contrib/l3experimental/l3galley.dtx
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -686,7 +686,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3galley}{2023-11-01}{}
+\ProvidesExplPackage{l3galley}{2023-12-08}{}
{L3 Experimental galley code}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf
index f4f6d46e8c..bd9bf88c83 100644
--- a/macros/latex/contrib/l3experimental/l3galley.pdf
+++ b/macros/latex/contrib/l3experimental/l3galley.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx
index ebb4f86a2c..5a45b88d9c 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.dtx
+++ b/macros/latex/contrib/l3experimental/l3graphics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -184,7 +184,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3graphics}{2023-11-01}{}
+\ProvidesExplPackage{l3graphics}{2023-12-08}{}
{L3 Experimental graphics inclusion support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf
index 52daaf7cb6..66ce45d710 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.pdf
+++ b/macros/latex/contrib/l3experimental/l3graphics.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3opacity.dtx b/macros/latex/contrib/l3experimental/l3opacity.dtx
index 1bb27e2ca3..9ed6f5e6a4 100644
--- a/macros/latex/contrib/l3experimental/l3opacity.dtx
+++ b/macros/latex/contrib/l3experimental/l3opacity.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -96,7 +96,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3opacity}{2023-11-01}{}
+\ProvidesExplPackage{l3opacity}{2023-12-08}{}
{L3 Experimental opacity support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3opacity.pdf b/macros/latex/contrib/l3experimental/l3opacity.pdf
index 4f871a2bcb..096288c14a 100644
--- a/macros/latex/contrib/l3experimental/l3opacity.pdf
+++ b/macros/latex/contrib/l3experimental/l3opacity.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx
index 57aebd6296..03a6145239 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.dtx
+++ b/macros/latex/contrib/l3experimental/l3str-format.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -166,7 +166,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3str-format}{2023-11-01}{}
+\ProvidesExplPackage{l3str-format}{2023-12-08}{}
{L3 Experimental string formatting}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3str-format.pdf b/macros/latex/contrib/l3experimental/l3str-format.pdf
index 9a8715c64f..83b57b975b 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.pdf
+++ b/macros/latex/contrib/l3experimental/l3str-format.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.dtx b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
index c17d9a97b1..4c05998e37 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -151,7 +151,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3sys-shell}{2023-11-01}{}
+\ProvidesExplPackage{l3sys-shell}{2023-12-08}{}
{L3 Experimental system shell functions}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
index 201397cbd6..3152e29a00 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.pdf
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx
index 2dc6cffa6a..9ca534e86c 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.dtx
+++ b/macros/latex/contrib/l3experimental/xcoffins.dtx
@@ -53,7 +53,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -672,7 +672,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2023-11-01}{}
+\ProvidesExplPackage{xcoffins}{2023-12-08}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf
index b10dcf8453..98b321ae28 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.pdf
+++ b/macros/latex/contrib/l3experimental/xcoffins.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx
index 3dd89b46e8..eb704906db 100644
--- a/macros/latex/contrib/l3experimental/xgalley.dtx
+++ b/macros/latex/contrib/l3experimental/xgalley.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -731,7 +731,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2023-11-01}{}
+\ProvidesExplPackage{xgalley}{2023-12-08}{}
{L3 Experimental galley}
\RequirePackage{xtemplate,l3galley}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3experimental/xgalley.pdf b/macros/latex/contrib/l3experimental/xgalley.pdf
index 9aeb6d4e19..e1964e85ee 100644
--- a/macros/latex/contrib/l3experimental/xgalley.pdf
+++ b/macros/latex/contrib/l3experimental/xgalley.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index e4d9a3d9e5..104535d2b0 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,12 +7,27 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2023-12-08]
+
+### Added
+- `\c_empty_str` (issue \#1361)
+- `l3bitset`: moved from `l3experimental`
+
+### Fixed
+- Return `str` (not `tl`) in `\bool_to_str:N` and `\bool_to_str:n` (issue \#1331)
+- Catcode of space from `\str_set_convert:Nnnn` (issue \#1344)
+- Tidy up various documentation issues (issue \#1345)
+
## [2023-11-09]
### Added
- Documentation for `\c_nan_fp`
- `\str_case_e:en(TF)`
+### Changes
+- Speed up `\str_(g)set:Nn`, `\str_const:Nn`, `\str_(g)put_left:Nn`,
+ and `\str_(g)put_right:Nn`
+
### Fixed
- Normalisation of `.inherit:n` key data (issue \#1314)
@@ -98,7 +113,7 @@ this project uses date-based 'snapshot' version identifiers.
## [2023-08-11]
### Changed
-- Wrap long lists of variants in `l3doc` display of functions (issue \#1258)
+- Wrap long lists of variants in `l3doc` display of functions (issue \#1258)
### Fixed
- Revert 'Allow for implicit chars when case changing' (issue \#1260)
@@ -151,7 +166,7 @@ this project uses date-based 'snapshot' version identifiers.
- `\prg_gset_eq_conditional:NNn` (issue \#1212)
- `\iow_shell_open:Nn` (issue \#1122)
-## Deprecated
+### Deprecated
- `\tl_case:Nn(TF)`
- `expl3` package option `enable-debug` (no longer required)
@@ -168,8 +183,8 @@ this project uses date-based 'snapshot' version identifiers.
- Rounded out the `\use_i:nn...` functions to cover all cases taking
one argument from up to nine arguments
- `\coffin_(g)reset_poles:N`
-- `\dim_to_decimal_in_<unit>:n`, for `<unit>` types
- `cc`, `cm`, `dd`, `in`, `mm` and `pc`
+- `\dim_to_decimal_in_<unit>:n`, for `<unit>` types
+ `cc`, `cm`, `dd`, `in`, `mm` and `pc`
- `\file_input_raw:n`
- `\int_if_zero:n(TF)`
- `\str_mdfive_hash:n`
@@ -376,13 +391,13 @@ this project uses date-based 'snapshot' version identifiers.
[\#1109](https://github.com/latex3/latex3/issues/1109)), for many expandable
tokens (issue [\#1110](https://github.com/latex3/latex3/issues/1110)), and an
esoteric case (issue [\#1113](https://github.com/latex3/latex3/issues/1113))
-- Creation of a message with some engines (issue
+- Creation of a message with some engines (issue
[\#1139](https://github.com/latex3/latex3/issues/1139))
### Deprecated
- `\char_to_nfd:N`, `\char_to_nfd:n`
-- `\char_foldcase:N`, `\char_lowercase:N`, `\char_uppercase:N`
- and `str` variants
+- `\char_foldcase:N`, `\char_lowercase:N`, `\char_titlecase:N`,
+ `\char_uppercase:N` and `str` variants
- `\char_to_utfviii_bytes:n`
- `\str_foldcase:n`
@@ -500,7 +515,7 @@ this project uses date-based 'snapshot' version identifiers.
- Language settings `hy` and `hy-x-yiwn` for handling of ech-yiwn ligature
uppercasing
-## Changed
+### Changed
- Support BCP 47 properly in case changer language argument
### Fixed
@@ -809,7 +824,7 @@ this project uses date-based 'snapshot' version identifiers.
## [2020-10-27]
### Added
-- `\token_if_font_selection:N(TF)` (see \#806)
+- `\token_if_font_selection:N(TF)` (see \#806)
### Fixed
- Avoid relying on braced `\input` primitive syntax
@@ -1112,7 +1127,7 @@ this project uses date-based 'snapshot' version identifiers.
### Changed
- Standard backend for (u)pTeX is now `dvips`
- Minimum LuaTeX version now v0.95
-- Moved `\debug_on:`, `\debug_off:`, `\debug_suspend:` and `\debug_resume:`
+- Moved `\debug_on:n`, `\debug_off:n`, `\debug_suspend:` and `\debug_resume:`
to stable
- Accept 'traditional' class options for backend (`dvipdfmx`, `dvips`, etc.)
- Performance enhancements when loading `expl3`
@@ -1527,7 +1542,7 @@ this project uses date-based 'snapshot' version identifiers.
- Implement `\intarray_gset_rand:Nnn`
- Implement candidate `l3fparray` module
-## Changed
+### Changed
- Update minimal required versions of XeTeX and LuaTeX
- Deprecate named integer constants `\c_zero`. etc.
- Move all primitives to `\tex_...:D namespace`,
@@ -1591,7 +1606,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-11-09...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2023-12-08...HEAD
+[2023-12-08]: https://github.com/latex3/latex3/compare/2023-11-09...2023-12-08
[2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-01...2023-11-09
[2023-11-01]: https://github.com/latex3/latex3/compare/2023-10-23...2023-11-01
[2023-10-23]: https://github.com/latex3/latex3/compare/2023-10-10...2023-10-23
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 24d65cc239..89ceea4ab4 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2023-11-09
+Release 2023-12-08
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index 02779c2b2d..835b29d525 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2023-11-09}%
+\def\ExplFileDate{2023-12-08}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -414,6 +414,8 @@
%
% The data types in \LaTeX3 are:
% \begin{description}
+% \item[bitset] a string of bits (\texttt{0} and \texttt{1} tokens) that are
+% accessed by position or by name;
% \item[bool] either true or false (the \LaTeX3 implementation does
% not use \tn{iftrue} or \tn{iffalse});
% \item[box] box register;
@@ -900,7 +902,7 @@
% \texttt{check-declarations} option enables checking for all variable
% assignments, issuing an error if any variables are assigned without being
% initialised. See also \cs{debug_on:n} \texttt{\{check-declarations\}}
-% in \pkg{l3candidates} for finer control.
+% in \pkg{interface3} for finer control.
%
% \DescribeOption{log-functions}
% The \texttt{log-functions} option is used to enable recording of every new
@@ -908,7 +910,7 @@
% purposes, as it means that there is a complete list of all functions
% created by each module loaded (with the exceptions of a very small number
% required by the bootstrap code). See also \cs{debug_on:n}
-% \texttt{\{log-functions\}} in \pkg{l3candidates} for finer control.
+% \texttt{\{log-functions\}} in \pkg{interface3} for finer control.
%
% \DescribeOption{backend}
% Selects the backend to be used for color, graphics and related operations that
@@ -1510,10 +1512,10 @@
\tex_everyjob:D \exp_after:wN
{
\tex_the:D \tex_everyjob:D
- \sys_everyjob:
+ \__kernel_sys_everyjob:
}
}
- { \sys_everyjob: }
+ { \__kernel_sys_everyjob: }
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
@@ -1759,7 +1761,7 @@
% \begin{macro}{\g__kernel_backend_header_bool}
% Load the dynamic code and standard back-end.
% \begin{macrocode}
-\sys_everyjob:
+\__kernel_sys_everyjob:
\bool_new:N \g__kernel_backend_header_bool
\bool_gset_true:N \g__kernel_backend_header_bool
\sys_load_backend:n { }
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index f5081dca75..37608a09f7 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index 9ccc9f1669..b015376448 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index d8ce1db90e..f9f461a288 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -64,7 +64,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-11-09}
+\date{Released 2023-12-08}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3.ins b/macros/latex/contrib/l3kernel/l3.ins
index 0018a81d70..248017ba2f 100644
--- a/macros/latex/contrib/l3kernel/l3.ins
+++ b/macros/latex/contrib/l3kernel/l3.ins
@@ -97,6 +97,7 @@ and all files in that bundle must be distributed together.
\from{l3fp-symbolic.dtx}{package}
\from{l3fp-functions.dtx}{package}
\from{l3fparray.dtx} {package}
+ \from{l3bitset.dtx} {package}
\from{l3cctab.dtx} {package}
\from{l3sort.dtx} {package}
\from{l3str-convert.dtx}{package}
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 576f3c5365..d4f447287b 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1631,7 +1631,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\use:x}
+% \begin{macro}[deprecated]{\use:x}
% Fully expands its argument and passes it to the input stream. Uses
% the reserved \cs{l_@@_internal_tl} which we've set up above.
% \begin{macrocode}
@@ -2587,7 +2587,7 @@
% us to generate error messages. The next few definitions here are
% only temporary, they will be redefined later on.
%
-% \begin{macro}
+% \begin{macro}[documented-as = \msg_error:nnnn]
% {\msg_error:nnee, \msg_error:nne, \msg_error:nn}
% If an internal error occurs before \LaTeX3 has loaded \pkg{l3msg} then
% the code should issue a usable if terse error message and halt. This
diff --git a/macros/latex/contrib/l3experimental/l3bitset.dtx b/macros/latex/contrib/l3kernel/l3bitset.dtx
index 4783bd7786..101a2aa414 100644
--- a/macros/latex/contrib/l3experimental/l3bitset.dtx
+++ b/macros/latex/contrib/l3kernel/l3bitset.dtx
@@ -11,7 +11,7 @@
%
% http://www.latex-project.org/lppl.txt
%
-% This file is part of the "l3bitset bundle" (The Work in LPPL)
+% This file is part of the "l3kernel bundle" (The Work in LPPL)
% and all files in that bundle must be distributed together.
%
% -----------------------------------------------------------------------
@@ -23,14 +23,14 @@
% for those people who are interested.
%
%<*driver>
-\documentclass[full]{l3doc}
+\documentclass[full,kernel]{l3doc}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
%</driver>
% \fi
% \title{^^A
-% The \pkg{l3bitset} package \\ Experimental bitsets ^^A
+% The \pkg{l3bitset} package \\ Bitsets ^^A
% }
%
% \author{^^A
@@ -42,9 +42,10 @@
% }^^A
% }
%
-% \date{Released 2023-11-01}
+% \date{Released 2023-12-08}
%
% \maketitle
+%
% \begin{documentation}
%
% This package defines and implements the data type \texttt{bitset}, a vector of
@@ -71,6 +72,7 @@
% bitsets \texttt{fp} is used and this is slower.
%
% \section{Creating bitsets}
+%
% \begin{function}[added = 2021-01-26,updated=2020-12-29]
% {\bitset_new:N,\bitset_new:c,\bitset_new:Nn, \bitset_new:cn}
% \begin{syntax}
@@ -108,8 +110,8 @@
% It is not necessary to give every index
% a name, and an index can have more than one name. The named index
% can be extended or changed with the next function.
-%
% \end{function}
+%
% \begin{function}[added = 2021-01-26]
% {\bitset_addto_named_index:Nn}
% \begin{syntax}
@@ -119,40 +121,39 @@
% \meta{name2} |=| \meta{index2} |,| \ldots{}
% \}
% \end{syntax}
-% This extends or changes the name--index pairs for \meta{bitset var}
-% globally as described for \cs{bitset_new:Nn}.
+% This extends or changes the name--index pairs for \meta{bitset var}
+% globally as described for \cs{bitset_new:Nn}.
+% \end{function}
%
% For example after these settings
-%
-% \begin{verbatim}
-% \bitset_new:Nn \l_pdfannot_F_bitset
-% {
-% Invisible = 1,
-% Hidden = 2,
-% Print = 3,
-% NoZoom = 4,
-% NoRotate = 5,
-% NoView = 6,
-% ReadOnly = 7,
-% Locked = 8,
-% ToggleNoView = 9,
-% LockedContents = 10
-% }
-% \bitset_addto_named_index:Nn \l_pdfannot_F_bitset
-% {
-% print = 3
-% }
-% \end{verbatim}
-% it is possible to set bit $3$ by using any of this alternatives:
-% \begin{verbatim}
-% \bitset_set_true:Nn \l_pdfannot_F_bitset {Print}
-% \bitset_set_true:Nn \l_pdfannot_F_bitset {print}
-% \bitset_set_true:Nn \l_pdfannot_F_bitset {3}
-% \end{verbatim}
-% \end{function}
+% \begin{verbatim}
+% \bitset_new:Nn \l_pdfannot_F_bitset
+% {
+% Invisible = 1,
+% Hidden = 2,
+% Print = 3,
+% NoZoom = 4,
+% NoRotate = 5,
+% NoView = 6,
+% ReadOnly = 7,
+% Locked = 8,
+% ToggleNoView = 9,
+% LockedContents = 10
+% }
+% \bitset_addto_named_index:Nn \l_pdfannot_F_bitset
+% {
+% print = 3
+% }
+% \end{verbatim}
+% it is possible to set bit $3$ by using any of this alternatives:
+% \begin{verbatim}
+% \bitset_set_true:Nn \l_pdfannot_F_bitset {Print}
+% \bitset_set_true:Nn \l_pdfannot_F_bitset {print}
+% \bitset_set_true:Nn \l_pdfannot_F_bitset {3}
+% \end{verbatim}
%
% \begin{function}[EXP, pTF,added = 2021-01-26]
-% { \bitset_if_exist:N, \bitset_if_exist:c }
+% {\bitset_if_exist:N, \bitset_if_exist:c}
% \begin{syntax}
% \cs{bitset_if_exist_p:N} \meta{bitset var}
% \cs{bitset_if_exist:NTF} \meta{bitset var} \Arg{true code} \Arg{false code}%
@@ -163,33 +164,39 @@
% \section{Setting and unsetting bits}
%
% \begin{function}[added = 2021-01-26]
-% { \bitset_set_true:Nn, \bitset_set_true:cn, \bitset_gset_true:Nn, \bitset_gset_true:cn }
+% {
+% \bitset_set_true:Nn, \bitset_set_true:cn,
+% \bitset_gset_true:Nn, \bitset_gset_true:cn
+% }
% \begin{syntax}
% \cs{bitset_set_true:Nn} \meta{bitset var} \Arg{name}\\
% \cs{bitset_gset_true:Nn} \meta{bitset var} \Arg{name}
% \end{syntax}
-% This sets the bit of the index position represented by \Arg{name} to $1$.
-% \Arg{name} should be either one of the predeclared names
-% |1|, |2|, |3|, \ldots, or one of the names added manually.
-% Index position are 1-based.
-% If needed the length of the bit vector is enlarged.
+% This sets the bit of the index position represented by \Arg{name} to $1$.
+% \Arg{name} should be either one of the predeclared names
+% |1|, |2|, |3|, \ldots, or one of the names added manually.
+% Index position are 1-based.
+% If needed the length of the bit vector is enlarged.
% \end{function}
%
% \begin{function}[added = 2021-01-26]
-% { \bitset_set_false:Nn, \bitset_set_false:cn, \bitset_gset_false:Nn, \bitset_set_false:cn }
+% {
+% \bitset_set_false:Nn, \bitset_set_false:cn,
+% \bitset_gset_false:Nn, \bitset_set_false:cn
+% }
% \begin{syntax}
% \cs{bitset_set_false:Nn} \meta{bitset var} \Arg{name}\\
% \cs{bitset_gset_false:Nn} \meta{bitset var} \Arg{name}
% \end{syntax}
-% This unsets the bit of the index position represented by \Arg{name} (sets
-% it to $0$).
-% \Arg{name} should be either one of the predeclared names
-% |1|, |2|, |3|, \ldots, or one of the names added manually.
-% The index is $1$-based. If the index position is larger
-% than the current length of the bit vector
-% nothing happens. If the leading (left most) bit is unset,
-% zeros are not trimmed but stay in the bit vector and are still shown
-% by \cs{bitset_show:N}.
+% This unsets the bit of the index position represented by \Arg{name} (sets
+% it to $0$).
+% \Arg{name} should be either one of the predeclared names
+% |1|, |2|, |3|, \ldots, or one of the names added manually.
+% The index is $1$-based. If the index position is larger
+% than the current length of the bit vector
+% nothing happens. If the leading (left most) bit is unset,
+% zeros are not trimmed but stay in the bit vector and are still shown
+% by \cs{bitset_show:N}.
% \end{function}
%
% \begin{function}[added = 2021-01-26]
@@ -198,13 +205,13 @@
% \cs{bitset_clear:N} \meta{bitset var} \\
% \cs{bitset_gclear:N} \meta{bitset var}
% \end{syntax}
-% This resets the bitset to the initial state. The declared names are not changed.
+% This resets the bitset to the initial state. The declared names are not changed.
% \end{function}
%
% \section{Using bitsets}
%
% \begin{function}[EXP,added = 2021-01-26]
-% { \bitset_item:Nn, \bitset_item:cn }
+% {\bitset_item:Nn, \bitset_item:cn}
% \begin{syntax}
% \cs{bitset_item:Nn} \meta{bitset var} \Arg{name}
% \end{syntax}
@@ -219,20 +226,20 @@
% \begin{syntax}
% \cs{bitset_to_bin:N} \meta{bitset var}
% \end{syntax}
-% This leaves the current value of the bitset expressed as
-% a binary (string) number in the input stream.
-% If no bit has been set yet, the output is zero.
+% This leaves the current value of the bitset expressed as
+% a binary (string) number in the input stream.
+% If no bit has been set yet, the output is zero.
% \end{function}
% \begin{function}[EXP,added = 2021-01-26]
% {\bitset_to_arabic:N, \bitset_to_arabic:c}
% \begin{syntax}
% \cs{bitset_to_arabic:N} \meta{bitset var}
% \end{syntax}
-% This leaves the current value of the bitset expressed as
-% a decimal number in the input stream. If no bit has been set yet,
-% the output is zero. The function uses \cs{int_from_bin:n} if the largest
-% index that have been set or unset is smaller then $32$, and a slower implementation
-% based on \cs{fp_eval:n} otherwise.
+% This leaves the current value of the bitset expressed as
+% a decimal number in the input stream. If no bit has been set yet,
+% the output is zero. The function uses \cs{int_from_bin:n} if the largest
+% index that have been set or unset is smaller then $32$, and a slower implementation
+% based on \cs{fp_eval:n} otherwise.
% \end{function}
%
% \begin{function}[added = 2021-01-26]
@@ -240,7 +247,7 @@
% \begin{syntax}
% \cs{bitset_show:N} \meta{bitset var}
% \end{syntax}
-% Displays the binary and decimal value of the \meta{bitset var} on the terminal,
+% Displays the binary and decimal value of the \meta{bitset var} on the terminal,
% \end{function}
%
% \begin{function}[added = 2021-01-26]
@@ -248,14 +255,15 @@
% \begin{syntax}
% \cs{bitset_log:N} \meta{bitset var}
% \end{syntax}
-% Writes the value of the \meta{bitset var} in the log file.
+% Writes the value of the \meta{bitset var} in the log file.
% \end{function}
%
% \end{documentation}
%
% \begin{implementation}
+%
% \section{\pkg{l3bitset} implementation}
-% \TestFiles{m3bitset001,m3bitset002}
+%
% \begin{macrocode}
%<*package>
% \end{macrocode}
@@ -263,15 +271,19 @@
% \begin{macrocode}
%<@@=bitset>
% \end{macrocode}
+%
+% Transitional support.
% \begin{macrocode}
-\ProvidesExplPackage{l3bitset}{2023-11-01}{}
- {L3 Experimental bitset support}
+\cs_if_exist:NT \@expl@finalise@setup@@@@
+ {
+ \tl_gput_right:Nn \@expl@finalise@setup@@@@
+ { \disable@package@load { l3bitset } { } }
+ }
% \end{macrocode}
+%
% A bitset is a string variable.
-% \begin{macro}
-% {
-% \bitset_new:N, \bitset_new:c
-% }
+% \begin{macro}{\bitset_new:N, \bitset_new:c}
+% \begin{macro}{\bitset_new:Nn, \bitset_new:cn}
% \begin{macrocode}
\cs_new_protected:Npn \bitset_new:N #1
{
@@ -292,21 +304,21 @@
\cs_generate_variant:Nn \bitset_new:N { c }
% \end{macrocode}
% \end{macro}
-% \begin{variable}{\l_@@_tmpa_prop}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_tmp_prop}
% A scratch prop to be able to extend the names properties.
% \begin{macrocode}
-\prop_new:N \l_@@_tmpa_prop
+\prop_new:N \l_@@_tmp_prop
% \end{macrocode}
% \end{variable}
-% \begin{macro}
-% {
-% \bitset_addto_named_index:Nn
-% }
+%
+% \begin{macro}{\bitset_addto_named_index:Nn}
% \begin{macrocode}
\cs_new_protected:Npn \bitset_addto_named_index:Nn #1#2
{
- \prop_set_from_keyval:Nn \l_@@_tmpa_prop {#2}
- \prop_map_inline:Nn \l_@@_tmpa_prop
+ \prop_set_from_keyval:Nn \l_@@_tmp_prop {#2}
+ \prop_map_inline:Nn \l_@@_tmp_prop
{
\prop_gput:cnn
{ g_@@_ \cs_to_str:N #1 _name_prop }
@@ -524,7 +536,7 @@
\cs_generate_variant:Nn \bitset_item:Nn { c }
% \end{macrocode}
% \end{macro}
-
+%
% \begin{macro}
% {
% \bitset_show:N, \bitset_show:c,
@@ -582,10 +594,10 @@
\prop_gput:Nnn \g_msg_module_name_prop { bitset } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { bitset } { }
% \end{macrocode}
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
-% \end{macro}
%
% \end{implementation}
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index aae051cfff..169279638c 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 56e374ac13..62c6ea7379 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index 75dfcb1f60..2ebb8a9344 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index 788258863b..3806feffa1 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 67132003e0..966de0333e 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1435,7 +1435,7 @@
% \begin{macro}
% {
% \clist_gremove_all:Nn, \clist_gremove_all:cn,
-% \clist_gremove_all:NV, \clist_remove_all:cV
+% \clist_gremove_all:NV, \clist_gremove_all:cV
% }
% \UnitTested
% \begin{macro}{\@@_remove_all:NNNn}
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 0689ba3649..576a11d47b 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1766,7 +1766,7 @@
% \coffin_scale:Nnn, \coffin_scale:cnn,
% \coffin_gscale:Nnn, \coffin_gscale:cnn
% }
-% \begin{macro}{\coffin_scale:NnnNN}
+% \begin{macro}{\@@_scale:NnnNN}
% For scaling, the opposite calculation is done to find the new
% dimensions for the coffin. Only the total height is needed, as this
% is the shift required for corners and poles. The scaling is done
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
index 815ece4553..fa8508262a 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/contrib/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index 6b182058ed..ad908c22fa 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -128,7 +128,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2019-04-06}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2023-12-08}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
@@ -838,6 +838,10 @@
\skip_set_eq:NN
\skip_add:Nn
\skip_sub:Nn
+ \str_clear:N
+ \str_set_eq:NN
+ \str_put_left:Nn
+ \str_put_right:Nn
\__kernel_tl_set:Ne
\tl_clear:N
\tl_set_eq:NN
@@ -903,6 +907,10 @@
\skip_gset_eq:NN
\skip_gadd:Nn
\skip_gsub:Nn
+ \str_gclear:N
+ \str_gset_eq:NN
+ \str_gput_left:Nn
+ \str_gput_right:Nn
\__kernel_tl_gset:Ne
\tl_gclear:N
\tl_gset_eq:NN
@@ -941,6 +949,7 @@
\intarray_const_from_clist:Nn
\muskip_const:Nn
\skip_const:Nn
+ \str_const:Nn
\tl_const:Nn
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 0caac652d9..0338019900 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -396,9 +396,9 @@
\@@_old_protected:Nnn \tl_show_analysis:n
{ \tl_analysis_show:n } { 2020-01-01 }
\@@_old:Nnn \tl_case:cnn
- { \tl_case:cnF } { 2015-07-14 }
+ { \exp_args:Nc \token_case_meaning:NnF } { 2015-07-14 }
\@@_old:Nnn \tl_case:Nnn
- { \tl_case:NnF } { 2015-07-14 }
+ { \token_case_meaning:NnF } { 2015-07-14 }
\@@_old_protected:Nnn \tl_gset_from_file:Nnn
{ \file_get:nnN } { 2021-07-01 }
\@@_old_protected:Nnn \tl_gset_from_file_x:Nnn
@@ -438,7 +438,7 @@
%<@@=cs>
% \end{macrocode}
%
-% \begin{macro}[EXP]{\cs_argument_spec:N}
+% \begin{macro}[EXP, deprecated]{\cs_argument_spec:N}
% For the present, do not deprecate fully as \LaTeXe{} will need to catch
% up: one for Fall 2022.
% \begin{macrocode}
@@ -447,21 +447,102 @@
% \end{macrocode}
% \end{macro}
%
+% \subsection{Deprecated \pkg{l3file} functions}
+%
+% \begin{macro}[deprecated]
+% {
+% \iow_shipout_x:Nn, \iow_shipout_x:Nx,
+% \iow_shipout_x:cn, \iow_shipout_x:cx
+% }
+% Previously described as \texttt{x}-type, but the hash behaviour is really
+% \texttt{e}-type. Currently not \enquote{live} as we need to have a transition.
+% \begin{macrocode}
+% \__kernel_patch_deprecation:nnNNpn { 2023-10-10 } { \iow_shipout_e:Nn }
+\cs_new_protected:Npn \iow_shipout_x:Nn { \iow_shipout_e:Nn }
+\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx , c, cx }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Deprecated \pkg{l3keys} functions}
+%
+% \begin{macrocode}
+%<@@=keys>
+% \end{macrocode}
+%
+% \begin{macro}[deprecated]{.str_set_x:N, .str_set_x:c}
+% \begin{macro}[deprecated]{.str_gset_x:N, .str_gset_x:c}
+% \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1
+ { \@@_variable_set:NnnN #1 { str } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1
+ { \@@_variable_set:cnnN {#1} { str } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1
+ { \@@_variable_set:NnnN #1 { str } { g } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1
+ { \@@_variable_set:cnnN {#1} { str } { g } x }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[deprecated]{.tl_set_x:N, .tl_set_x:c}
+% \begin{macro}[deprecated]{.tl_gset_x:N, .tl_gset_x:c}
+% \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1
+ { \@@_variable_set:NnnN #1 { tl } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1
+ { \@@_variable_set:cnnN {#1} { tl } { } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1
+ { \@@_variable_set:NnnN #1 { tl } { g } x }
+\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1
+ { \@@_variable_set:cnnN {#1} { tl } { g } x }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Deprecated \pkg{l3pdf} functions}
+%
+% \begin{variable}[deprecated]{\g_@@_object_prop}
+% For tracking objects.
+% \begin{macrocode}
+\prop_new:N \g_@@_object_prop
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[deprecated]
+% {\pdf_object_new:nn, \pdf_object_write:nn, \pdf_object_write:nx}
+% \begin{macrocode}
+\__kernel_patch_deprecation:nnNNpn { 2022-08-30 } { [\pdf_object_new:n] }
+\cs_new_protected:Npn \pdf_object_new:nn #1#2
+ {
+ \prop_gput:Nnn \g_@@_object_prop {#1} {#2}
+ \@@_backend_object_new:n {#1}
+ }
+\__kernel_patch_deprecation:nnNNpn { 2022-08-30 } { [\pdf_object_write:n] }
+\cs_new_protected:Npn \pdf_object_write:nn #1#2
+ {
+ \exp_args:Nne \@@_backend_object_write:nnn
+ {#1} { \prop_item:Nn \g_@@_object_prop {#1} } {#2}
+ \bool_gset_true:N \g_@@_init_bool
+ }
+\cs_generate_variant:Nn \pdf_object_write:nn { nx }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Deprecated \pkg{l3prg} functions}
%
% \begin{macrocode}
%<@@=cs>
% \end{macrocode}
%
-% \begin{macro}[EXP, noTF]{\bool_case_true:n}
+% \begin{macro}[EXP, noTF, deprecated]{\bool_case_true:n}
% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case_true:n }
+\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:n }
\cs_gset:Npn \bool_case_true:n { \bool_case:n }
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case_true:nT }
+\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nT }
\cs_gset:Npn \bool_case_true:nT { \bool_case:nT }
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case_true:nF }
+\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nF }
\cs_gset:Npn \bool_case_true:nF { \bool_case:nF }
-\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case_true:nTF }
+\__kernel_patch_deprecation:nnNNpn { 2023-05-03 } { \bool_case:nTF }
\cs_gset:Npn \bool_case_true:nTF { \bool_case:nTF }
% \end{macrocode}
% \end{macro}
@@ -472,7 +553,7 @@
%<@@=str>
% \end{macrocode}
%
-% \begin{macro}[EXP]
+% \begin{macro}[EXP, deprecated]
% {
% \str_lower_case:n, \str_lower_case:f,
% \str_upper_case:n, \str_upper_case:f,
@@ -494,7 +575,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]
+% \begin{macro}[EXP, deprecated]
% {\str_foldcase:n, \str_foldcase:V}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-10-17 } { \str_casefold:n }
@@ -504,7 +585,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]
+% \begin{macro}[EXP, deprecated]
% {\str_declare_eight_bit_encoding:nnn}
% This command was made internal, with one more argument. There is no
% easy way to compute a reasonable value for that extra argument so we
@@ -518,8 +599,8 @@
%
% \subsection{Deprecated \pkg{l3seq} functions}
%
-% \begin{macro}{\seq_indexed_map_inline:Nn}
-% \begin{macro}[EXP]{ \seq_indexed_map_function:NN}
+% \begin{macro}[deprecated]{\seq_indexed_map_inline:Nn}
+% \begin{macro}[EXP, deprecated]{ \seq_indexed_map_function:NN}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-06-18 } { \seq_map_indexed_inline:Nn }
\cs_gset_protected:Npn \seq_indexed_map_inline:Nn { \seq_map_indexed_inline:Nn }
@@ -529,14 +610,14 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\seq_mapthread_function:NNN}
+% \begin{macro}[deprecated]{\seq_mapthread_function:NNN}
% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2023-05-10 } { \seq_mapthread_function:NNN }
+\__kernel_patch_deprecation:nnNNpn { 2023-05-10 } { \seq_map_pairwise_function:NNN }
\cs_gset:Npn \seq_mapthread_function:NNN { \seq_map_pairwise_function:NNN }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\seq_set_map_x:NNn, \seq_gset_map_x:NNn}
+% \begin{macro}[deprecated]{\seq_set_map_x:NNn, \seq_gset_map_x:NNn}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_set_map_e:NNn }
\cs_gset_protected:Npn \seq_set_map_x:NNn { \seq_set_map_e:NNn }
@@ -551,7 +632,7 @@
%<@@=sys>
% \end{macrocode}
%
-% \begin{macro}{\sys_load_deprecation:}
+% \begin{macro}[deprecated]{\sys_load_deprecation:}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2021-01-11 } { (no~longer~required) }
\cs_gset_protected:Npn \sys_load_deprecation: { }
@@ -560,8 +641,8 @@
%
% \subsection{Deprecated \pkg{l3text} functions}
%
-% \begin{macro}[EXP]{\text_titlecase:n}
-% \begin{macro}[EXP]{\text_titlecase:nn}
+% \begin{macro}[EXP, deprecated]{\text_titlecase:n}
+% \begin{macro}[EXP, deprecated]{\text_titlecase:nn}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:n }
\cs_gset:Npn \text_titlecase:n #1
@@ -579,7 +660,7 @@
%<@@=tl>
% \end{macrocode}
%
-% \begin{macro}
+% \begin{macro}[deprecated]
% {
% \tl_lower_case:n, \tl_lower_case:nn,
% \tl_upper_case:n, \tl_upper_case:nn,
@@ -607,7 +688,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[noTF]{\tl_case:Nn, \tl_case:cn}
+% \begin{macro}[noTF, deprecated]{\tl_case:Nn, \tl_case:cn}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:Nn }
\cs_gset:Npn \tl_case:Nn { \token_case_meaning:Nn }
@@ -623,7 +704,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tl_build_clear:N, \tl_build_gclear:N}
+% \begin{macro}[deprecated]{\tl_build_clear:N, \tl_build_gclear:N}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_begin:N }
\cs_new_protected:Npn \tl_build_clear:N { \tl_build_begin:N }
@@ -634,14 +715,14 @@
%
% \subsection{Deprecated \pkg{l3token} functions}
%
-% \begin{macro}[EXP]{\char_to_utfviii_bytes:n}
+% \begin{macro}[EXP, deprecated]{\char_to_utfviii_bytes:n}
% \begin{macrocode}
-\__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:n ] }
+\__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:nn ] }
\cs_gset:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\char_to_nfd:N, \char_to_nfd:n}
+% \begin{macro}[EXP, deprecated]{\char_to_nfd:N, \char_to_nfd:n}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n }
\cs_gset:Npn \char_to_nfd:N #1 { \codepoint_to_nfd:n {`#1} }
@@ -650,7 +731,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]
+% \begin{macro}[EXP, deprecated]
% {
% \char_lower_case:N, \char_upper_case:N,
% \char_mixed_case:Nn, \char_fold_case:N,
@@ -677,11 +758,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]
+% \begin{macro}[EXP, deprecated]
% {
-% \char_lowercase:N, \char_uppercase:N,
+% \char_lowercase:N, \char_titlecase:N, \char_uppercase:N,
% \char_foldcase:N,
-% \char_str_lowercase:N, \char_str_uppercase:N,
+% \char_str_lowercase:N, \char_str_titlecase:N, \char_str_uppercase:N,
% \char_str_foldcase:N,
% }
% \begin{macrocode}
@@ -689,10 +770,16 @@
\cs_gset:Npn \char_lowercase:N { \text_lowercase:n }
\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_uppercase:n }
\cs_gset:Npn \char_uppercase:N { \text_uppercase:n }
+\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \text_titlecase_first:n }
+\cs_gset:Npn \char_titlecase:N { \text_titlecase_first:n }
\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:n }
\cs_gset:Npn \char_foldcase:N { \str_casefold:n }
\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_lowercase:n }
\cs_gset:Npn \char_str_lowercase:N { \str_lowercase:n }
+\__kernel_patch_deprecation:nnNNpn { 2022-10-17 }
+ { \tl_to_str:e { \text_titlecase_first:n } }
+\cs_gset:Npn \char_str_titlecase:N #1
+ { \tl_to_str:e { \text_titlecase_first:n {#1} } }
\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_uppercase:n }
\cs_gset:Npn \char_str_uppercase:N { \str_uppercase:n }
\__kernel_patch_deprecation:nnNNpn { 2022-10-17 } { \str_casefold:n }
@@ -700,7 +787,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]
+% \begin{macro}[TF, deprecated]
% {
% \peek_catcode_ignore_spaces:N, \peek_catcode_remove_ignore_spaces:N,
% \peek_charcode_ignore_spaces:N, \peek_charcode_remove_ignore_spaces:N,
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 731748faf4..b6f98aa366 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -85,7 +85,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
% \maketitle
% \tableofcontents
%
@@ -469,6 +469,10 @@ and all files in that bundle must be distributed together.
% |T| nor |F|, to document functions such as \cs[no-index]{prop_get:NN}
% which also have conditional forms (\cs[no-index]{prop_get:NNTF}).
%
+% In a very small number of cases, there is no user documentation for
+% a \enquote{public} function. In these rare cases, the option
+% |no-user-doc| may be added to suppress the undefined reference that
+% would otherwise then arises.
%
% \DescribeMacro{\TestFiles}
% \cs{TestFiles}\marg{list of files} is used to indicate which test
@@ -695,8 +699,9 @@ and all files in that bundle must be distributed together.
%
% \begin{variable}
% {
-% \l_@@_macro_internal_set_bool,
+% \l_@@_macro_deprecated_bool ,
% \l_@@_macro_internal_bool,
+% \l_@@_macro_nodoc_bool ,
% \l_@@_macro_TF_bool,
% \l_@@_macro_pTF_bool,
% \l_@@_macro_noTF_bool,
@@ -710,8 +715,9 @@ and all files in that bundle must be distributed together.
% environments. We initialize \cs{l_@@_override_module_tl} to avoid
% overriding module names by an empty name (meaning no module).
% \begin{macrocode}
-\bool_new:N \l_@@_macro_internal_set_bool
+\bool_new:N \l_@@_macro_deprecated_bool
\bool_new:N \l_@@_macro_internal_bool
+\bool_new:N \l_@@_macro_nodoc_bool
\bool_new:N \l_@@_macro_TF_bool
\bool_new:N \l_@@_macro_pTF_bool
\bool_new:N \l_@@_macro_noTF_bool
@@ -955,56 +961,19 @@ and all files in that bundle must be distributed together.
% \begin{macro}
% {
% \seq_set_split:NoV,
-% \str_case:fn,
-% \tl_count:f,
-% \tl_greplace_all:Nen,
-% \tl_greplace_all:Nno,
-% \tl_if_head_eq_charcode:oNTF,
-% \tl_if_head_eq_charcode:oNT,
-% \tl_if_head_eq_charcode:oNF,
-% \tl_if_head_eq_meaning:VNF,
-% \tl_if_in:noTF,
-% \tl_if_in:ooTF,
-% \tl_if_in:NoTF,
-% \tl_if_in:NoT,
-% \tl_if_in:NoF,
-% \tl_remove_all:Ne,
-% \tl_replace_all:Nen,
-% \tl_replace_all:Nne,
-% \tl_replace_all:Non,
-% \tl_replace_all:Nno,
-% \tl_replace_once:Noo,
-% \tl_to_str:f,
-% \tl_to_str:o,
+% \tl_to_str:f
% }
% A few missing variants.
% \begin{macrocode}
\cs_generate_variant:Nn \seq_set_split:Nnn { NoV }
-\cs_generate_variant:Nn \seq_gput_right:Nn { Nf }
-\cs_generate_variant:Nn \str_case:nn { fn }
-\cs_generate_variant:Nn \tl_count:n { f }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn { Nx , Nno }
-\cs_generate_variant:Nn \tl_if_empty:nTF { f }
-\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNTF { o }
-\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNT { o }
-\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNF { o }
-\cs_generate_variant:Nn \tl_if_head_eq_meaning:nNF { V }
-\cs_generate_variant:Nn \tl_if_in:nnTF { no , oo }
-\cs_generate_variant:Nn \tl_if_in:NnTF { No }
-\cs_generate_variant:Nn \tl_if_in:NnT { No }
-\cs_generate_variant:Nn \tl_if_in:NnF { No }
-\cs_generate_variant:Nn \tl_remove_all:Nn { Nx }
-\cs_generate_variant:Nn \tl_replace_all:Nnn { Nx , Nnx, No , Nno }
-\cs_generate_variant:Nn \tl_replace_once:Nnn { Noo }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV }
-\cs_generate_variant:Nn \tl_to_str:n { f , o }
+\cs_generate_variant:Nn \tl_to_str:n { f }
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[TF]{\@@_if_almost_str:n}
% Used to test if the argument of |\cmd| or other macros to be indexed
% is almost a string or not: for instance this is \texttt{false} if |#1|
-% contains |\meta{...}|. The surprising |f|-expansion are there to
+% contains |\meta{...}|. The surprising |f|-expansion is there to
% cope with the case of |#1| starting with \cs{c_backslash_str}
% which should be expanded and considered to be \enquote{normal}.
% \begin{macrocode}
@@ -1012,11 +981,11 @@ and all files in that bundle must be distributed together.
{
\int_compare:nNnTF
{ \tl_count:n {#1} }
- < { \tl_count:f { \tl_to_str:f {#1} } }
+ < { \tl_count:e { \tl_to_str:f {#1} } }
{ \prg_return_false: }
{ \prg_return_true: }
}
-\cs_generate_variant:Nn \@@_if_almost_str:nT { V }
+\prg_generate_conditional_variant:Nnn \@@_if_almost_str:n { V } { T }
% \end{macrocode}
% \end{macro}
%
@@ -1110,7 +1079,7 @@ and all files in that bundle must be distributed together.
\cs_new_protected:Npn \@@_detect_internals_aux:N #1
{
\tl_set_eq:NN \l_@@_detect_internals_tl #1
- \tl_replace_all:Non \l_@@_detect_internals_tl { \token_to_str:N _ } { _ }
+ \tl_replace_all:NVn \l_@@_detect_internals_tl \c_underscore_str { _ }
\seq_set_split:NnV \l_@@_tmpa_seq { _ _ } \l_@@_detect_internals_tl
\seq_pop_left:NN \l_@@_tmpa_seq \l_@@_detect_internals_tl
\seq_map_variable:NNn \l_@@_tmpa_seq \l_@@_detect_internals_tl
@@ -1993,9 +1962,9 @@ and all files in that bundle must be distributed together.
\bool_if:NT \l_@@_cmd_replace_bool
{
\tl_set_rescan:Nnn \l_@@_tmpb_tl { } { _ }
- \tl_replace_all:Non \l_@@_cmd_tl \l_@@_tmpb_tl { _ }
+ \tl_replace_all:NVn \l_@@_cmd_tl \l_@@_tmpb_tl { _ }
\@@_replace_at_at:N \l_@@_cmd_tl
- \tl_replace_all:Nno \l_@@_cmd_tl { _ } \l_@@_tmpb_tl
+ \tl_replace_all:NnV \l_@@_cmd_tl { _ } \l_@@_tmpb_tl
}
% \end{macrocode}
% Typesetting.
@@ -2075,7 +2044,7 @@ and all files in that bundle must be distributed together.
{
\tl_set_rescan:Nnn \l_@@_tmpb_tl
{ \char_set_catcode:nn { `_ } {##1} } { _ }
- \tl_replace_all:Non \l_@@_tmpa_tl \l_@@_tmpb_tl
+ \tl_replace_all:NVn \l_@@_tmpa_tl \l_@@_tmpb_tl
{ \@@_ensuremath_sb:n }
}
\exp_args:NV \@@_meta_original:n \l_@@_tmpa_tl
@@ -2155,8 +2124,8 @@ and all files in that bundle must be distributed together.
\cs_new_protected:Npn \@@_get_hyper_target:nN #1#2
{
\__kernel_tl_set:Ne #2 { \tl_to_str:n {#1} }
- \tl_replace_all:Nen #2 { \c_underscore_str } { / }
- \tl_remove_all:Ne #2 { \c_backslash_str }
+ \tl_replace_all:NVn #2 \c_underscore_str { / }
+ \tl_remove_all:NV #2 \c_backslash_str
\tl_put_left:Nn #2 { doc/function// }
}
\cs_generate_variant:Nn \@@_get_hyper_target:nN { o , e }
@@ -2282,8 +2251,8 @@ and all files in that bundle must be distributed together.
{
\seq_pop:NN #1 \l_@@_tmpa_tl
\tl_gset_eq:NN \g_@@_base_name_tl \l_@@_tmpa_tl
- \tl_greplace_all:Nno \g_@@_base_name_tl
- { ~ } { \c_catcode_other_space_tl }
+ \tl_greplace_all:NnV \g_@@_base_name_tl
+ { ~ } \c_catcode_other_space_tl
\seq_get:NN #1 \l_@@_tmpa_tl
\str_if_eq:VnTF \l_@@_tmpa_tl { \scan_stop: }
{
@@ -2350,13 +2319,10 @@ and all files in that bundle must be distributed together.
% \begin{macrocode}
\prg_new_conditional:Npnn \@@_if_macro_internal:n #1 { p , T , F , TF }
{
- \bool_if:NTF \l_@@_macro_internal_set_bool
- {
- \bool_if:NTF \l_@@_macro_internal_bool
- { \prg_return_true: } { \prg_return_false: }
- }
+ \bool_if:NTF \l_@@_macro_internal_bool
+ { \prg_return_true: }
{
- \tl_if_empty:fTF
+ \tl_if_empty:eTF
{
\exp_after:wN \@@_if_macro_internal_aux:w
\tl_to_str:n { #1 ~ __ }
@@ -2437,7 +2403,8 @@ and all files in that bundle must be distributed together.
} ,
added .code:n = { \@@_date_set_past:Nn \l_@@_date_added_tl {#1} },
updated .code:n = { \@@_date_set_past:Nn \l_@@_date_updated_tl {#1} } ,
- deprecated .code:n = {} , % A stub
+ deprecated .bool_set:N = \l_@@_macro_deprecated_bool ,
+ no-user-doc .bool_set:N = \l_@@_macro_nodoc_bool ,
tested .code:n = { } ,
label .code:n =
{
@@ -2884,18 +2851,14 @@ and all files in that bundle must be distributed together.
\msg_warning:nnnn { l3doc } { deprecated-option }
{ aux } { function/macro }
} ,
+ deprecated .bool_set:N = \l_@@_macro_deprecated_bool ,
internal .value_forbidden:n = true ,
internal .code:n =
- {
- \bool_set_true:N \l_@@_macro_internal_bool
- \bool_set_true:N \l_@@_macro_internal_set_bool
- } ,
+ { \bool_set_true:N \l_@@_macro_internal_bool } ,
int .value_forbidden:n = true ,
int .code:n =
- {
- \bool_set_true:N \l_@@_macro_internal_bool
- \bool_set_true:N \l_@@_macro_internal_set_bool
- } ,
+ { \bool_set_true:N \l_@@_macro_internal_bool } ,
+ no-user-doc .bool_set:N = \l_@@_macro_nodoc_bool ,
var .value_forbidden:n = true ,
var .code:n =
{ \bool_set_true:N \l_@@_macro_var_bool } ,
@@ -2934,7 +2897,6 @@ and all files in that bundle must be distributed together.
} ,
added .code:n = {} , % TODO
updated .code:n = {} , % TODO
- deprecated .code:n = {} , % A stub
verb .bool_set:N = \l_@@_names_verb_bool ,
module .tl_set:N = \l_@@_override_module_tl ,
documented-as .tl_set:N = \l_@@_macro_documented_tl ,
@@ -2977,8 +2939,8 @@ and all files in that bundle must be distributed together.
\cs_new_protected:Npn \@@_macro_init:
{
\int_incr:N \l_@@_nested_macro_int
+ \bool_set_false:N \l_@@_macro_deprecated_bool
\bool_set_false:N \l_@@_macro_internal_bool
- \bool_set_false:N \l_@@_macro_internal_set_bool
\bool_set_false:N \l_@@_macro_TF_bool
\bool_set_false:N \l_@@_macro_pTF_bool
\bool_set_false:N \l_@@_macro_noTF_bool
@@ -3026,8 +2988,8 @@ and all files in that bundle must be distributed together.
\tl_if_empty:NTF \l_@@_macro_documented_tl
{ \@@_names_block_base_map:N \@@_macro_save_names_aux:n }
{
- \seq_gput_right:Nf \g_@@_nested_names_seq
- { \exp_after:wN \token_to_str:N \l_@@_macro_documented_tl }
+ \seq_gput_right:Ne \g_@@_nested_names_seq
+ { \tl_to_str:N \l_@@_macro_documented_tl }
}
}
\cs_new_protected:Npn \@@_macro_save_names_aux:n #1
@@ -3103,7 +3065,6 @@ and all files in that bundle must be distributed together.
{ \@@_get_function_name:n {#1} } #2
}
}
-\cs_generate_variant:Nn \@@_macro_typeset_block:nN { x }
\cs_new_protected:Npn \@@_macro_typeset_variant_list:nN #1#2
{
\seq_map_inline:Nn \g_@@_variants_seq
@@ -3140,7 +3101,12 @@ and all files in that bundle must be distributed together.
\DoNotIndex {#1}
\bool_if:NT #2
{
- \@@_if_macro_internal:nF {#1}
+ \bool_lazy_any:nF
+ {
+ { \@@_if_macro_internal_p:n {#1} }
+ { \l_@@_macro_deprecated_bool }
+ { \l_@@_macro_nodoc_bool }
+ }
{ \seq_gput_right:Nn \g_doc_macros_seq {#1} }
\hbox_set:Nw \l_@@_macro_index_box
\hbox_unpack_drop:N \l_@@_macro_index_box
@@ -3198,8 +3164,8 @@ and all files in that bundle must be distributed together.
\int_compare:nTF { \str_count:n {#1} <= 28 }
{ \MacroFont } { \MacroLongFont }
\tl_set:Nn \l_@@_tmpa_tl {#1}
- \tl_replace_all:Nno \l_@@_tmpa_tl
- { ~ } { \c_catcode_other_space_tl }
+ \tl_replace_all:NnV \l_@@_tmpa_tl
+ { ~ } \c_catcode_other_space_tl
\@@_macroname_prefix:o \l_@@_tmpa_tl
\@@_macroname_suffix:N #2
}
@@ -3377,8 +3343,8 @@ and all files in that bundle must be distributed together.
\cs_new_protected:Npn \@@_macro_end_wrap_item:n #1
{
\tl_set:Nn \l_@@_tmpa_tl {#1}
- \tl_replace_all:Non \l_@@_tmpa_tl
- { \token_to_str:N _ } { \_ }
+ \tl_replace_all:NVn \l_@@_tmpa_tl
+ \c_underscore_str { \_ }
\texttt { \l_@@_tmpa_tl }
}
\cs_new_protected:Npn \@@_print_end_definition:
@@ -3400,7 +3366,14 @@ and all files in that bundle must be distributed together.
{
\seq_gset_filter:NNn \g_@@_nested_names_seq
\g_@@_nested_names_seq
- { ! \@@_if_macro_internal_p:n {##1} }
+ {
+ ! \bool_lazy_any_p:n
+ {
+ { \@@_if_macro_internal_p:n {##1} }
+ { \l_@@_macro_deprecated_bool }
+ { \l_@@_macro_nodoc_bool }
+ }
+ }
\seq_if_empty:NF \g_@@_nested_names_seq
{
\int_set:Nn \l_@@_tmpa_int
@@ -3963,18 +3936,18 @@ and all files in that bundle must be distributed together.
\tl_clear:N \l_@@_doc_def_tl
\tl_clear:N \l_@@_doc_undef_tl
\tl_clear:N \l_@@_undoc_def_tl
+ \seq_gremove_duplicates:N \g_doc_functions_seq
+ \seq_gremove_duplicates:N \g_doc_macros_seq
\seq_map_inline:Nn \g_doc_functions_seq
{
\seq_if_in:NnTF \g_doc_macros_seq {##1}
{
\tl_put_right:Ne \l_@@_doc_def_tl
- { ##1 \iow_newline: }
- \iow_now:Nn \g_@@_func_iow { > ~ ##1 }
+ { \iow_newline: > ~ ##1 }
}
{
\tl_put_right:Ne \l_@@_doc_undef_tl
- { ##1 \iow_newline: }
- \iow_now:Nn \g_@@_func_iow { ! ~ ##1 }
+ { \iow_newline: ! ~ ##1 }
}
}
\seq_map_inline:Nn \g_doc_macros_seq
@@ -3982,8 +3955,7 @@ and all files in that bundle must be distributed together.
\seq_if_in:NnF \g_doc_functions_seq {##1}
{
\tl_put_right:Ne \l_@@_undoc_def_tl
- { ##1 \iow_newline: }
- \iow_now:Nn \g_@@_func_iow { ? ~ ##1 }
+ { \iow_newline: ? ~ ##1 }
}
}
\@@_functions_typeout:nN
@@ -4012,11 +3984,11 @@ and all files in that bundle must be distributed together.
{
\tl_if_empty:NF #2
{
- \typeout
+ \iow_now:Ne \g_@@_func_iow
{
\c_@@_iow_midrule_tl \iow_newline:
#1 \iow_newline:
- \c_@@_iow_midrule_tl \iow_newline:
+ \c_@@_iow_midrule_tl
#2
}
\tl_clear:N #2
@@ -4367,7 +4339,7 @@ and all files in that bundle must be distributed together.
\__kernel_tl_set:Ne #1 { \tl_to_str:n {#2} }
\@@_if_almost_str:nTF {#2}
{
- \tl_replace_all:Non #1 { \tl_to_str:n { __ } }
+ \tl_replace_all:Nen #1 { \tl_to_str:n { __ } }
{
\verbatimchar
\token_to_str:N \_ \token_to_str:N \_
@@ -4390,8 +4362,8 @@ and all files in that bundle must be distributed together.
}
{
\tl_set:Nn #1 {#2}
- \tl_replace_all:Non #1
- { \c_backslash_str }
+ \tl_replace_all:NVn #1
+ \c_backslash_str
{ \token_to_str:N \bslash \c_space_tl }
}
\@@_quote_special_char:N #1
@@ -4430,27 +4402,26 @@ and all files in that bundle must be distributed together.
% module name, while for \TeX{}/\LaTeXe{} commands the module name is
% |TeX|, and others have an empty module name.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_key_get:n #1
- {
- \@@_key_get_base:nN {#1} \l_@@_index_macro_tl
- \__kernel_tl_set:Ne \l_@@_index_key_tl
- { \tl_to_str:N \l_@@_index_macro_tl }
- \tl_clear:N \l_@@_index_module_tl
- \tl_if_in:NoTF \l_@@_index_key_tl { \tl_to_str:n { __ } }
- { \bool_set_true:N \l_@@_index_internal_bool }
- { \bool_set_false:N \l_@@_index_internal_bool }
- \exp_last_unbraced:NNo
- \tl_if_head_eq_charcode:oNT
- { \l_@@_index_key_tl } \c_backslash_str
- { \@@_key_pop: }
- \tl_if_in:NoTF \l_@@_index_key_tl { \token_to_str:N : }
- { \@@_key_func: }
+\cs_new_protected:Npe \@@_key_get:n #1
+ {
+ \exp_not:N \@@_key_get_base:nN {#1} \exp_not:N \l_@@_index_macro_tl
+ \__kernel_tl_set:Ne \exp_not:N \l_@@_index_key_tl
+ { \exp_not:N \tl_to_str:N \exp_not:N \l_@@_index_macro_tl }
+ \tl_clear:N \exp_not:N \l_@@_index_module_tl
+ \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \tl_to_str:n { __ } }
+ { \bool_set_true:N \exp_not:N \l_@@_index_internal_bool }
+ { \bool_set_false:N \exp_not:N \l_@@_index_internal_bool }
+ \exp_not:N \tl_if_head_eq_charcode:VNT
+ \exp_not:N \l_@@_index_key_tl \c_backslash_str
+ { \exp_not:N \@@_key_pop: }
+ \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \token_to_str:N : }
+ { \exp_not:N \@@_key_func: }
{
- \tl_if_in:NoTF \l_@@_index_key_tl { \token_to_str:N _ }
- { \@@_key_var: }
+ \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \token_to_str:N _ }
+ { \exp_not:N \@@_key_var: }
{
- \tl_if_in:NoT \l_@@_index_key_tl { \token_to_str:N @ }
- { \tl_set:Nn \l_@@_index_module_tl { TeX } }
+ \tl_if_in:NnT \exp_not:N \l_@@_index_key_tl { \token_to_str:N @ }
+ { \tl_set:Nn \exp_not:N \l_@@_index_module_tl { TeX } }
}
}
}
@@ -4476,7 +4447,7 @@ and all files in that bundle must be distributed together.
}
\cs_new_protected:Npn \@@_key_drop_underscores:
{
- \tl_if_head_eq_charcode:oNT { \l_@@_index_key_tl } _
+ \tl_if_head_eq_charcode:VNT \l_@@_index_key_tl _
{ \@@_key_pop: \@@_key_drop_underscores: }
}
% \end{macrocode}
@@ -4491,7 +4462,7 @@ and all files in that bundle must be distributed together.
% \begin{macrocode}
\cs_new_protected:Npn \@@_key_func:
{
- \tl_if_head_eq_charcode:oNT { \l_@@_index_key_tl } .
+ \tl_if_head_eq_charcode:VNT \l_@@_index_key_tl .
{ \@@_key_pop: }
\@@_key_drop_underscores:
\tl_set_eq:NN \l_@@_index_module_tl \l_@@_index_key_tl
@@ -4527,7 +4498,7 @@ and all files in that bundle must be distributed together.
\exp_args:Ne \tl_if_head_eq_charcode:nNTF
{ \exp_args:No \str_tail:n \l_@@_index_key_tl } _
{
- \str_case:fn { \str_head:N \l_@@_index_key_tl }
+ \str_case:en { \str_head:N \l_@@_index_key_tl }
{
{ q } { \tl_set:Nn \l_@@_index_module_tl { quark } }
{ s } { \tl_set:Nn \l_@@_index_module_tl { scan } }
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
index 1e5b09743b..f292e02ce2 100644
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ b/macros/latex/contrib/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index e6c46d3965..ebf9af795f 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index 108442ee65..f5a61766e1 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index 613af946f9..36fb87f2ac 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -310,23 +310,16 @@
%
% When speed is essential (for functions that do very little work and
% whose variants are used numerous times in a document) the following
-% considerations apply because internal functions for argument expansion
-% come in two flavours, some faster than others.
+% considerations apply because the speed of internal functions that
+% expand the arguments of a base function depend on what needs doing
+% with each argument and where this happens in the list of arguments:
% \begin{itemize}
-% \item
-% Arguments that might need expansion should come first in the list
-% of arguments.
-% \item
-% Arguments that should consist of single tokens |N|, |c|, |V|, or
-% |v| should come first among these.
-% \item
-% Arguments that appear after the first multi-token argument |n|,
-% |f|, |e|, or |o| require slightly slower special processing to be
-% expanded. Therefore it is best to use the optimized functions,
-% namely those that contain only |N|, |c|, |V|, and |v|, and, in the
-% last position, |o|, |f|, |e|, with possible trailing |N| or |n| or
-% |T| or |F|, which are not expanded. Any |x|-type argument causes
-% slightly slower processing.
+% \item for fastest processing any |c|-type arguments should come first
+% followed by all other modified arguments;
+% \item unchanged |N|-type args that appear before modified ones have
+% a small performance hit;
+% \item unchanged |n|-type args that appear before modified ones have
+% a relative larger performance hit.
% \end{itemize}
%
% \section{Manipulating the first argument}
@@ -471,7 +464,6 @@
% third as detailed by their argument specifier. The first argument
% of the function is then the next item on the input stream, followed
% by the expansion of the second and third arguments.
-% These functions need slower processing.
% \end{function}
%
% \begin{function}
@@ -542,7 +534,6 @@
% and fourth as detailed by their argument specifier. The first
% argument of the function is then the next item on the input stream,
% followed by the expansion of the second argument, \emph{etc}.
-% These functions need slower processing.
% \end{function}
%
% \begin{function}[added = 2015-08-12]
@@ -2384,8 +2375,9 @@
%
% \subsection{Held-over variant generation}
%
-% \begin{macro}{\cs_generate_from_arg_count:NNno}
-% \begin{macro}{\cs_replacement_spec:c}
+% \begin{macro}[documented-as = \cs_generate_from_arg_count:NNnn]
+% {\cs_generate_from_arg_count:NNno}
+% \begin{macro}[documented-as = \cs_replacement_spec:N]{\cs_replacement_spec:c}
% A couple of variants that are from early functions.
% \begin{macrocode}
\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNno }
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index 6af1bc4c00..8545a83947 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -716,7 +716,8 @@
% \cs{file_if_exist_p:n} \Arg{file name}
% \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Searches for \meta{file name} using the current \TeX{} search
+% Expands the argument of the \cs{file name} to give a string, then
+% searches for this string using the current \TeX{} search
% path and the additional paths controlled by
% \cs{l_file_search_path_seq}.
% \end{function}
@@ -724,10 +725,10 @@
% \begin{function}[noTF, added = 2019-01-16, updated = 2019-02-16]
% {\file_get:nnN, \file_get:VnN}
% \begin{syntax}
-% \cs{file_get:nnN} \Arg{filename} \Arg{setup} \meta{tl}
-% \cs{file_get:nnNTF} \Arg{filename} \Arg{setup} \meta{tl} \Arg{true code} \Arg{false code}
+% \cs{file_get:nnN} \Arg{file name} \Arg{setup} \meta{tl}
+% \cs{file_get:nnNTF} \Arg{file name} \Arg{setup} \meta{tl} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Defines \meta{tl} to the contents of \meta{filename}.
+% Defines \meta{tl} to the contents of \meta{file name}.
% Category codes may need to be set appropriately via the \meta{setup}
% argument.
% The non-branching version sets the \meta{tl} to \cs{q_no_value} if the file is
@@ -2546,21 +2547,6 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Deprecated functions}
-%
-% \begin{macro}
-% {
-% \iow_shipout_x:Nn, \iow_shipout_x:Nx,
-% \iow_shipout_x:cn, \iow_shipout_x:cx
-% }
-% Previously described as \texttt{x}-type, but the hash behaviour is really
-% \texttt{e}-type.
-% \begin{macrocode}
-\cs_new_eq:NN \iow_shipout_x:Nn \iow_shipout_e:Nn
-\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx , c, cx }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%<@@=file>
% \end{macrocode}
@@ -3359,7 +3345,7 @@
% {
% \file_compare_timestamp:nNn,
% \file_compare_timestamp:nNV,
-% \file_compare_timestamp:VNn
+% \file_compare_timestamp:VNn,
% \file_compare_timestamp:VNV
% }
% \begin{macro}[EXP]{\@@_compare_timestamp:nnN}
@@ -3415,7 +3401,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[TF]{\file_if_exist:n, \file_if_exist:V}
+% \begin{macro}[pTF]{\file_if_exist:n, \file_if_exist:V}
% The test for the existence of a file is a wrapper around the function to
% add a path to a file. If the file was found, the path contains
% something, whereas if the file was not located then the return value
@@ -3569,8 +3555,8 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\file_parse_full_name:n, \file_parse_full_name:nV}
-% \begin{macro}{\file_parse_full_name_apply:nN \file_parse_full_name_apply:VN}
+% \begin{macro}{\file_parse_full_name:n, \file_parse_full_name:V}
+% \begin{macro}{\file_parse_full_name_apply:nN, \file_parse_full_name_apply:VN}
% The main parsing macro \cs{file_parse_full_name_apply:nN} passes the
% file name |#1| through \cs{__kernel_file_name_sanitize:n} so that we
% have a single normalised way to treat files internally.
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index cecc72ceea..d94897f87d 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -61,7 +61,7 @@
% to zero requires non-expandable assignments.
%
% Flag variables are always local. They are referenced by a \meta{flag
-% name} such as \texttt{str_missing}. The \meta{flag name} is used as
+% name} such as \texttt{@@_missing}. The \meta{flag name} is used as
% part of \cs{use:c} constructions hence is expanded at point of use.
% It must expand to character tokens only, with no spaces.
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index 08a7d80880..42f915af33 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index dad8ef3c31..53ce603de0 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index e29d08f317..e0e8965aea 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index 879d9bed5a..0a8252da36 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index 7bf48968b9..7f29ebf992 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index a6f1b1fcaa..7103a8d4ea 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-functions.dtx b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
index 917f0bf330..5b5a29395f 100644
--- a/macros/latex/contrib/l3kernel/l3fp-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index ed5fe892b3..692b2839a3 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 17fef94923..025bd5b7e3 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index e2654aae99..09097cc68e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index afbff6f769..961c60363f 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
index 201bec9270..7b25907b77 100644
--- a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 2b152c5ca6..0371eddb5d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index 4421bda0a4..2c62fd572b 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-types.dtx b/macros/latex/contrib/l3kernel/l3fp-types.dtx
index 2c1f66ff71..100e3f00f4 100644
--- a/macros/latex/contrib/l3kernel/l3fp-types.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index 77c7bc625c..526a2a81bc 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index 180b11fdaa..9e9acd795d 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index 417e3cc08d..f50b3e0add 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 806b10c6c9..b566791654 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index a07c55d7f5..72ea6c7480 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -415,6 +415,13 @@
% are errors, and in such case the definition is aborted.
% \end{function}
%
+% \begin{function}{\__kernel_sys_everyjob:}
+% \begin{syntax}
+% \cs{__kernel_sys_everyjob:}
+% \end{syntax}
+% Inserts the internal token list required at the start of every run (job).
+% \end{function}
+%
% \begin{variable}{\c__kernel_randint_max_int}
% Maximal allowed argument to \cs{__kernel_randint:n}. Equal to
% $2^{17}-1$.
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index 7dc05afee0..75c4c34f22 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1585,11 +1585,16 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{\l_keys_key_str, \l_keys_key_tl}
-% The name of a key itself: needed when setting keys. The |tl| version
-% is deprecated but has to be handled manually.
+% \begin{variable}{\l_keys_key_str}
+% The name of a key itself: needed when setting keys.
% \begin{macrocode}
\str_new:N \l_keys_key_str
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}[deprecated]{\l_keys_key_tl}
+% The |tl| version is deprecated but has to be handled manually.
+% \begin{macrocode}
\tl_new:N \l_keys_key_tl
% \end{macrocode}
% \end{variable}
@@ -1616,12 +1621,17 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{\l_keys_path_str, \l_keys_path_tl}
+% \begin{variable}{\l_keys_path_str}
% The \enquote{path} of the current key is stored here: this is
-% available to the programmer and so is public. The older version is
-% deprecated but has to be handled manually.
+% available to the programmer and so is public.
% \begin{macrocode}
\str_new:N \l_keys_path_str
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}[deprecated]{\l_keys_path_tl}
+% The older version is deprecated but has to be handled manually.
+% \begin{macrocode}
\tl_new:N \l_keys_path_tl
% \end{macrocode}
% \end{variable}
@@ -3593,38 +3603,6 @@
\prop_gput:Nnn \g_msg_module_type_prop { keys } { }
% \end{macrocode}
%
-% \subsection{Deprecated functions}
-%
-% \begin{macro}{.str_set_x:N, .str_set_x:c}
-% \begin{macro}{.str_gset_x:N, .str_gset_x:c}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1
- { \@@_variable_set:NnnN #1 { str } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1
- { \@@_variable_set:cnnN {#1} { str } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1
- { \@@_variable_set:NnnN #1 { str } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1
- { \@@_variable_set:cnnN {#1} { str } { g } x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.tl_set_x:N, .tl_set_x:c}
-% \begin{macro}{.tl_gset_x:N, .tl_gset_x:c}
-% \begin{macrocode}
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1
- { \@@_variable_set:NnnN #1 { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1
- { \@@_variable_set:NnnN #1 { tl } { g } x }
-\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1
- { \@@_variable_set:cnnN {#1} { tl } { g } x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 091da9a2cf..915ae07bb8 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index ef582049e2..d94a2c6ad6 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -450,7 +450,7 @@ ltxutils.filedump = filedump
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{md5.HEX}
+% \begin{macro}[int]{md5.HEX}
% Hash a string and return the hash in uppercase hexadecimal format.
% In some engines, this is build-in. For traditional \LuaTeX{}, the conversion
% to hexadecimal has to be done by us.
@@ -681,7 +681,7 @@ if luatexbase then
if status.ini_version then
% \end{macrocode}
%
-% \begin{macro}{register_luadata}
+% \begin{macro}[int]{register_luadata}
% \texttt{register_luadata} is only available during format generation.
% It accept a string which uniquely identifies the data object and has to be
% provided to retrieve it later. Additionally it accepts a function which is
@@ -716,7 +716,7 @@ if luatexbase then
else
% \end{macrocode}
%
-% \begin{macro}{get_luadata}
+% \begin{macro}[int]{get_luadata}
% \texttt{get_luadata} is only available if data should be restored.
% It accept the identifier which was used when the data object was registered and
% returns the associated object. Every object can only be retrieved once.
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index 54c25fd3c3..b12cdab55c 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 479a4b5dfc..1441e889c3 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1461,7 +1461,7 @@
%<*lua>
% \end{macrocode}
%
-% \begin{macro}{\tex_strcmp:D}
+% \begin{macro}[no-user-doc]{\tex_strcmp:D}
% Compare two strings, expanding to |0| if they are equal,
% |-1| if the first one is smaller and |1| if the second one is smaller.
% Here \enquote{smaller} refers to codepoint order which does not correspond to
@@ -1482,7 +1482,7 @@ end, 'global')
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tex_Ucharcat:D}
+% \begin{macro}[no-user-doc]{\tex_Ucharcat:D}
% Creating arbitrary chars using |tex.cprint|.
% The alternative approach using |token.new(...)| is about 10\% slower
% but needed to create arbitrary space tokens.
@@ -1501,7 +1501,7 @@ end, 'global')
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tex_filesize:D}
+% \begin{macro}[no-user-doc]{\tex_filesize:D}
% Wrap the function from |ltxutils|.
% \begin{macrocode}
luacmd('tex_filesize:D', function()
@@ -1511,7 +1511,7 @@ end, 'global')
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tex_mdfivesum:D}
+% \begin{macro}[no-user-doc]{\tex_mdfivesum:D}
% There are two cases: Either hash a file or a string.
% Both are already implemented in l3luatex or built-in.
% \begin{macrocode}
@@ -1527,7 +1527,7 @@ end, 'global')
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tex_filemoddate:D}
+% \begin{macro}[no-user-doc]{\tex_filemoddate:D}
% A primitive for getting the modification date of a file.
% \begin{macrocode}
luacmd('tex_filemoddate:D', function()
@@ -1537,7 +1537,7 @@ end, 'global')
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tex_filedump:D}
+% \begin{macro}[no-user-doc]{\tex_filedump:D}
% An emulated primitive for getting a hexdump from a (partial) file.
% The length has a default of |0|. This is consistent with
% \pdfTeX, but it effectivly makes the primitive useless without an
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index 617f4f2771..31847b224c 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index ad795f754b..6d13ba9cac 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 21da08322a..4580c998e7 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index 047e2cb06b..b839d9cce4 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index 3827034689..c0c15503c2 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index 76744232d5..82d7bb879a 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index 7b22e68de8..e701e98aeb 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index b8560d4ff9..399c31714d 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index e287a71c6e..b031c0de15 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 35de7bf84e..a52cdd0900 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index 1cfd090ab9..cd866e817e 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index 42af25018d..63f715833f 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index 992658599c..7e25add880 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx
index 1ac0468ac6..ae07ef82a6 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/contrib/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -369,7 +369,7 @@
%
% \subsection{Version}
%
-% \begin{macro}{\pdf_version_compare:Nn}
+% \begin{macro}[pTF,EXP]{\pdf_version_compare:Nn}
% \begin{macro}
% {
% @@_version_compare_=:w ,
@@ -522,33 +522,6 @@
}
% \end{macrocode}
%
-% \subsection{Deprecated functions}
-%
-% \begin{variable}{\g_@@_object_prop}
-% For tracking objects.
-% \begin{macrocode}
-\prop_new:N \g_@@_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\pdf_object_new:nn, \pdf_object_write:nn, \pdf_object_write:nx}
-% Wrap up the type data in a prop.
-% \begin{macrocode}
-\cs_new_protected:Npn \pdf_object_new:nn #1#2
- {
- \prop_gput:Nnn \g_@@_object_prop {#1} {#2}
- \@@_backend_object_new:n {#1}
- }
-\cs_new_protected:Npn \pdf_object_write:nn #1#2
- {
- \exp_args:Nne \@@_backend_object_write:nnn
- {#1} { \prop_item:Nn \g_@@_object_prop {#1} } {#2}
- \bool_gset_true:N \g_@@_init_bool
- }
-\cs_generate_variant:Nn \pdf_object_write:nn { nx }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv
index b6f56360ca..1baf489209 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.csv
+++ b/macros/latex/contrib/l3kernel/l3prefixes.csv
@@ -196,7 +196,7 @@ piton,piton,François Pantigny,,,,29/09/2022,29/09/2022,
pkgploader,pkgploader,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
platex,platex,Japanese TeX Development Community,https://github.com/texjporg/platex,https://github.com/texjporg/platex.git,https://github.com/texjporg/platex/issues,2020-09-30,2020-09-30,
polyglossia,polyglossia,Arthur Reutenauer,https://www.polyglossia.org/,https://github.com/reutenauer/polyglossia,https://github.com/reutenauer/polyglossia/issues,2019-09-03,,
-postnotes,postnotes,Gustavo Barros,https://github.com/gusbrs/postnotes,https://github.com/gusbrs/postnotes.git,https://github.com/gusbrs/postnotes/issues,2022-04-23,2022-04-23,
+postnotes,postnotes,gusbrs,https://github.com/gusbrs/postnotes,https://github.com/gusbrs/postnotes.git,https://github.com/gusbrs/postnotes/issues,2022-04-23,2022-04-23,
prelim,prelim2e,Marei Peischl,https://github.com/TeXhackse/prelim2e,https://github.com/TeXhackse/prelim2e.git,https://github.com/TeXhackse/prelim2e/issues,2020-11-24,2020-11-24,
prg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
primargs,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
@@ -271,6 +271,7 @@ use,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https:/
utex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
vbox,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
vcoffin,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
+wheelchart,wheelchart,Matthias Floré,,,,2023-12-07,2023-12-07,
withargs,withargs,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
witharrows,witharrows,François Pantigny,,,,2019-12-19,2019-12-19,
xeCJK,xecjk,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-05-26,2013-05-26,
@@ -288,7 +289,7 @@ yoin,yoin,Tom Hejda,https://github.com/tohecz/yoin,https://github.com/tohecz/yoi
zero,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
zhlipsum,zhlipsum,Xiangdong Zeng,https://github.com/stone-zeng/zhlipsum,https://github.com/stone-zeng/zhlipsum.git,https://github.com/stone-zeng/zhlipsum/issues,2018-06-14,2018-06-14,
zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
-zrefcheck,zref-check,Gustavo Barros,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check/issues,2021-08-05,2021-08-05,
-zrefclever,zref-clever,Gustavo Barros,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever/issues,2021-11-29,2021-11-29,
-zrefvario,zref-vario,Gustavo Barros,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario/issues,2022-02-02,2022-02-02,
+zrefcheck,zref-check,gusbrs,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check/issues,2021-08-05,2021-08-05,
+zrefclever,zref-clever,gusbrs,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever/issues,2021-11-29,2021-11-29,
+zrefvario,zref-vario,gusbrs,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario/issues,2022-02-02,2022-02-02,
zxjt,zxjatype,Takayuki Yato,,,,2013-03-16,2013-03-16,
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index 8e95710ed5..896c9f448e 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index b5cd8bc3a4..201d7bde90 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -330,12 +330,13 @@
% based on this result.
% \end{function}
%
-% \begin{function}[EXP, added = 2021-11-01]{\bool_to_str:N, \bool_to_str:c, \bool_to_str:n}
+% \begin{function}[EXP, added = 2021-11-01, updated = 2023-11-14]
+% {\bool_to_str:N, \bool_to_str:c, \bool_to_str:n}
% \begin{syntax}
% \cs{bool_to_str:N} \meta{boolean}
% \cs{bool_to_str:n} \meta{boolean expression}
% \end{syntax}
-% Expands to the letters \texttt{true} or \texttt{false} depending on
+% Expands to the string \texttt{true} or \texttt{false} depending on
% the logical truth of the \meta{boolean} or \meta{boolean
% expression}.
% \end{function}
@@ -1048,11 +1049,19 @@
% \end{macro}
%
% \begin{macro}[EXP]{\bool_to_str:N, \bool_to_str:c, \bool_to_str:n}
-% Expands to \texttt{true} or \texttt{false} with category code letter.
+% Expands to string literal \texttt{true} or \texttt{false}.
% \begin{macrocode}
-\cs_new:Npn \bool_to_str:N #1 { \bool_if:NTF #1 { true } { false } }
+\cs_new:Npe \bool_to_str:N #1
+ {
+ \exp_not:N \bool_if:NTF #1
+ { \tl_to_str:n { true } } { \tl_to_str:n { false } }
+ }
\cs_generate_variant:Nn \bool_to_str:N { c }
-\cs_new:Npn \bool_to_str:n #1 { \bool_if:nTF {#1} { true } { false } }
+\cs_new:Npe \bool_to_str:n #1
+ {
+ \exp_not:N \bool_if:nTF {#1}
+ { \tl_to_str:n { true } } { \tl_to_str:n { false } }
+ }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index c6dc4afc99..bf1a1a0c33 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index 252cf67aef..21d6dbc9d7 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index aa6cf69c8a..f9e2663cc3 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -667,7 +667,7 @@
% \begin{function}[noTF, added = 2017-05-26]
% {
% \regex_extract_once:nnN, \regex_extract_once:nVN,
-% \regex_extract_once:NVN, \regex_extract_once:NVN
+% \regex_extract_once:NnN, \regex_extract_once:NVN
% }
% \begin{syntax}
% \cs{regex_extract_once:nnN} \Arg{regex} \Arg{token list} \meta{seq~var}
@@ -6683,7 +6683,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[noTF]{\regex_case_replace_all:nN}
+% \begin{macro}[noTF]{\regex_replace_case_all:nN}
% If the input is bad (odd number of items) then take the false
% branch. Otherwise, use the same auxiliary as
% \cs{regex_replace_all:nnN}, but with more complicated code to build
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 64ab9771a9..5021a70077 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1413,7 +1413,7 @@
% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, \seq_gput_left:Ne,
% \seq_gput_left:No, \seq_gput_left:Nx,
% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, \seq_gput_left:ce,
-% \seq_gput_left:co, \seq_put_left:cx
+% \seq_gput_left:co, \seq_gput_left:cx
% }
% \begin{macro}[EXP]{\@@_put_left_aux:w}
% When adding to the left of a sequence, remove \cs{s_@@}. This is
@@ -1525,7 +1525,7 @@
% {
% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Ne,
% \seq_remove_all:Nx,
-% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:ce
+% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:ce,
% \seq_remove_all:cx,
% }
% \UnitTested
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index eba5656f82..750c0995f3 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index e296421b04..c152564304 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 51419bd87e..0da2e88de8 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -343,13 +343,13 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{str_byte, str_error}
+% \begin{variable}{@@_byte, @@_error}
% Conversions from one \meta{encoding}/\meta{escaping} pair to another
% are done within \texttt{e}-expanding assignments. Errors are
% signalled by raising the relevant flag.
% \begin{macrocode}
-\flag_new:n { str_byte }
-\flag_new:n { str_error }
+\flag_new:n { @@_byte }
+\flag_new:n { @@_error }
% \end{macrocode}
% \end{variable}
%
@@ -714,6 +714,8 @@
{ encode } { escape }
\use_ii_i:nn
\@@_convert_encode_:
+ \__kernel_tl_gset:Ne \g_@@_result_tl
+ { \tl_to_str:V \g_@@_result_tl }
\group_end:
#2 #3 \g_@@_result_tl
}
@@ -891,7 +893,7 @@
% \begin{macro}[rEXP]{\@@_filter_bytes_aux:N}
% In the case of 8-bit engines, every character is a byte. For
% Unicode-aware engines, test the character code; non-bytes cause us
-% to raise the flag \texttt{str_byte}. Spaces have already been given
+% to raise the flag \texttt{@@_byte}. Spaces have already been given
% the correct category code when this function is called.
% \begin{macrocode}
\bool_lazy_any:nTF
@@ -912,7 +914,7 @@
\if_int_compare:w `#1 < 256 \exp_stop_f:
#1
\else:
- \flag_raise:n { str_byte }
+ \flag_raise:n { @@_byte }
\fi:
\@@_filter_bytes_aux:N
}
@@ -935,10 +937,10 @@
{
\cs_new_protected:Npn \@@_convert_unescape_:
{
- \flag_clear:n { str_byte }
+ \flag_clear:n { @@_byte }
\__kernel_tl_gset:Ne \g_@@_result_tl
{ \exp_args:No \@@_filter_bytes:n \g_@@_result_tl }
- \@@_if_flag_error:nne { str_byte } { non-byte } { bytes }
+ \@@_if_flag_error:nne { @@_byte } { non-byte } { bytes }
}
}
{ \cs_new_protected:Npn \@@_convert_unescape_: { } }
@@ -995,15 +997,15 @@
{
\cs_new_protected:Npn \@@_convert_encode_:
{
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_error }
\@@_convert_gmap_internal:N \@@_encode_native_char:n
- \@@_if_flag_error:nne { str_error }
+ \@@_if_flag_error:nne { @@_error }
{ native-overflow } { }
}
\cs_new:Npn \@@_encode_native_char:n #1
{
\if_int_compare:w #1 > \c_@@_max_byte_int
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
?
\else:
\char_generate:nn {#1} {12}
@@ -1184,9 +1186,9 @@
\exp_not:N \@@_decode_eight_bit_aux:Nn
\exp_not:c { g_@@_decode_#1_intarray }
}
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_error }
\@@_convert_gmap:N \@@_tmp:w
- \@@_if_flag_error:nne { str_error } { decode-8-bit } {#1}
+ \@@_if_flag_error:nne { @@_error } { decode-8-bit } {#1}
}
\cs_new:Npn \@@_decode_eight_bit_aux:Nn #1#2
{
@@ -1198,7 +1200,7 @@
\cs_new:Npn \@@_decode_eight_bit_aux:n #1
{
\if_int_compare:w #1 < \c_zero_int
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
\int_value:w \c_@@_replacement_char_int
\else:
#1
@@ -1228,9 +1230,9 @@
\exp_not:c { g_@@_encode_#1_intarray }
\exp_not:c { g_@@_decode_#1_intarray }
}
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_error }
\@@_convert_gmap_internal:N \@@_tmp:w
- \@@_if_flag_error:nne { str_error } { encode-8-bit } {#1}
+ \@@_if_flag_error:nne { @@_error } { encode-8-bit } {#1}
}
\cs_new:Npn \@@_encode_eight_bit_aux:NNn #1#2#3
{
@@ -1246,7 +1248,7 @@
{
\int_compare:nNnTF { \intarray_item:Nn #3 { 1 + #1 } } = {#2}
{ \@@_output_byte:n {#1} }
- { \flag_raise:n { str_error } }
+ { \flag_raise:n { @@_error } }
}
% \end{macrocode}
% \end{macro}
@@ -1266,7 +1268,7 @@
{
Since~native~strings~do~not~consist~in~bytes,~
none~of~the~escaping~methods~make~sense.~
- The~specified~escaping,~'#1',~will be ignored.
+ The~specified~escaping,~'#1',~will~be~ignored.
}
\msg_new:nnn { str } { file-not-found }
{ File~'l3str-#1.def'~not~found. }
@@ -1347,7 +1349,7 @@
\cs_new_protected:Npn \@@_convert_unescape_hex:
{
\group_begin:
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_error }
\int_set:Nn \tex_escapechar:D { 92 }
\__kernel_tl_gset:Ne \g_@@_result_tl
{
@@ -1358,7 +1360,7 @@
\prg_break_point:
\@@_output_end:
}
- \@@_if_flag_error:nne { str_error } { unescape-hex } { }
+ \@@_if_flag_error:nne { @@_error } { unescape-hex } { }
\group_end:
}
\cs_new:Npn \@@_unescape_hex_auxi:N #1
@@ -1367,7 +1369,7 @@
\@@_hexadecimal_use:NTF #1
{ \@@_unescape_hex_auxii:N }
{
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
\@@_unescape_hex_auxi:N
}
}
@@ -1380,7 +1382,7 @@
\@@_output_byte:w " \@@_unescape_hex_auxi:N
}
{
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
\@@_unescape_hex_auxii:N
}
}
@@ -1425,8 +1427,8 @@
\cs_new_protected:cpn { @@_convert_unescape_#2: }
{
\group_begin:
- \flag_clear:n { str_byte }
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_byte }
+ \flag_clear:n { @@_error }
\int_set:Nn \tex_escapechar:D { 92 }
\__kernel_tl_gset:Ne \g_@@_result_tl
{
@@ -1434,8 +1436,8 @@
#1 ? { ? \prg_break: }
\prg_break_point:
}
- \@@_if_flag_error:nne { str_byte } { non-byte } { #2 }
- \@@_if_flag_error:nne { str_error } { unescape-#2 } { }
+ \@@_if_flag_error:nne { @@_byte } { non-byte } { #2 }
+ \@@_if_flag_error:nne { @@_error } { unescape-#2 } { }
\group_end:
}
\cs_new:Npn #3 ##1#1##2##3
@@ -1448,12 +1450,12 @@
\@@_hexadecimal_use:NTF ##3
{ }
{
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
* 0 + `#1 \use_i:nn
}
}
{
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
0 + `#1 \use_i:nn
}
\@@_output_end:
@@ -1511,8 +1513,8 @@
\cs_new_protected:Npn \@@_convert_unescape_string:
{
\group_begin:
- \flag_clear:n { str_byte }
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_byte }
+ \flag_clear:n { @@_error }
\int_set:Nn \tex_escapechar:D { 92 }
\__kernel_tl_gset:Ne \g_@@_result_tl
{
@@ -1526,8 +1528,8 @@
\g_@@_result_tl #1 ?? { ? \prg_break: }
\prg_break_point:
}
- \@@_if_flag_error:nne { str_byte } { non-byte } { string }
- \@@_if_flag_error:nne { str_error } { unescape-string } { }
+ \@@_if_flag_error:nne { @@_byte } { non-byte } { string }
+ \@@_if_flag_error:nne { @@_error } { unescape-string } { }
\group_end:
}
}
@@ -1567,7 +1569,7 @@
{ ^^J } { 0 - 1 }
}
{
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
0 - 1 \use_i:nn
}
}
@@ -1844,19 +1846,19 @@
% first remind the user what a correct \textsc{utf-8} string should
% look like, then add error-specific information.
% \begin{macrocode}
-\flag_clear_new:n { str_missing }
-\flag_clear_new:n { str_extra }
-\flag_clear_new:n { str_overlong }
-\flag_clear_new:n { str_overflow }
+\flag_clear_new:n { @@_missing }
+\flag_clear_new:n { @@_extra }
+\flag_clear_new:n { @@_overlong }
+\flag_clear_new:n { @@_overflow }
\msg_new:nnnn { str } { utf8-decode }
{
Invalid~UTF-8~string:
\exp_last_unbraced:Nf \use_none:n
{
- \@@_if_flag_times:nT { str_missing } { ,~missing~continuation~byte }
- \@@_if_flag_times:nT { str_extra } { ,~extra~continuation~byte }
- \@@_if_flag_times:nT { str_overlong } { ,~overlong~form }
- \@@_if_flag_times:nT { str_overflow } { ,~code~point~too~large }
+ \@@_if_flag_times:nT { @@_missing } { ,~missing~continuation~byte }
+ \@@_if_flag_times:nT { @@_extra } { ,~extra~continuation~byte }
+ \@@_if_flag_times:nT { @@_overlong } { ,~overlong~form }
+ \@@_if_flag_times:nT { @@_overflow } { ,~code~point~too~large }
}
.
}
@@ -1871,25 +1873,25 @@
Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\
}
Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes.
- \flag_if_raised:nT { str_missing }
+ \flag_if_raised:nT { @@_missing }
{
\\\\
A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~
the~appropriate~number~of~continuation~bytes.
}
- \flag_if_raised:nT { str_extra }
+ \flag_if_raised:nT { @@_extra }
{
\\\\
LaTeX~came~across~a~continuation~byte~when~it~was~not~expected.
}
- \flag_if_raised:nT { str_overlong }
+ \flag_if_raised:nT { @@_overlong }
{
\\\\
Every~Unicode~code~point~must~be~expressed~in~the~shortest~
possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~
representation~for~the~code~point~3.
}
- \flag_if_raised:nT { str_overflow }
+ \flag_if_raised:nT { @@_overflow }
{
\\\\
Unicode~limits~code~points~to~the~range~[0,1114111].
@@ -1968,18 +1970,18 @@
% \begin{macrocode}
\cs_new_protected:cpn { @@_convert_decode_utf8: }
{
- \flag_clear:n { str_error }
- \flag_clear:n { str_missing }
- \flag_clear:n { str_extra }
- \flag_clear:n { str_overlong }
- \flag_clear:n { str_overflow }
+ \flag_clear:n { @@_error }
+ \flag_clear:n { @@_missing }
+ \flag_clear:n { @@_extra }
+ \flag_clear:n { @@_overlong }
+ \flag_clear:n { @@_overflow }
\__kernel_tl_gset:Ne \g_@@_result_tl
{
\exp_after:wN \@@_decode_utf_viii_start:N \g_@@_result_tl
{ \prg_break: \@@_decode_utf_viii_end: }
\prg_break_point:
}
- \@@_if_flag_error:nne { str_error } { utf8-decode } { }
+ \@@_if_flag_error:nne { @@_error } { utf8-decode } { }
}
\cs_new:Npn \@@_decode_utf_viii_start:N #1
{
@@ -1989,8 +1991,8 @@
\if_int_compare:w `#1 < "80 \exp_stop_f:
\int_value:w `#1
\else:
- \flag_raise:n { str_extra }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_extra }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int
\fi:
\else:
@@ -2013,8 +2015,8 @@
\int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN
\else:
\s_@@
- \flag_raise:n { str_missing }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_missing }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int
\fi:
\s_@@
@@ -2027,8 +2029,8 @@
\if_int_compare:w #1 < #4 \exp_stop_f:
\s_@@
\if_int_compare:w #1 < #3 \exp_stop_f:
- \flag_raise:n { str_overlong }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_overlong }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int
\else:
#1
@@ -2047,15 +2049,15 @@
\cs_new:Npn \@@_decode_utf_viii_overflow:w #1 \fi: #2 \fi:
{
\fi: \fi:
- \flag_raise:n { str_overflow }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_overflow }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int
}
\cs_new:Npn \@@_decode_utf_viii_end:
{
\s_@@
- \flag_raise:n { str_missing }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_missing }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int \s_@@
\prg_break:
}
@@ -2117,10 +2119,10 @@
{ \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_le:n }
\cs_new_protected:Npn \@@_encode_utf_xvi_aux:N #1
{
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_error }
\cs_set_eq:NN \@@_tmp:w #1
\@@_convert_gmap_internal:N \@@_encode_utf_xvi_char:n
- \@@_if_flag_error:nne { str_error } { utf16-encode } { }
+ \@@_if_flag_error:nne { @@_error } { utf16-encode } { }
}
\cs_new:Npn \@@_encode_utf_xvi_char:n #1
{
@@ -2129,7 +2131,7 @@
\else:
\if_int_compare:w #1 < "10000 \exp_stop_f:
\if_int_compare:w #1 < "E000 \exp_stop_f:
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
\@@_tmp:w { \c_@@_replacement_char_int }
\else:
\@@_tmp:w {#1}
@@ -2160,9 +2162,9 @@
% an unexpected trail surrogate, and a string containing an odd number
% of bytes.
% \begin{macrocode}
- \flag_clear_new:n { str_missing }
- \flag_clear_new:n { str_extra }
- \flag_clear_new:n { str_end }
+ \flag_clear_new:n { @@_missing }
+ \flag_clear_new:n { @@_extra }
+ \flag_clear_new:n { @@_end }
\msg_new:nnnn { str } { utf16-encode }
{ Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. }
{
@@ -2175,9 +2177,9 @@
Invalid~UTF-16~string:
\exp_last_unbraced:Nf \use_none:n
{
- \@@_if_flag_times:nT { str_missing } { ,~missing~trail~surrogate }
- \@@_if_flag_times:nT { str_extra } { ,~extra~trail~surrogate }
- \@@_if_flag_times:nT { str_end } { ,~odd~number~of~bytes }
+ \@@_if_flag_times:nT { @@_missing } { ,~missing~trail~surrogate }
+ \@@_if_flag_times:nT { @@_extra } { ,~extra~trail~surrogate }
+ \@@_if_flag_times:nT { @@_end } { ,~odd~number~of~bytes }
}
.
}
@@ -2194,17 +2196,17 @@
}
Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~
and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF].
- \flag_if_raised:nT { str_missing }
+ \flag_if_raised:nT { @@_missing }
{
\\\\
A~lead~surrogate~was~not~followed~by~a~trail~surrogate.
}
- \flag_if_raised:nT { str_extra }
+ \flag_if_raised:nT { @@_extra }
{
\\\\
LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected.
}
- \flag_if_raised:nT { str_end }
+ \flag_if_raised:nT { @@_end }
{
\\\\
The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~
@@ -2258,10 +2260,10 @@
}
\cs_new_protected:Npn \@@_decode_utf_xvi:Nw #1#2 \s_@@_stop
{
- \flag_clear:n { str_error }
- \flag_clear:n { str_missing }
- \flag_clear:n { str_extra }
- \flag_clear:n { str_end }
+ \flag_clear:n { @@_error }
+ \flag_clear:n { @@_missing }
+ \flag_clear:n { @@_extra }
+ \flag_clear:n { @@_end }
\cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 }
\__kernel_tl_gset:Ne \g_@@_result_tl
{
@@ -2269,7 +2271,7 @@
#2 \q_@@_nil \q_@@_nil
\prg_break_point:
}
- \@@_if_flag_error:nne { str_error } { utf16-decode } { }
+ \@@_if_flag_error:nne { @@_error } { utf16-decode } { }
}
% \end{macrocode}
% \end{macro}
@@ -2375,7 +2377,7 @@
{ \@@_decode_utf_xvi_error:nNN { extra } #1#2 }
\cs_new:Npn \@@_decode_utf_xvi_error:nNN #1#2#3
{
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_error }
\flag_raise:n { str_#1 }
#2 #3 \s_@@
\int_use:N \c_@@_replacement_char_int \s_@@
@@ -2454,36 +2456,36 @@
% \end{macro}
% \end{macro}
%
-% \begin{variable}{str_overflow, str_end}
+% \begin{variable}{@@_overflow, @@_end}
% There can be no error when encoding in \textsc{utf-32}. When
% decoding, the string may not have length $4n$, or it may contain
% code points larger than \hexnum{10FFFF}. The latter case often
% happens if the encoding was in fact not \textsc{utf-32}, because
% most arbitrary strings are not valid in \textsc{utf-32}.
% \begin{macrocode}
- \flag_clear_new:n { str_overflow }
- \flag_clear_new:n { str_end }
+ \flag_clear_new:n { @@_overflow }
+ \flag_clear_new:n { @@_end }
\msg_new:nnnn { str } { utf32-decode }
{
Invalid~UTF-32~string:
\exp_last_unbraced:Nf \use_none:n
{
- \@@_if_flag_times:nT { str_overflow } { ,~code~point~too~large }
- \@@_if_flag_times:nT { str_end } { ,~truncated~string }
+ \@@_if_flag_times:nT { @@_overflow } { ,~code~point~too~large }
+ \@@_if_flag_times:nT { @@_end } { ,~truncated~string }
}
.
}
{
In~the~UTF-32~encoding,~every~Unicode~character~
(in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes.
- \flag_if_raised:nT { str_overflow }
+ \flag_if_raised:nT { @@_overflow }
{
\\\\
LaTeX~came~across~a~code~point~larger~than~1114111,~
the~maximum~code~point~defined~by~Unicode.~
Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding?
}
- \flag_if_raised:nT { str_end }
+ \flag_if_raised:nT { @@_end }
{
\\\\
The~length~of~the~string~is~not~a~multiple~of~4.~
@@ -2547,9 +2549,9 @@
}
\cs_new_protected:Npn \@@_decode_utf_xxxii:Nw #1#2 \s_@@_stop
{
- \flag_clear:n { str_overflow }
- \flag_clear:n { str_end }
- \flag_clear:n { str_error }
+ \flag_clear:n { @@_overflow }
+ \flag_clear:n { @@_end }
+ \flag_clear:n { @@_error }
\cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 }
\__kernel_tl_gset:Ne \g_@@_result_tl
{
@@ -2557,7 +2559,7 @@
#2 \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
\prg_break_point:
}
- \@@_if_flag_error:nne { str_error } { utf32-decode } { }
+ \@@_if_flag_error:nne { @@_error } { utf32-decode } { }
}
\cs_new:Npn \@@_decode_utf_xxxii_loop:NNNN #1#2#3#4
{
@@ -2566,13 +2568,13 @@
\fi:
#1#2#3#4 \s_@@
\if_int_compare:w \@@_tmp:w #1#4 > \c_zero_int
- \flag_raise:n { str_overflow }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_overflow }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int
\else:
\if_int_compare:w \@@_tmp:w #2#3 > 16 \exp_stop_f:
- \flag_raise:n { str_overflow }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_overflow }
+ \flag_raise:n { @@_error }
\int_use:N \c_@@_replacement_char_int
\else:
\int_eval:n
@@ -2586,8 +2588,8 @@
{
\tl_if_empty:nF {#1}
{
- \flag_raise:n { str_end }
- \flag_raise:n { str_error }
+ \flag_raise:n { @@_end }
+ \flag_raise:n { @@_error }
#1 \s_@@
\int_use:N \c_@@_replacement_char_int \s_@@
}
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index 4ebc1af703..fc8594bf0b 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -127,7 +127,11 @@
% Clears the content of the \meta{str~var}.
% \end{function}
%
-% \begin{function}[added = 2015-09-18]{\str_clear_new:N, \str_clear_new:c}
+% \begin{function}[added = 2015-09-18]
+% {
+% \str_clear_new:N, \str_clear_new:c,
+% \str_gclear_new:N, \str_gclear_new:c
+% }
% \begin{syntax}
% \cs{str_clear_new:N} \meta{str~var}
% \end{syntax}
@@ -839,6 +843,10 @@
% code $12$.
% \end{variable}
%
+% \begin{variable}[added = 2023-12-07]{\c_empty_str}
+% Constant that is always empty.
+% \end{variable}
+%
% \section{Scratch strings}
%
% \begin{variable}{\l_tmpa_str, \l_tmpb_str}
@@ -855,16 +863,6 @@
% code and so should only be used for short-term storage.
% \end{variable}
%
-% \section{Deprecated functions}
-%
-% \begin{function}[EXP, added = 2019-11-26]
-% {\str_foldcase:n, \str_foldcase:V}
-% \begin{syntax}
-% \cs{str_foldcase:n} \Arg{tokens}
-% \end{syntax}
-% A previous name for the functionally-identical \cs{str_casefold:n}.
-% \end{function}
-%
% \end{documentation}
%
% \begin{implementation}
@@ -989,33 +987,53 @@
% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne, \str_gput_right:Nx,
% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce, \str_gput_right:cx
% }
-% Simply convert the token list inputs to \meta{strings}.
+% Similar to corresponding \pkg{l3tl} base functions, except that
+% \cs{__kernel_exp_not:w} is replaced with \cs{__kernel_tl_to_str:w}.
+% Just like token list, string constants use \cs{cs_gset_nopar:Npe}
+% instead of \cs{__kernel_tl_gset:Ne} so that the scope checking for
+% |c| is applied when \pkg{l3debug} is used.
+% To maintain backward compatibility, in
+% \cs[index=str_put_left:Nn]{str_(g)put_left:Nn} and
+% \cs[index=str_put_right:Nn]{str_(g)put_right:Nn},
+% contents of string variables are wrapped in \cs{__kernel_exp_not:w}
+% to prevent further expansion.
% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:n #1
- {
- \tl_if_blank:nF {#1}
- {
- \cs_new_protected:cpe { str_ #1 :Nn } ##1##2
- {
- \exp_not:c { tl_ #1 :Ne } ##1
- { \exp_not:N \tl_to_str:n {##2} }
- }
- \cs_generate_variant:cn { str_ #1 :Nn }
- { NV , Ne , Nx , cn , cV , ce , cx }
- \@@_tmp:n
- }
- }
- \@@_tmp:n
- { set }
- { gset }
- { const }
- { put_left }
- { gput_left }
- { put_right }
- { gput_right }
- { }
-\group_end:
+\cs_new_protected:Npn \str_set:Nn #1#2
+ { \__kernel_tl_set:Ne #1 { \__kernel_tl_to_str:w {#2} } }
+\cs_gset_protected:Npn \str_gset:Nn #1#2
+ { \__kernel_tl_gset:Ne #1 { \__kernel_tl_to_str:w {#2} } }
+\cs_new_protected:Npn \str_const:Nn #1#2
+ {
+ \__kernel_chk_if_free_cs:N #1
+ \cs_gset_nopar:Npe #1 { \__kernel_tl_to_str:w {#2} }
+ }
+\cs_new_protected:Npn \str_put_left:Nn #1#2
+ {
+ \__kernel_tl_set:Ne #1
+ { \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
+\cs_new_protected:Npn \str_gput_left:Nn #1#2
+ {
+ \__kernel_tl_gset:Ne #1
+ { \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
+\cs_new_protected:Npn \str_put_right:Nn #1#2
+ {
+ \__kernel_tl_set:Ne #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
+ }
+\cs_new_protected:Npn \str_gput_right:Nn #1#2
+ {
+ \__kernel_tl_gset:Ne #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
+ }
+\cs_generate_variant:Nn \str_set:Nn { NV , Ne , Nx , c , cV , ce , cx }
+\cs_generate_variant:Nn \str_gset:Nn { NV , Ne , Nx , c , cV , ce , cx }
+\cs_generate_variant:Nn \str_const:Nn { NV , Ne , Nx , c , cV , ce , cx }
+\cs_generate_variant:Nn \str_put_left:Nn { NV , Ne , Nx , c , cV , ce , cx }
+\cs_generate_variant:Nn \str_gput_left:Nn { NV , Ne , Nx , c , cV , ce , cx }
+\cs_generate_variant:Nn \str_put_right:Nn { NV , Ne , Nx , c , cV , ce , cx }
+\cs_generate_variant:Nn \str_gput_right:Nn { NV , Ne , Nx , c , cV , ce , cx }
% \end{macrocode}
% \end{macro}
%
@@ -2158,6 +2176,13 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\c_empty_str}
+% An empty string is simply an empty token list.
+% \begin{macrocode}
+\cs_new_eq:NN \c_empty_str \c_empty_tl
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\l_tmpa_str, \l_tmpb_str, \g_tmpa_str, \g_tmpb_str}
% Scratch strings.
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index a2ea8f0347..4d360a1d9c 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index cf9ac905a5..9f8d8733c8 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-11-09}
+\date{Released 2023-12-08}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 878424e3c5..9997a20d32 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index 06ffe161f3..db3fab7f7b 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-11-09}
+\date{Released 2023-12-08}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index fc041a25d8..a268294772 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -260,6 +260,11 @@
% \meta{shell command}. The \cs{sys_get_shell:nnNTF} conditional
% inserts the \meta{true code} if the shell is available and no quote is
% detected, and the \meta{false code} otherwise.
+%
+% \emph{Note}: It is not possible to tell from \TeX{} if a command is allowed
+% in restricted shell escape. If restricted escape is enabled, the
+% \texttt{true} branch is taken: if the command is forbidden at this stage, a
+% low-level \TeX{} error will arise.
% \end{function}
%
% \begin{variable}[added = 2017-05-27]{\c_sys_shell_escape_int}
@@ -861,11 +866,11 @@ end
%
% \subsection{Dynamic (every job) code}
%
-% \begin{macro}{\sys_everyjob:}
+% \begin{macro}{\__kernel_sys_everyjob:}
% \begin{macro}{\@@_everyjob:n}
% \begin{variable}{\g_@@_everyjob_tl}
% \begin{macrocode}
-\cs_new_protected:Npn \sys_everyjob:
+\cs_new_protected:Npn \__kernel_sys_everyjob:
{
\tl_use:N \g_@@_everyjob_tl
\tl_gclear:N \g_@@_everyjob_tl
@@ -1088,7 +1093,7 @@ end
% \begin{macrocode}
\cs_new_protected:Npn \sys_finalise:
{
- \sys_everyjob:
+ \__kernel_sys_everyjob:
\tl_use:N \g_@@_finalise_tl
\tl_gclear:N \g_@@_finalise_tl
}
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index cf6e798b2e..3e672dc8d9 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index 810de29978..e3277b964e 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-11-09}
+\date{Released 2023-12-08}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index 9f4c672993..5651243cd9 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1634,7 +1634,7 @@
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnN}
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnn}
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnnw}
-% There is one things that need special treatment at start start of
+% There is one things that need special treatment at the start of
% words in Greek. For an isolated accent \emph{eta},
% which is handled by seeing if we have exactly one of the affected
% codepoints followed by a space or brace group.
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx
index ea2559748e..f728915387 100644
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -368,7 +368,7 @@
% \end{macrocode}
% Hangul needs additional treatment. First we have to deal with
% the start-of-Hangul position: output what we had up to now, then
-% move the the specialist handler. The idea here is to pick off the
+% move the specialist handler. The idea here is to pick off the
% different codepoint types one at a time, tracking what else can be
% considered at each stage until we hit the end of the viable types.
% Other than that, we just keep building up the Hangul codepoints
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 5d7bb6ef51..8c955419ce 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index abf85a7ac2..85eedfab13 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -794,7 +794,7 @@
%
% \subsection{Configuration variables}
%
-% \begin{variable}{\l_text_accents_tl, \l_text_letterlike_tl}
+% \begin{variable}[deprecated]{\l_text_accents_tl, \l_text_letterlike_tl}
% Used to be used for excluding these ideas from expansion: now deprecated.
% \begin{macrocode}
\tl_new:N \l_text_accents_tl
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index ca3b2a1ff1..746b68c2f0 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-build.dtx b/macros/latex/contrib/l3kernel/l3tl-build.dtx
index 65b9566d6a..43b08d902d 100644
--- a/macros/latex/contrib/l3kernel/l3tl-build.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index cf506b9fec..0f38c95aa7 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -295,7 +295,11 @@
% or \cs{str_if_eq:nnTF} if category codes are not important.
% \end{function}
%
-% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
+% \begin{function}[TF]
+% {
+% \tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:No,
+% \tl_if_in:cn, \tl_if_in:cV, \tl_if_in:co
+% }
% \begin{syntax}
% \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -307,7 +311,10 @@
% \end{function}
%
% \begin{function}[TF]
-% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:nV, \tl_if_in:on, \tl_if_in:no}
+% {
+% \tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:VV, \tl_if_in:on, \tl_if_in:oo,
+% \tl_if_in:nV, \tl_if_in:no
+% }
% \begin{syntax}
% \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -367,7 +374,10 @@
% \subsection{Testing the first token}
%
% \begin{function}[updated = 2012-07-09, EXP, pTF]
-% {\tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:oN}
+% {
+% \tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:VN,
+% \tl_if_head_eq_catcode:eN, \tl_if_head_eq_catcode:oN
+% }
% \begin{syntax}
% \cs{tl_if_head_eq_catcode_p:nN} \Arg{token list} \meta{test token}
% \cs{tl_if_head_eq_catcode:nNTF} \Arg{token list} \meta{test token}
@@ -379,7 +389,10 @@
% \end{function}
%
% \begin{function}[updated = 2012-07-09, EXP, pTF]
-% {\tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:fN}
+% {
+% \tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:VN,
+% \tl_if_head_eq_charcode:eN, \tl_if_head_eq_charcode:fN
+% }
% \begin{syntax}
% \cs{tl_if_head_eq_charcode_p:nN} \Arg{token list} \meta{test token}
% \cs{tl_if_head_eq_charcode:nNTF} \Arg{token list} \meta{test token}
@@ -390,7 +403,11 @@
% \meta{token list} is empty, the test is always \texttt{false}.
% \end{function}
%
-% \begin{function}[updated = 2012-07-09, EXP, pTF]{\tl_if_head_eq_meaning:nN}
+% \begin{function}[updated = 2012-07-09, EXP, pTF]
+% {
+% \tl_if_head_eq_meaning:nN, \tl_if_head_eq_meaning:VN,
+% \tl_if_head_eq_meaning:eN
+% }
% \begin{syntax}
% \cs{tl_if_head_eq_meaning_p:nN} \Arg{token list} \meta{test token}
% \cs{tl_if_head_eq_meaning:nNTF} \Arg{token list} \meta{test token}
@@ -516,7 +533,7 @@
% \subsection{Counting and reversing token lists}
%
% \begin{function}[added = 2012-05-13, EXP]
-% {\tl_count:n, \tl_count:V, \tl_count:o}
+% {\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
% \begin{syntax}
% \cs{tl_count:n} \Arg{tokens}
% \end{syntax}
@@ -1352,8 +1369,11 @@
% \tl_const:cn, \tl_const:ce, \tl_const:cx
% }
% Constants are also easy to generate. They use \cs{cs_gset_nopar:Npe} instead
-% of \cs{__kernel_tl_gset:Ne} so that the correct scope checking is applied if
-% \pkg{l3debug} is used.
+% of \cs{__kernel_tl_gset:Ne} so that the correct scope checking for |c|,
+% instead of for |g|, is applied when
+% \cs{debug_on:n} |{ check-declarations }| is used.
+% Constant assignment functions are patched specially in \pkg{l3debug} to
+% apply such checks.
% \begin{macrocode}
\cs_new_protected:Npn \tl_const:Nn #1#2
{
@@ -2429,12 +2449,16 @@
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_eq:nn
- { nV , ne , nx , e , ee , x , xx }
+ { nV , ne , nx , V, e , ee , x , xx }
{ TF , T , F }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
+% \begin{macro}[TF]
+% {
+% \tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:No,
+% \tl_if_in:cn, \tl_if_in:cV, \tl_if_in:co
+% }
% See \cs{tl_if_in:nnTF} for further comments. Here we simply
% expand the token list variable and pass it to \cs{tl_if_in:nnTF}.
% \begin{macrocode}
@@ -2442,11 +2466,15 @@
\cs_new_protected:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF }
\cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
\prg_generate_conditional_variant:Nnn \tl_if_in:Nn
- { NV , c , cV } { T , F , TF }
+ { NV , No , c , cV , co } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:nV, \tl_if_in:no}
+% \begin{macro}[TF]
+% {
+% \tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:VV, \tl_if_in:on, \tl_if_in:oo,
+% \tl_if_in:nV, \tl_if_in:no
+% }
% Once more, the test relies on the emptiness test for robustness.
% The function \cs{@@_tmp:w} removes tokens until the first occurrence
% of |#2|. If this does not appear in |#1|, then the final |#2| is removed,
@@ -2476,7 +2504,7 @@
\if_false: } \fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_in:nn
- { V , o , nV , no } { T , F , TF }
+ { V , VV , o , oo , nV , no } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
@@ -2756,7 +2784,7 @@
%
% \subsection{Working with the contents of token lists}
%
-% \begin{macro}{\tl_count:n, \tl_count:V, \tl_count:o}
+% \begin{macro}{\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
% \begin{macro}{\tl_count:N, \tl_count:c}
% \begin{macro}{\@@_count:n}
% Count number of elements within a token list or token list
@@ -2776,7 +2804,7 @@
{ 0 \tl_map_function:NN #1 \@@_count:n }
}
\cs_new:Npn \@@_count:n #1 { + 1 }
-\cs_generate_variant:Nn \tl_count:n { V , o }
+\cs_generate_variant:Nn \tl_count:n { V , v , e , o }
\cs_generate_variant:Nn \tl_count:N { c }
% \end{macrocode}
% \end{macro}
@@ -3014,11 +3042,21 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[pTF]{\tl_if_head_eq_meaning:nN}
-% \begin{macro}[pTF]{\tl_if_head_eq_charcode:nN}
-% \begin{macro}[pTF]{\tl_if_head_eq_charcode:fN}
-% \begin{macro}[pTF]{\tl_if_head_eq_catcode:nN}
-% \begin{macro}[pTF]{\tl_if_head_eq_catcode:oN}
+% \begin{macro}[pTF]
+% {
+% \tl_if_head_eq_meaning:nN, \tl_if_head_eq_meaning:VN,
+% \tl_if_head_eq_meaning:eN
+% }
+% \begin{macro}[pTF]
+% {
+% \tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:VN,
+% \tl_if_head_eq_charcode:eN, \tl_if_head_eq_charcode:fN
+% }
+% \begin{macro}[pTF]
+% {
+% \tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:VN,
+% \tl_if_head_eq_catcode:eN, \tl_if_head_eq_catcode:oN
+% }
% \begin{macro}[EXP]{\@@_head_exp_not:w}
% \begin{macro}[EXP]{\@@_if_head_eq_empty_arg:w}
% Accessing the first token of a token list is tricky in three cases:
@@ -3057,7 +3095,7 @@
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN
- { f } { p , TF , T , F }
+ { V , e , f } { p , TF , T , F }
% \end{macrocode}
% For \cs{tl_if_head_eq_catcode:nN}, again we detect special cases
% with a \cs{tl_if_head_is_N_type:n}. Then we need to test if the
@@ -3084,7 +3122,7 @@
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_head_eq_catcode:nN
- { o } { p , TF , T , F }
+ { V , e , o } { p , TF , T , F }
% \end{macrocode}
% For \cs{tl_if_head_eq_meaning:nN}, again, detect special cases. In
% the normal case, use \cs{tl_head:w}, with no \cs{exp_not:N} this
@@ -3105,6 +3143,8 @@
\@@_if_head_eq_meaning_special:nN
{#1} #2
}
+\prg_generate_conditional_variant:Nnn \tl_if_head_eq_meaning:nN
+ { V , e } { p , TF , T , F }
\cs_new:Npn \@@_if_head_eq_meaning_normal:nN #1 #2
{
\exp_after:wN \if_meaning:w
@@ -3158,8 +3198,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \begin{macro}[pTF]{\tl_if_head_is_N_type:n}
% \begin{macro}[EXP]
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 4e7e1c4745..bf882c57e4 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -1132,9 +1132,9 @@
% \item Some frozen tokens can only be accessed in interactive
% sessions: |\cr|, |\right|, |\endgroup|, |\fi|, |\inaccessible|.
% \item In \LuaTeX{}, there is also the strange case of \enquote{bytes}
-% |^^^^^^1100|$x$$y$ where $x,y$ are any two lowercase hexadecimal
+% |^^^^^^1100|$xy$ where $x,y$ are any two lowercase hexadecimal
% digits, so that the hexadecimal number ranges from
-% $"\text{110000}=1114112$ to~$"\text{1100ff}=1114367$. These are
+% |"|$11\,0000=1\,114\,112$ to~|"|$110\,0\mathrm{ff}=1\,114\,367$. These are
% used to output individual bytes to files, rather than UTF-8. For
% the purposes of token comparisons they behave like non-expandable
% primitive control sequences (\emph{not characters}) whose
@@ -1219,28 +1219,6 @@
% characters at the start of the argument are \emph{not} ignored in this
% case (and they prevent brace-stripping).
%
-% \section{Deprecated functions}
-%
-% \begin{function}[added = 2020-01-09, EXP]
-% {
-% \char_lowercase:N, \char_uppercase:N,
-% \char_titlecase:N, \char_foldcase:N,
-% \char_str_lowercase:N, \char_str_uppercase:N,
-% \char_str_titlecase:N, \char_str_foldcase:N
-% }
-% \begin{syntax}
-% \cs{char_lowercase:N} \meta{char}
-% \end{syntax}
-% Converts the \meta{char} to the equivalent case-changed character
-% as detailed by the function name (see \cs{str_foldcase:n}
-% and \cs{text_titlecase_all:n} for details of these terms). The case mapping
-% is carried out with no context-dependence (\emph{cf.}~\cs{text_uppercase:n},
-% \emph{etc.}) The \texttt{str} versions always generate \enquote{other}
-% (category code $12$) characters, whilst the standard versions generate
-% characters with the category code of the \meta{char} (i.e.~only
-% the character code changes).
-% \end{function}
-%
% \end{documentation}
%
% \begin{implementation}
@@ -1688,160 +1666,6 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]
-% {
-% \char_lowercase:N, \char_uppercase:N,
-% \char_titlecase:N, \char_foldcase:N
-% }
-% \begin{macro}[EXP]{\@@_change_case:nN}
-% \begin{macro}[EXP]{\@@_change_case:nnnN}
-% \begin{macro}[EXP]{\@@_change_case_auxi:nN, \@@_change_case_auxii:nN}
-% \begin{macro}[EXP]{\@@_change_case_catcode:N}
-% \begin{macro}[EXP]
-% {
-% \char_str_lowercase:N, \char_str_uppercase:N,
-% \char_str_titlecase:N, \char_str_foldcase:N
-% }
-% \begin{macro}[EXP]{\@@_str_change_case:nN, \@@_str_change_case_aux:nN}
-% \begin{macro}[EXP]{\@@_str_change_case:nnnN}
-% \begin{macro}[EXP]{\@@_str_change_case:n}
-% To ensure that the category codes produced are predictable, every character
-% is re-generated even if it is otherwise unchanged.
-% \begin{macrocode}
-\cs_new:Npn \char_lowercase:N
- { \@@_change_case:nN { lowercase } }
-\cs_new:Npn \char_uppercase:N
- { \@@_change_case:nN { uppercase } }
-\cs_new:Npn \char_titlecase:N
- { \@@_change_case:nN { titlecase } }
-\cs_new:Npn \char_foldcase:N
- { \@@_change_case:nN { casefold } }
-\cs_new:Npn \@@_change_case:nN #1#2
- {
- \int_compare:nNnTF {`#2} = { `\ }
- { ~ }
- {
- \exp_args:Ne \@@_change_case_auxi:nN
- { \__kernel_codepoint_case:nn {#1} {`#2} } #2
- }
- }
-\cs_new:Npn \@@_change_case_auxi:nN #1#2
- { \use:e { \@@_change_case:nnnN #1 #2 } }
-\cs_new:Npn \@@_change_case:nnnN #1#2#3#4
- {
- \int_compare:nNnTF {#1} = {`#4}
- { \exp_not:n {#4} }
- {
- \@@_change_case_auxii:nN {#1} {#4}
- \tl_if_blank:nF {#2}
- {
- \@@_change_case_auxii:nN {#2} {#4}
- \tl_if_blank:nF {#3}
- { \@@_change_case_auxii:nN {#3} {#4} }
- }
- }
- }
-\cs_new:Npn \@@_change_case_auxii:nN #1#2
- {
- \char_generate:nn {#1}
- { \@@_change_case_catcode:N #2 }
- }
-\bool_lazy_or:nnF
- { \sys_if_engine_luatex_p: }
- { \sys_if_engine_xetex_p: }
- {
- \cs_gset:Npn \@@_change_case_auxii:nN #1#2
- {
- \int_compare:nNnTF {#1} < { "80 }
- {
- \char_generate:nn {#1}
- { \@@_change_case_catcode:N #2 }
- }
- { \exp_not:n {#2} }
- }
- }
-\cs_new:Npn \@@_change_case_catcode:N #1
- {
- \if_catcode:w \exp_not:N #1 \c_math_toggle_token
- 3
- \else:
- \if_catcode:w \exp_not:N #1 \c_alignment_token
- 4
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_superscript_token
- 7
- \else:
- \if_catcode:w \exp_not:N #1 \c_math_subscript_token
- 8
- \else:
- \if_catcode:w \exp_not:N #1 \c_space_token
- 10
- \else:
- \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
- 11
- \else:
- \if_catcode:w \exp_not:N #1 \c_catcode_other_token
- 12
- \else:
- 13
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- \fi:
- }
-% \end{macrocode}
-% Same story for the string version, except category code is easier
-% to follow. This of course makes this version faster.
-% \begin{macrocode}
-\cs_new:Npn \char_str_lowercase:N
- { \@@_str_change_case:nN { lowercase } }
-\cs_new:Npn \char_str_uppercase:N
- { \@@_str_change_case:nN { uppercase } }
-\cs_new:Npn \char_str_titlecase:N
- { \@@_str_change_case:nN { titlecase } }
-\cs_new:Npn \char_str_foldcase:N
- { \@@_str_change_case:nN { casefold } }
-\cs_new:Npn \@@_str_change_case:nN #1#2
- {
- \int_compare:nNnTF {`#2} = { `\ }
- { ~ }
- {
- \exp_args:Ne \@@_str_change_case_aux:nN
- { \__kernel_codepoint_case:nn {#1} {`#2} } #2
- }
- }
-\cs_new:Npn \@@_str_change_case_aux:nN #1#2
- { \use:e { \@@_str_change_case:nnnN #1 #2 } }
-\cs_new:Npn \@@_str_change_case:nnnN #1#2#3#4
- {
- \int_compare:nNnTF {#1} = {`#4}
- { \tl_to_str:n {#4} }
- {
- \@@_str_change_case:n {#1}
- \tl_if_blank:nF {#2}
- {
- \@@_str_change_case:n {#2}
- \tl_if_blank:nF {#3}
- { \@@_str_change_case:n {#3} }
- }
- }
- }
-\cs_new:Npn \@@_str_change_case:n #1
- { \char_generate:nn {#1} { 12 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
% \begin{variable}{\c_catcode_active_space_tl}
% While \cs{char_generate:nn} can produce active characters in some
% engines it cannot in general. It would be possible to simply change
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index 1cbc34267d..adab2aa934 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-11-09}
+% \date{Released 2023-12-08}
%
% \maketitle
%
@@ -857,7 +857,7 @@
\fi:
}
% \end{macrocode}
-% Here, |#4| can have have a trailing space, so we tidy up a bit at the cost of
+% Here, |#4| can have a trailing space, so we tidy up a bit at the cost of
% speed for these small number of cases it applies to.
% \begin{macrocode}
\cs_set_protected:Npn \@@_data_auxii:w #1 ~ #2 ~ #3 ~ #4 \q_stop
@@ -922,7 +922,7 @@
% \begin{macro}[EXP]{\@@_case:nnn}
% \begin{macro}[EXP]
% {\@@_uppercase:n, \@@_lowercase:n, \@@_titlecase:n, \@@_casefold:n}
-% \begin{macro}[EXP]{\@_case:nn}
+% \begin{macro}[EXP]{\@@_case:nn}
% With the core data files loaded, there is now a need to provide access to
% this information for other modules. That is done here such that case
% folding can also be covered. At this level, all that needs to be returned
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index 735e30fedd..f46549de13 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 40881aaf9c..0df48640b4 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -57,7 +57,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-11-09}
+\date{Released 2023-12-08}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/contrib/l3kernel/source3body.tex
index b469621d95..8066b02fda 100644
--- a/macros/latex/contrib/l3kernel/source3body.tex
+++ b/macros/latex/contrib/l3kernel/source3body.tex
@@ -272,15 +272,7 @@ following argument specifiers:
dependent and their name can change without warning, thus their
use is \emph{strongly discouraged} in package code: programmers
should instead use the interfaces documented in
- \href{interface3.pdf}{interface3.pdf}%^^A
- \footnote{If a primitive offers a functionality not yet in the
- kernel, programmers and users are encouraged to write to the
- \texttt{LaTeX-L} mailing list
- (\url{mailto:LATEX-L@listserv.uni-heidelberg.de}) describing
- their use-case and intended behaviour, so that a possible
- interface can be discussed. Temporarily, while an interface is
- not provided, programmers may use the procedure described in the
- \href{l3styleguide.pdf}{l3styleguide.pdf}.}.
+ \href{interface3.pdf}{interface3.pdf}.
\end{description}
Notice that the argument specifier describes how the argument is
processed prior to being passed to the underlying function. For example,
@@ -306,7 +298,9 @@ function, typically starting with the module\footnote{The module names are
\texttt{\string\l_int_tmpa_int} would be very unreadable.} name
and then a descriptive part.
Variables end with a short identifier to show the variable type:
-\begin{description}
+\begin{description}%
+ \item[\texttt{bitset}] a set of bits (a string made up of a series of \texttt{0}
+ and \texttt{1} tokens that are accessed by position).
\item[\texttt{clist}] Comma separated list.
\item[\texttt{dim}] \enquote{Rigid} lengths.
\item[\texttt{fp}] Floating-point values;
@@ -590,6 +584,7 @@ used on top of \LaTeXe{} if \tn{outer} tokens are used in the arguments.
\ExplSyntaxOff
\DocInput{l3fparray.dtx}
+\DocInput{l3bitset.dtx}
\DocInput{l3cctab.dtx}
\part{Text manipulation}
diff --git a/macros/latex/contrib/onedown/examples/Bidding.tex b/macros/latex/contrib/onedown/Examples/Bidding.tex
index 18ca0f7c3c..18ca0f7c3c 100644
--- a/macros/latex/contrib/onedown/examples/Bidding.tex
+++ b/macros/latex/contrib/onedown/Examples/Bidding.tex
diff --git a/macros/latex/contrib/onedown/examples/CardSymbols.tex b/macros/latex/contrib/onedown/Examples/CardSymbols.tex
index 5ecca8a55d..5ecca8a55d 100644
--- a/macros/latex/contrib/onedown/examples/CardSymbols.tex
+++ b/macros/latex/contrib/onedown/Examples/CardSymbols.tex
diff --git a/macros/latex/contrib/onedown/examples/Compass.tex b/macros/latex/contrib/onedown/Examples/Compass.tex
index cbb19739b5..cbb19739b5 100644
--- a/macros/latex/contrib/onedown/examples/Compass.tex
+++ b/macros/latex/contrib/onedown/Examples/Compass.tex
diff --git a/macros/latex/contrib/onedown/examples/ExpertQuiz.tex b/macros/latex/contrib/onedown/Examples/ExpertQuiz.tex
index ad52dc9b29..ad52dc9b29 100644
--- a/macros/latex/contrib/onedown/examples/ExpertQuiz.tex
+++ b/macros/latex/contrib/onedown/Examples/ExpertQuiz.tex
diff --git a/macros/latex/contrib/onedown/Examples/FancyColors.tex b/macros/latex/contrib/onedown/Examples/FancyColors.tex
new file mode 100644
index 0000000000..4dfaa12562
--- /dev/null
+++ b/macros/latex/contrib/onedown/Examples/FancyColors.tex
@@ -0,0 +1,49 @@
+\documentclass[onedown-examples]{subfiles}
+
+\begin{document}
+\FancyColors
+\begin{HBox}{Fancy colors for card symbols\hfill File: \FileName}
+Due to the definition of the card symbols, a simple redefinition like:\\
+\verb|\let\MyClub\Cl|\\
+\verb|\renewcommand{\Cl}{%|\\
+\verb|\textcolor{green}{\MyClub}}|\\
+will \textbf{not} change the color of the symbol.
+For details refer to the \OneDown manual, section 6.2.1 \emph{Suit Symbols}.
+
+Instead put in your preamble e.g. this code to get \textcolor{green}{green}
+clubs, \textcolor{orange}{orange} diamonds, \textcolor{red}{red} hearts and
+\textcolor{blue}{blue} spades.
+\\[\baselineskip]
+\verb|\makeatletter|\\
+\verb|\renewrobustcmd\Cl{%|\\
+\verb|\textcolor{green}%|\\
+\verb|{\,[0.3]\ensuremath{%|\\
+\verb|\ODw@clubsuit}}\xspace}%|\\[2mm]
+\verb|\renewrobustcmd\Di{%|\\
+\verb|\textcolor{orange}%|\\
+\verb|{\,[0.3]\ensuremath{%|\\
+\verb|\ODw@vardiamond}}\xspace}%|\\[2mm]
+\verb|\renewrobustcmd\He{%|\\
+\verb|\textcolor{red}%|\\
+\verb|{\,[0.3]\ensuremath{%|\\
+\verb|\ODw@varheart}}\xspace}%|\\[2mm]
+\verb|\renewrobustcmd\Sp{%|\\
+\verb|\textcolor{blue}%|\\
+\verb|{\,[0.3]\ensuremath{%|\\
+\verb|\ODw@spadesuit}}\xspace}%|\\
+\verb|\makeatother|
+\\[\baselineskip]
+Now you will get yor own fancy colors:
+
+1\Cl, 2\Di, 3\He, 4\Sp\\
+
+\setdefaults{bidlong=off,bidfirst=N}
+\begin{bidding}[t]
+1C & 1D & 1H & 1S \\
+1N & X & p & p \\
+R & P \\
+\end{bidding}
+
+\end{HBox}
+\end{document}
+
diff --git a/macros/latex/contrib/onedown/examples/Fontsizes.tex b/macros/latex/contrib/onedown/Examples/Fontsizes.tex
index 24f4fd4ced..24f4fd4ced 100644
--- a/macros/latex/contrib/onedown/examples/Fontsizes.tex
+++ b/macros/latex/contrib/onedown/Examples/Fontsizes.tex
diff --git a/macros/latex/contrib/onedown/examples/Hands.tex b/macros/latex/contrib/onedown/Examples/Hands.tex
index f40721a3a0..f40721a3a0 100644
--- a/macros/latex/contrib/onedown/examples/Hands.tex
+++ b/macros/latex/contrib/onedown/Examples/Hands.tex
diff --git a/macros/latex/contrib/onedown/examples/Languages.tex b/macros/latex/contrib/onedown/Examples/Languages.tex
index 0e5d0e6702..0e5d0e6702 100644
--- a/macros/latex/contrib/onedown/examples/Languages.tex
+++ b/macros/latex/contrib/onedown/Examples/Languages.tex
diff --git a/macros/latex/contrib/onedown/examples/Legends.tex b/macros/latex/contrib/onedown/Examples/Legends.tex
index 9d9f603eed..9d9f603eed 100644
--- a/macros/latex/contrib/onedown/examples/Legends.tex
+++ b/macros/latex/contrib/onedown/Examples/Legends.tex
diff --git a/macros/latex/contrib/onedown/examples/Play.tex b/macros/latex/contrib/onedown/Examples/Play.tex
index 7c0a157d3d..7c0a157d3d 100644
--- a/macros/latex/contrib/onedown/examples/Play.tex
+++ b/macros/latex/contrib/onedown/Examples/Play.tex
diff --git a/macros/latex/contrib/onedown/examples/Select-Hands.tex b/macros/latex/contrib/onedown/Examples/Select-Hands.tex
index 51260bfb31..51260bfb31 100644
--- a/macros/latex/contrib/onedown/examples/Select-Hands.tex
+++ b/macros/latex/contrib/onedown/Examples/Select-Hands.tex
diff --git a/macros/latex/contrib/onedown/examples/Suits.tex b/macros/latex/contrib/onedown/Examples/Suits.tex
index 457ab27332..457ab27332 100644
--- a/macros/latex/contrib/onedown/examples/Suits.tex
+++ b/macros/latex/contrib/onedown/Examples/Suits.tex
diff --git a/macros/latex/contrib/onedown/examples/Wrapping.tex b/macros/latex/contrib/onedown/Examples/Wrapping.tex
index 753eea7685..753eea7685 100644
--- a/macros/latex/contrib/onedown/examples/Wrapping.tex
+++ b/macros/latex/contrib/onedown/Examples/Wrapping.tex
diff --git a/macros/latex/contrib/onedown/examples/bidAll.tex b/macros/latex/contrib/onedown/Examples/bidAll.tex
index 24060a5263..24060a5263 100644
--- a/macros/latex/contrib/onedown/examples/bidAll.tex
+++ b/macros/latex/contrib/onedown/Examples/bidAll.tex
diff --git a/macros/latex/contrib/onedown/examples/bidEW.tex b/macros/latex/contrib/onedown/Examples/bidEW.tex
index e91d8ff5f8..e91d8ff5f8 100644
--- a/macros/latex/contrib/onedown/examples/bidEW.tex
+++ b/macros/latex/contrib/onedown/Examples/bidEW.tex
diff --git a/macros/latex/contrib/onedown/examples/bidNE.tex b/macros/latex/contrib/onedown/Examples/bidNE.tex
index 6e53b8fccd..6e53b8fccd 100644
--- a/macros/latex/contrib/onedown/examples/bidNE.tex
+++ b/macros/latex/contrib/onedown/Examples/bidNE.tex
diff --git a/macros/latex/contrib/onedown/examples/bidNS.tex b/macros/latex/contrib/onedown/Examples/bidNS.tex
index ca00038328..ca00038328 100644
--- a/macros/latex/contrib/onedown/examples/bidNS.tex
+++ b/macros/latex/contrib/onedown/Examples/bidNS.tex
diff --git a/macros/latex/contrib/onedown/examples/bidNW.tex b/macros/latex/contrib/onedown/Examples/bidNW.tex
index e107d0c44e..e107d0c44e 100644
--- a/macros/latex/contrib/onedown/examples/bidNW.tex
+++ b/macros/latex/contrib/onedown/Examples/bidNW.tex
diff --git a/macros/latex/contrib/onedown/Examples/onedown-examples.pdf b/macros/latex/contrib/onedown/Examples/onedown-examples.pdf
new file mode 100644
index 0000000000..dddbf20904
--- /dev/null
+++ b/macros/latex/contrib/onedown/Examples/onedown-examples.pdf
Binary files differ
diff --git a/macros/latex/contrib/onedown/examples/onedown-examples.tex b/macros/latex/contrib/onedown/Examples/onedown-examples.tex
index 12a00a6e24..4923e36421 100644
--- a/macros/latex/contrib/onedown/examples/onedown-examples.tex
+++ b/macros/latex/contrib/onedown/Examples/onedown-examples.tex
@@ -1,6 +1,7 @@
%%
%% onedown-examples.tex
-%% Oct 04, 2019
+%% Dec 06, 2023 Added example Fancy Colors and language italian
+%% Oct 04, 2019 Initial version
%% Requires the onedown bundle
%% Part of the OneDown bundle (mirror.ctan.org/onedown)
%% author: J. Wiersma
@@ -15,6 +16,8 @@
dutch,%
french,%
german,%
+ ngerman,%
+ italian,%
norsk,%
spanish,%
swedish,%
@@ -30,10 +33,8 @@
\usepackage{subfiles}% can compile stand-alone/combined
\usepackage{babel}%
-%\usepackage[mono=false]{libertine}% verbatim needs option mono=false
-% libertine screws verbatim, at least I don't know how to handle that
-\usepackage{onedown}% our own style to set bridge stuff
-\usepackage[most]{tcolorbox}% show examples with code
+\usepackage{onedown}% our own style to set bridge stuff
+\usepackage[most]{tcolorbox}% show examples with code
%\usepackage{tcolorbox}% show examples with code
\usepackage{enumitem}%
\usepackage{wrapfig}%
@@ -50,7 +51,7 @@
% To get a PDF for printing on a monochrome printer
% comment out these commands
%
-\setdefaults{colors=4A}
+%\setdefaults{colors=mono}
%-------------
% set the look of the example boxes
%
@@ -89,7 +90,22 @@
\def\Xfer#1{\ODw@Xfer{#1}}
\makeatother
-
+%
+% Define macro FancyColors, that set the colors to green, orange, red and blue
+% for the card symbols ♣, ♦, ♥ and ♠ resp. as used in example Fancy Colors.
+%
+\makeatletter
+\def\FancyColors{%
+\renewrobustcmd\Cl{\textcolor{green}%
+{\,[0.3]\ensuremath{\ODw@clubsuit}}\xspace}%
+\renewrobustcmd\Di{\textcolor{orange}%
+{\,[0.3]\ensuremath{\ODw@vardiamond}}\xspace}%
+\renewrobustcmd\He{\textcolor{red}%
+{\,[0.3]\ensuremath{\ODw@varheart}}\xspace}%
+\renewrobustcmd\Sp{\textcolor{blue}%
+{\,[0.3]\ensuremath{\ODw@spadesuit}}\xspace}%
+}%FancyColors
+\makeatother
\usepackage[pdfencoding=auto]{hyperref}
\hypersetup{%
@@ -119,7 +135,8 @@
% pdflatex '\AtBeginDocument{\def\ExLang{YourLanguage}}\input{onedown-ref.tex}'
% you'll get the onedown commands expansions in YourLanguage
% YourLanguage can be any language out of:
-% danish, dutch, english, french, german, norsk, spanish, swedish, turkish
+% danish, dutch, english, french, (n)german, italian, norsk, spanish, swedish,
+% turkish
%
\expandafter\selectlanguage\expandafter{\ExLang}
\pdfbookmark[1]{Title}{Title}
@@ -129,8 +146,8 @@ use the following command: \newline \texttt{\$ pdflatex \jobname.tex}}
\\[1em]
\normalsize\url{www.ctan.org/pkg/onedown}
}
-\author{J.\,Wiersma\footnote{email: \textsf{jack@schuli-wirsi.de}}}
-\date{29 January 2020 (v0.5)}
+\author{J.\,Wiersma\footnote{email: \textsf{jack46@schuli-wirsi.de}}}
+\date{07 December 2023 (v0.6)}
\maketitle
\section*{Introduction}
@@ -155,10 +172,14 @@ to show the code and the output of it side by side.
The explanatory text is always in the English language. But you can show the
output of all commands in any of the supported languages.\\
-These are: danish, dutch, english, french, german, norsk, spanish, swedish, turkish. \\
-You obtain this output in \emph{YourLanguage} by compiling onedown-ref.tex with: \\[0.2em]
-
-\verb|pdflatex '\AtBeginDocument{\def\ExLang{YourLanguage}}\input{onedown-examples.tex}'|
+These are: danish, dutch, english, french, (n)german, italian, norsk, spanish,
+swedish, turkish. \\
+You obtain this output in \emph{YourLanguage} by compiling onedown-examples.tex with: \\[0.2em]
+
+\verb|pdflatex '\AtBeginDocument{\def\ExLang{YourLanguage}}\input{onedown-examples.tex}'|\\
+Beware: Copy\&Paste may use wrong quotes! Replace them by the right ones from your keybord.
+\\[0.7em]
+\centerline{\textbf{This document shows the commands for the \emph{\languagename}\ language}}
\par\vspace{1\baselineskip}
\setlength\columnseprule{.8pt}% rule between cols
\begin{multicols}{3}[{\centering \textbf{\Large List of Examples}}]
@@ -190,6 +211,7 @@ You obtain this output in \emph{YourLanguage} by compiling onedown-ref.tex with:
\SubFile{ExpertQuiz}
\SubFile{Languages}
\SubFile{Compass}
+\SubFile{FancyColors}
\SubFile{CardSymbols}
\end{document}
diff --git a/macros/latex/contrib/onedown/Examples/onedown-ref.pdf b/macros/latex/contrib/onedown/Examples/onedown-ref.pdf
new file mode 100644
index 0000000000..bd8d90a892
--- /dev/null
+++ b/macros/latex/contrib/onedown/Examples/onedown-ref.pdf
Binary files differ
diff --git a/macros/latex/contrib/onedown/examples/onedown-ref.tex b/macros/latex/contrib/onedown/Examples/onedown-ref.tex
index 95d6918172..e562055cba 100644
--- a/macros/latex/contrib/onedown/examples/onedown-ref.tex
+++ b/macros/latex/contrib/onedown/Examples/onedown-ref.tex
@@ -14,6 +14,8 @@
dutch,%
french,%
german,%
+ ngerman,%
+ italian,%
norsk,%
spanish,%
swedish,%
@@ -32,9 +34,14 @@
\usepackage{shortvrb}
\MakeShortVerb{\|}
\usepackage{enumitem}%
-%\fi
-%
-%%%
+\usepackage[pdfencoding=auto]{hyperref}
+\hypersetup{%
+ pdftitle={onedown-ref.pdf},
+ pdfsubject={Bridge Diagrams, OneDown bundle},
+ pdfkeywords={OneDown Bridge LaTeX},
+ colorlinks,
+ linkcolor=red,
+}
%
\usepackage[Q=yes]{examplep}
\makeatletter
@@ -63,17 +70,27 @@
% pdflatex '\AtBeginDocument{\def\RefLang{YourLanguage}}\input{onedown-ref.tex}'
% you'll get the onedown commands expansions in YourLanguage
% YourLanguage can be any language out of:
-% english, danish, dutch, french, german, norsk, spanish, swedish, turkish
+% english, danish, dutch, french, (n)german, italian, norsk, spanish, % swedish,
+% turkish.
%
\expandafter\selectlanguage\expandafter{\RefLang}
%
\larger
\newgeometry{total={150mm, 265mm},left=25mm,top=15mm}
\pagestyle{empty}
-%\iffalse
-\centerline{\larger\larger\textbf{\OneDown Reference Guide}}
+%
+\title{Reference Guide for the\\\OneDown package%
+\footnote{This file is part of the \OneDown bundle. To generate this file,
+use the following command: \newline \texttt{\$ pdflatex \jobname.tex}}
+\\[1em]
+\normalsize\url{www.ctan.org/pkg/onedown}
+}
+\author{J.\,Wiersma\footnote{email: \textsf{jack46@schuli-wirsi.de}}}
+\date{07 December 2023 (v0.6)}
+\maketitle
+%
\par\vspace{1\baselineskip}\noindent
-Here we show all user commands of the package |onedown| in alphabetical
+Here we show all \textbf{user commands} of the package |onedown| in alphabetical
order. If we only show the ouput that a command produces, then this output
is shown directly behind the command on the same line. If a description of
the command is given, then this description starts on a new line. Optional
@@ -84,10 +101,12 @@ as:
\quad|\macro|\Oarg{*!}|: \macro, \macro*, \macro!, \macro*!|\\
The explanatory text is always in the English language. But you can show the output of all commands
in any of the supported languages.\\
-These are: english, danish, dutch, french, german, norsk, spanish, swedish, turkish. \\
+These are: english, danish, dutch, french, (n)german, italian, norsk, spanish,
+swedish, turkish. \\
You obtain this output in \emph{YourLanguage} by compiling onedown-ref.tex with: \\[0.5em]
%
-\verb|pdflatex '\AtBeginDocument{\def\RefLang{YourLanguage}}\input{onedown-ref.tex}'|
+\verb|pdflatex '\AtBeginDocument{\def\RefLang{YourLanguage}}\input{onedown-ref.tex}'|\\
+Beware: Copy\&Paste may use wrong quotes! Replace them by the right ones from your keybord.
\\[0.7em]
\centerline{\textbf{This document shows the commands for the \emph{\languagename}\ language}}
\begin{description}[itemsep=-0.3em]
diff --git a/macros/latex/contrib/onedown/examples/showAll.tex b/macros/latex/contrib/onedown/Examples/showAll.tex
index e7571f6d3c..e7571f6d3c 100644
--- a/macros/latex/contrib/onedown/examples/showAll.tex
+++ b/macros/latex/contrib/onedown/Examples/showAll.tex
diff --git a/macros/latex/contrib/onedown/examples/showNS-align.tex b/macros/latex/contrib/onedown/Examples/showNS-align.tex
index 47234eb1d0..47234eb1d0 100644
--- a/macros/latex/contrib/onedown/examples/showNS-align.tex
+++ b/macros/latex/contrib/onedown/Examples/showNS-align.tex
diff --git a/macros/latex/contrib/onedown/examples/showNS-warn-I.tex b/macros/latex/contrib/onedown/Examples/showNS-warn-I.tex
index a24c9a0066..a24c9a0066 100644
--- a/macros/latex/contrib/onedown/examples/showNS-warn-I.tex
+++ b/macros/latex/contrib/onedown/Examples/showNS-warn-I.tex
diff --git a/macros/latex/contrib/onedown/examples/showNS-warn-II.tex b/macros/latex/contrib/onedown/Examples/showNS-warn-II.tex
index 516e959005..c7e6475d63 100644
--- a/macros/latex/contrib/onedown/examples/showNS-warn-II.tex
+++ b/macros/latex/contrib/onedown/Examples/showNS-warn-II.tex
@@ -26,7 +26,7 @@ Now warnings are switched off explicitly and the size is reset by calling
\end{HBox}
%
\vfill
-|\newgame| clears the hands. A hand with no cards at all is completelly
+|\newgame| clears the hands. A hand with no cards at all is completely
suppressed, so we see only the compass. With |\setdefaults{compmid=text}|
we can write 'text' in the middle of the compass. We enlarged the compass,
so you can see that it \emph{is} on the vertical line through the mids of
diff --git a/macros/latex/contrib/onedown/ODw-French.dict b/macros/latex/contrib/onedown/ODw-French.dict
index 4f75bfe53f..3a9f502654 100644
--- a/macros/latex/contrib/onedown/ODw-French.dict
+++ b/macros/latex/contrib/onedown/ODw-French.dict
@@ -68,7 +68,7 @@
\providetranslation{game forcing-(ODw)}{forcing de manche}
\providetranslation{Game Forcing-(ODw)}{Forcing de Manche}
\providetranslation{GF-(ODw)}{FM}
-\providetranslation{gf-(ODw)}{gf}
+\providetranslation{gf-(ODw)}{fm}
\providetranslation{hand-(ODw)}{main}
\providetranslation{Hand-(ODw)}{Main}
\providetranslation{hcp-(ODw)}{h}
diff --git a/macros/latex/contrib/onedown/ODw-Italian.dict b/macros/latex/contrib/onedown/ODw-Italian.dict
new file mode 100644
index 0000000000..016f7d01a3
--- /dev/null
+++ b/macros/latex/contrib/onedown/ODw-Italian.dict
@@ -0,0 +1,174 @@
+% this is file ODw-Italian.dict from the OneDown bundle
+% made available by Nicola Lombardi
+%
+% Entries with a "!" denote an abreviated form
+%
+% retrieve with e.g. \translation{dealer-(ODw)} to get dealer
+%
+\ProvidesDictionary{ODw}{Italian}[V0.2-2024/12/06]
+
+\providetranslation{1st-(ODw)}{1.}
+\providetranslation{2nd-(ODw)}{2.}
+\providetranslation{3rd-(ODw)}{3.}
+\providetranslation{4th-(ODw)}{4.}
+\providetranslation{ace-(ODw)}{asso}
+\providetranslation{Ace-(ODw)}{Asso}
+\providetranslation{all-(ODw)}{tutti}
+\providetranslation{All-(ODw)}{Tutti}
+\providetranslation{all!-(ODw)}{tutti}
+\providetranslation{All!-(ODw)}{Tutti}
+\providetranslation{all pass-(ODw)}{tutti passano}
+\providetranslation{All pass-(ODw)}{Tutti passano}
+\providetranslation{a-(ODw)}{a}
+\providetranslation{A-(ODw)}{A}
+\providetranslation{ap-(ODw)}{tp}
+\providetranslation{AP-(ODw)}{TP}
+%(JW) \providetranslation{Award-(ODw)}{Risultato}
+\providetranslation{Award-(ODw)}{Premio}
+%(JW) \providetranslation{award-(ODw)}{risultato}% = points you earn in a quiz
+\providetranslation{award-(ODw)}{premio}% = points you earn in a quiz
+\providetranslation{Bid-(ODw)}{Licita}
+\providetranslation{bid-(ODw)}{licita}% = e.g. 2C, 4H or 6NT
+\providetranslation{Board-(ODw)}{Board}
+\providetranslation{board-(ODw)}{board}% = equipment that holds 1 deal
+\providetranslation{Brd-(ODw)}{Brd}
+\providetranslation{brd-(ODw)}{brd}% = equipment that holds 1 deal
+\providetranslation{by-(ODw)}{da}
+%(JW) \providetranslation{Call-(ODw)}{Licita}
+\providetranslation{Call-(ODw)}{Dichiarazione}
+\providetranslation{call-(ODw)}{dichiarazione}% = bid + pass, (re)double
+\providetranslation{-card-(ODw)}{-carta}
+\providetranslation{contract-(ODw)}{contratto}
+\providetranslation{Contract-(ODw)}{Contratto}
+\providetranslation{contr-(ODw)}{contr}
+\providetranslation{Contr-(ODw)}{Contr}
+%(JW) \providetranslation{Dbl-(ODw)}{X}
+\providetranslation{Dbl-(ODw)}{Contr}
+\providetranslation{dealer-(ODw)}{dichiarante}
+%\providetranslation{dealer-(ODw)}{mazziere}
+\providetranslation{Dealer-(ODw)}{Dichiarante}
+%\providetranslation{Dealer-(ODw)}{Mazziere}
+\providetranslation{Deal-(ODw)}{Smazzata}
+\providetranslation{Deal!-(ODw)}{Smazzata}
+\providetranslation{deal-(ODw)}{smazzata}% = 4 hands
+\providetranslation{deal!-(ODw)}{smazzata}% = 4 hands
+\providetranslation{declarer-(ODw)}{giocante}
+%\providetranslation{declarer-(ODw)}{dichiarante}
+\providetranslation{Declarer-(ODw)}{Giocante}
+%\providetranslation{Declarer-(ODw)}{Dichiarante}
+\providetranslation{decl-(ODw)}{gioc}
+%\providetranslation{decl-(ODw)}{dich}
+\providetranslation{Decl-(ODw)}{Gioc}
+%\providetranslation{Decl-(ODw)}{Dich}
+\providetranslation{distribution points-(ODw)}{punti distribuzionali}
+\providetranslation{Distribution Points-(ODw)}{Punti Distribuzionali}
+\providetranslation{doubled-(ODw)}{contrato}
+\providetranslation{Doubled-(ODw)}{Contrato}
+\providetranslation{double-(ODw)}{contro}
+\providetranslation{Double-(ODw)}{Contro}
+\providetranslation{dp-(ODw)}{pd}
+\providetranslation{DP-(ODw)}{PD}
+\providetranslation{east-(ODw)}{est}
+\providetranslation{East-(ODw)}{Est}
+\providetranslation{e-(ODw)}{e}
+\providetranslation{E-(ODw)}{E}
+\providetranslation{fourth suit forcing-(ODw)}{quarto colore forzante}
+\providetranslation{Fourth Suit Forcing-(ODw)}{Quarto Colore Forzante}
+\providetranslation{fsf-(ODw)}{4.\,cf}
+\providetranslation{FSF-(ODw)}{4.\,CF}
+\providetranslation{game forcing-(ODw)}{forzante manche}
+\providetranslation{Game Forcing-(ODw)}{Forzante Manche}
+\providetranslation{gf-(ODw)}{fm}
+\providetranslation{GF-(ODw)}{FM}
+\providetranslation{Hand-(ODw)}{Mano}
+\providetranslation{hand-(ODw)}{mano}% = 13 cards of 1 player
+\providetranslation{hcp-(ODw)}{po}
+\providetranslation{HCP-(ODw)}{PO}
+\providetranslation{high card points-(ODw)}{punti onore}
+\providetranslation{High Card Points-(ODw)}{Punti Onore}
+%(JW) \providetranslation{HLP-(ODw)}{por}
+\providetranslation{hlp-(ODw)}{pol}% HCP+LP (punti onore + punti di lunghezza)
+%(JW) \providetranslation{HLP-(ODw)}{POR}
+\providetranslation{HLP-(ODw)}{POL}
+\providetranslation{jack-(ODw)}{fante}
+\providetranslation{Jack-(ODw)}{Fante}
+\providetranslation{j-(ODw)}{f}
+\providetranslation{J-(ODw)}{F}
+\providetranslation{king-(ODw)}{re}
+\providetranslation{King-(ODw)}{Re}
+\providetranslation{k-(ODw)}{r}
+\providetranslation{K-(ODw)}{R}
+\providetranslation{lead-(ODw)}{attacco}
+\providetranslation{Lead-(ODw)}{Attacco}
+\providetranslation{lead!-(ODw)}{attacco}
+\providetranslation{Lead!-(ODw)}{Attacco}
+\providetranslation{length points-(ODw)}{punti di lunghezza}
+\providetranslation{Length Points-(ODw)}{Punti di Lunghezza}
+\providetranslation{lp-(ODw)}{pl}
+\providetranslation{LP-(ODw)}{PL}
+\providetranslation{new minor forcing-(ODw)}{nuovo minore forzante}
+\providetranslation{New Minor Forcing-(ODw)}{Nuovo Minore Forzante}
+\providetranslation{nmf-(ODw)}{nmf}
+\providetranslation{NMF-(ODw)}{NMF}
+\providetranslation{n-(ODw)}{n}
+\providetranslation{N-(ODw)}{N}
+\providetranslation{none-(ODw)}{nessuno}
+\providetranslation{None-(ODw)}{Nessuno}
+\providetranslation{none!-(ODw)}{nessuno}
+\providetranslation{None!-(ODw)}{Nessuno}
+\providetranslation{north-(ODw)}{nord}
+\providetranslation{North-(ODw)}{Nord}
+\providetranslation{no trump-(ODw)}{sans atout}
+\providetranslation{No Trump-(ODw)}{Sans Atout}
+\providetranslation{Nr-(ODw)}{\textnumero}
+\providetranslation{Nr.-(ODw)}{\textnumero.}
+\providetranslation{NT-(ODw)}{S\kern-0.01emA}
+\providetranslation{nt-(ODw)}{sa}
+\providetranslation{pass-(ODw)}{passo}
+\providetranslation{Pass-(ODw)}{Passo}
+\providetranslation{pass!-(ODw)}{p}
+\providetranslation{Pass!-(ODw)}{P}
+\providetranslation{q-(ODw)}{d}
+\providetranslation{Q-(ODw)}{D}
+\providetranslation{queen-(ODw)}{dama}
+\providetranslation{Queen-(ODw)}{Dama}
+%(JW) \providetranslation{ReDbl-(ODw)}{XX}
+\providetranslation{ReDbl-(ODw)}{SurCon}
+\providetranslation{redoubled-(ODw)}{surcontrato}
+\providetranslation{Redoubled-(ODw)}{Surcontrato}
+\providetranslation{redouble-(ODw)}{surcontro}
+\providetranslation{ReDouble-(ODw)}{Surcontro}
+\providetranslation{semi forcing-(ODw)}{semi forzante}
+\providetranslation{Semi Forcing-(ODw)}{Semi Forzante}
+\providetranslation{sf-(ODw)}{sf}
+\providetranslation{SF-(ODw)}{SF}
+\providetranslation{s-(ODw)}{s}
+\providetranslation{S-(ODw)}{S}
+\providetranslation{south-(ODw)}{sud}
+\providetranslation{South-(ODw)}{Sud}
+\providetranslation{suiter-(ODw)}{colore}
+\providetranslation{Suiter-(ODw)}{Colore}
+\providetranslation{suit-(ODw)}{colore}
+\providetranslation{Suit-(ODw)}{Colore}
+\providetranslation{third suit forcing-(ODw)}{terzo colore forzante}
+\providetranslation{Third Suit Forcing-(ODw)}{Terzo Colore Forzante}
+\providetranslation{total points-(ODw)}{punti totali}
+\providetranslation{Total Points-(ODw)}{Punti Totali}
+\providetranslation{tp-(ODw)}{pt}
+\providetranslation{TP-(ODw)}{PT}
+\providetranslation{trial bid-(ODw)}{tentativo di manche}
+\providetranslation{Trial bid-(ODw)}{Tentativo di Manche}
+\providetranslation{trick-(ODw)}{presa}
+\providetranslation{Trick-(ODw)}{Presa}
+\providetranslation{tsf-(ODw)}{3.\,cf}
+\providetranslation{TSF-(ODw)}{3.\,CF}
+\providetranslation{vulnerable-(ODw)}{vulnerabile}
+\providetranslation{Vulnerable-(ODw)}{Vulnerabile}
+\providetranslation{vul-(ODw)}{vul}
+\providetranslation{Vul-(ODw)}{Vul}
+\providetranslation{west-(ODw)}{ovest}
+\providetranslation{West-(ODw)}{Ovest}
+\providetranslation{w-(ODw)}{o}
+\providetranslation{W-(ODw)}{O}
+%
+\endinput
diff --git a/macros/latex/contrib/onedown/README b/macros/latex/contrib/onedown/README
index fdc16ef9f6..b563b49098 100644
--- a/macros/latex/contrib/onedown/README
+++ b/macros/latex/contrib/onedown/README
@@ -1,5 +1,5 @@
--------------------------------------------------------------------------
-The OneDown package v1.6 - 2021/04/27
+The OneDown package v1.7 - 2023/12/07
A package to typeset diagrams for the game of bridge
--------------------------------------------------------------------------
@@ -7,7 +7,7 @@ Jacob Wiersma
Web:
E-Mail: jack46@schuli-wirsi.de
--------------------------------------------------------------------------
-Copyright 2018-21 Jacob Wiersma
+Copyright 2018-2023 Jacob Wiersma
This work has the LPPL maintenance status `maintained'.
@@ -31,7 +31,7 @@ the files
onedown.sty, onedown.pdf
- ODw-Danish.dict, ODw-Dutch.dict, ODw-English.dict,
- ODw-French.dict, ODw-German.dict ODw-Norsk.dict,
+ ODw-French.dict, ODw-German.dict ODw-Italian.dict, ODw-Norsk.dict,
ODw-Spanish.dict, ODw-Swedish.dict, ODw-Turkish.dict
the directory examples with the files
diff --git a/macros/latex/contrib/onedown/examples/Compass.pdf b/macros/latex/contrib/onedown/examples/Compass.pdf
deleted file mode 100644
index c9d613f276..0000000000
--- a/macros/latex/contrib/onedown/examples/Compass.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/onedown/examples/Fontsizes.pdf b/macros/latex/contrib/onedown/examples/Fontsizes.pdf
deleted file mode 100644
index d2accbc38c..0000000000
--- a/macros/latex/contrib/onedown/examples/Fontsizes.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/onedown/examples/onedown-examples.pdf b/macros/latex/contrib/onedown/examples/onedown-examples.pdf
deleted file mode 100644
index 1aab50b8d1..0000000000
--- a/macros/latex/contrib/onedown/examples/onedown-examples.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/onedown/examples/onedown-ref.pdf b/macros/latex/contrib/onedown/examples/onedown-ref.pdf
deleted file mode 100644
index 92ec145e0a..0000000000
--- a/macros/latex/contrib/onedown/examples/onedown-ref.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/latex/contrib/onedown/onedown.dtx b/macros/latex/contrib/onedown/onedown.dtx
index 92ffa66155..7f1afcfc7a 100644
--- a/macros/latex/contrib/onedown/onedown.dtx
+++ b/macros/latex/contrib/onedown/onedown.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2018 by Jacob Wiersma <jack46@online.de>
+% Copyright (C) 2018 by Jacob Wiersma <jack46@schuli-wirsi.de>
% ---------------------------------------------------------------------------
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -24,10 +24,10 @@
\ProvidesFile{onedown.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[2014/05/01]
-%<package>\def\ODwstyleversion{1.6}\def\ODwstyledate{2021/04/27}
+%<package>\def\ODwstyleversion{1.7}\def\ODwstyledate{2023/12/07}
%<package>\ProvidesPackage{onedown}
%<package> [\ODwstyledate\space v\ODwstyleversion\space
-%<package> Typeset Bridge Diagrams - Jacob Wiersma (C) 2016-2021]
+%<package> Typeset Bridge Diagrams - Jacob Wiersma (C) 2016-2023]
%
%<*driver>
\PassOptionsToPackage{shorthands=off}{babel}
@@ -35,12 +35,13 @@
% with draft no hyperrefs
\documentclass[a4paper,12pt,%
german,dutch,french,swedish,english]{ltxdoc}
+% Of all available languages, we use only thes few in some examples
% the package |shortvrb| is auto-loaded, providing |...| as shorthand
\usepackage[utf8]{inputenc}
%
\usepackage[T1]{fontenc}
\usepackage{babel}
-\usepackage{onedown}[2021/04/27]
+\usepackage{onedown}[2023/12/07]
\usepackage[normalem]{ulem}% for strikeout todos that are done
\usepackage{needspace}% keep contiguous lines on one page
\usepackage[inline]{enumitem}% Control various parameters of lists
@@ -212,7 +213,7 @@ german,dutch,french,swedish,english]{ltxdoc}
%</driver>
% \fi
%
-% \CheckSum{3810}
+% \CheckSum{3814}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -399,6 +400,10 @@ german,dutch,french,swedish,english]{ltxdoc}
% - Translation files are named like: ODw-German.dict\\
% - Adapted the code to read them on the fly
% }
+% \changes{v1.7}{2023/12/07}{\\
+% - Added support for the italian language \\
+% - Added an example showing how to define own colors for card symbols
+% }
% ^^A Note: ^^21 denotes the exclamation mark (!)
% ^^A Note: Char ' is not allowed within changes
%
@@ -757,14 +762,15 @@ pdflatex --shell-escape onedown.dtx
% translate often appearing brigde terms like e.g.\ \emph{declarer}. It does
% so by looking up these terms in the special |ODw|-dictionary for the
% active language. The current \OneDown version supports English, German,
-% Dutch, French, Spanish, most Scandinavian languages and Turkish. Some
+% Dutch, French, Italian, Spanish, most Scandinavian languages and Turkish. Some
% dictionaries may not be complete or may contain errors, please send
% corrections/additions to the maintainer.
%
% In order to make \packname{translator} do its job (automatically select the
-% right translation when the current language switches to another), it is
-% necessary to specify the languages with the |documentclass|, and not with
-% |babel|!
+% right translation when the current language switches to another),
+% \textbf{\larger it is
+% necessary to specify the languages with the \texttt{documentclass}, and not with
+% \texttt{babel}! }
%
% \needspace{5\baselineskip}
%
@@ -1731,6 +1737,8 @@ pdflatex --shell-escape onedown.dtx
% \subsection{ToDo}
%
% \begin{itemize}[itemsep=-2mm]
+% \item \textbf{Correct the description how to enable automatic language
+% switching (since we use package translator)}
% \item Add the High Points to card diagrams (like Turnier in KA)
% \item Check if |\def\xspace{}| is also needed in bidding...?
% \item Make a template for showing 16 hands on 1 DIN A4 (3x5+1 or 4x4
@@ -1765,6 +1773,7 @@ pdflatex --shell-escape onedown.dtx
%
% \StopEventually{}
%
+% \newpage
% \section{Implementation}
%
% \iffalse
@@ -1785,7 +1794,6 @@ pdflatex --shell-escape onedown.dtx
moresize,% add \HUGE and \ssmall to font-sizes
relsize,% relative font-sizes. (e.g. \smaller)
makecmds,% needed for provideenvironment
-% expl3,% needed for LaTeX3 packages (xparse)
xparse,% optional params and starred commands
xspace,% handling of spacing behind a command
calc,% makes calculations and lengths easier
@@ -5971,6 +5979,11 @@ pdflatex --shell-escape onedown.dtx
\PackageInfo{ODw}{Dictionary ODw-German.dict loaded}
}{\PackageWarning{ODw}{Dictionary ODw-German.dict missing}}}%
%
+ {italian}{\IfFileExists{ODw-Italian.dict}%
+ {\uselanguage{Italian}%
+ \PackageInfo{ODw}{Dictionary ODw-Italian.dict loaded}
+ }{\PackageWarning{ODw}{Dictionary ODw-Italian.dict missing}}}%
+%
{norsk}{\IfFileExists{ODw-Norsk.dict}%
{\uselanguage{Norsk}%
\PackageInfo{ODw}{Dictionary ODw-Norsk.dict loaded}
diff --git a/macros/latex/contrib/onedown/onedown.pdf b/macros/latex/contrib/onedown/onedown.pdf
index 726f4bb0d3..10ec860396 100644
--- a/macros/latex/contrib/onedown/onedown.pdf
+++ b/macros/latex/contrib/onedown/onedown.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/README.md b/macros/latex/contrib/tkz/tkz-elements/README.md
index 75744500d4..93bf219100 100644
--- a/macros/latex/contrib/tkz/tkz-elements/README.md
+++ b/macros/latex/contrib/tkz/tkz-elements/README.md
@@ -1,10 +1,10 @@
# tkz-elements — for euclidean geometry
-Release 1.40c 2023/12/03
+Release 1.50c 2023/12/08
## Description
-`tkz-elements v.1.40c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
+`tkz-elements v.1.50c` is the new version of a library written in lua, allowing to make all the necessary calculations to define the objects of a Euclidean geometry figure. You need to compile with `LuaLaTeX`. With `tkz-elements`, the definitions and calculations are only done with `Lua`.
The main possibility of programmation proposed is oriented "object programming" with object classes like point, line, triangle, circle and ellipse. For the moment, once the calculations are done, it is `tkz-euclide` or `TikZ` which allows the drawings.
@@ -58,6 +58,30 @@ package conflicts.
Some examples will be stored on my site : [http://altermundus.fr](http://altermundus.fr).
## History
+ - version 1.50c Correction of the documentation
+
+ Added "swap" option to create triangles from the "line" object.
+
+ "iscyclic" is a new method to know if a quadrilateral is inscribable in a circle.
+
+ Added function "diameter" to create a circle.
+
+ Added function "swap" to swap two points.
+
+ Correction method "gold" of object rectangle.
+
+ Correction method "in_circle_" of object triangle.
+
+ Correction method "incentral_tr_" of object triangle.
+
+ Added method "soddy_center" of object triangle.
+
+ Added option "swap" for method "square" of object line.
+
+ Added method "report" for object line. Transfer a defined length from a point
+
+ Added option "swap" to the function "square : side"
+
- Version 1.40c Restructuring objects
New version for all transformations. Now, they accept all objects as parameters.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
index 099c75a278..1bd4b831e4 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex
@@ -154,63 +154,65 @@ Here's the list of methods for the \tkzNameObj{line} object. The results are eit
\label{ssub:table_of_the_methods_from_class_line}
\vspace{1em}
-\bgroup
-\catcode`_=12
-\small
-\captionof{table}{Methods of the class line.}
-\begin{tabular}{lll}
-\toprule
-\textbf{Methods} & \textbf{Comments} & \\
-\midrule
-\Imeth{line}{new(A, B)} & |L.AB = line : new(z.A,z.B)| line through the points $A$ and $B$&\\
-\midrule
- \textbf{Points} &&\\
-\midrule
-\Imeth{line}{gold\_ratio ()} & |z.C = L.AB : gold_ratio()| & gold ratio \\
-\Imeth{line}{normalize ()} & |z.C = L.AB : normalize()| & AC =1 and $C\in (AB)$ \\
-\Imeth{line}{normalize\_inv ()} & |z.C = L.AB : normalize_inv()| & CB =1 and $C\in (AB)$ \\
-\Imeth{line}{barycenter (ka,kb)} & |z.C = L.AB : barycenter (1,2)| $C$ & barycenter of |{(A,1)(B,2)}|\\
-\Imeth{line}{point (t)} & |z.C = L.AB : point (2)| & $\overrightarrow{AC} = 2\overrightarrow{AB}$\\
-\Imeth{line}{midpoint ()} & |z.M = L.AB : midpoint ()| & better is |z.M = L.AB.mid| \\
-\Imeth{line}{harmonic\_int } & |z.D = L.AB : harmonic_int (z.C)| & $D\in [AB]$ $C\notin [AB]$\\
-\Imeth{line}{harmonic\_ext (pt)} & |z.D = L.AB : harmonic_ext (z.C)| & $D\notin [AB]$ $C\in [AB]$\\
-\Imeth{line}{harmonic\_both (k)} & |z.C,z.D = L.AB : harmonic_both (tkzphi)| & ${ {CA/CB}={DA/DB}=t\varphi.}$\\
-\Imeth{line}{square ()} & |S.AB =(L.AB : square ()) | & create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}\\
-\midrule
- \textbf{Lines} &&\\
-\midrule
-\Imeth{line}{ll\_from ( pt )} & |L.CD = L.AB : ll_from (z.C)| & $(CD) \parallel (AB)$ \\
-\Imeth{line}{ortho\_from ( pt )} & |L.CD = L.AB : ortho_from (z.C)|& $(CD) \perp (AB)$\\
-\Imeth{line}{mediator ()}&|L.uv = L.AB : mediator ()| & $(u,v)$ mediator of $(A,B)$\\
-\midrule
- \textbf{Triangles} &&\\
-\midrule
-\Imeth{line}{equilateral (swap)} & |T.ABC = L.AB : equilateral ()| $(\overrightarrow{AB},\overrightarrow{AC})>0$ & or < with swap \\
-\Imeth{line}{isosceles (phi)} & |T.ABC = L.AB : isosceles (math.pi/6)|& \\
-\Imeth{line}{gold ()} & |T.ABC = L.AB : gold ()| & right in $B$ and $AC = \varphi \times AB $ \\
-\Imeth{line}{euclide ()} & |T.ABC = L.AB : euclide ()| & $AB=AC$ and $(\overrightarrow{AB},\overrightarrow{AC}) = math.pi/5$ \\
-\Imeth{line}{golden ()} & |T.ABC = L.AB : golden ()| & $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times \pi/5$ \\
-\midrule
- \textbf{Circles} &&\\
-\midrule
-\Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| & center pa through pb \\
-\Imeth{line}{circle\_swap ()} & |C.BA = L.AB : circle\_swap ()|& center pb through pa \\
-\midrule
- \textbf{Transformations} &&\\
-\midrule
-\Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj|&\\
-\Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|&\\
-\Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$\\
-\midrule
- \textbf{Miscellaneous} &&\\
-\midrule
-\Imeth{line}{distance (pt)} & |d = L.Ab : distance (z.C)| & see \ref{ssub:example_distance_and_projection}\\
-\Imeth{line}{in\_out (pt)} & |b = L.AB : in_out (z.C)| $b$ is a boolean b=true if $C\in (AB)$ &\\
-\Imeth{line}{slope ()} & |a = L.AB : slope()| & better is L.AB.slope \\
-\bottomrule
-\end{tabular}
-
-\egroup
+\begin{minipage}{\textwidth}
+ \bgroup
+ \catcode`_=12
+ \small
+ \captionof{table}{Methods of the class line.}
+ \begin{tabular}{lll}
+ \toprule
+ \textbf{Methods} & \textbf{Comments} & \\
+ \midrule
+ \Imeth{line}{new(A, B)} & |L.AB = line : new(z.A,z.B)| line through the points $A$ and $B$&\\
+ \midrule
+ \textbf{Points} &&\\
+ \midrule
+ \Imeth{line}{gold\_ratio ()} & |z.C = L.AB : gold_ratio()| & gold ratio \\
+ \Imeth{line}{normalize ()} & |z.C = L.AB : normalize()| & AC =1 and $C\in (AB)$ \\
+ \Imeth{line}{normalize\_inv ()} & |z.C = L.AB : normalize_inv()| & CB =1 and $C\in (AB)$ \\
+ \Imeth{line}{barycenter (ka,kb)} & |z.C = L.AB : barycenter (1,2)| $C$ & barycenter of |{(A,1)(B,2)}|\\
+ \Imeth{line}{point (t)} & |z.C = L.AB : point (2)| & $\overrightarrow{AC} = 2\overrightarrow{AB}$\\
+ \Imeth{line}{midpoint ()} & |z.M = L.AB : midpoint ()| & better is |z.M = L.AB.mid| \\
+ \Imeth{line}{harmonic\_int } & |z.D = L.AB : harmonic_int (z.C)| & $D\in [AB]$ $C\notin [AB]$\\
+ \Imeth{line}{harmonic\_ext (pt)} & |z.D = L.AB : harmonic_ext (z.C)| & $D\notin [AB]$ $C\in [AB]$\\
+ \Imeth{line}{harmonic\_both (k)} & |z.C,z.D = L.AB : harmonic_both (tkzphi)| & ${ {CA/CB}={DA/DB}=t\varphi.}$\\
+ \Imeth{line}{square ()} & |S.AB =(L.AB : square ()) | & create a square |S.AB|.\footnote{ |_,_,z.C,z.D = get_points(S.AB)|}\\
+ \midrule
+ \textbf{Lines} &&\\
+ \midrule
+ \Imeth{line}{ll\_from ( pt )} & |L.CD = L.AB : ll_from (z.C)| & $(CD) \parallel (AB)$ \\
+ \Imeth{line}{ortho\_from ( pt )} & |L.CD = L.AB : ortho_from (z.C)|& $(CD) \perp (AB)$\\
+ \Imeth{line}{mediator ()}&|L.uv = L.AB : mediator ()| & $(u,v)$ mediator of $(A,B)$\\
+ \midrule
+ \textbf{Triangles}&&\\
+ \midrule
+ \Imeth{line}{equilateral (swap)} & |T.ABC = L.AB : equilateral ()| $(\overrightarrow{AB},\overrightarrow{AC})>0$ & or < with swap \footnote{Triangles are defined in the direct sense of rotation, unless the "swap" option is present.} \\
+ \Imeth{line}{isosceles (phi,swap)} & |T.ABC = L.AB : isosceles (math.pi/6)|& \\
+ \Imeth{line}{gold (swap)} & |T.ABC = L.AB : gold ()| & right in $B$ and $AC = \varphi \times AB $ \\
+ \Imeth{line}{euclide (swap)} & |T.ABC = L.AB : euclide ()| & $AB=AC$ and $(\overrightarrow{AB},\overrightarrow{AC}) = math.pi/5$ \\
+ \Imeth{line}{golden (swap)} & |T.ABC = L.AB : golden ()| & $(\overrightarrow{AB},\overrightarrow{AC}) = 2\times \pi/5$ \\
+ \midrule
+ \textbf{Circles} &&\\
+ \midrule
+ \Imeth{line}{circle ()} & |C.AB = L.AB : circle ()| & center pa through pb \\
+ \Imeth{line}{circle\_swap ()} & |C.BA = L.AB : circle\_swap ()|& center pb through pa \\
+ \midrule
+ \textbf{Transformations} &&\\
+ \midrule
+ \Imeth{line}{reflection ( obj )} & |new obj = L.AB : reflection (obj|&\\
+ \Imeth{line}{translation ( obj )} & |new obj = L.AB : translation (obj)|&\\
+ \Imeth{line}{projection ( obj )} & |z.H = L.AB : projection (z.C)| & $CH \perp (AB)$ and $H\in (AB)$\\
+ \midrule
+ \textbf{Miscellaneous} &&\\
+ \midrule
+ \Imeth{line}{distance (pt)} & |d = L.Ab : distance (z.C)| & see \ref{ssub:example_distance_and_projection}\\
+ \Imeth{line}{in\_out (pt)} & |b = L.AB: in_out(z.C)| b=true if $C\in (AB)$ &\\
+ \Imeth{line}{slope ()} & |a = L.AB : slope()| & better is L.AB.slope \\
+ \bottomrule
+ \end{tabular}
+
+ \egroup
+\end{minipage}
% subsubsection table_of_the_methods_from_class_line (end)
Here are a few examples.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
index 1e1a23b1d4..2171337792 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-quadrilateral.tex
@@ -93,7 +93,7 @@ z.G = Q.ABCD.g
\toprule
\textbf{Methods} & \textbf{Comments} \\
\midrule \\
-\Imeth{quadrilateral}{cyclic ()} & inscribed ? (see next example)\\
+\Imeth{quadrilateral}{iscyclic ()} & inscribed ? (see next example)\\
\bottomrule %
\end{tabular}
\egroup
@@ -110,7 +110,7 @@ L.DB = line : new (z.D,z.B)
T.equ = L.DB : equilateral ()
z.C = T.equ.pc
Q.new = quadrilateral : new (z.A,z.B,z.C,z.D)
-bool = Q.new : cyclic ()
+bool = Q.new : iscyclic ()
if bool == true then
C.cir = triangle : new (z.A,z.B,z.C): circum_circle ()
z.O = C.cir.center
@@ -138,7 +138,7 @@ L.DB = line : new (z.D,z.B)
T.equ = L.DB : equilateral ()
z.C = T.equ.pc
Q.new = quadrilateral : new (z.A,z.B,z.C,z.D)
-bool = Q.new : cyclic ()
+bool = Q.new : iscyclic ()
if bool == true then
C.cir = triangle : new (z.A,z.B,z.C): circum_circle ()
z.O = C.cir.center
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
index 29e9fb89d4..62cb44b1c9 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-rectangle.tex
@@ -122,12 +122,11 @@ z.I = R.new.center
scale = .5
z.A = point : new ( 0 , 0 )
z.B = point : new ( 4 , 0 )
-z.C = point : new ( 4 , 3 )
-P.ABCD = rectangle : angle ( z.C , z.A , math.pi/6)
+z.I = point : new ( 4 , 3 )
+P.ABCD = rectangle : angle ( z.I , z.A , math.pi/6)
z.B = P.ABCD.pb
z.C = P.ABCD.pc
z.D = P.ABCD.pd
-z.I = P.ABCD.center
\end{tkzelements}
\begin{tikzpicture}
@@ -144,12 +143,11 @@ z.I = P.ABCD.center
scale = .5
z.A = point : new ( 0 , 0 )
z.B = point : new ( 4 , 0 )
-z.C = point : new ( 4 , 3 )
-P.ABCD = rectangle : angle ( z.C , z.A , math.pi/6)
+z.I = point : new ( 4 , 3 )
+P.ABCD = rectangle : angle ( z.I , z.A , math.pi/6)
z.B = P.ABCD.pb
z.C = P.ABCD.pc
z.D = P.ABCD.pd
-z.I = P.ABCD.center
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -211,21 +209,22 @@ z.I = R.side.center
\begin{minipage}{.5\textwidth}
\begin{verbatim}
\begin{tkzelements}
-z.E = point : new ( 0 , 0 )
-z.G = point : new ( 4 , 3 )
-R.diag = rectangle : diagonal (z.E,z.G)
-z.F = R.diag.pb
-z.H = R.diag.pd
-z.I = R.diag.center
+z.A = point : new ( 0 , 0 )
+z.C = point : new ( 4 , 3 )
+R.diag = rectangle : diagonal (z.A,z.C)
+z.B = R.diag.pb
+z.D = R.diag.pd
+z.I = R.diag.center
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
-\tkzDrawPolygon(E,F,G,H)
-\tkzDrawPoints(E,F,G,H)
-\tkzLabelPoints((E,F)
-\tkzLabelPoints[above](G,H)
+\tkzDrawPolygon(A,B,C,D)
+\tkzDrawPoints(A,B,C,D)
+\tkzLabelPoints(A,B)
+\tkzLabelPoints[above](C,D)
\tkzDrawPoints[red](I)
+\tkzLabelSegment[sloped,above](A,B){|rectangle : diagonal (z.A,z.C)|}
\end{tikzpicture}
\end{verbatim}
\end{minipage}
@@ -266,11 +265,12 @@ z.I = R.gold.center
\begin{tikzpicture}
\tkzGetNodes
-\tkzDrawPolygon(A,B,C,D)
-\tkzDrawPoints(A,B,C,D)
-\tkzLabelPoints(A,B)
-\tkzLabelPoints[above](C,D)
+\tkzDrawPolygon(X,Y,Z,W)
+\tkzDrawPoints(X,Y,Z,W)
+\tkzLabelPoints(X,Y)
+\tkzLabelPoints[above](Z,W)
\tkzDrawPoints[red](I)
+\tkzLabelSegment[sloped,above](X,Y){|rectangle : gold (z.X,z.Y)|}
\end{tikzpicture}
\end{verbatim}
\end{minipage}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
index f25d02d569..90e07b1ef7 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-convention.tex
@@ -16,7 +16,7 @@
and outside the environment \tkzNameEnv{tkzelements} you can use the macro
\begin{mybox}
- |\fthenelse{\equal{\tkzUseLua{bool}}{true}}{ ... }{ ... }|
+ |\ifthenelse{\equal{\tkzUseLua{bool}}{true}}{ ... }{ ... }|
\end{mybox}
after loading the \tkzNamePack{ifthen} package.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
index f9658252c2..7a00735fd4 100644..100755
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
@@ -804,38 +804,40 @@ z.L = intersection (L.AR,L.BG)
\subsection{Director circle} % (fold)
\label{sub:director_circle}
-
-\begin{tkzexample}[latex=0cm,small,code only]
-\begin{tkzelements}
-scale = .5
-z.O = point: new (0 , 0)
-z.F1 = point: new (4 , 0)
-z.F2 = point: new (-4 , 0)
-z.H = point: new (4*math.sqrt(2) , 0)
-E = ellipse: foci (z.F2,z.F1,z.H)
-a,b = E.Rx, E.Ry
-z.A = E.covertex
-T = triangle: new (z.H,z.O,z.A)
-z.P = T: parallelogram ()
-C = circle: new (z.O,z.P)
-z.L = C: point (2)
-L.J,L.K = E: tangent_from (z.L)
-z.J = L.J.pb
-z.K = L.K.pb
-\end{tkzelements}
- \begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPoints(F1,F2,O)
-\tkzDrawCircles[teal](O,P)
-\tkzDrawPolygon(H,O,A,P)
-\tkzDrawEllipse[red](O,\tkzUseLua{a},\tkzUseLua{b},0)
-\tkzDrawSegments[orange](O,P O,L L,J L,K)
-\tkzDrawPoints(F1,F2,O,H,A,P,L,J,K)
-\tkzLabelPoints(F1,F2,O,H,A,P,L,J,K)
-\tkzMarkRightAngles(A,P,H J,L,K)
-\end{tikzpicture}
-\end{tkzexample}
-
+% modif C: point (0.25) instead of 2
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+ \begin{verbatim}
+ \begin{tkzelements}
+ scale = .5
+ z.O = point: new (0 , 0)
+ z.F1 = point: new (4 , 0)
+ z.F2 = point: new (-4 , 0)
+ z.H = point: new (4*math.sqrt(2) , 0)
+ E = ellipse: foci (z.F2,z.F1,z.H)
+ a,b = E.Rx, E.Ry
+ z.A = E.covertex
+ T = triangle: new (z.H,z.O,z.A)
+ z.P = T: parallelogram ()
+ C = circle: new (z.O,z.P)
+ z.L = C: point (0.25)
+ L.J,L.K = E: tangent_from (z.L)
+ z.J = L.J.pb
+ z.K = L.K.pb
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPoints(F1,F2,O)
+ \tkzDrawCircles[teal](O,P)
+ \tkzDrawPolygon(H,O,A,P)
+ \tkzDrawEllipse[red](O,\tkzUseLua{a},\tkzUseLua{b},0)
+ \tkzDrawSegments[orange](O,P O,L L,J L,K)
+ \tkzDrawPoints(F1,F2,O,H,A,P,L,J,K)
+ \tkzLabelPoints(F1,F2,O,H,A,P,L,J,K)
+ \tkzMarkRightAngles(A,P,H J,L,K)
+ \end{tikzpicture}
+ \end{verbatim}
+\end{minipage}
+\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{tkzelements}
scale = .5
z.O = point: new (0 , 0)
@@ -848,13 +850,12 @@ z.A = E.covertex
T = triangle: new (z.H,z.O,z.A)
z.P = T: parallelogram ()
C = circle: new (z.O,z.P)
-z.L = C: point (2)
+z.L = C: point (0.25)
L.J,L.K = E: tangent_from (z.L)
z.J = L.J.pb
z.K = L.K.pb
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -867,7 +868,7 @@ z.K = L.K.pb
\tkzLabelPoints(F1,F2,O,H,A,P,L,J,K)
\tkzMarkRightAngles(A,P,H J,L,K)
\end{tikzpicture}
-\hspace*{\fill}
+\end{minipage}
% subsection director_circle (end)
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.pdf b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.pdf
new file mode 100644
index 0000000000..d05eb7fbb9
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
index 6540ebffaf..101a65ed15 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex
@@ -21,10 +21,10 @@
headings = small
]{tkz-doc}
\gdef\tkznameofpack{tkz-elements}
-\gdef\tkzversionofpack{1.40c}
+\gdef\tkzversionofpack{1.50c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{tkz-elements.pdf}
-\gdef\tkzversionofdoc{1.40c}
+\gdef\tkzversionofdoc{1.50c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -88,8 +88,10 @@
\newfontfamily\ttcondensed{lmmonoltcond10-regular.otf}
%% (La)TeX font-related declarations:
\linespread{1.05} % Pagella needs more space between lines
-\usepackage[math-style=literal,bold-style=literal]{unicode-math}
+%\usepackage[math-style=literal,bold-style=literal]{unicode-math}
+\usepackage{unicode-math}
\usepackage{fourier-otf}
+\setmathfont{Concrete-Math.otf}
\let\rmfamily\ttfamily
\usepackage{multicol,lscape,wrapfig}
\usepackage[english]{babel}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
index e76340cbd0..afc64f416d 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-why.tex
@@ -158,7 +158,7 @@ The following section concerns only drawings, and is handled by tkz-euclide.
\vspace{1em}
\begin{tkzelements}
- scale = .35
+ scale = .4
z.A = point: new (0,0)
z.B = point: new (6,0)
z.C = point: new (0.8,4)
@@ -198,10 +198,6 @@ The following section concerns only drawings, and is handled by tkz-euclide.
\end{minipage}
% subsubsection example_apollonius_circle (end)
-
% subsubsection using_objects (end)
-
% subsection calculation_accuracy (end)
-
-
% section why_tkz_elements (end) \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
index cee54a9cfe..d05eb7fbb9 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
index 1a14660eaa..e8d633c9f6 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty
@@ -1,5 +1,5 @@
% encoding : utf8
-% tkz-elements.sty v1.40c
+% tkz-elements.sty v1.50c
% Copyright 2023 Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
@@ -11,7 +11,7 @@
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.
-\ProvidesPackage{tkz-elements}[23/12/03 v1.40c Graphic Object Library]
+\ProvidesPackage{tkz-elements}[23/12/08 v1.50c Graphic Object Library]
\RequirePackage{luacode}
\directlua{require "tkz_elements_main"}
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
index bc3508a5aa..91ff4f659e 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_circle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-circles.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -39,6 +39,11 @@ end
function circle: radius (center, radius) -- c --> center r --> radius
return circle : new (center, center + point( radius, 0 ) )
end
+
+function circle: diameter (za, zb)
+ local c = midpoint_(za,zb)
+ return circle : new (c, zb )
+end
-----------------------
-- boolean --
-----------------------
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
index f63b0d183a..fb15fd3b03 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_class.lua
@@ -1,6 +1,6 @@
-- tkz_elements_class.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- from class.lua (Simple Lua Classes from Lua-users wiki)
-- Compatible with Lua 5.1 (not 5.0).
-- http://lua-users.org/wiki/SimpleLuaClasses DavidManura
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
index b4cbe76a7e..dcac24758b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_ellipse.lua
@@ -1,6 +1,6 @@
-- tkz_elements-ellipses.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
index 76b8fb395b..a45987d1c8 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_circles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_circles.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
index 314174cb30..5c2a754352 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_intersections.lua
@@ -1,6 +1,6 @@
-- tkz_elements_intersections.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
index 4c3c260ff4..98f16d499b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_lines.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_lines.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
index fd030de8c1..c0b3effa0b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_maths.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -124,3 +124,10 @@ end
function barycenter (...)
return barycenter_ (...)
end
+
+function swap(a,b)
+ local t=a
+ a=b
+ b=t
+ return a,b
+end \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
index 34107d76fe..b396194148 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_points.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_points.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
index 378d855a21..3beff723ad 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_regular.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_regular.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
index 426bc1a88e..90781d961b 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_functions_triangles.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_triangles.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -143,9 +143,9 @@ function in_circle_ ( a,b,c )
kb = point.abs (c-a)
o = barycenter_ ( {a,ka} , {b,kb} , {c,kc} )
return o ,
- projection_ (a,b,o) ,
projection_ (b,c,o) ,
- projection_ (c,a,o)
+ projection_ (a,c,o) ,
+ projection_ (a,b,o)
end
function ex_circle_ ( a,b,c )
@@ -196,7 +196,7 @@ end
function incentral_tr_ (a,b,c)
local i,r,s,t
- i = in_center (a , b , c)
+ i = in_center_ (a , b , c)
r = intersection_ll_ ( a,i , b,c)
s = intersection_ll_ ( b,i , a,c)
t = intersection_ll_ ( c,i , a,b)
@@ -311,4 +311,24 @@ function in_out_ (a,b,c,pt)
else
return false
end
-end \ No newline at end of file
+end
+
+function soddy_center_ (a,b,c)
+ local i,ha,hb,hc,e,f,g,x,y,z,xp,yp,zp
+ i,e,f,g = in_circle_ (a,b,c)
+ ha,hb,hc = orthic_tr_ (a,b,c)
+ x,xp = intersection_lc_ (a,ha,a,g)
+ if (point.mod(ha-x)<point.mod(ha-xp)) then else x,xp=swap(x,xp) end
+ y,yp = intersection_lc_ (b,hb,b,e)
+ if (point.mod(hb-y)<point.mod(hb-yp)) then else y,yp=swap(y,yp) end
+ z,zp = intersection_lc_ (c,hc,c,f)
+ if (point.mod(hc-z)<point.mod(hc-zp)) then else z,zp=swap(z,zp) end
+ xi,t = intersection_lc_ (xp,e,a,g)
+ if in_out_ (a,b,c,xi) then else xi,t = swap(xi,t) end
+ yi,t = intersection_lc_ (yp,f,b,e)
+ if in_out_ (a,b,c,yi) then else yi,t = swap(yi,t) end
+ zi,t = intersection_lc_ (zp,g,c,f)
+ if in_out_ (a,b,c,zi) then else zi,t = swap(zi,t) end
+ s = circum_center_ (xi,yi,zi)
+ return s,xi,yi,zi
+end
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
index a8d8da22d3..f4169506fc 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
@@ -1,6 +1,6 @@
-- tkz_elements_lines.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -286,34 +286,83 @@ end
end
-function line: isosceles (phi)
- local pta,ptb
+function line: isosceles (phi,swap)
+ local pta,ptb
+ if swap == nil then
+ swap = false
+ end
+ if swap then
+ pta = rotation_ (self.pa,-phi,self.pb)
+ ptb = rotation_ (self.pb,phi,self.pa)
+ return triangle : new (self.pa,self.pb, intersection_ll_ (self.pa,pta,self.pb,ptb ))
+ else
pta = rotation_ (self.pa,phi,self.pb)
ptb = rotation_ (self.pb,-phi,self.pa)
return triangle : new (self.pa,self.pb, intersection_ll_ (self.pa,pta,self.pb,ptb ))
+end
end
-function line: gold ()
+function line: gold (swap)
local pt
+ if swap == nil then
+ swap = false
+ end
+if swap then
+ pt = rotation_ (self.pa,-math.pi/2,self.pb)
+ return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzinvphi)
+else
pt = rotation_ (self.pa,math.pi/2,self.pb)
return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzinvphi)
end
+end
-function line: euclide ()
+function line: euclide (swap)
+ if swap == nil then
+ swap = false
+ end
+if swap then
+ return triangle : new (self.pa,self.pb, rotation_ (self.pa,-math.pi/5,self.pb))
+else
return triangle : new (self.pa,self.pb, rotation_ (self.pa,math.pi/5,self.pb))
end
+ end
-function line: golden ()
+function line: golden (swap)
local pt
+ local pta,ptb
+ if swap == nil then
+ swap = false
+ end
+if swap then
+ pt = rotation_ (self.pa,-2*math.pi/5,self.pb)
+ return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzphi)
+else
pt = rotation_ (self.pa,2*math.pi/5,self.pb)
return triangle : new (self.pa,self.pb, self.pa + (pt-self.pa) * tkzphi)
+ end
end
------------------------------
-- Result -> couple of points
------------------------------
-function line: square ()
- return square : side (self.pa,self.pb)
+function line: square (swap)
+ if swap == nil
+ then
+ return square : side (self.pa,self.pb)
+ else
+ return square : side (self.pa,self.pb,indirect)
+ end
+end
+
+function line : report (d,pt)
+ local t
+ t = d/self.length
+ if pt == nil
+ then
+ return barycenter_({self.pa,1-t},{self.pb,(t)})
+else
+ return barycenter_({self.pa,1-t},{self.pb,(t)}) +pt-self.pa
+end
end
return line \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
index 4efa5b6169..86239953b6 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_main.lua
@@ -1,6 +1,6 @@
-- tkz_elements-main.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -37,6 +37,8 @@ require "tkz_elements_parallelogram.lua"
require "tkz_elements_quadrilateral.lua"
require "tkz_elements_rectangle.lua"
require "tkz_elements_square.lua"
+require "tkz_elements_misc.lua"
+require "tkz_elements_vector.lua"
require "tkz_elements_functions_maths.lua"
require "tkz_elements_functions_intersections.lua"
@@ -45,4 +47,3 @@ require "tkz_elements_functions_lines.lua"
require "tkz_elements_functions_circles.lua"
require "tkz_elements_functions_triangles.lua"
require "tkz_elements_functions_regular.lua"
-require "tkz_elements_misc.lua" \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
index 5667aba67f..f5f74a9a41 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_misc.lua
@@ -1,6 +1,6 @@
-- tkz_elements_functions_maths.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
index 330fd53f01..4839dce030 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_parallelogram.lua
@@ -1,6 +1,6 @@
-- tkz_elements_parallelogram.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
index 32e549a749..c2a12932f7 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_point.lua
@@ -1,6 +1,6 @@
-- tkz_elements_point.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
index 0731732310..011970ef53 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_quadrilateral.lua
@@ -1,6 +1,6 @@
-- tkz_elements_quadrilateral.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -49,7 +49,7 @@ function quadrilateral: new (za, zb, zc, zd)
return o
end
-----------------------
-function quadrilateral : cyclic ()
+function quadrilateral : iscyclic ()
local d,epsilon
epsilon = 10^(-8)
local alpha = point.arg ((self.pd-self.pa) / (self.pb-self.pa))
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
index 142ddbd8b2..7c53646978 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_rectangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements-rectangle.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -59,36 +59,65 @@ function rectangle: new (za, zb,zc,zd)
end
function rectangle : angle (zi,za,an)
+ local zb,zc,zd
local zc = symmetry_ (zi,za)
local zb = rotation_(zi,-an,zc)
local zd = symmetry_ (zi,zb)
return rectangle : new (za,zb,zc,zd)
end
-function rectangle : gold (za,zb)
- a = point.arg (zb-za)
- local d = point.abs(zb-za)/tkzphi
- local zc = zb : north (d/scale)
- zc = rotation_ (zb,a,zc)
- local zd = za : north (d/scale)
- zd = rotation_ (za,a,zd)
- return rectangle : new (za,zb,zc,zd)
+function rectangle : gold (za,zb,swap)
+ local zc,zd
+ local a = point.arg (zb-za)
+ local d = point.abs(zb-za)/tkzphi
+ if swap == nil then swap = false end
+ if swap then
+ zc = zb : south (d/scale)
+ zc = rotation_ (zb,a,zc)
+ zd = za : south (d/scale)
+ zd = rotation_ (za,a,zd)
+ return rectangle : new (za,zb,zc,zd)
+ else
+ zc = zb : north (d/scale)
+ zc = rotation_ (zb,a,zc)
+ zd = za : north (d/scale)
+ zd = rotation_ (za,a,zd)
+ return rectangle : new (za,zb,zc,zd)
+ end
end
-function rectangle : diagonal (za,zc)
- local zb = point (zc.re,za.im)
- local zd = point (za.re,zc.im)
+function rectangle : diagonal (za,zc,swap)
+ local zb,zd
+ if swap == nil then swap = false end
+ if swap then
+ zd = point (zc.re,za.im)
+ zb = point (za.re,zc.im)
+ return rectangle : new (za,zb,zc,zd)
+ else
+ zb = point (zc.re,za.im)
+ zd = point (za.re,zc.im)
return rectangle : new (za,zb,zc,zd)
end
+end
-function rectangle : side (za,zb,d)
- a = point.arg (zb-za)
- local zc = zb : north (d/scale)
- zc = rotation_ (zb,a,zc)
- local zd = za : north (d/scale)
- zd = rotation_ (za,a,zd)
+function rectangle : side (za,zb,d,swap)
+ local a,zc,zd
+ a = point.arg (zb-za)
+ if swap == nil then swap = false end
+ if swap then
+ zc = zb : south (d/scale)
+ zc = rotation_ (zb,a,zc)
+ zd = za : south (d/scale)
+ zd = rotation_ (za,a,zd)
+ return rectangle : new (za,zb,zc,zd)
+ else
+ zc = zb : north (d/scale)
+ zc = rotation_ (zb,a,zc)
+ zd = za : north (d/scale)
+ zd = rotation_ (za,a,zd)
return rectangle : new (za,zb,zc,zd)
end
+end
-------------------
function rectangle : get_lengths ()
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
index 4415b1c66f..bcf899f549 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_regular.lua
@@ -1,6 +1,6 @@
-- tkz_elements_regular.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
index 4dd007cc77..3e3724cd33 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_square.lua
@@ -1,6 +1,6 @@
-- tkz_elements-square.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -72,10 +72,17 @@ function square : rotation (zi,za)
return square : new (za,zb,zc,zd)
end
-function square : side (za,zb)
- local zc = rotation_ (zb,-math.pi/2,za)
- local zd = rotation_ (za,math.pi/2,zb)
- return square : new (za,zb,zc,zd)
+function square : side (za,zb,swap)
+ if swap == nil
+ then
+ local zc = rotation_ (zb,-math.pi/2,za)
+ local zd = rotation_ (za,math.pi/2,zb)
+ return square : new (za,zb,zc,zd)
+ else
+ local zc = rotation_ (zb,math.pi/2,za)
+ local zd = rotation_ (za,-math.pi/2,zb)
+ return square : new (za,zb,zc,zd)
+ end
end
return square \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
index 6ef6be0a9a..356b4cc76a 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_triangle.lua
@@ -1,6 +1,6 @@
-- tkz_elements_triangles.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -396,6 +396,15 @@ end
function triangle: check_equilateral ()
return check_equilateral_ (self.pa,self.pb,self.pc)
end
+function triangle : soddy_center ()
+ local s,i,j,k
+ return soddy_center_ (self.pa,self.pb,self.pc)
+end
+function triangle : soddy_circle ()
+ local s,i
+ s,i = soddy_center_ (self.pa,self.pb,self.pc)
+ return circle : new ( s , i )
+end
return triangle \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
index 96d6eee1fc..3ac9aa877c 100644
--- a/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
+++ b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua
@@ -1,6 +1,6 @@
-- tkz_elements_vectors.lua
--- date 23/12/03
--- version 1.40c
+-- date 23/12/08
+-- version 1.50c
-- Copyright 2023 Alain Matthes
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
@@ -15,12 +15,14 @@
-- ----------------------------------------------------------------------------
vector = {}
function vector: new(z1, z2)
- local type = 'vector'
- local norm = point.abs(z2-z1)
+ local type = 'vector'
+ local norm = point.abs (z2-z1)
+ local arg = point.arg (z2-z1)
local o = {st = z1,
- ed = z2,
- norm = norm,
- type = type }
+ ed = z2,
+ norm = norm,
+ arg = arg,
+ type = type }
setmetatable(o, self)
self.__index = self
return o
@@ -36,4 +38,9 @@ end
function vector: add (v)
return vector :new (self.st+v.st, self.ed,v.ed)
end
+
+ function vector: ortho ()
+ return vector : new (self.st, rotation_(self.st,math.pi/2,self.ed))
+ end
+
return vector