summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-02-21 03:01:35 +0000
committerNorbert Preining <norbert@preining.info>2024-02-21 03:01:35 +0000
commit2f56d3421e4663856409792eb5b08a2c57b38a8c (patch)
treee06fab87f70b77ad8d8fef43cfc25293e20127f8 /macros/latex/contrib
parent203d8df9dde93676afcceb5ace315faeda77d016 (diff)
CTAN sync 202402210301
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/colortbl/README.txt4
-rw-r--r--macros/latex/contrib/colortbl/colortbl-DE.pdfbin344915 -> 346445 bytes
-rw-r--r--macros/latex/contrib/colortbl/colortbl.dtx143
-rw-r--r--macros/latex/contrib/colortbl/colortbl.pdfbin296824 -> 312112 bytes
-rw-r--r--macros/latex/contrib/create-theorem/README.md2
-rw-r--r--macros/latex/contrib/create-theorem/create-theorem-doc.pdfbin88000 -> 88400 bytes
-rw-r--r--macros/latex/contrib/create-theorem/create-theorem-doc.tex8
-rw-r--r--macros/latex/contrib/create-theorem/create-theorem.sty50
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx24
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin602008 -> 602450 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex16
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.dtx333
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.pdfbin577443 -> 580598 bytes
-rw-r--r--macros/latex/contrib/l3backend/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/l3backend/README.md2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-basics.dtx14
-rw-r--r--macros/latex/contrib/l3backend/l3backend-box.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-code.pdfbin910529 -> 910339 bytes
-rw-r--r--macros/latex/contrib/l3backend/l3backend-color.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-draw.dtx4
-rw-r--r--macros/latex/contrib/l3backend/l3backend-graphics.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-header.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-opacity.dtx2
-rw-r--r--macros/latex/contrib/l3backend/l3backend-pdf.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/CHANGELOG.md10
-rw-r--r--macros/latex/contrib/l3experimental/README.md2
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3benchmark.pdfbin308420 -> 298116 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-boxes.dtx2
-rw-r--r--macros/latex/contrib/l3experimental/l3draw-code.pdfbin684116 -> 683797 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.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3draw.pdfbin518609 -> 516478 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3galley.pdfbin408796 -> 405966 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3graphics.pdfbin383526 -> 378266 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3opacity.pdfbin313477 -> 299358 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/l3str-format.pdfbin367974 -> 337262 bytes
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.dtx55
-rw-r--r--macros/latex/contrib/l3experimental/l3sys-shell.pdfbin347930 -> 346725 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/xcoffins.pdfbin394367 -> 390902 bytes
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.dtx4
-rw-r--r--macros/latex/contrib/l3experimental/xgalley.pdfbin299509 -> 323194 bytes
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md13
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin610339 -> 609936 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1793104 -> 1792518 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx10
-rw-r--r--macros/latex/contrib/l3kernel/l3bitset.dtx2
-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/l3cctab.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.pdfbin565548 -> 565153 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin151219 -> 150870 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx2
-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.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx32
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx2
-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.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin82720 -> 82720 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx139
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx2
-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.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin296530 -> 296131 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin231378 -> 230975 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx16
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin242164 -> 241772 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx2
-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.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin7556690 -> 7559694 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/source3body.tex4
-rw-r--r--macros/latex/contrib/mismath/mismath.dtx383
-rw-r--r--macros/latex/contrib/mismath/mismath.ins4
-rw-r--r--macros/latex/contrib/mismath/mismath.pdfbin276197 -> 280380 bytes
-rw-r--r--macros/latex/contrib/robust-externalize/robust-externalize.pdfbin1596591 -> 1630257 bytes
-rw-r--r--macros/latex/contrib/robust-externalize/robust-externalize.sty175
-rw-r--r--macros/latex/contrib/robust-externalize/robust-externalize.tex120
150 files changed, 1201 insertions, 574 deletions
diff --git a/macros/latex/contrib/colortbl/README.txt b/macros/latex/contrib/colortbl/README.txt
index 542498a903..6cd6324855 100644
--- a/macros/latex/contrib/colortbl/README.txt
+++ b/macros/latex/contrib/colortbl/README.txt
@@ -5,3 +5,7 @@ The colortbl package:
Process colortbl.dtx to get the documentation (this requires
longtable hhline and dcolumn from the standard `tools'
distribution.)
+
+David Carlisle
+Licence: LPPL 1.3
+https://github.com/davidcarlisle/dpctex/issues
diff --git a/macros/latex/contrib/colortbl/colortbl-DE.pdf b/macros/latex/contrib/colortbl/colortbl-DE.pdf
index 7dccb6c616..1a4ea3ccea 100644
--- a/macros/latex/contrib/colortbl/colortbl-DE.pdf
+++ b/macros/latex/contrib/colortbl/colortbl-DE.pdf
Binary files differ
diff --git a/macros/latex/contrib/colortbl/colortbl.dtx b/macros/latex/contrib/colortbl/colortbl.dtx
index 3e368d1a55..68c4bdbaf5 100644
--- a/macros/latex/contrib/colortbl/colortbl.dtx
+++ b/macros/latex/contrib/colortbl/colortbl.dtx
@@ -1,7 +1,7 @@
% \iffalse
%%
%% Source File: `colortbl.dtx'.
-%% Copyright 1996 1998 1999 2012 2018 2020 2022 David Carlisle
+%% Copyright 1996 1998 1999 2012 2018 2020 2022 2024 David Carlisle
%%
%% This file may be distributed under the terms of the LPPL.
%% See readme for details.
@@ -15,7 +15,7 @@
%<driver>\ProvidesFile{colortbl.drv}
% \fi
% \ProvidesFile{colortbl.dtx}
- [2022/06/20 v1.0f Color table columns (DPC)]
+ [2024/02/20 v1.0g Color table columns (DPC)]
%
% \iffalse
%<*driver>
@@ -37,14 +37,16 @@
% \title{The \textsf{colortbl} package\thanks{This file
% has version number \fileversion, last
% revised \filedate.}}
-% \author{David Carlisle}
+% \author{David Carlisle%\thanks
+% {Report issues to
+% \texttt{https://github.com/davidcarlisle/dpctex/issues}}}
% \date{\filedate}
%
% \maketitle
%
%
% \begin{abstract}
-% This package implements a flexible mechanism for giving coloured
+% This package implements a flexible mechanism for giving colored
% `panels' behind specified columns in a table.
% This package requires the \textsf{array} and \textsf{color} packages.
% \end{abstract}
@@ -77,7 +79,7 @@
%
% \section{Introduction}
%
-% This package is for colouring tables (i.e., giving coloured panels
+% This package is for coloring tables (i.e., giving colored panels
% behind column entries). In that it has many similarities with
% Timothy Van Zandt's \textsf{colortab} package. The internal
% implementation is quite different though, also \textsf{colortab}
@@ -107,17 +109,17 @@
% The examples below demonstrate various possibilities of the
% "\columncolor" command introduced by this package. The vertical rules
% specified by "|" are kept in all the examples, to make the column
-% positioning clearer, although possibly you would not want coloured
+% positioning clearer, although possibly you would not want colored
% panels \emph{and} vertical rules in practice.
%
% The package supplies a "\columncolor" command, that should (only) be
-% used in the argument of a ">" column specifier, to add a coloured
+% used in the argument of a ">" column specifier, to add a colored
% panel behind the specified column. It can be used in the main
% `preamble' argument of \textsf{array} or \textsf{tabular}, and also in
% "\multicolumn" specifiers.
%
% The basic format is:\\
-% "\columncolor"\oarg{color model}\marg{colour}
+% "\columncolor"\oarg{color model}\marg{color}
% \oarg{left overhang}\oarg{right overhang}
%
% The first argument (or first two if the optional argument is used)
@@ -248,19 +250,19 @@
% \multicolumn{1}{H}{(wrong)}&
% \multicolumn{1}{I}{100.6}\\
% aaa&bbb&1.345\\
-% Note that the coloured rules in all columns stretch to accomodate
+% Note that the colored rules in all columns stretch to accomodate
% large entries in one column. &bbb&1.345\\
% aaa&bbb&100\\
% aaa&Depending on your driver you may get unsightly gaps or lines
% where the `screens' used to produce different shapes interact
-% badly. You may want to cause adjacent panels of the same colour by
+% badly. You may want to cause adjacent panels of the same color by
% specifying a larger overhang
% or by adding some negative space (in a "\noalign" between rows.&12.4\\
% aaa&bbb&45.3\\
% \end{longtable}
%
% This
-% example shows rather poor taste but is quite colourful!
+% example shows rather poor taste but is quite colorful!
% Inspect the source file, "colortbl.dtx", to see the full code for
% the example, but it uses the following column types.
%\begin{verbatim}
@@ -295,7 +297,7 @@
% \textsf{tabular*}?
%
% Here the problem is rather harder. Although \TeX's "\leader" mechanism
-% which is used by this package to insert the `stretchy' coloured panels
+% which is used by this package to insert the `stretchy' colored panels
% is rather like \emph{glue}, the "\tabskip" glue that is inserted
% between columns of \textsf{tabular*} (and \textsf{longtable} for that
% matter) has to be `real glue' and not `leaders'.
@@ -351,7 +353,7 @@
%
% \section{The \cs{rowcolor} command}
%
-% As demonstrated above, one may change the colour of specified rows
+% As demonstrated above, one may change the color of specified rows
% of a table by the use of "\multicolumn" commands in each entry of
% the row. However if your table is to be marked principally by
% \emph{rows}, you may find this rather inconvenient. For this reason
@@ -366,9 +368,9 @@
%
% If a table entry is in the scope of a "\columncolor" specified in the
% table preamble, and also a "\rowcolor" at the start of the current
-% row, the colour specified by "\rowcolor" will take effect. A
+% row, the color specified by "\rowcolor" will take effect. A
% "\multicolumn" command may contain ">{\rowcolor"\ldots\ which will
-% override the default colours for both the current row and column.
+% override the default colors for both the current row and column.
% \begin{center}
%\begin{minipage}{.75\textwidth}
%\begin{verbatim}
@@ -391,7 +393,7 @@
%
% \section{The \cs{rowcolors} command}
% The \cs{rowcolors} command and its documentation originate in the \textsf{xcolor} package
-% by Dr. Uwe Kern.
+% by Dr.\ Uwe Kern.
%
% \DescribeMacro\rowcolors
% \oarg{commands}\marg{row}\marg{odd-row color}\marg{even-row color}\\
@@ -487,12 +489,12 @@
%
% \section{The \cs{cellcolor} command}
%
-% A background colour can be applied to a single cell of a table by
+% A background color can be applied to a single cell of a table by
% beginning it with
% "\multicolumn"\nolinebreak[3]"{1}"\nolinebreak[3]"{>{\rowcolor"\ldots,
-% (or "\columncolor" if no row-colour is in effect) but this has some
+% (or "\columncolor" if no row-color is in effect) but this has some
% deficiencies:
-% 1)~It prevents data within the cell from triggering the colouration; \
+% 1)~It prevents data within the cell from triggering the coloration; \
% 2)~The alignment specification must be copied from the top of the tabular,
% which is prone to errors, especially for "p{}" columns; \
% 3)~"\multicolumn{1}" is just silly. \
@@ -501,26 +503,26 @@
% \cs{cellcolor} can be placed anywhere in the tabular cell to which
% it applies.
%
-% \section{Colouring rules.}
+% \section{Coloring rules.}
%
-% So you want coloured rules as well?
+% So you want colored rules as well?
%
% One could do vertical rules without any special commands, just use
% something like "!{\color{green}\vline}" where you'd
% normally use "|". The space between "||" will normally be left white.
-% If you want to colour that as well, either increase the overhang of
+% If you want to color that as well, either increase the overhang of
% the previous column (to
% "\tabcolsep" + "\arrayrulewidth" + "\doublerulesep")
-% Or remove the inter rule glue, and replace by a coloured rule of the
+% Or remove the inter rule glue, and replace by a colored rule of the
% required thickness. So
%\begin{verbatim}
%!{\color{green}\vline}
%@{\color{yellow}\vrule width \doublerulesep}
%!{\color{green}\vline}
%\end{verbatim}
-% Should give the same spacing as "||" but more colour.
+% Should give the same spacing as "||" but more color.
%
-% However colouring "\hline" and "\cline" is a bit more tricky, so
+% However coloring "\hline" and "\cline" is a bit more tricky, so
% extra commands are provided (which then apply to vertical rules as
% well).
%
@@ -531,18 +533,18 @@
% the start of a row, or in a ">" specification in a table preamble.
% You should note however that if given mid-table it only affects
% rules that are specified after this point, any vertical rules
-% specified in the preamble will keep their original colours.
+% specified in the preamble will keep their original colors.
%
% \section{\cs{doublerulesepcolor}}
-% Having coloured your rules, you'll probably want something other
+% Having colored your rules, you'll probably want something other
% than white to go in the gaps made by "||" or "\hline\hline".
% "\doublerulesepcolor" works just the same way as "\arrayrulecolor".
% The main thing to note that if this command is used, then
% \textsf{longtable} will not `discard' the space between
% "\hline\hline" at a page break. (\TeX\ has a built-in ability to
-% discard space, but the coloured `space' which is used once
+% discard space, but the colored `space' which is used once
% "\doublerulesep" is in effect is really a third rule of a different
-% colour to the two outer rules, and rules are rather harder to
+% color to the two outer rules, and rules are rather harder to
% discard.)
%
% \begin{center}
@@ -651,9 +653,9 @@
%\end{verbatim}
%
% \section{Less fun with \cs{cline}}
-% Lines produced by "\cline" are coloured if you use
+% Lines produced by "\cline" are colored if you use
% "\arrayrulecolor" but you may not notice as they are covered up by
-% any colour pannels in the following row. This is a `feature' of
+% any color pannels in the following row. This is a `feature' of
% "\cline". If using this package you would probably better using the
% "-" rule type in a "\hhline" argument, rather than "\cline".
%
@@ -662,7 +664,7 @@
% As this package has to box and measure every entry to figure out
% how wide to make the rules, I thought I may as well add the
% following feature. `Large' entries in tables may touch a preceding
-% "\hline" or the top of a colour panel defined by this style.
+% "\hline" or the top of a color panel defined by this style.
% It is best to increase "\extrarowsep" or "\arraystretch"
% sufficiently to ensure this doesn't happen, as that will keep the
% line spacing in the table regular. Sometimes however, you just want
@@ -725,10 +727,10 @@
\@tempcnta \count@
\prepnext@tok
% \end{macrocode}
-% At this point the colour specification for the background panel will
+% At this point the color specification for the background panel will
% be in the code for the `">"' specification of this column. This is
% saved in "\toks\@temptokena" but \textsf{array} will insert it too
-% late (well it would work for "c", but not for "p") so fish the colour
+% late (well it would work for "c", but not for "p") so fish the color
% stuff out of that token register by hand, and then insert it around
% the entry.
%
@@ -744,7 +746,7 @@
% \begin{macrocode}
\expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil
% \end{macrocode}
-% Save the entry into a box (using a double group for colour safety as
+% Save the entry into a box (using a double group for color safety as
% usual).
% \begin{macrocode}
\@addtopreamble{%
@@ -767,8 +769,10 @@
% \end{macrocode}
% "l" and "r" as before, but using fill glue.
% \begin{macrocode}
- \d@llarbegin \insert@column \d@llarend\do@row@strut \hfill \or
- \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend\do@row@strut \or
+ \d@llarbegin \insert@column \d@llarend\do@row@strut \hfill
+ \or
+ \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend\do@row@strut
+ \or
% \end{macrocode}
% "m", "p" and "b" as before, but need to take account of array package update.
% \begin{macrocode}
@@ -782,8 +786,9 @@
\do@row@strut
\fi
\or
- \vtop \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut \or
- \vbox \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut
+ \vtop \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut
+ \or
+ \vbox \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut
\fi
% \end{macrocode}
% Close the box register assignment.
@@ -796,7 +801,7 @@
% \begin{macrocode}
\begingroup
% \end{macrocode}
-% Initalise colour command and overhands.
+% Initalise color command and overhands.
% \begin{macrocode}
\CT@setup
% \end{macrocode}
@@ -815,15 +820,15 @@
\CT@cell@color
% \end{macrocode}
% This is "\relax" unless one of the three previous commands has requested
-% a colour, in which case it will be "\CT@@do@color" which will insert
-% "\leaders" of appropriate colour.
+% a color, in which case it will be "\CT@@do@color" which will insert
+% "\leaders" of appropriate color.
% \begin{macrocode}
\CT@do@color
\endgroup
% \end{macrocode}
-% Nothing to do with colour this bit, since we are boxing and measuring
+% Nothing to do with color this bit, since we are boxing and measuring
% the entry anyway may as well check the height, so that large entries
-% don't bump into horizontal rules (or the top of the colour panels).
+% don't bump into horizontal rules (or the top of the color panels).
% \begin{macrocode}
\@tempdima\ht\z@
\advance\@tempdima\minrowclearance
@@ -836,7 +841,7 @@
% fill glue, then the leaders will not reach the full width of the
% entry. In the case of "\multicolumn" entries it is actually possible
% for this box to contribute \emph{shrink} glue, in which case the
-% coloured panel for that entry will be too wide. Tough luck.
+% colored panel for that entry will be too wide. Tough luck.
% \begin{macrocode}
\unhbox\z@}%
% \end{macrocode}
@@ -847,7 +852,7 @@
% \end{macro}
%
% \begin{macro}{\CT@setup}
-% Initialise the overhang lengths and the colour command.
+% Initialise the overhang lengths and the color command.
% \begin{macrocode}
\def\CT@setup{%
\@tempdimb\col@sep
@@ -859,9 +864,9 @@
% \end{macro}
%
% \begin{macro}{\CT@@do@color}
-% The main point of the package: Add the colour panels.
+% The main point of the package: Add the color panels.
%
-% Add a leader of the specified colour, with natural width the
+% Add a leader of the specified color, with natural width the
% width of the entry plus the specified overhangs and 1fill stretch.
% Surround by negative kerns so total natural width is not affected by
% overhang.
@@ -874,7 +879,7 @@
\kern-\@tempdimb
\leaders\vrule
% \end{macrocode}
-% For quick debugging with xdvi (which can't do colours). Limit the size
+% For quick debugging with xdvi (which can't do colors). Limit the size
% of the rule, so I can see the text as well.
% \begin{macrocode}
^^A \@height\p@\@depth\p@
@@ -919,10 +924,10 @@
% \end{macro}
%
% \begin{macro}{\CT@extractb}
-% Define "\CT@column@color" to add the right colour, and save the
+% Define "\CT@column@color" to add the right color, and save the
% overhang lengths. Finally reconstitute the saved `">"' tokens,
-% without the colour specification.
-% First grab the colour spec, with optional arg.
+% without the color specification.
+% First grab the color spec, with optional arg.
% \begin{macrocode}
\def\CT@extractb#1#2]#3{%
\def\CT@column@color{%
@@ -962,7 +967,7 @@
%
%
% \begin{macro}{\CT@everycr}
-% Steal "\everypar" to initialise row colours
+% Steal "\everypar" to initialise row colors
% \begin{macrocode}
\let\CT@everycr\everycr
\newtoks\everycr
@@ -1022,30 +1027,30 @@
% \begin{macro}{\multicolumn}
% "\multicolumn"
% \changes{v1.0a}{2012/02/13}{make \cs{multicolumn} long (see test ct1)}
+% \changes{v1.0g}{2024/02/20}{Add to existing definition to for dpctex 47}
+% Patch "\multicolumn" to restore color settings. Done this way to work wth
+% different versions depending on the age of the \textsf{array} package.
% \begin{macrocode}
-\long\def\multicolumn#1#2#3{%
- \multispan{#1}\begingroup
- \def\@addamp{\if@firstamp \@firstampfalse \else
- \@preamerr 5\fi}%
- \@mkpream{#2}\@addtopreamble\@empty
- \endgroup
- \def\@sharp{#3}%
- \let\CT@cell@color\relax
+\def\@tempa#1\@arstrut#2\relax{
+ \long\def\multicolumn##1##2##3{%
+ #1%
% \end{macrocode}
% \changes{v1.0a}{2012/02/13}{don't reset \cs{CT@row@color} (see test ct3)}
% \let\CT@row@color\relax
% \begin{macrocode}
+ \let\CT@cell@color\relax
\let\CT@column@color\relax
\let\CT@do@color\relax
- \@arstrut \@preamble
- \null
- \ignorespaces}
+ \@arstrut
+ #2}}
+\expandafter\@tempa\multicolumn{#1}{#2}{#3}\relax
+\let\@temp\relax
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@classvi}
-% Coloured rules and rule separations.
+% Colored rules and rule separations.
% \begin{macrocode}
\def\@classvi{\ifcase \@lastchclass
\@acol \or
@@ -1136,8 +1141,8 @@
% \end{macro}
%
% \begin{macro}{\cline}
-% "\cline" doesn't really work, as it comes behind the coloured panels,
-% but at least make it the right colour (the bits you can see, anyway).
+% "\cline" doesn't really work, as it comes behind the colored panels,
+% but at least make it the right color (the bits you can see, anyway).
% \begin{macrocode}
\def\@cline#1-#2\@nil{%
\omit
@@ -1351,7 +1356,7 @@
%
%
% \begin{macro}{\cellcolor}
-% "\cellcolor" applies the specified colour to just its own tabular cell.
+% "\cellcolor" applies the specified color to just its own tabular cell.
% It is defined robust, but without using "\DeclareRobustCommand" or
% "\newcommand{}[][]" because those forms are not used elsewhere, and
% would not work in \emph{very} old \LaTeX.
@@ -1471,7 +1476,7 @@
% \changes{v0.1f}{1996/10/10}
% {Remove backspacing for t and b in \cs{hhline}}
% Stop the backspacing for "t" and "b", it messes up the underlying
-% colour.
+% color.
% \begin{macrocode}
\ifx\@tempb t\HH@add{%
\def\HH@height{\dimen\thr@@}%
diff --git a/macros/latex/contrib/colortbl/colortbl.pdf b/macros/latex/contrib/colortbl/colortbl.pdf
index 88310439cd..b2ec8709a6 100644
--- a/macros/latex/contrib/colortbl/colortbl.pdf
+++ b/macros/latex/contrib/colortbl/colortbl.pdf
Binary files differ
diff --git a/macros/latex/contrib/create-theorem/README.md b/macros/latex/contrib/create-theorem/README.md
index c731811c3d..90ae54948b 100644
--- a/macros/latex/contrib/create-theorem/README.md
+++ b/macros/latex/contrib/create-theorem/README.md
@@ -1,4 +1,4 @@
-<!-- Copyright (C) 2021-2023 by Jinwen XU -->
+<!-- Copyright (C) 2021-2024 by Jinwen XU -->
# `create-theorem` - Initializing and configuring theorem-like environments, with multilingual support
diff --git a/macros/latex/contrib/create-theorem/create-theorem-doc.pdf b/macros/latex/contrib/create-theorem/create-theorem-doc.pdf
index 7f2154adcb..6534126f29 100644
--- a/macros/latex/contrib/create-theorem/create-theorem-doc.pdf
+++ b/macros/latex/contrib/create-theorem/create-theorem-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/create-theorem/create-theorem-doc.tex b/macros/latex/contrib/create-theorem/create-theorem-doc.tex
index c61a73a87e..888767dad7 100644
--- a/macros/latex/contrib/create-theorem/create-theorem-doc.tex
+++ b/macros/latex/contrib/create-theorem/create-theorem-doc.tex
@@ -107,13 +107,13 @@
\begin{document}
-\def\PackageVersion{2023/07/23}
+\def\PackageVersion{2024/02/20}
\def\PackageSubVersion{}
\title{\createtheorempackage{}\\\smallskip\itshape Initializing and configuring theorem-like environments, with multilingual support}
\author{Jinwen XU}
\thanks{Corresponding to: \texttt{\createtheorempackage{} \PackageVersion\PackageSubVersion}}
-\date{\TheDate{\PackageVersion}[only-year-month], in Beijing}
+\date{\TheDate{\PackageVersion}[only-year-month], in Paris}
\maketitle
@@ -725,7 +725,9 @@ The configuration using \lstinline|\NameTheorems| is compatible with that using
\section{Known issues}
\begin{itemize}
- \item \createtheorempackage{} modifies some undocumented internal macros of \textsf{cleveref}, so the behaviour might not be stable if \textsf{cleveref} gets updated.
+ \item \createtheorempackage{} modifies some undocumented internal macros of \textsf{cleveref}, so the behavior might not be stable if \textsf{cleveref} gets updated one day.
+ \item The current naming mechanism for theorems essentially follows the syntax of \textsf{cleveref}. The configuration may look somewhat redundant. In a future version, a new mechanism is planed to be introduced, which would be similar to the method used by \textsf{zref-clever}.
+ \item It is current not possible to temporarily change the referencing type when referencing, which makes it difficult to reference a \textquote{\texttt{namedtheorem}}, or if you have both the singular and plural form of an environment, say \textquote{\texttt{example}} and \textquote{\texttt{examples}}, they would be referred to as two separate types.
\item The counter aliasing function is still not perfect, (sometimes) causing incorrect ordering in the result of \lstinline|\cref|.
\item There might be inaccuracies in the translation of those preset names.
\end{itemize}
diff --git a/macros/latex/contrib/create-theorem/create-theorem.sty b/macros/latex/contrib/create-theorem/create-theorem.sty
index a488ad7bc3..d8e2ffbc35 100644
--- a/macros/latex/contrib/create-theorem/create-theorem.sty
+++ b/macros/latex/contrib/create-theorem/create-theorem.sty
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2021-2023 by Jinwen XU
+%% Copyright (C) 2021-2024 by Jinwen XU
%% ------------------------------------
%%
%% This file may be distributed and/or modified under the conditions of
@@ -12,7 +12,7 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{create-theorem}
- {2023/07/23} {}
+ {2024/02/20} {}
{Initializing theorem-like environments with multilingual support}
\keys_define:nn { create-theorem }
@@ -346,7 +346,8 @@
}
% Redefine the cref formats so that definite articles are placed outside the hyperlinks
- \crthm_define_format_short_version:nnnn { #2 } { #4 ref@ #1 @format }
+ \crthm_modify_format_according_to_nameinlink:nnn
+ { \crthm_define_format_short_version:nnnn { #2 } { #4 ref@ #1 @format } }
{ \tl_use:c { g_crthm_name_ #4 ref_article_singular_ #2 _ #3 _tl } }
{
\bool_if:NTF \g__crefthe_has_prep_bool
@@ -357,7 +358,8 @@
\tl_use:c { g_crthm_name_ #4 ref_singular_ #2 _ #3 _tl }
}
}
- \crthm_define_format_short_version:nnnn { #2 } { #4 ref@ #1 @format@first }
+ \crthm_modify_format_according_to_nameinlink:nnn
+ { \crthm_define_format_short_version:nnnn { #2 } { #4 ref@ #1 @format@first } }
{ \tl_use:c { g_crthm_name_ #4 ref_article_plural_ #2 _ #3 _tl } }
{
\bool_if:NTF \g__crefthe_has_prep_bool
@@ -390,7 +392,8 @@
\group_end:
}
- \crthm_define_format_long_version:nnnn { #2 } { #4 refrange@ #1 @format }
+ \crthm_modify_format_according_to_nameinlink:nnn
+ { \crthm_define_format_long_version:nnnn { #2 } { #4 refrange@ #1 @format } }
{ \tl_use:c { g_crthm_name_ #4 ref_article_plural_ #2 _ #3 _tl } }
{
\bool_if:NTF \g__crefthe_has_prep_bool
@@ -401,7 +404,8 @@
\tl_use:c { g_crthm_name_ #4 ref_plural_ #2 _ #3 _tl }
}
}
- \crthm_define_format_long_version:nnnn { #2 } { #4 refrange@ #1 @format@first }
+ \crthm_modify_format_according_to_nameinlink:nnn
+ { \crthm_define_format_long_version:nnnn { #2 } { #4 refrange@ #1 @format@first } }
{ \tl_use:c { g_crthm_name_ #4 ref_article_plural_ #2 _ #3 _tl } }
{
\bool_if:NTF \g__crefthe_has_prep_bool
@@ -507,11 +511,26 @@
}
}
+\cs_new:Nn \crthm_modify_format_according_to_nameinlink:nnn
+ % #1 = the macro (and argument) to be used
+ % #2 = content always before the hyperlink beginning mark
+ % #3 = content before or after the hyperlink beginning mark, depending on whether nameinlink=true
+ {
+ \bool_if:NTF \l__crthm_nameinlink_bool
+ {
+ #1 { #2 } { #3 }
+ }
+ {
+ #1 { #2 #3 \nobreakspace } { }
+ }
+ }
+
\cs_new:Nn \crthm_define_format_short_version:nnnn
- { % #1 = name of the environment
- % #2 = name of the format command
- % #3 = content before the hyperlink beginning mark
- % #4 = content after the hyperlink beginning mark
+ % #1 = name of the environment
+ % #2 = name of the format command
+ % #3 = content before the hyperlink beginning mark
+ % #4 = content after the hyperlink beginning mark
+ {
\cs_if_exist:cF { crthm_format_ #2 :nnn }
{
\cs_new:cn { crthm_format_ #2 :nnn }
@@ -524,10 +543,11 @@
}
}
\cs_new:Nn \crthm_define_format_long_version:nnnn
- { % #1 = name of the environment
- % #2 = name of the format command
- % #3 = content before the hyperlink beginning mark
- % #4 = content after the hyperlink beginning mark
+ % #1 = name of the environment
+ % #2 = name of the format command
+ % #3 = content before the hyperlink beginning mark
+ % #4 = content after the hyperlink beginning mark
+ {
\cs_if_exist:cF { crthm_format_ #2 :nnnnnn }
{
\cs_new:cn { crthm_format_ #2 :nnnnnn }
@@ -939,6 +959,8 @@
{ The~theorem-like~environment~"#1"~cannot~be~created,~you~have~to~name~it~before~initialization. }
\cs_new:Nn \crthm_create_theorem:nn
+ % #1 = env name
+ % #2 = options
{
\tl_set:Nn \l__crthm_current_env_tl { #1 }
\bool_set_false:N \l__crthm_creating_apply_style_bool
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index bf101810cd..873e0b11a4 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -15,7 +15,7 @@
%<*class>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/02/18}{2024ae}
+\ProvidesExplClass{easybook}{2024/02/20}{2024ah}
{Easily typesetting Chinese theses or books}
\bool_set_false:N \l__eb_compile_draft_bool
@@ -39,7 +39,7 @@
cjkfont .code:n = \eb_put_ctexbook:n { fontset = #1 },
mathfont .tl_set:N = \l__eb_mathfont_value_tl,
mathfont .initial:n = times,
- config .clist_gset:N = \g__eb_config_file_clist,
+ configs .clist_gset:N = \g__eb_configs_file_clist,
paper .code:n = { },
class.code:n = { },
floatpage.code:n = { },
@@ -56,8 +56,8 @@
\ctex_at_end_preamble:n
{
\use:c { eb@font@load@\l__eb_font_value_tl }
- \clist_if_empty:NF \g__eb_config_file_clist
- { \clist_map_function:NN \g__eb_config_file_clist \file_input:n }
+ \clist_if_empty:NF \g__eb_configs_file_clist
+ { \clist_map_function:NN \g__eb_configs_file_clist \file_input:n }
}
\sys_if_engine_xetex:TF
@@ -297,7 +297,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/02/18}{2024ae}
+\ProvidesExplPackage{easybase}{2024/02/20}{2024ah}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -2223,15 +2223,15 @@
\ctex_define:nx { refset }
{
linkcolor .choice:,
+ linkcolor .value_required:n = true,
\clist_map_function:nN
{
- { fresh, 62d71f,0000B2,005752 },
- { cutepink, ff69b4,9d5196,57b5e5 },
- { navyblue, 000080,004986,eb6877 },
- { crimson, dc143c,00c1c9,afcd20 }
+ { fresh, 62d71f,0000b2,005752 },
+ { cutepink, ea4492,ad3ccc,57b5e5 },
+ { navyblue, 000080,4ec9ea,eb6877 },
+ { crimson, dc143c,00c1c9,afcd20 }
}
\eb_link_color_set:n
- linkcolor .default:n = navyblue,
linkcolor .initial:n = navyblue,
linkcolor-every .code:n = \eb_define_link_color:n { \exp_not:n {#1} }
}
@@ -2242,7 +2242,7 @@
\clist_map_function:nN
{
{ none, 000000,000000,000000 },
- { seaside, 3f3fc4,9932cc,09cc00 },
+ { seaside, 333fb2,9932cc,09cc00 },
{ energy, f39800,00a0e9,893895 },
{ cyberpunk, 601986,eb6877,a4005b }
}
@@ -2379,7 +2379,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/02/18}{2024ae}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/02/20}{2024ah}
{Customization of tcolorbox for easybook}
\cs_set_protected:Npn \addtotcbstyle #1#2
diff --git a/macros/latex/contrib/easybook/easybook.pdf b/macros/latex/contrib/easybook/easybook.pdf
index 1330b516ff..234d82c590 100644
--- a/macros/latex/contrib/easybook/easybook.pdf
+++ b/macros/latex/contrib/easybook/easybook.pdf
Binary files differ
diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex
index 92848347f4..5bf1cadc71 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024ae,
- date = 2024/02/18,
+ version = v2024ah,
+ date = 2024/02/20,
authors = 瞿毅,
info = 简便地排版中文学位论文或书籍,
email = toquyi@163.com,
@@ -271,7 +271,7 @@
同时开启 \option{newline} 和 \keyis{scheme}{plain} 选项以符合英文原生风格。
\keychoice{paper}{\fbox{a4paper},b5paper,c5paper,letterpaper,\textcolor{SlateGray}{other paper}}
文档页面尺寸选项将参数交给 \pkg*{geometry} 宏包处理,可使用它支持的所有标准纸张规格。
- \keyval{config}{配置文件列表}\dtag
+ \keyval{configs}{配置文件列表}\dtag\newtag[Chg]%
载入用户配置的文件名列表,文件列表以花括号包裹并以英文逗号分隔。文件名应包含如 \code{tex}、\code{def} 或 \code{cfg} 等扩展名。若配置文件不在当前文件夹则文件名需要包含路径,即 \code{path/file.cfg}。
\keychoice{floatpage}{true,\fbox{false}}
开启这个选项后浮动环境 \env{table} 和 \env{figure} 的比例参数会使用默认值。关闭它则尽可能避免出现浮动页,使图表环境与正文段落更加紧凑,减少多余的空白版面。
@@ -372,7 +372,11 @@
预置了四种颜色主题,默认主题 \code{none} 为黑白页面,颜色主题不包括超链接。
\begin{commands}
\command{DeclareThemeColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
- 声明新的颜色主题命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成主题颜色列表。类似地更改超链接颜色见\ref{subsec:hyperlinks}。
+ 声明新的颜色主题命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成主题颜色列表。其中 \meta{颜色1} 为标题标签,\meta{颜色2} 为列表编号、定理标签和公式编号括号,\meta{颜色3} 为代码抄录。类似地更改超链接颜色见\ref{subsec:hyperlinks}。
+ \begin{ctexexam}
+ \DeclareThemeColor{fancy,2acb25,60aacc,ebc01c}
+ \ctexset{style/color = fancy}
+ \end{ctexexam}
\end{commands}
\keyval{color-every}{HTML颜色代码}
统一设置主题的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
@@ -447,7 +451,7 @@
超链接颜色样式。预置了四种超链接颜色风格。为使相关颜色能够正确显示,选项 \option{linkcolor} 应当在 \option{linktype} 前使用。
\begin{commands}
\command{DeclareLinkColor}[\splitmarg{风格名称,颜色1,颜色2,颜色3}]
- 声明新的超链接颜色样式命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成超链接颜色列表。
+ 声明新的超链接颜色样式命令。它的参数以英文逗号分隔,第一部分为颜色风格名称,后面三部分为 \code{HTML} 颜色代码,构成超链接颜色列表。其中 \meta{颜色1} 为普通链接,\meta{颜色2} 为网址,\meta{颜色3} 为参考文献引用。
\end{commands}
\keyval{linkcolor-every}{HTML颜色代码}
统一设置超链接的各部分颜色。参数是6个十六进制数字组成的 \code{HTML} 颜色代码,任意颜色的代码可以在常见的图片处理工具拾色器中查看。
@@ -1387,7 +1391,7 @@
\shortversion{v = 1.638,date = 2022/03/04,changes = 增加目录条目样式选项注册命令 \cs{RegisterTocName}。}
\shortversion{v = 1.644,date = 2022/03/10,changes = 增加浮动环境目录声明命令 \cs{DeclareFloatList} 配合 \pkg*{caption} 宏包。}
\shortversion{v = 1.682,date = 2022/05/01,changes = 将迷你页判断命令 \cs{notminipage} 改为被保护命令兼容 \pkg*{circledtext} 宏包。}
- \begin{version}[v = 2024ae,date = 2024/02/18]
+ \begin{version}[v = 2024ah,date = 2024/02/20]
\fixed
\item 修复图表等浮动环境题注目录中条目标签编号的计数器值显示错误问题。
\item 修复附录命令 \cs{appendix} 的可选参数设置英文目录中条目名字和编号失效的问题。
diff --git a/macros/latex/contrib/frenchmath/frenchmath.dtx b/macros/latex/contrib/frenchmath/frenchmath.dtx
index 4e32e81e0a..586972372b 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.dtx
+++ b/macros/latex/contrib/frenchmath/frenchmath.dtx
@@ -20,7 +20,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{frenchmath}
- [2024/01/22 v2.8 .dtx frenchmath file]
+ [2024/02/20 v2.9 .dtx Typesetting mathematics according to French rules]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -37,14 +37,18 @@
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
\allsectionsfont{\color{darkbrown}}
-\DeclareSymbolFont{ugrfm}{U}{psy}{m}{n} % pour les lettres de upgreek avec l'option Symbol
+% pour les lettres de upgreek avec l'option Symbol :
+\DeclareSymbolFont{ugrfm}{U}{psy}{m}{n}
\DeclareMathSymbol{\upalphasym}{\mathord}{ugrfm}{`a}
\DeclareMathSymbol{\upbetasym}{\mathord}{ugrfm}{`b}
\DeclareMathSymbol{\uppisym}{\mathord}{ugrfm}{`p}
-\DeclareSymbolFont{cmsymbols}{OMS}{cmsy}{m}{n} % symbole \emptyset de computer modern
+% symbole \emptyset de computer modern au cas où veut changer la police de ce doc :
+\DeclareSymbolFont{cmsymbols}{OMS}{cmsy}{m}{n}
\DeclareMathSymbol{\cmemptyset}{\mathord}{cmsymbols}{'73} % code octal dans cmsy
-\DeclareTextSymbol{\textmicro}{TS1}{181} % mu de micro
+% pour avoir le mu de micro :
+\DeclareTextSymbol{\textmicro}{TS1}{181}
\DeclareTextSymbolDefault{\textmicro}{TS1}
+
\DisableCrossrefs
%\CodelineIndex
%\RecordChanges
@@ -65,7 +69,7 @@
%</driver>
% \fi
%
-% \CheckSum{519}
+% \CheckSum{594}
%
% \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
@@ -172,12 +176,19 @@
% \changes{v2.8}{22/01/2024}{
% - Prise en compte de l'extension mathalpha qui fournit d'autres lettres cursives.}
%
+% \changes{v2.9}{17/02/2024}{
+% - Compatibilité entre amssymb et unicode-math réglée (par des relax)
+% -> permet à la macro varnothing de garder l'aspect de amssymb,
+% - compatibilité des options de lettres grecques avec unicode-math (XeLaTeX uniquement)
+% -> nouvelles macros SaveGreekItalics et upgreekUndefined,
+% - commentaires dans la doc pour la compatibilité avec unicode-math.}
+%
% \GetFileInfo{frenchmath.sty}
%
% \title{L'extension \textsf{frenchmath}\thanks{Ce document
-% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 22/01/2024.}}
+% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 20/02/2024.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{22 janvier 2024}
+% \date{20 février 2024}
% \maketitle
%
% \section{Introduction}
@@ -195,9 +206,9 @@
% des symboles français aux symboles anglais.
%
% D'autres solutions existent pour composer les majuscules mathématiques en romain,
-% par exemple l'extension \textsf{unicode-math} mais qui doit être compilée
-% avec \XeLaTeX\ ou \LuaLaTeX ;
-% avec pdf\LaTeX\, nous avons les extensions \textsf{fourier} de Michel Bovani~\cite{FOUR}
+% par exemple l'extension \textsf{unicode-math}~\cite{UNIC} mais qui doit être compilée
+% avec \XeLaTeX\ ou \LuaLaTeX\ (et doit être chargée \emph{avant} \textsf{frenchmath}) ;
+% pour pdf\LaTeX\, nous avons les extensions \textsf{fourier} de Michel Bovani~\cite{FOUR}
% (avec la famille des fontes Adobe Utopia)
% ou encore \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN}
% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter).
@@ -219,10 +230,10 @@
% des ensembles de nombres |\R|, |\N|\ldots (pour $\mathbf{R}, \mathbf{N}\ldots$)
% ainsi que celles relatives à la réalisation de feuilles d'exercices.
%
-% Mentionnons par ailleurs l'extension \textsf{tablvar}~\cite{TABL} qui permet de réaliser
-% de jolis tableaux de variations, spécificité des mathématiques françaises,
-% ou encore \textsf{tdsfrmath} de Yvon Henel~\cite{FRM}
-% qui fournit également beaucoup de commandes francisées.
+% Mentionnons par ailleurs l'extension \textsf{tdsfrmath} de Yvon Henel~\cite{FRM}
+% qui fournit également beaucoup de commandes francisées ou encore
+% \textsf{tablvar}~\cite{TABL} qui permet de réaliser
+% de jolis tableaux de variations, spécificité des mathématiques françaises.
%
% Depuis la version 2.0, \textsf{frenchmath} propose deux options permettant
% de composer les minuscules grecques du mode mathématique en forme droite.
@@ -307,9 +318,9 @@
% séparateur décimal, il fait l'objet d'une extension séparée,
% \textsf{decimalcomma}~\cite{DECC}, qui est chargée par \textsf{frenchmath}
% (depuis la version 2.7).
-% Mais il est alors impératif de charger \textsf{unicode-math} \emph{avant}
-% \textsf{frenchmath}
-% \footnote{L'extension \textsf{icomma} présente la même limitation et doit être chargé
+% Mais si on utilise \textsf{unicode-math}, il est alors impératif de le charger
+% \emph{avant} \textsf{frenchmath}
+% \footnote{L'extension \textsf{icomma} présente la même limitation et doit être chargée
% après \textsf{unicode-math}.}.
%
% \medskip
@@ -340,7 +351,7 @@
% \footnote{D'autres solutions existent,
% par exemple avec l'extension \textsf{interval}
% ou encore avec la macro \texttt{\string\DeclarePairedDelimiter}
-% de \textsf{mathtools}, mais utilisée avec des crochets,
+% de \textsf{mathtools}~\cite{TOOLS}, mais utilisée avec des crochets,
% cette dernière est incompatible avec \textsf{ibrackets},
% d'où la possibilité de désactiver \textsf{ibrackets}.}.
% Le code
@@ -381,7 +392,7 @@
% ($\mathcal{A}, \mathcal{B}, \mathcal{C}, \mathcal{D}\ldots$).
% En principe \textsf{frenchmath} charge l'extension \textsf{mathrsfs}
% qui fournit ces lettres cursives,
-% sauf si la commande |\mathscr| est déjà définie par ailleurs,
+% sauf si la commande |\mathscr| est définie par ailleurs,
% en particulier si on utilise l'extension \textsf{mathdesign}~\cite{DESIGN}
% ou l'option \texttt{scr} de \textsf{mathalpha}~\cite{MATAL}
% \footnote{L'extension \textsf{mathalpha} de Michael Sharpe
@@ -503,15 +514,15 @@
% \subsection{Lettres grecques}
% La norme concernant l'usage des lettres grecques en italique ou en forme droite
% pour les mathématiques françaises ne semble pas aussi claire que pour les lettres romaines
-% et les auteurs
-% divergent sur ce point. Plusieurs recommandent l'usage des lettres grecques
-% minuscules en forme droite~\cite{FOUR}~\cite{DESIGN}~\cite{PMISO}, mais d'autres
-% préconisent l'italique,
+% et il y a parfois divergence sur ce point.
+% Beaucoup recommandent l'usage des lettres grecques
+% minuscules en forme droite~\cite{FOUR}~\cite{DESIGN}~\cite{PMISO}, mais certains
+% auteurs préconisent l'italique,
% comme pour toutes les variables mathématiques~\cite{AA}.
% Le lexique des règles typographiques en usage à l’Imprimerie Nationale~\cite{RTIN}
% les compose en forme droite et relativement grasses (p.108)
% sans préciser s'il s'agit vraiment d'une règle
-% s'appliquant aux variables, au même titre que celles énoncées pour l'alphabet latin.
+% s'appliquant aux variables, au même titre que celle énoncée pour l'alphabet latin.
%
% \medskip
% Pour les physiciens (et chimistes) l'affaire est plus claire puisque
@@ -519,6 +530,8 @@
% romain (forme droite), conformément à la norme ISO~\cite{TYPMA}~\cite{NIST}~\cite{ICTNS}.
% Ainsi la constante $\pi \approx 3,14$ ne s'écrit pas de la même manière
% qu'une variable $\itpi$.
+%
+% \medskip
% Dans la section \og How to get upright small Greek letters \fg,
% la documentation de \textsf{isomath} de Günter Milde~\cite{ISOM}
% expose différentes méthodes pour obtenir les lettres grecques
@@ -531,8 +544,9 @@
% Citons également \textsf{newpxmath}, \textsf{newtxmath}
% \footnote{L'extension \textsf{newtxmath} doit être chargée
% après \textsf{frenchmath} qui utilise \textsf{amssymb} car la compilation
-% produit sinon un message d'erreur pour la commande
-% \texttt{\string\Bbbk}.}
+% produit sinon un message d'erreur ;
+% ou sinon on peut ajouter \texttt{\string\let\string\Bbbk\string\relax}
+% avant de charger \textsf{frenchmath}.}
% et \textsf{libertinust1math}
% de Michael Sharpe,
% \textsf{pxgreeks}, \textsf{txgreeks}
@@ -546,20 +560,30 @@
% qui donnent de beaux résultats pour une utilisation avec
% respectivement les polices Palatino, Times et Libertinus.
%
-% Enfin, comme pour les majuscules, \XeLaTeX\ ou \LuaLaTeX\ réalisent cette tâche
-% automatiquement avec l'option \texttt{math-style=french} de l'extension \textsf{unicode-math}.
-%
-% \medskip
% Jean-François Burnol a également développé l'extension \textsf{lgrmath}~\cite{LGR}
% qui permet d'utiliser, en mode mathématique, les différentes fontes de lettres
% grecques accessibles par \LaTeX\ avec l'encodage LGR. La documentation
% de l'extension indique comment consulter et utiliser les fontes accessibles
-% sur votre distribution.
+% sur votre distribution.
+%
+% \medskip
+% Enfin, comme pour les majuscules, l'extension \textsf{unicode-math}
+% réalise cette tâche automatiquement avec l'option \texttt{math-style=french},
+% mais nécessite une compilation avec \XeLaTeX\ ou \LuaLaTeX.
+%
+% \medskip
+% L'extension \textsf{frenchmath} fournit les options décrites ci-dessous
+% afin d'obtenir les lettres grecques en forme droite.
+% Ces options peuvent être utilisées y compris avec \textsf{unicode-math},
+% mais seulement en compilant avec \XeLaTeX\ et non pas \LuaLaTeX\
+% (et \textsf{unicode-math} doit être chargé
+% \emph{avant} \textsf{frenchmath}).
+%
%
% \medskip
% \DescribeEnv{[lgrmath]}
% En activant l'option \texttt{lgrmath}, \textsf{frenchmath}
-% charge cette extension avec son option \texttt{style=french}
+% charge l'extension du même nom avec son option \texttt{style=french}
% et la fonte fcm (de l'extension \textsf{cm-lgc})
% \footnote{Évidemment il faut que \textsf{cm-lgc} soit installée
% sur votre distribution sans quoi la fonte de substitution LGR/cmr/m/n sera utilisée.}.
@@ -571,9 +595,18 @@
% $\alphait$, $\betait$, \ldots, $\piit$, etc.
% Ces dernières sont peu à notre goût, mais on conserve les lettres
% d'origine avec |\italpha|, |\itbeta| : $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
+%
+% \DescribeMacro{\SaveGreekItalics}
% On peut aussi choisir d'autres fontes en chargeant l'extension
-% \textsf{lgrmath} indépendamment de \textsf{frenchmath}
-% (voir par exemple avec l'option \texttt{font=Alegreya-LF} ou \texttt{font=Cochineal-LF}).
+% \textsf{lgrmath} indépendamment de \textsf{frenchmath} et sans son option \texttt{lgrmath}
+% (voir par exemple les options \texttt{font=Alegreya-LF} ou \texttt{font=Cochineal-LF}
+% de \textsf{lgrmath}).
+% Dans ce cas, si on veut conserver les lettres italiques d'origine,
+% il faut précéder le chargement
+% de \textsf{lgrmath} de la commande |\SaveGreekItalics| ;
+% et si on utilise \textsf{unicode-math}, il faut en outre placer cette commande
+% et le |\usepackage[...]{lgrmath}| dans un |\AtBeginDocument|.
+
%
% \medskip
% \DescribeEnv{[upgreek]}
@@ -586,6 +619,7 @@
% avec une police comme Times par exemple.}
% utilisant la police Adobe Symbol et qui produit des lettres grecques assez grasses :
% $\upalphasym$, $\upbetasym$, \ldots, $\uppisym$, etc.
+%
% Si l'on veut, par contre, utiliser l'extension \textsf{upgreek}
% avec l'une des deux autres options disponibles, \texttt{Euler}
% (qui produit $\upalpha, \upbeta, \ldots, \uppi$, etc.)
@@ -594,10 +628,23 @@
% indépendamment de \textsf{frenchmath}.
% Mais en conservant toutefois l'option \texttt{upgreek}, \textsf{frenchmath}
% redéfinira les commandes |\alpha|, |\beta|, etc.
-% pour composer automatiquement les lettres en forme droite ;
-% les formes italiques d'origine,
-% restant toujours disponibles avec les commandes
-% |\italpha|, |\itbeta|, \ldots, |\itpi|, etc.
+% pour composer automatiquement les lettres en forme droite
+% (comme alias de |\upalpha|, |\upbeta|\ldots).
+%
+% \DescribeMacro{\upgreekUndefined}
+% Comme pour \textsf{lgrmath}, si on veut que les formes italiques d'origine
+% restent toujours disponibles avec les commandes
+% |\italpha|, |\itbeta|, \ldots, |\itpi|, etc.,
+% il faut précéder le chargement de l'extension \textsf{upgreek} de la commande
+% |\SaveGreekItalics| ;
+% et si l'on utilise \textsf{unicode-math}, il faut en outre ajouter la commande
+% |\upgreekUndefined| avant le |\usepackage[...]{upgreek}| et les trois
+% dans un |\AtBeginDocument| placé entre le chargement de \textsf{unicode-math}
+% et celui de \textsf{frenchmath}
+% \footnote{Tout cela est bien contraignant mais c'est lié au fonctionnement capricieux
+% de \textsf{unicode-math} qui génère de nombreuses incompatibilités. Ceci dit,
+% on n'a en principe besoin de nos options de lettres grecques droites que si l'on n'est
+% pas satisfait de celles fournies par \textsf{unicode-math}.}.
%
% \medskip
% \DescribeEnv{[Upgreek]}
@@ -630,6 +677,7 @@
% (depuis 2020) car elle redéfinit \texttt{\string\textmu}.},
% disponible en mode texte dans beaucoup de fontes (ou avec \textsf{textcomp}) ;
% il diffère du $\mu$ droit mathématique.
+%
% \StopEventually{}
%
% \section{Le code}
@@ -637,49 +685,52 @@
% \begin{macrocode}
\newif\ifcapsit
\DeclareOption{capsit}{\capsittrue}
-\newif\iffrenchmathgreek % pour sauvegarder les lettres d'origine
\newif\iflgrmath
-\DeclareOption{lgrmath}{\lgrmathtrue\frenchmathgreektrue}
+\DeclareOption{lgrmath}{\lgrmathtrue}
\newif\ifupgreek
-\DeclareOption{upgreek}{\upgreektrue\frenchmathgreektrue}
+\DeclareOption{upgreek}{\upgreektrue}
\newif\ifUpgreek
-\DeclareOption{Upgreek}{\Upgreektrue\upgreektrue\frenchmathgreektrue}
+\DeclareOption{Upgreek}{\Upgreektrue\upgreektrue}
\newif\ifnoibrackets
\DeclareOption{noibrackets}{\noibracketstrue}
\ProcessOptions \relax
-\AtBeginDocument{
+\@ifpackageloaded{unicode-math}{
\@ifpackageloaded{mathdesign}{
- \PackageInfo{frenchmath}{Package mathdesign
+ \PackageInfo{frenchmath}{Package mathdesign
is loaded, \MessageBreak
- I don't load mathrsfs and amssymb packages}
+ I don't load mathrsfs and amssymb}
+ }{
+ %\let\circledS\relax % utilisé uniquement par mathdesign
+ \let\eth\relax % 3 incompatibilités unicode-math / amssymb
+ \let\digamma\relax
+ \let\backepsilon\relax
+ \RequirePackage{amssymb}
+ \PackageInfo{frenchmath}{Package unicode-math
+ is loaded, \MessageBreak
+ I don't load mathrsfs}
+ }
+ \let\vide\varnothing % \varnothing sera écrasé par unicode-math
+}{
+ \AtBeginDocument{
+ \@ifpackageloaded{mathdesign}{
+ \PackageInfo{frenchmath}{Package mathdesign
+ is loaded, \MessageBreak
+ I don't load mathrsfs and amssymb}
}{
\RequirePackage{amssymb} % \leqslant, \geqslant, \varnothing
- \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{}
+ \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
+ \PackageInfo{frenchmath}{Command \string\mathscr\space
+ already defined, \MessageBreak
+ I don't load mathrsfs}
+ }
}
+ }
}
\RequirePackage{amsopn} % fournit \DeclareMathOperator
\@ifpackageloaded{mathptmx}{\RequirePackage{dotlessj}}{}
-
-% \end{macrocode}
-% Ce n'est qu'à la fin du préambule, donc avec |\AtBeginDocument|, que l'on examine
-% si les extensions \textsf{lgrmath} ou \textsf{upgreek} sont déjà chargées,
-% pour laisser à l'utilisateur la possibilité de les charger après \textsf{frenchmath}
-% et éviter un conflit d'option.
-% \begin{macrocode}
-\AtBeginDocument{
- \iflgrmath
- \@ifpackageloaded{lgrmath}{}{
- \RequirePackage[font=fcm,style=french]{lgrmath}}
- \fi
- \ifupgreek
- \@ifpackageloaded{upgreek}{}{
- \RequirePackage[Symbol]{upgreek}}
- \fi
-}
\RequirePackage{xspace} % utile pour les commandes \ssi, \Oij
\ifnoibrackets\else\RequirePackage{ibrackets}\fi % intelligent brackets
-
\RequirePackage{decimalcomma} % depuis frenchmath 2.7
% \end{macrocode}
@@ -706,7 +757,8 @@
% Cette macro a été définie de manière identique dans \textsf{mismath},
% mais cela ne génère pas d'incompatibilité.}.
% |\AtBeginDocument| est nécessaire pour que ces définitions
-% soient prises en compte avec la classe \textsf{beamer} par exemple.
+% soient prises en compte avec la classe \textsf{beamer} par exemple,
+% ou avec \textsf{unicode-math}.
% \smallskip
% \begin{macrocode}
\newcommand*\DeclareMathUp[1]{
@@ -717,9 +769,8 @@
\else #1{#2}\afterfi@{\apply@#1}\fi}
\def\afterfi@#1#2\fi{\fi#1}
-\ifcapsit\else
- \AtBeginDocument{
- \apply\DeclareMathUp{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}
+\ifcapsit\else\AtBeginDocument{
+ \apply\DeclareMathUp{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}
}
\fi
@@ -732,7 +783,7 @@
\newcommand\curs{\mathscr}
\newcommand\infeg{\leqslant}
\newcommand\supeg{\geqslant}
-\newcommand\vide{\varnothing}
+\@ifundefined{vide}{\newcommand\vide{\varnothing}}{}
% \end{macrocode}
% La définition de |\paral| remplace, depuis la version 2.2,
% l'ancienne définition plus simple |\mathrel{/\!\!/}|, mais qui donnait des barres
@@ -798,53 +849,92 @@
\xspace}
% \end{macrocode}
-% On sauvegarde les lettres grecques d'origine dans les macros |\italpha|, \ldots, |\itomega|.
-% Le booléen |frenchmathgreek| a été activé par les options de lettres grecques
-% \texttt{lgrmath}, \texttt{upgreek} ou \texttt{Upgreek}.
+% Ce n'est qu'à la fin du préambule, donc avec |\AtBeginDocument|, que l'on examine
+% les options \texttt{lgrmath} ou \texttt{upgreek},
+% pour que cela fonctionne avec \textsf{unicode-math} et
+% pour laisser à l'utilisateur la possibilité de charger \textsf{upgreek}
+% après \textsf{frenchmath} et éviter un conflit d'option.
+% On sauvegarde les lettres grecques d'origine dans les macros |\italpha|, \ldots, |\itomega|,
+% grâce à la commande |\SavedGreekItalics|.
+% La macro |\upgreekUndefined| ne sert que si l'on veut utiliser \textsf{upgreek}
+% avec \textsf{unicode-math} : elle permet de \og vider \fg la définition
+% de |\upalpha|, |\upbeta|\ldots, car sinon leur redéfinition par \textsf{upgreek}
+% est impossible.
% \begin{macrocode}
-\iffrenchmathgreek
- \@ifundefined{italpha}{\let\italpha\alpha}{
- \PackageWarningNoLine{frenchmath}{Command
- \string\italpha\space already exist \MessageBreak
- and will not be redefined, \MessageBreak
- no more warning for the other Greek letters, \MessageBreak
- except pi}
- }
- \@ifundefined{itbeta}{\let\itbeta\beta}{}
- \@ifundefined{itgamma}{\let\itgamma\gamma}{}
- \@ifundefined{itdelta}{\let\itdelta\delta}{}
- \@ifundefined{itepsilon}{\let\itepsilon\epsilon}{}
- \@ifundefined{itzeta}{\let\itzeta\zeta}{}
- \@ifundefined{iteta}{\let\iteta\eta}{}
- \@ifundefined{ittheta}{\let\ittheta\theta}{}
- \@ifundefined{itiota}{\let\itiota\iota}{}
- \@ifundefined{itkappa}{\let\itkappa\kappa}{}
- \@ifundefined{itlambda}{\let\itlambda\lambda}{}
- \@ifundefined{itmu}{\let\itmu\mu}{}
- \@ifundefined{itnu}{\let\itnu\nu}{}
- \@ifundefined{itxi}{\let\itxi\xi}{}
- \@ifundefined{itpi}{\let\itpi\pi}{
- \PackageWarningNoLine{frenchmath}{Command
- \string\itpi\space already exist \MessageBreak
- and will not be redefined}
- }
- \@ifundefined{itrho}{\let\itrho\rho}{}
- \@ifundefined{itsigma}{\let\itsigma\sigma}{}
- \@ifundefined{ittau}{\let\ittau\tau}{}
- \@ifundefined{itupsilon}{\let\itupsilon\upsilon}{}
- \@ifundefined{itphi}{\let\itphi\phi}{}
- \@ifundefined{itchi}{\let\itchi\chi}{}
- \@ifundefined{itpsi}{\let\itpsi\psi}{}
- \@ifundefined{itomega}{\let\itomega\omega}{}
- \@ifundefined{itvarepsilon}{\let\itvarepsilon\varepsilon}{}
- \@ifundefined{itvartheta}{\let\itvartheta\vartheta}{}
- \@ifundefined{itvarpi}{\let\itvarpi\varpi}{}
- \@ifundefined{itvarsigma}{\let\itvarsigma\varsigma}{}
- \@ifundefined{itvarphi}{\let\itvarphi\varphi}{}
-\fi
+\newcommand\SaveGreekItalics{
+ \let\italpha\alpha
+ \let\itbeta\beta
+ \let\itgamma\gamma
+ \let\itdelta\delta
+ \let\itepsilon\epsilon
+ \let\itzeta\zeta
+ \let\iteta\eta
+ \let\ittheta\theta
+ \let\itiota\iota
+ \let\itkappa\kappa
+ \let\itlambda\lambda
+ \let\itmu\mu
+ \let\itnu\nu
+ \let\itxi\xi
+ \let\itpi\pi
+ \let\itrho\rho
+ \let\itsigma\sigma
+ \let\ittau\tau
+ \let\itupsilon\upsilon
+ \let\itphi\phi
+ \let\itchi\chi
+ \let\itpsi\psi
+ \let\itomega\omega
+ \let\itvarepsilon\varepsilon
+ \let\itvartheta\vartheta
+ \let\itvarpi\varpi
+ \let\itvarsigma\varsigma
+ \let\itvarphi\varphi
+}
+
+\newcommand\upgreekUndefined{
+ \let\upalpha\@undefined
+ \let\upbeta\@undefined
+ \let\upgamma\@undefined
+ \let\updelta\@undefined
+ \let\upepsilon\@undefined
+ \let\upzeta\@undefined
+ \let\upeta\@undefined
+ \let\uptheta\@undefined
+ \let\upiota\@undefined
+ \let\upkappa\@undefined
+ \let\uplambda\@undefined
+ \let\upmu\@undefined
+ \let\upnu\@undefined
+ \let\upxi\@undefined
+ \let\uppi\@undefined
+ \let\uprho\@undefined
+ \let\upsigma\@undefined
+ \let\uptau\@undefined
+ \let\upupsilon\@undefined
+ \let\upphi\@undefined
+ \let\upchi\@undefined
+ \let\uppsi\@undefined
+ \let\upomega\@undefined
+ \let\upvarepsilon\@undefined
+ \let\upvartheta\@undefined
+ \let\upvarpi\@undefined
+ \let\upvarrho\@undefined
+ \let\upvarsigma\@undefined
+ \let\upvarphi\@undefined
+}
\AtBeginDocument{
+ \iflgrmath
+ \SaveGreekItalics
+ \RequirePackage[font=fcm,style=french]{lgrmath}
+ \fi
\ifupgreek
+ \@ifpackageloaded{upgreek}{}{
+ \@ifpackageloaded{unicode-math}{\upgreekUndefined}{}
+ \SaveGreekItalics
+ \RequirePackage[Symbol]{upgreek}
+ }
\renewcommand\alpha{\upalpha}
\renewcommand\beta{\upbeta}
\renewcommand\gamma{\upgamma}
@@ -875,8 +965,8 @@
\renewcommand\varsigma{\upvarsigma}
\renewcommand\varphi{\upvarphi}
\fi
-
\ifUpgreek
+ % unicode-math utilise \upGamma, \upDelta...
\renewcommand\Gamma{\Upgamma}
\renewcommand\Delta{\Updelta}
\renewcommand\Theta{\Uptheta}
@@ -893,7 +983,7 @@
% \end{macrocode}
%
% \medskip
-% \begin{thebibliography}{29}
+% \begin{thebibliography}{31}
% \begin{raggedright}
% \bibitem{RTIN} \emph{Lexique des règles typographiques en usage à l’Imprimerie Nationale},
% édition du 26/08/2002.
@@ -921,18 +1011,21 @@
% Claudio Beccari, CTAN, v1.2.00 2021/08/04.
% \bibitem{MAFR} \emph{La distribution \textsf{mafr}}, Christian Obrecht,
% CTAN, v1.0 17/09/2006.
+% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
+% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
+% Khaled Hosny, and others, CTAN, v0.8r 13/08/2023.
% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
% Michel Bovani, CTAN, v1.3 30/01/2005.
% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
% Paul Pichaureau, CTAN, v2.31 29/08/2013.
% \bibitem{MIS} \emph{\textsf{mismath} -- Miscellaneous mathematical macros},
-% Antoine Missier, CTAN, v2.8 27/07/2023.
+% Antoine Missier, CTAN, v2.10 20/02/2024.
% \bibitem{VECT} \emph{\textsf{esvect} -- Typesetting vectors with beautiful
% arrow with \LaTeXe}, Eddie Saudrais, CTAN, v1.3 11/07/2013.
-% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
-% CTAN, v2.0 23/12/2023.
% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel,
% CTAN, v1.3 22/06/2009.
+% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
+% CTAN, v2.0 23/12/2023.
% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\
% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe}.
@@ -943,9 +1036,11 @@
% 2011, No.\@1.
% \url{https://tug.org/pracjourn/2011-1/beccari/Intcomma.pdf}
% \bibitem{DECC} \emph{The \textsf{decimalcomma} package}. Antoine Missier,
-% CTAN, v1.1 19/12/2023.
+% CTAN, v1.4 30/12/2023.
% \bibitem{BRACKETS} \emph{Intelligent brackets -- The \textsf{ibrackets} package},
-% Antoine Missier, v1.1 26/12/2022.
+% Antoine Missier, v1.2 26/07/2023.
+% \bibitem{TOOLS} \emph{The \textsf{mathtools} package},
+% Morten Høgholm, Lars Madsen and the \LaTeX3 project, CTAN v1.29 29/06/2022.
% \bibitem{MATAL} \emph{The \textsf{mathalpha}, \textsc{aka} \textsf{mathalfa} package},
% Michael Sharpe, CTAN, v1.143 18/11/2021.
% \bibitem{DLJ} \emph{\textsf{dotlessj}}, David Carlisle, CTAN, v0.03 09/12/1998.
diff --git a/macros/latex/contrib/frenchmath/frenchmath.pdf b/macros/latex/contrib/frenchmath/frenchmath.pdf
index d32e4471da..7c77b5ac6a 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.pdf
+++ b/macros/latex/contrib/frenchmath/frenchmath.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md
index 0adcd7fb84..02dfdd3e13 100644
--- a/macros/latex/contrib/l3backend/CHANGELOG.md
+++ b/macros/latex/contrib/l3backend/CHANGELOG.md
@@ -6,6 +6,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-02-20]
+
+### Fixed
+- Naming of a variable in the `draw` code
+
## [2024-01-04]
### Changed
@@ -321,7 +326,8 @@ this project uses date-based 'snapshot' version identifiers.
- Include `l3backend` in file names
- Moved backend code to internal for each 'parent' module
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-01-04...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-02-20...HEAD
+[2024-02-20]: https://github.com/latex3/latex3/compare/2024-01-04...2024-02-20
[2024-01-04]: https://github.com/latex3/latex3/compare/2023-11-09...2024-01-04
[2023-11-09]: https://github.com/latex3/latex3/compare/2023-11-04...2023-11-09
[2023-11-04]: https://github.com/latex3/latex3/compare/2023-10-23...2023-11-04
diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md
index ad12f364be..3bfc823410 100644
--- a/macros/latex/contrib/l3backend/README.md
+++ b/macros/latex/contrib/l3backend/README.md
@@ -1,7 +1,7 @@
LaTeX3 Backend Drivers
======================
-Release 2024-01-04
+Release 2024-02-20
This package forms parts of `expl3`, and contains the code used to interface
with backends (drivers) across the `expl3` codebase. The functions here are
diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx
index 948a9eadfc..c80d51e06d 100644
--- a/macros/latex/contrib/l3backend/l3backend-basics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -70,27 +70,27 @@
% \begin{macrocode}
\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2024-01-04}{}
+ {l3backend-dvipdfmx.def}{2024-02-20}{}
{L3 backend support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-dvips.def}{2024-01-04}{}
+ {l3backend-dvips.def}{2024-02-20}{}
{L3 backend support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-dvisvgm.def}{2024-01-04}{}
+ {l3backend-dvisvgm.def}{2024-02-20}{}
{L3 backend support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-luatex.def}{2024-01-04}{}
+ {l3backend-luatex.def}{2024-02-20}{}
{L3 backend support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-pdftex.def}{2024-01-04}{}
+ {l3backend-pdftex.def}{2024-02-20}{}
{L3 backend support: PDF output (pdfTeX)}
%</pdftex>
%<*xetex>
- {l3backend-xetex.def}{2024-01-04}{}
+ {l3backend-xetex.def}{2024-02-20}{}
{L3 backend support: XeTeX}
%</xetex>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx
index 7dbacb0044..4b0059c2b9 100644
--- a/macros/latex/contrib/l3backend/l3backend-box.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf
index 3617a446d2..c62351ab98 100644
--- a/macros/latex/contrib/l3backend/l3backend-code.pdf
+++ b/macros/latex/contrib/l3backend/l3backend-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx
index 94a09ae916..907ca91c6e 100644
--- a/macros/latex/contrib/l3backend/l3backend-color.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx
index 93a4c09b44..ee33a717fe 100644
--- a/macros/latex/contrib/l3backend/l3backend-draw.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-draw.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -943,7 +943,7 @@
"url( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int)"
}
}
- \tl_gclear:N \g_@@_path_tl
+ \tl_gclear:N \g_@@_backend_path_tl
\bool_gset_false:N \g_@@_draw_clip_bool
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
index b1b7e6ea89..cb959169d9 100644
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx
index a16f8cee31..d7b6d4c37c 100644
--- a/macros/latex/contrib/l3backend/l3backend-header.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-header.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
index 728b18ca6d..6cc972f7d8 100644
--- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-opacity.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
index 19ab02daaa..472b7adefa 100644
--- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md
index 449a9889a6..197fa4254d 100644
--- a/macros/latex/contrib/l3experimental/CHANGELOG.md
+++ b/macros/latex/contrib/l3experimental/CHANGELOG.md
@@ -7,6 +7,13 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-02-20]
+
+### Fixed
+- Normalize `/` in `\sys_shell_split_ls:nN` on Windows: globs may use
+ ``\``, return values always contain `/`
+- Return paths relative to working directory in `\sys_shell_split_ls:nN` on Windows
+
## [2024-01-04]
### Changed
@@ -302,7 +309,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/2024-01-04...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-02-20...HEAD
+[2024-02-20]: https://github.com/latex3/latex3/compare/2024-01-04...2024-02-20
[2024-01-04]: https://github.com/latex3/latex3/compare/2023-12-08...2024-01-04
[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
diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md
index 1a4d3a4650..dc28bad6ee 100644
--- a/macros/latex/contrib/l3experimental/README.md
+++ b/macros/latex/contrib/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2024-01-04
+Release 2024-02-20
Overview
--------
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx
index 2eb979c660..58d4da8bb7 100644
--- a/macros/latex/contrib/l3experimental/l3benchmark.dtx
+++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -122,7 +122,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3benchmark}{2024-01-04}{}
+\ProvidesExplPackage{l3benchmark}{2024-02-20}{}
{L3 Experimental benchmarking}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf
index 9da3c2ae15..2c8c9d3634 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/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
index 8f481aada9..992acaa05c 100644
--- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf
index db5ed76836..91237671cb 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 6e71f93ade..1244dfa0ec 100644
--- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
index 735db2d23e..e869351f6b 100644
--- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx
index 19e69d4b38..0cb0fd6507 100644
--- a/macros/latex/contrib/l3experimental/l3draw-points.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
index 7906bc12e9..56ce949b24 100644
--- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
index 0b8f731ca5..c929e86aa7 100644
--- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx
index e3f6dba452..aef5c2111d 100644
--- a/macros/latex/contrib/l3experimental/l3draw-state.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
index df9f07af18..8e9143420e 100644
--- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx
index 2fae7afc74..2bfa4e00af 100644
--- a/macros/latex/contrib/l3experimental/l3draw.dtx
+++ b/macros/latex/contrib/l3experimental/l3draw.dtx
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -1181,7 +1181,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3draw}{2024-01-04}{}
+\ProvidesExplPackage{l3draw}{2024-02-20}{}
{L3 Experimental core drawing support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf
index 4beda52c98..a0941015ed 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 3bafa455b4..724d0d151d 100644
--- a/macros/latex/contrib/l3experimental/l3galley.dtx
+++ b/macros/latex/contrib/l3experimental/l3galley.dtx
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -686,7 +686,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3galley}{2024-01-04}{}
+\ProvidesExplPackage{l3galley}{2024-02-20}{}
{L3 Experimental galley code}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf
index a633e46628..b37d9194e4 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 9f59b4ec05..ccb6f9669b 100644
--- a/macros/latex/contrib/l3experimental/l3graphics.dtx
+++ b/macros/latex/contrib/l3experimental/l3graphics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -184,7 +184,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3graphics}{2024-01-04}{}
+\ProvidesExplPackage{l3graphics}{2024-02-20}{}
{L3 Experimental graphics inclusion support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf
index 42212b3f64..dd47e3b10f 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 f4abdacd81..ba251f971d 100644
--- a/macros/latex/contrib/l3experimental/l3opacity.dtx
+++ b/macros/latex/contrib/l3experimental/l3opacity.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -96,7 +96,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3opacity}{2024-01-04}{}
+\ProvidesExplPackage{l3opacity}{2024-02-20}{}
{L3 Experimental opacity support}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/l3opacity.pdf b/macros/latex/contrib/l3experimental/l3opacity.pdf
index 0898e6463c..7f0af34a48 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 6304ce3ec2..24aad77872 100644
--- a/macros/latex/contrib/l3experimental/l3str-format.dtx
+++ b/macros/latex/contrib/l3experimental/l3str-format.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -166,7 +166,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3str-format}{2024-01-04}{}
+\ProvidesExplPackage{l3str-format}{2024-02-20}{}
{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 367a84e099..45bd5bd4c2 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 ad1733ab77..186a03d87a 100644
--- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx
+++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -126,14 +126,15 @@
% enabled, no action is taken.
% \end{function}
%
-% \begin{function}[added = 2018-07-28]{\sys_shell_split_ls:nN}
+% \begin{function}[added = 2018-07-28, updated = 2024-02-20]
+% {\sys_shell_split_ls:nN}
% \begin{syntax}
% \cs{sys_shell_split_ls:N} \Arg{glob} \meta{seq}
% \end{syntax}
% Sets the \meta{seq var} to contain one entry per directory listing
-% (equivalent to |ls -1| or |dir /b|) as specified by the \meta{glob}: the
-% entries are strings. If unrestricted shell is not enabled, no action is
-% taken.
+% (equivalent to |ls -1| or |dir /b /s| with relative paths) as specified by
+% the \meta{glob}: the entries are strings. If unrestricted shell is not
+% enabled, no action is taken.
% \end{function}
%
% \end{documentation}
@@ -151,7 +152,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3sys-shell}{2024-01-04}{}
+\ProvidesExplPackage{l3sys-shell}{2024-02-20}{}
{L3 Experimental system shell functions}
% \end{macrocode}
%
@@ -328,9 +329,10 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{variable}{\l_@@_tmp_tl}
+% \begin{variable}{\l_@@_tmp_seq, \l_@@_tmp_tl}
% Scratch space.
% \begin{macrocode}
+\seq_new:N \l_@@_tmp_seq
\tl_new:N \l_@@_tmp_tl
% \end{macrocode}
% \end{variable}
@@ -366,6 +368,8 @@
% \end{macro}
%
% \begin{macro}{\sys_shell_split_ls:nN}
+% \begin{macro}{\@@_shell_split_ls:nN}
+% \begin{macro}{\@@_shell_split_ls:w}
% Getting a one-per-line listing is easy enough. We need to set
% \cs{ExplSyntaxOff} as that deals with the end-of-line character. After that,
% just a case of tidying up. The listing always ends in |^^M| so there is an
@@ -375,10 +379,11 @@
{
\sys_if_shell_unrestricted:T
{
- \exp_not:N \sys_get_shell:nnN
+ \exp_not:N \exp_args:Ne \exp_not:N \sys_get_shell:nnN
{
\sys_if_platform_unix:T { ls~-1~ #1 }
- \sys_if_platform_windows:T { dir~/b~ #1 }
+ \sys_if_platform_windows:T
+ { dir~/b~/s~ \exp_not:N \@@_path_to_win:n {#1} }
}
{
\ExplSyntaxOff
@@ -395,10 +400,42 @@
\seq_pop_right:NN #2 \exp_not:N \l_@@_tmp_tl
\exp_not:N \tl_if_blank:eTF { \exp_not:N \seq_item:Nn #2 { 1 } }
{ \seq_clear:N #2 }
+ \sys_if_platform_windows:T
+ {
+ \sys_get_shell_pwd:N \exp_not:N \l_@@_tmp_tl
+ \exp_not:N \exp_args:NV \exp_not:N \@@_shell_split_ls:nN
+ \exp_not:N \l_@@_tmp_tl #2
+ }
+ }
+ }
+% \end{macrocode}
+% On Windows, we can either get just file names (|dir /b|) or file names with
+% complete paths (|dir /s /b|), but not file names with relative paths in
+% a simple way. So we take the full paths and trim off the current working
+% directory. Normalization gives the same results as |ls|, hopefully.
+% \begin{macrocode}
+\sys_if_platform_windows:T
+ {
+ \cs_new_protected:Npe \@@_shell_split_ls:nN #1#2
+ {
+ \cs_set:Npn \exp_not:N \@@_shell_split_ls:w #1 \c_backslash_str { }
+ \seq_set_eq:NN \exp_not:N \l_@@_tmp_seq #2
+ \seq_clear:N #2
+ \seq_map_inline:Nn \exp_not:N \l_@@_tmp_seq
+ {
+ \tl_set:Ne \exp_not:N \l_@@_tmp_tl
+ { \exp_not:N \@@_shell_split_ls:w ##1 }
+ \tl_replace_all:Nnn \exp_not:N \l_@@_tmp_tl
+ { \c_backslash_str } { / }
+ \seq_put_right:NV #2 \exp_not:N \l_@@_tmp_tl
+ }
}
+ \cs_new:Npn \@@_shell_split_ls:w { }
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macrocode}
%</package>
diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf
index 1d1c41221a..c35e6f24b6 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 a18ade7abd..c84f21ae97 100644
--- a/macros/latex/contrib/l3experimental/xcoffins.dtx
+++ b/macros/latex/contrib/l3experimental/xcoffins.dtx
@@ -53,7 +53,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -672,7 +672,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2024-01-04}{}
+\ProvidesExplPackage{xcoffins}{2024-02-20}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf
index bee04ded96..a8e4ce7d9e 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 76e8242f4e..25344df931 100644
--- a/macros/latex/contrib/l3experimental/xgalley.dtx
+++ b/macros/latex/contrib/l3experimental/xgalley.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -731,7 +731,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2024-01-04}{}
+\ProvidesExplPackage{xgalley}{2024-02-20}{}
{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 50375b414b..d08bc86926 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 ac41336237..eed4b5c3e1 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,16 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-02-20]
+
+### Changed
+- Improve error recovery when an invalid `prop` is used (PR \#1464)
+
+### Fixed
+- Restore `\__kernel_msg_...:nnx(xx)` for older `xparse` support
+- Prevent an infinite loop in `\debug_(on|off):n` (issue \#1442)
+- Require `\sys_ensure_backend:` is used in the preamble (issue \#1442)
+
## [2024-02-18]
### Changed
@@ -1677,7 +1687,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/2024-02-18...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-02-20...HEAD
+[2024-02-20]: https://github.com/latex3/latex3/compare/2024-02-18...2024-02-20
[2024-02-18]: https://github.com/latex3/latex3/compare/2024-02-13...2024-02-18
[2024-02-13]: https://github.com/latex3/latex3/compare/2024-01-22...2024-02-13
[2024-01-22]: https://github.com/latex3/latex3/compare/2024-01-04...2024-01-22
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 769204cdef..93cd009b56 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-02-18
+Release 2024-02-20
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index f09ff8a437..2c3f5f892a 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{2024-02-18}%
+\def\ExplFileDate{2024-02-20}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index 1117b70706..8468634aee 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 9c0fc6973e..973d529575 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 63d687c9bd..985ab25097 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -58,7 +58,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-02-18}
+\date{Released 2024-02-20}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 0bfa11edaf..67bd4b8791 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -1849,13 +1849,15 @@
% \begin{macrocode}
\cs_set_protected:Npn \debug_on:n #1
{
- \sys_load_debug:
- \debug_on:n {#1}
+ \sys_load_debug:
+ \cs_if_exist:NT \@@_all_on:
+ { \debug_on:n {#1} }
}
\cs_set_protected:Npn \debug_off:n #1
{
\sys_load_debug:
- \debug_off:n {#1}
+ \cs_if_exist:NT \@@_all_on:
+ { \debug_off:n {#1} }
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex/contrib/l3kernel/l3bitset.dtx b/macros/latex/contrib/l3kernel/l3bitset.dtx
index 38375db79b..ece9fbfa6c 100644
--- a/macros/latex/contrib/l3kernel/l3bitset.dtx
+++ b/macros/latex/contrib/l3kernel/l3bitset.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index 42799fd051..9583f2548d 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 5582196acd..df79b10cc7 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx
index 43639710ca..311b9cc88b 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/contrib/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index a017b91c03..9f2eda4560 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 3647bb7d77..8ba7b27aa9 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx
index 9d07855fed..f3537307b2 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/contrib/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index af4afcdf69..82c95f7ff8 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-02-18}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-02-20}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
@@ -105,7 +105,7 @@
%
% \begin{macro}{\debug_on:n, \debug_off:n, \@@_all_on:, \@@_all_off:}
% \begin{macrocode}
-\cs_set_protected:Npn \debug_on:n #1
+\cs_gset_protected:Npn \debug_on:n #1
{
\exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
{
@@ -113,7 +113,7 @@
{ \msg_error:nnn { debug } { debug } {##1} }
}
}
-\cs_set_protected:Npn \debug_off:n #1
+\cs_gset_protected:Npn \debug_off:n #1
{
\exp_args:No \clist_map_inline:nn { \tl_to_str:n {#1} }
{
@@ -154,12 +154,12 @@
% \enquote{non-suspended} version of \cs{@@_suspended:T}.
% \begin{macrocode}
\tl_new:N \l_@@_suspended_tl { }
-\cs_set_protected:Npn \debug_suspend:
+\cs_gset_protected:Npn \debug_suspend:
{
\tl_put_right:Nn \l_@@_suspended_tl { . }
\cs_set_eq:NN \@@_suspended:T \use:n
}
-\cs_set_protected:Npn \debug_resume:
+\cs_gset_protected:Npn \debug_resume:
{
\__kernel_tl_set:Nx \l_@@_suspended_tl
{ \tl_tail:N \l_@@_suspended_tl }
@@ -710,7 +710,6 @@
%
% Patching both second and third arguments.
% \begin{macrocode}
-% \tracingall
\__kernel_patch:nnn
{
\__kernel_chk_var_exist:N #2
@@ -729,7 +728,6 @@
\tl_concat:NNN
\tl_gconcat:NNN
}
-% \tracingnone
% \end{macrocode}
%
%
@@ -1461,7 +1459,7 @@
without~first~having: \\
\ \ \tl_new:N ~ #1 \\
\\
- LaTeX~will~create~the~variable~and~continue.
+ LaTeX~will~continue,~creating~the~variable~where~it~is~the~one~being~set.
}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index 50c5edd996..25dd05fb0c 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 9e5c4b5449..695e47a444 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -71,7 +71,7 @@ and all files in that bundle must be distributed together.
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2024-02-18}{}
+\ProvidesExplClass{l3doc}{2024-02-20}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf
index da81829479..99b165a539 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 08823150c0..fe60a6f312 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index 457ab48f9e..b5ea68fdc7 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 1af40338cf..aaf0d04d29 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index 26ff4b3cf4..1159101ca5 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index e182bd91f8..7604c2c2ba 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index acec6c1b92..cb20934904 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index 306c35b86c..fd75e1bb5a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index f5460d81df..76b7a8cdb2 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index bdd6f17003..5b95dc543e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index ecc9f0561c..571cb9864a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 79490a1f5a..51e747a744 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-functions.dtx b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
index 5ac7deff34..efedd0fffb 100644
--- a/macros/latex/contrib/l3kernel/l3fp-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index c433b72d2d..a0984d5f36 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 7d7c9cabf4..a313f9b0be 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 8ca58cc5a7..a2c8eb81db 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 7bdf0c3efd..a19ce34195 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
index c771c69d15..f2073b5e52 100644
--- a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 693af9e981..70e41d5a4d 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index 28a70763a4..98cf15b281 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-types.dtx b/macros/latex/contrib/l3kernel/l3fp-types.dtx
index 8a621d7096..23c7f6ac4e 100644
--- a/macros/latex/contrib/l3kernel/l3fp-types.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index 9ccc42b1dc..5983dc2f48 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index 4c0460d076..97ebfe2295 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index 728804f5f4..0eacdb25e7 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 0c9f78db99..4dd308a5c5 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index 0300696929..be8aed20d9 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index 2b5327c9bb..9000132775 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 3c7cfc2937..e7970a7e2f 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index ab77d9dab8..f112b99215 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index efa741f3b8..75ba84a6ff 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -1915,25 +1915,25 @@
%
% \begin{macro}
% {
-% \__kernel_msg_info:nnee ,
-% \__kernel_msg_warning:nne ,
-% \__kernel_msg_warning:nnee ,
-% \__kernel_msg_error:nne ,
-% \__kernel_msg_error:nnee ,
-% \__kernel_msg_error:nneee
+% \__kernel_msg_info:nnxx ,
+% \__kernel_msg_warning:nnx ,
+% \__kernel_msg_warning:nnxx ,
+% \__kernel_msg_error:nnx ,
+% \__kernel_msg_error:nnxx ,
+% \__kernel_msg_error:nnxxx
% }
% \begin{macrocode}
-\cs_new_protected:Npn \__kernel_msg_info:nnee #1
+\cs_new_protected:Npn \__kernel_msg_info:nnxx #1
{ \msg_info:nnee { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_warning:nne #1
+\cs_new_protected:Npn \__kernel_msg_warning:nnx #1
{ \msg_warning:nne { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_warning:nnee #1
+\cs_new_protected:Npn \__kernel_msg_warning:nnxx #1
{ \msg_warning:nnee { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_error:nne #1
+\cs_new_protected:Npn \__kernel_msg_error:nnx #1
{ \msg_error:nne { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_error:nnee #1
+\cs_new_protected:Npn \__kernel_msg_error:nnxx #1
{ \msg_error:nnee { LaTeX / #1 } }
-\cs_new_protected:Npn \__kernel_msg_error:nneee #1
+\cs_new_protected:Npn \__kernel_msg_error:nnxxx #1
{ \msg_error:nneee { LaTeX / #1 } }
% \end{macrocode}
% \end{macro}
@@ -2322,6 +2322,12 @@
Run-time~backend~selection~may~only~be~carried~out~once~during~a~run.~
This~second~attempt~to~set~them~will~be~ignored.
}
+\msg_new:nnnn { sys } { load-debug-in-preamble }
+ { Load~debug~support~in~the~preamble. }
+ {
+ Debugging~requires~support~loaded~in~the~preamble: \\
+ Use~\sys_load_debug:~before~\begin{document}.
+ }
\msg_new:nnnn { sys } { wrong-backend }
{ Backend~request~inconsistent~with~engine:~using~'#2'~backend. }
{
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 72d11a4d9e..0782a08aa6 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index fd20895dd2..fead4d5f9f 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 db9c210133..a6a77cbf56 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 90f997495b..8ef3a6499f 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 29726a457e..9afc8bd99d 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 0497dfdd70..0d2a7c3531 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 f3ff96748c..0fceb43473 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 f79e8a7b97..61ebc770ff 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 cdb64db395..3f2d7e51f4 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 92dcba924e..43104af4c3 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 03bc119504..429016e9f6 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 e63e5c5935..8a19d48d88 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 7169cfa33a..2fbf1ed30b 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 4ee15a6eee..0e0c63f2be 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 75f88eca38..0310e7c6ad 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/contrib/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index 7aaca4d831..281bc5dc71 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 a90e86669a..e596e4cfb7 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index acab35c56e..dcf14be536 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -1504,64 +1504,103 @@
% consecutive entries \cs{@@_pair:wn} \meta{key_i} \cs{s_@@}
% \Arg{value_i}. If the \meta{key} is present in the \meta{property
% list} then the \meta{true code} is left in the input stream, with
-% |#2|, |#3|, and |#4| replaced by the \meta{entries before},
+% |#1|, |#2|, and |#3| replaced by the \meta{entries before},
% \meta{value}, and \meta{entries after}. If the \meta{key} is not
% present in the \meta{property list} then the \meta{false code} is left
% in the input stream. Only the \meta{true code} is used in the
% replacement text of a macro defined internally, which requires
% |##|~doubling.
%
-% \begin{macro}{\@@_split:NnTFn}
-% \begin{macro}{\@@_split_aux:NnTFn}
-% \begin{macro}{\@@_split_aux:w}
-% The aim is to split the \meta{property list} at the given \meta{key}
-% into the \meta{extract_1} before the key--value pair, the
-% \meta{value} associated with the \meta{key} and the \meta{extract_2}
-% after the key--value pair. This is done using a delimited function,
-% whose definition is as follows, where the \meta{key} is turned into
-% a string.
+% \begin{macro}
+% {
+% \@@_split:NnTFn, \@@_split_aux:nNTFn, \@@_split_test:wn,
+% \@@_split_flat:w, \@@_split_linked:w, \@@_split_wrong:Nw
+% }
+% The aim is to distinguish four cases: a flat prop that contains the
+% given \meta{key}, a flat prop that does not contain it, a linked
+% prop, and an invalid prop. The last case includes those that are
+% set to \tn{relax} by \texttt{c}-expansion, as well as unrelated
+% token list variables since these unfortunately used to
+% \enquote{work} in earlier implementations.
+% In the first three cases we run the \texttt{T}, \texttt{F}, and
+% \texttt{n} arguments, and in the last case we raise an error, set
+% the variable to a known state (empty prop), and run the \texttt{F}
+% code (some conditionals such as \cs{prop_pop:NnNTF} otherwise blow
+% up pretty badly).
+%
+% The first distinction between these cases is done by
+% \cs{@@_split_test:wn}, which looks for the argument after \cs{s_@@}.
+% For a flat prop it will be \cs{@@_chk:w}, which leads to running
+% \cs{@@_split_flat:w}, explained below. For a linked prop it is the
+% prefix, consisting of characters, so we end up running
+% \cs{@@_split_linked:w}, which cleans up and selects the
+% aforementioned \texttt{n} argument. For invalid props, or rather,
+% variables that do not contain \cs{s_@@}, the argument includes
+% \cs{fi:}, and we end up calling \cs{@@_split_wrong:Nw}, which calls
+% \cs{prop_show:N} to raise a detailed error stating how the variable
+% is wrong.
+%
+% Let us return to \cs{@@_split_flat:w}. This function is defined
+% dynamically as
% \begin{quote}
-% \cs{cs_set:Npn} \cs{@@_split_aux:w} |#1| \cs{@@_chk:w} |#2| \\
-% \quad \cs{@@_pair:wn} \meta{key} \cs{s_@@} |#3| \\
-% \quad |#4| \cs{s_@@_mark} |#5| |#6| \cs{s_@@_stop} \\
-% \quad |{| |#5| \Arg{true code} |}|
+% \cs{cs_set:Npn} \cs{@@_split_flat:w} \cs{@@_split_linked:w} |#1| \\
+% \quad \cs{@@_pair:wn} \meta{key} \cs{s_@@} |#2| \\
+% \quad |#3| \cs{s_@@_mark} |#4| |#5| \cs{s_@@_stop} \\
+% \quad |{| |#4| \Arg{true code} |}|
% \end{quote}
-%
-% If the \meta{key} is present in the property list,
-% \cs{@@_split_aux:w}'s |#2| is the part before the \meta{key}, |#3|
-% is the \meta{value}, |#4| is the part after the \meta{key}, |#5| is
-% \cs{use_i:nnn}, and |#6| is additional tokens that we do not care
-% about. The \meta{true code} is left in the input stream, and can
-% use the parameters |#2|, |#3|, |#4| for the three parts of the
-% property list as desired. Namely, the original property list is in
-% this case \cs{s_@@} \cs{@@_chk:w} |#2| \cs{@@_pair:wn} \meta{key}
-% \cs{s_@@} |{#3}| |#4|.
-%
-% If the \meta{key} is not there, then the \meta{function} is
-% \cs{use_ii:nnn}, which keeps the \meta{false code}. If the property
-% list uses the doubly-linked list storage, then the argument
-% delimited by \cs{@@_chk:w} includes the whole property list, |#2|,
-% |#3|, |#4| are empty, and |#5| is \cs{use_iii:nnn}. In all three
-% cases, the appopriate code among \meta{true code}, \meta{false
-% code}, and \meta{linked code} is run.
+% Its job is to seek the \meta{key} in the property list (known to be
+% flat at this stage) by using an argument |#1| delimited essentially
+% by that key. If indeed the variable contained the \meta{key}, then
+% |#1|~is the \meta{extract_1} before the key--value pair, |#2|~is the
+% \meta{value} associated with the \meta{key}, |#3|~is the
+% \meta{extract_2} after the key--value pair, |#4|~is \cs{use_i:nnn},
+% and we run \cs{use_i:nnn} \Arg{true code} \Arg{false code} \Arg{link
+% code}, selecting the \meta{true code}. Otherwise, the whole
+% property list together with \cs{s_@@_mark} \cs{use_i:nnn} is taken
+% in as |#1|, then |#2| is some tokens |?| \cs{fi:}
+% \cs{@@_split_wrong:Nw} \meta{variable} that were only useful in the
+% case of invalid props, |#3|~is empty, and most importantly |#4| is
+% \cs{use_ii:nnn}. This command selects the \meta{false code}.
+%
+% Note that we define \cs{@@_split_flat:w} in all cases even though it
+% is only used in the flat case. Indeed, to avoid taking in the whole
+% property list (which may be large) as an argument more than strictly
+% necessary, we would have to keep the \meta{true code} positioned
+% before the expansion of the prop variable in order to use it in the
+% definition. The only way to do that is to store it using an
+% assignment so we might as well just perform the assignment that we
+% can actually use in the flat case.
% \begin{macrocode}
\cs_new_protected:Npn \@@_split:NnTFn #1#2
- { \exp_args:NNo \@@_split_aux:NnTFn #1 { \tl_to_str:n {#2} } }
-\cs_new_protected:Npn \@@_split_aux:NnTFn #1#2#3
- {
- \cs_set:Npn \@@_split_aux:w ##1 \@@_chk:w ##2
- \@@_pair:wn #2 \s_@@ ##3 ##4 \s_@@_mark ##5 ##6 \s_@@_stop
- { ##5 {#3} }
- \exp_after:wN \@@_split_aux:w #1 \s_@@_mark \use_i:nnn
- \@@_pair:wn #2 \s_@@ { } \s_@@_mark \use_ii:nnn
- \@@_chk:w
- \@@_pair:wn #2 \s_@@ { } \s_@@_mark \use_iii:nnn
+ {
+ \exp_after:wN \@@_split_aux:nNTFn
+ \exp_after:wN { \tl_to_str:n {#2} } #1
+ }
+\cs_new_protected:Npn \@@_split_aux:nNTFn #1#2#3
+ {
+ \cs_set:Npn \@@_split_flat:w \@@_split_linked:w ##1
+ \@@_pair:wn #1 \s_@@ ##2 ##3 \s_@@_mark ##4 ##5 \s_@@_stop
+ { ##4 {#3} }
+ \exp_after:wN \@@_split_test:wn #2 \s_@@_mark \use_i:nnn
+ \@@_pair:wn #1 \s_@@ { ? \fi: \@@_split_wrong:Nw #2 }
+ \s_@@_mark \use_ii:nnn
\s_@@_stop
}
+\cs_new:Npn \@@_split_flat:w { }
+\cs_new_protected:Npn \@@_split_test:wn #1 \s_@@ #2
+ {
+ \if_meaning:w \@@_chk:w #2 \exp_after:wN \@@_split_flat:w \fi:
+ \@@_split_linked:w
+ }
+\cs_new_protected:Npn \@@_split_linked:w #1 \s_@@_stop #2#3 {#3}
+\cs_new_protected:Npn \@@_split_wrong:Nw #1#2 \s_@@_stop #3#4
+ {
+ \prop_show:N #1
+ \cs_gset_eq:NN #1 \c_empty_prop
+ #3
+ }
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \begin{macro}[tested = m3prop002]
% {
@@ -1611,7 +1650,7 @@
\cs_new_protected:Npn \@@_get:NnnTF #1#2#3#4#5
{
\@@_split:NnTFn #1 {#2}
- { #3 {##3} #4 }
+ { #3 {##2} #4 }
{#5}
{ \exp_after:wN \@@_get_linked:w #1 {#2} {#3} {#4} {#5} }
}
@@ -1715,8 +1754,8 @@
{
\@@_split:NnTFn #1 {#2}
{
- #4 #1 { \exp_not:n { \s_@@ \@@_chk:w ##2 ##4 } }
- #5 {##3}
+ #4 #1 { \exp_not:n { \s_@@ \@@_chk:w ##1 ##3 } }
+ #5 {##2}
#6
}
{#7}
@@ -2000,8 +2039,8 @@
{
#1 #2 #3
{
- \s_@@ \@@_chk:w \exp_not:n {##2}
- \l_@@_internal_tl \exp_not:n {##4}
+ \s_@@ \@@_chk:w \exp_not:n {##1}
+ \l_@@_internal_tl \exp_not:n {##3}
}
}
{ #2 #3 { \exp_not:o {#3} \l_@@_internal_tl } }
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index e29563a054..c465fa251c 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 2a7e996edd..428870c453 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 2eeaf3386e..c200bf21f9 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 0d8ec55663..c0dfc22a37 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index 309bbdc4bb..b96e3f3b2b 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 75c3e14ee2..e7b7ecf44d 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index ca31ee72eb..827cc994f5 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index e51d369b0b..8c34658440 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 98b50b2f30..81590ff768 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 2024-02-18}
+\date{Released 2024-02-20}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 3bdc707c38..4e1be073a9 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 2b605478d0..e16dec0704 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 2024-02-18}
+\date{Released 2024-02-20}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index 32de4338c5..9a0fb8dcf3 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
@@ -691,7 +691,8 @@
% \end{variable}
%
% \begin{macro}{\sys_load_debug:}
-% Simple.
+% The most complicated thing here is that we can only use
+% \cs{__kernel_sys_configuration_load:n} in the preamble in \LaTeX{}.
% \begin{macrocode}
\cs_new_protected:Npn \sys_load_debug:
{
@@ -699,6 +700,17 @@
{ \__kernel_sys_configuration_load:n { l3debug } }
\bool_gset_true:N \g_@@_debug_bool
}
+\cs_if_exist:NT \@expl@finalise@setup@@@@
+ {
+ \tl_gput_right:Nn \@expl@finalise@setup@@@@
+ {
+ \tl_gput_right:Nn \@kernel@after@begindocument
+ {
+ \cs_gset_protected:Npn \sys_load_debug:
+ { \msg_error:nn { sys } { load-debug-in-preamble } }
+ }
+ }
+ }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index 93e859b252..a1e571ac5c 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 c9393940ad..600709d762 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 2024-02-18}
+\date{Released 2024-02-20}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index 3d73b8d5d6..8a5677806c 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx
index 4ae250c241..fff01a5255 100644
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 35a63c0320..6de37faa62 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index 91df04a4b8..bdbd7c8d27 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index 62ce80c145..776b360434 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-build.dtx b/macros/latex/contrib/l3kernel/l3tl-build.dtx
index 4a2b44b287..1fc841ca78 100644
--- a/macros/latex/contrib/l3kernel/l3tl-build.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index c1391c9de1..ed83e3bc81 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index a5a225ab8b..b11e4859db 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index fd4171ffaf..b4a70b24ad 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-02-18}
+% \date{Released 2024-02-20}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index f660845598..6350700965 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 0527b2c6de..69761fd7f3 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 2024-02-18}
+\date{Released 2024-02-20}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/contrib/l3kernel/source3body.tex
index 1e396b15fb..8471296227 100644
--- a/macros/latex/contrib/l3kernel/source3body.tex
+++ b/macros/latex/contrib/l3kernel/source3body.tex
@@ -311,8 +311,6 @@ Variables end with a short identifier to show the variable type:
\item[\texttt{int}] Integer-valued count register.
\item[\texttt{muskip}] \enquote{Rubber} lengths for use in
mathematics.
- \item[\texttt{seq}] \enquote{Sequence}: a data-type used to implement
- lists (with access at both ends) and stacks.
\item[\texttt{skip}] \enquote{Rubber} lengths.
\item[\texttt{str}] String variables: contain character data.
\item[\texttt{tl}] Token list variables: placeholder for a token list.
@@ -333,6 +331,8 @@ following variable types:
\item[\texttt{prop}] Property list: analogue of dictionary or
associative arrays in other languages.
\item[\texttt{regex}] Regular expression.
+ \item[\texttt{seq}] \enquote{Sequence}: a data type used to implement
+ lists (with access at both ends) and stacks.
\end{description}
\subsection{Scratch variables}
diff --git a/macros/latex/contrib/mismath/mismath.dtx b/macros/latex/contrib/mismath/mismath.dtx
index 1d601eff84..b40e0d7211 100644
--- a/macros/latex/contrib/mismath/mismath.dtx
+++ b/macros/latex/contrib/mismath/mismath.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+% Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%
% This file may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3 of this license
@@ -20,7 +20,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{mismath}
- [2023/12/19 v2.9 .dtx mismath file]
+ [2024/02/20 v2.10 .dtx Miscellaneous mathematical macros]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -69,7 +69,7 @@
%</driver>
% \fi
%
-% \CheckSum{631}
+% \CheckSum{691}
%
% \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
@@ -201,13 +201,18 @@
% - New option decimalcomma
% - Some small changes in the documentation}
%
+% \changes{v2.10}{2024/02/19}{
+% - Better compatibility with unicode-math:
+% for the options ibrackets, decimalcomma and the commands MathUp, MathIt
+% - Explicit error message when using mathcols without loading the multicol package}
+%
% \GetFileInfo{mismath.sty}
%
% \title{\textsf{mismath}\\ Miscellaneous mathematical macros\thanks{This document
% corresponds to \textsf{mismath}~\fileversion, dated \filedate.
-% Thanks to François Bastouil for help in English translation.}}
+% Thanks to François Bastouil for initial help in English translation.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{December 19, 2023}
+% \date{February 20, 2024}
%
% \maketitle
% \tableofcontents
@@ -248,18 +253,19 @@
% if there isn't already a command with the same name in the packages loaded
% before \textsf{mismath}. If a macro is already defined,
% a warning message will be displayed and the \textsf{mismath} definition
-% will be ignored. If you wish to keep the existing command or the \textsf{mismath} command,
+% will be ignored. If you wish to keep the \textsf{mismath} or the existing command,
% you can use |\let\|\meta{command}|\relax|, before loading \textsf{mismath}, or after.
-% If the other command is defined with |\AtBeginDocument|, you should do the same for
-% |\let\|\meta{command}|\relax| and for loading mismath.
%
% \medskip
% \DescribeEnv{\oarg{options}}
-% The \textsf{mismath} package loads the \textsf{amsmath} package without any options.
-% If you want to use \textsf{amsmath} with specific options (refer to~\cite{AMS}),
+% The \textsf{mismath} package loads the \textsf{amsmath} package~\cite{AMS}
+% without any options.
+% If you want to use \textsf{amsmath} with specific options (refer to its documentation),
% you can include these options when calling \textsf{mismath}, or
% you can load \textsf{amsmath}
% with the desired options before loading \textsf{mismath}.
+% \emph{When using the package \textsf{unicode-math}~\cite{UNIC}, \textsf{mismath}
+% must be loaded before \textsf{unicode-math}}, just like \textsf{amsmath}.
%
% \medskip
% In addition \textsf{mismath} loads the \textsf{mathtools} package
@@ -269,17 +275,18 @@
% \medskip
% A recommendation, although rarely followed, is to typeset uppercase
% Greek letters in italic shape,
-% similar to other variables~\cite{ICTNS}. This can be automatically achieved with packages
+% similar to other variables~\cite{ICTNS}. This can be automatically achieved,
+% for some particular fonts, with packages
% such as \textsf{fixmath} by Walter Schmidt~\cite{FIXM},
-% \textsf{isomath} by Günter Milde~\cite{ISOM}
+% \mbox{\textsf{isomath}} by Günter Milde~\cite{ISOM}
% or \textsf{pm-isomath} by Claudio Beccari~\cite{PMISO} and optionally with many others
% (such as \textsf{mathpazo} or \textsf{mathptmx} with the option \texttt{slantedGreek}).
% However this feature is not implemented here due to a conflicting rule in France,
% where all capital letters in mathematics
% are required to be typeset in upright shape
-% \footnote{By using the \textsf{frenchmath} package~\cite{FR},
-% you can ensure that the recommended French rule is followed in your document.}.
-% The decision to load any of these packages is left to the user's discretion.
+% \footnote{The \textsf{frenchmath} package~\cite{FR}
+% ensures to follow the recommended French rules.}.
+% ^^A The decision to load any of these packages is left to the user's discretion.
%
% \section{Usage}
%
@@ -291,12 +298,12 @@
% even though this practice is not very common and can be tedious
% to adhere to. A first solution is to use the |\mathup| macro,
% which is superior to |\mathrm|
-% \footnote{The \texttt{\bslash mathup} macro is based on \texttt{\bslash operatorfont},
+% \footnote{The \texttt{\string \mathup} macro is based on \texttt{\string \operatorfont},
% which comes from the
% \textsf{amsopn} package, automatically loaded by \textsf{amsmath}.
% In \textsf{beamer}, the default math font is sans serif,
-% but \texttt{\bslash mathrm} produces a font with serifs, which might not match the
-% overall style of the presentation. Hence, using \texttt{\bslash mathup} is indeed
+% but \texttt{\string \mathrm} produces a font with serifs, which might not match the
+% overall style of the presentation. Hence, using \texttt{\string \mathup} is indeed
% a better choice in \textsf{beamer} presentations to ensure that mathematical
% constants are typeset in upright shape and consistent
% with the default sans serif math font.},
@@ -312,7 +319,7 @@
% Let us notice that |\i| and |\j| already exist in LaTeX. In LR (left-to-right) mode,
% they produce `\extrafont{\i,\ \j}' without the dot, allowing you to place accents on them.
% However, in mathematical mode, they produce the warning
-% ``\texttt{LaTeX Warning: Command \bslash i invalid in math mode on input line}
+% ``\texttt{LaTeX Warning: Command \string \i\space invalid in math mode on input line}
% \meta{line}''.
% With the new definition provided by the package, |\i| and |\j| will be redefined
% specifically for mathematical mode.
@@ -365,9 +372,15 @@
% concerning $\e$ and $\i$~\cite{TYPMA}.
% Several packages enable the typesetting of mathematical Greek letters in upright shape.
% Notably, let us mention \textsf{upgreek}~\cite{GREEK}, \textsf{mathdesign}~\cite{DESIGN}
-% (used in the present document), \mbox{\textsf{kpfonts}}~\cite{KPF}, \textsf{fourier}~\cite{FOUR},
+% (used in the present document), \mbox{\textsf{kpfonts}}~\cite{KPF},
+% \textsf{fourier}~\cite{FOUR},
% \textsf{libertinust1math},
-% \textsf{pxgreeks}, \textsf{txgreeks}, \textsf{libgreek}, etc.
+% \textsf{pxgreeks}, \textsf{txgreeks}
+% \footnote{When using \textsf{pxgreeks} or \textsf{txgreeks},
+% they should be loaded \emph{after} \textsf{mismath} to avoid an error
+% due to conflict with the existing macros \texttt{\string\iint}, \texttt{\string\iiint},
+% \texttt{\string\iiiint}, \texttt{\string\idotsint} in \textsf{amsmath}.},
+% \textsf{libgreek}, etc.
% A special mention goes to \textsf{lgrmath} of Jean-François Burnol~\cite{LGR}
% which allows the use of any Greek LGR-encoded font in math mode.
% These packages provide commands like |\uppi| (\textsf{upgreek}),
@@ -381,7 +394,11 @@
% macro |\pinumber|[\meta{command}].
% This macro redefines |\pi| to match
% the optional command name provided (without a backslash), such as |piup|,
-% assuming that the appropriate package has been loaded beforehand.
+% assuming that the appropriate package has been loaded beforehand
+% \footnote{The macro \texttt{\string \pinumber} doesn't work with
+% \textsf{unicode-math}, but, with this package, you can use \texttt{\string \uppi} instead
+% (or set all greek lowercase letters in upright shape with the option
+% \texttt{math-style=french}).}.
%
% By using the preliminary code |\MathNumbers{ei}\pinumber[piup]|
% (assuming the \textsf{mathdesign} package is loaded)
@@ -426,8 +443,8 @@
% when using the \textsf{mismath} package with other \LaTeX\ packages.},
% produces vectors with arrows
% (thanks to the \textsf{esvect} package by Eddie Saudrais
-% \footnote{\textsf{esvect} provides the \texttt{\bslash vv} macro
-% used by \texttt{\bslash vect}.})
+% \footnote{\textsf{esvect} provides the \texttt{\string \vv} macro
+% used by \texttt{\string \vect}.})
% which are more elegant than those produced by \LaTeX's |\overrightarrow| command.
% The \textsf{esvect} package has an optional argument
% (a single letter between \texttt{a} and \texttt{h}) to define
@@ -445,32 +462,34 @@
% as recommended by ISO~\cite{NIST}~\cite{SI}, instead of using arrows.
% By using the |\boldvect| command, you can modify the behavior of |\vect|
% locally or globally, depending on its placement in the document (inside or outside
-% a group or an environment):\\[1ex]
+% a group or an environment):\\[2ex]
% \begin{minipage}{8cm}
% \begin{verbatim}
%\[ \boldvect \vect{v}
% =\lambda\vect{e}_x+\mu\vect{e}_y. \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}{6cm}
+% \begin{minipage}{4cm}\vspace{-2ex}
% $\boldvect \vect{v}=\lambda\vect{e}_x +\mu\vect{e}_y$.
% \end{minipage}
%
% \DescribeMacro{\boldvectcommand}
% By default |\boldvect| uses the |\boldsymbol| command
-% \footnote{\texttt{\bslash mathbf} produces upright bold font,
-% even when used in combination with \texttt{\bslash mathit}.}
+% \footnote{\texttt{\string \mathbf} produces upright bold font,
+% even when used in combination with \texttt{\string \mathit}.}
% from the \textsf{amsbsy} package, which is automatically loaded by \textsf{amsmath}.
% However, you may prefer other packages that produce bold italic fonts,
% such as \textsf{fixmath} with the |\mathbold| command,
% \textsf{isomath} with |\mathbfit|
-% or \textsf{bm} with the \texttt{\bslash bm} command.
-% To use an alternative command, redefine |\boldvectcommand|,
+% or \textsf{bm} with the |\bm| command;
+% \textsf{unicode-math} provides the |\symbfit| command.
+% To use an alternative command instead of |\boldsymbol| in \textsf{mismath},
+% redefine |\boldvectcommand|,
% for instance after loading \textsf{fixmath}:
% \begin{center} |\renewcommand\boldvectcommand{\mathbold}|. \end{center}
%
% According to ISO rules, symbols for matrices are also in bold italic.
-% Therefore you can use the same |\boldvectcommand| or create another alias.
+% Therefore you can use the same |\boldvect| command or create another alias.
%
% \medskip
% \DescribeMacro{\arrowvect}
@@ -510,7 +529,7 @@
%
% \DescribeMacro{\norm}
% The norm of a vector is conventionally represented using the delimiters |\lVert| and |\rVert|
-% (or \texttt{\bslash}$\mid$ unless a plus (+) or minus (-) sign follows the opening delimiter)
+% (or |\|$\mid$ unless a plus (+) or minus (-) sign follows the opening delimiter)
% or |\left\Vert| and |\right\Vert|
% for adaptive delimiters. Unfortunately, these delimiters
% are always vertically centered, relatively to the middle of the base line,
@@ -541,23 +560,23 @@
% (as mentioned in \cite{TYPMA}~\cite{NIST}~\cite{ICTNS}~\cite{LSHORT}).
% To achieve this, we provide the |\di| command.
% Take a look at the following examples (notice the thin spaces before the d,
-% just like with classic function's names): \\
-% \begin{minipage}[t]{7cm}
+% just like with classic function's names): \\[2ex]
+% \begin{minipage}{7cm}
% \begin{verbatim}
%\[ \iint xy\di x\di y \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}{6cm}
+% \begin{minipage}{5cm}
% \[ \iint xy\di x\di y \]
% \end{minipage}
-% \\
-% \begin{minipage}[t]{7cm}
+% \\[0.5ex]
+% \begin{minipage}{7cm}
% \begin{verbatim}
%\[ m\frac{\di^2x}{\di t^2}
% + h\frac{\di x}{\di t} + kx = 0 \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}[t]{6cm}
+% \begin{minipage}{5cm}
% \[m\frac{\di^2x}{\di t^2}+h\frac{\di x}{\di t}+kx=0\]
% \end{minipage}
%
@@ -566,7 +585,7 @@
%
% \DescribeMacro{\P} \DescribeMacro{\E}
% To refer to probability
-% \footnote{\LaTeX\ provides also \texttt{\bslash Pr} which gives $\Pr$.}
+% \footnote{\LaTeX\ provides also \texttt{\string Pr} which gives $\Pr$.}
% and expectation the proper use is to typeset the capital letters $\P$, $\E$
% in roman just like any standard function identifier.
% This can be achieved with |\P| and |\E| commands.
@@ -626,8 +645,7 @@
% On the other hand, `$\im$' stands for the image of a linear transformation
% (like `$\ker$' for the kernel)
% whereas `$\Im$' is the imaginary part of a complex number.
-% Please note that |\div| already exists ($\div$) and |\span| is a \TeX\ primitive
-% (used in |\multicolumn|);
+% Please note that |\div| already exists ($\div$) and |\span| is a \TeX\ primitive;
% they haven't been redefined. Therefore the provided macros are called |\divg| (divergence)
% and |\spa| (span of a set of vectors).
% Furthermore |\Z| is used to denote the set of integers (see \ref{aliases}),
@@ -704,7 +722,7 @@
%
% \DescribeMacro{\dlim} \DescribeMacro{\dsum} \DescribeMacro{\dprod}
% \DescribeMacro{\dcup} \DescribeMacro{\dcap}
-% With in-line math mode, displaymath behavior can be forced with |\displaystyle|
+% With in-line math mode, displaymath can be forced with |\displaystyle|
% or its alias |\ds|. However, when using these commands, all the rest of the current
% mathematical environment will be set in displaymath mode
% (as shown in the previous example, where the fraction will be expanded).
@@ -728,46 +746,44 @@
% \end{center}
%
% \DescribeMacro{\eqdef} \DescribeMacro{\eqdef*}
-% The |\eqdef| macro writes the equality symbol topped with `def'
+% The |\eqdef| macro writes the equality symbol topped with `def',
% or with `$\scriptstyle \Delta$' for |\eqdef*|
-% (thanks to the \LaTeX\ command |\stackrel|):
-%
-% \bigskip
-% \noindent\begin{minipage}{8cm}
+% (thanks to the \LaTeX\ command |\stackrel|):\\[2ex]
+% \begin{minipage}{7cm}
% \begin{verbatim}
-%$ \e^{\i\theta} \eqdef
-% \cos\theta + \i\sin\theta $
+%\[ \e^{\i\theta} \eqdef
+% \cos\theta + \i\sin\theta \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}{6cm}
-% $\e^{\i\theta}\eqdef\cos\theta + \i\sin\theta$
+% \begin{minipage}{5cm}\vspace{-3ex}
+% \[\e^{\i\theta}\eqdef\cos\theta + \i\sin\theta\]
% \end{minipage}
%
-% \noindent\begin{minipage}{8cm}
+% \noindent\begin{minipage}{7cm}
% \begin{verbatim}
-%$ \e^{\i\theta} \eqdef*
-% \cos\theta + \i\sin\theta $
+%\[ \e^{\i\theta} \eqdef*
+% \cos\theta + \i\sin\theta \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}{6cm}
-% $\e^{\i\theta}\eqdef*\cos\theta + \i\sin\theta$
+% \begin{minipage}{5cm}\vspace{-3ex}
+% \[\e^{\i\theta}\eqdef*\cos\theta + \i\sin\theta\]
% \end{minipage}
%
% \DescribeMacro{\unbr}
% |\unbr| is an alias for |\underbrace|
% \footnote{The \textsf{mathtools} package by Morten Høgholm
% and Lars Madsen~\cite{TOOL} provides a new and improved version
-% of the \texttt{\bslash underbrace} command, along with many other usefull macros.
+% of the \texttt{\string \underbrace} command, along with many other useful macros.
% It is loaded by \textsf{mismath}.},
% making source code more compact.\\[2ex]
-% \begin{minipage}{7.5cm}
+% \begin{minipage}{6.8cm}
% \begin{verbatim}
-%$ (QAP)^n = \unbr{QAP\mul QAP\mul
-% \cdots\mul QAP}_{n\text{ times}} $
+%\[ (QAP)^n = \unbr{QAP\mul QAP\mul
+% \cdots\mul QAP}_{n\text{ times}} \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}{6.5cm}
-% $ (QAP)^n = \unbr{QAP\mul QAP\mul\cdots\mul QAP}_{n\text{ times}} $
+% \begin{minipage}{6.2cm}\vspace{-3ex}
+% \[ (QAP)^n = \unbr{QAP\mul QAP\mul\cdots\mul QAP}_{n\text{ times}} \]
% \end{minipage}
%
% \DescribeMacro{\iif}
@@ -806,8 +822,8 @@
% or enclose the function or structure with braces:
% \begin{center}
% $x\mul{\sin x}$, obtained with |x\mul{\sin x}|, is slightly better than $x\mul\sin x$.\\[1ex]
-% |$\sin\!{\left( \frac{\pi}{3} \right)} \mul 2$| \quad gives\\
-% $\sin\!{\left(\frac{\pi}{3}\right)}\mul 2$ which is better than
+% |$\sin\!{\left( \frac{\pi}{3} \right)} \mul 2$|\\
+% gives $\sin\!{\left(\frac{\pi}{3}\right)}\mul 2$, which is better than
% $\sin\left(\frac{\pi}{3}\right)\mul 2$.
% \end{center}
% The thin negative space after the function name is not relative to |\mul|,
@@ -834,22 +850,22 @@
% For bars whose height has to adapt to the content,
% we can use |\left\vert| \ldots |\right\vert| or, more simply,
% the |\abs|\{\ldots\} command, which is equivalent
-% \footnote{Another solution is to define \texttt{\bslash abs}
-% using the \texttt{\bslash DeclarePairedDelimiter} command
-% from the \textsf{mathtools} package~\cite{TOOL}.}.
+% \footnote{Another solution is to define \texttt{\string \abs}
+% using the \texttt{\string \DeclarePairedDelimiter} command
+% from the \mbox{\textsf{mathtools}} package~\cite{TOOL}.}.
%
% \medskip
% \DescribeMacro{\lfrac}
% The |\lfrac| macro behaves like |\frac|
% but with thicker spaces around the arguments,
-% making the corresponding fraction bar slightly longer:\\
-% \begin{minipage}[t]{8cm}
+% making the corresponding fraction bar slightly longer:\\[2ex]
+% \begin{minipage}{8cm}
% \begin{verbatim}
%\[ \lbar{Z} =
% \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}[t]{4cm}
+% \begin{minipage}{4cm}\vspace{-3ex}
% \[ \lbar{Z} = \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \]
% \end{minipage}
%
@@ -862,9 +878,9 @@
% To address this issue, we have redefined the brackets in the \textsf{ibrackets}
% package~\cite{BRACKET}
% which can be optionally
-% \footnote{This functionality is optional because it causes
-% errors when using a command defined by
-% \texttt{\bslash DeclarePairedDelimiter}~\cite{TOOL} with square brackets.}
+% \footnote{This functionality is optional because there is a conflict
+% when using another command for open intervals with square brackets defined by
+% \texttt{\string \DeclarePairedDelimiter} from \textsf{mathtools}~\cite{TOOL}.}
% loaded by \textsf{mismath} using the \texttt{ibrackets} package option.
% Thus |$x\in ]-\pi,0[ \cup ]2\pi,3\pi[$|
% \begin{align*}
@@ -902,7 +918,7 @@
%
% \medskip
%\DescribeMacro{[decimalcomma]}
-% In many countries, except notably in Anglo-Saxon countries,
+% In many countries, except notably in English-speaking countries,
% the comma is used as a decimal separator for numbers.
% However, in the math mode of \LaTeX, the comma is always, by default,
% treated as a punctuation symbol and therefore is followed by a space.
@@ -928,15 +944,15 @@
%
% \DescribeEnv{system}
% The \texttt{system} environment, defined in the \textsf{mismath} package,
-% is used to represent a system of equations:\\
-% \begin{minipage}[t]{6.5cm}
+% is used to represent a system of equations:\\[2ex]
+% \begin{minipage}{6.5cm}
% \begin{verbatim}
-%$\begin{system}
-% x=1+2t \\ y=2-t \\ z=-3-t
-%\end{system}$
+%\[ \begin{system}
+% x=1+2t \\ y=2-t \\ z=-3-t
+% \end{system} \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}[t]{5cm}
+% \begin{minipage}{5cm} \vspace{-3ex}
% \[ \begin{system} x=1+2t \\ y=2-t \\z=-3-t \end{system} \]
% \end{minipage}
%
@@ -963,16 +979,16 @@
% specifying their alignment using the same syntax as the \texttt{array} environment in
% \LaTeX. For instance, using |\begin{system}[cl]| will produce a two-column system,
% with the first column centered and
-% the second column left-aligned, as shown in the following example:\\
-% \begin{minipage}[t]{7cm}
+% the second column left-aligned, as shown in the following example:\\[2ex]
+% \begin{minipage}{7cm}
% \begin{verbatim}
-%$\begin{system}[cl]
-% y & =\dfrac{1}{2}x-2 \\[1ex]
-% (x,y) & \neq (0,-2)
-%\end{system}$
+%\[ \begin{system}[cl]
+% y & =\dfrac{1}{2}x-2 \\[1ex]
+% (x,y) & \neq (0,-2)
+% \end{system} \]
% \end{verbatim}
% \end{minipage}
-% \begin{minipage}[t]{5cm}
+% \begin{minipage}{5cm}\vspace{-2ex}
% \[ \begin{system}[cl] y&=\dfrac{1}{2}x-2 \\[1ex] (x,y)&\neq (0,-2) \end{system}\]
% \end{minipage}
%
@@ -1041,7 +1057,7 @@
% as shown in the following example.
% However, to use this feature, the \textsf{multicol} package must be loaded in the preamble.
% The \texttt{mathcols} environment activates mathematical mode
-% in display style and with an \texttt{aligned} environment.
+% in display style and uses an \texttt{aligned} environment.
% \begin{mathcols}
% & \frac{1}{2 \mul {\pow{\frac{1}{4}}{n}} + 1} \geq 0.999 \\
% \iff\ & 1 \geq 1.998 \pow{\frac{1}{4}}{n} + 0.999 \\
@@ -1055,8 +1071,8 @@
%
% \DescribeMacro{\changecol}
% The |\changecol| macro is used to switch to the next column,
-% and an alignment within the column is done using the classic delimiters
-% |&| to separate entries and |\\| to start a new row.
+% and alignments within the columns is done using the classic delimiters
+% |&|, to separate entries, and |\\|, to start a new row.
%
% \begin{verbatim}
%\begin{mathcols}
@@ -1114,6 +1130,8 @@
% \StopEventually{}
% \section{Implementation}
%
+% We load certain packages conditionally to avoid 'option clash' errors in cases
+% where these packages have been previously loaded with other options.
% \begin{macrocode}
\newif\ifmm@ibrackets % initialized to false
\newif\ifmm@decimalcomma
@@ -1125,15 +1143,42 @@
\@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}}
\@ifpackageloaded{esvect}{}{\RequirePackage[b]{esvect}}
\RequirePackage{ifthen}
-\RequirePackage{xparse} % for \NewDocumentCommand
+\RequirePackage{xparse} % provides \NewDocumentCommand
\RequirePackage{xspace}
\RequirePackage{iftex}
-\ifmm@ibrackets\RequirePackage{ibrackets}\fi
-\ifmm@decimalcomma\RequirePackage{decimalcomma}\fi
+\RequirePackage{etoolbox} % provides \AtEndPreamble
+
+% \end{macrocode}
+%
+% The package \textsf{unicode-math} causes some compatibility issues
+% with the options ibrackets or decimalcomma: the respective packages
+% must be loaded \emph{after} \textsf{unicode-math},
+% but \textsf{mismath} (like \textsf{amsmath}) must be loaded \emph{before}
+% \textsf{unicode-math}.
+% And to complicate matters, \textsf{unicode-math} defines (or redefines) all its commands
+% by |\AtBeginDocument|.
+% Therefore we used the command |\AtBeginDocument| within
+% |\AtEndPreamble| (from the \textsf{etoolbox} package).
+%
+% Moreover the command |\mathbfsfit| (used for tensors) is already defined
+% in \textsf{unicode-math} and will not be redefined if \textsf{unicode-math}
+% is loaded.
+% \begin{macrocode}
+\newif\ifmm@unicodemath
+\newif\ifmm@multicol
+\AtEndPreamble{% necessary to work with unicode-math
+ \@ifpackageloaded{multicol}{\mm@multicoltrue}{\mm@multicolfalse}
+ \@ifpackageloaded{unicode-math}{\mm@unicodemathtrue}{
+ \mm@unicodemathfalse
+ \DeclareMathAlphabet{\mathbfsfit}{\encodingdefault}%
+ {\sfdefault}{bx}{it}}
+ \AtBeginDocument{% necessary to work with unicode-math
+ \ifmm@ibrackets\RequirePackage{ibrackets}\fi
+ \ifmm@decimalcomma\RequirePackage{decimalcomma}\fi
+ }
+}
% \end{macrocode}
-% We have load certain packages conditionally to avoid 'option clash' errors in cases
-% where these packages have been previously loaded with other options.
%
% \medskip
% \DescribeMacro{\bslash}
@@ -1175,14 +1220,15 @@
% but rather |\mathup| (based on |\operatorfont| from the \textsf{amsopn} package).
% This command also works fine with other sans serif fonts like \textsf{cmbright}.
%
-% Moreover for \textsf{beamer}, which changes the default font family (sans serif)
+% Moreover for \textsf{beamer}, which changes the default font family (to sans serif),
% |\e|, |\i|, |\j| have no effect without |\AtBeginDocument|.
-%
% |\AtBeginDocument| is also necessary to redefine |\i| when calling
% the \textsf{hyperref} package which overwrites the |\i| definition.
% \medskip
% \begin{macrocode}
-\providecommand{\mathup}[1]{{\operatorfont #1}} % also in kpfonts
+\@ifundefined{mathup}{
+ \providecommand*{\mathup}[1]{{\operatorfont #1}}
+ }{\mm@warning{mathup} } % also in kpfonts (and unicode-math)
\mm@macro{e}{\mathup{e}}
\AtBeginDocument{\let\oldi\i \let\oldj\j
\renewcommand{\i}{\TextOrMath{\oldi}{\mathup{i}}}
@@ -1190,8 +1236,11 @@
% \end{macrocode}
%
-% The following macros are switches that transform any chosen letter in math mode
-% to roman or italic style. These switches can be used anywhere in the document or preamble.
+% \DescribeMacro{\MathFamily}
+% The following macros |\MathUp| and |\MathIt| are switches that transform
+% any chosen letter in math mode to roman or italic style.
+% These switches can be used anywhere in the document or preamble.
+% They are based on the generic macro |\MathFamily|.
% To obtain a letter in roman style instead of italic, we need to change the
% mathcode digit that represents the font family: 1 to 0.
%
@@ -1199,10 +1248,11 @@
% `e="7165 (decimal 29029), with the second digit `1' indicating ``italic'' style.
% To get a roman `e', we need to change its mathcode to "7065.
%
-% When used in the preamble, it is necessary to call |\AtBeginDocument|
-% for using with the \textsf{beamer} package.
-% In the preamble, |\math@family{#1}{0}| is equivalent to \\
-% |\DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}|.
+% When used in the preamble, we call |\MathFamily| by |\AtBeginDocument|
+% for working with the \textsf{beamer} package.
+% Let's notice that |\MathFamily| has an erratic behavior when \textsf{unicode-math}
+% is loaded, but fortunately, in that case, the |\DeclareMathSymbol| can be
+% used instead, even outside the preamble.
% \medskip
% \begin{macrocode}
\newcount\mm@charcode
@@ -1210,7 +1260,7 @@
\newcount\mm@charfam
\newcount\mm@charslot
-\newcommand*\math@family[2]{%
+\newcommand*\MathFamily[2]{%
\mm@charfam=#2
\ifluatex
\mm@charclass=\Umathcharclass`#1
@@ -1240,16 +1290,41 @@
\fi
}
-\newcommand*\MathFamily[2]{%
- \ifx\@onlypreamble\@notprerr
- \math@family{#1}{#2}
- \else % before \begin{document}
- \AtBeginDocument{\math@family{#1}{#2}}
+\newcommand*\MathUp[1]{%
+ \ifx\@onlypreamble\@notprerr % not in preamble
+ \ifmm@unicodemath
+ \DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}
+ \else
+ \MathFamily{#1}{0}
+ \fi
+ \else % in preamble
+ \AtBeginDocument{
+ \ifmm@unicodemath
+ \DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}
+ \else
+ \MathFamily{#1}{0}
+ \fi
+ }
\fi
}
-\newcommand*\MathUp[1]{\MathFamily{#1}{0}}
-\newcommand*\MathIt[1]{\MathFamily{#1}{1}}
+\newcommand*\MathIt[1]{%
+ \ifx\@onlypreamble\@notprerr % not in preamble
+ \ifmm@unicodemath
+ \DeclareMathSymbol{#1}{\mathalpha}{letters}{`#1}
+ \else
+ \MathFamily{#1}{1}
+ \fi
+ \else % in preamble
+ \AtBeginDocument{
+ \ifmm@unicodemath
+ \DeclareMathSymbol{#1}{\mathalpha}{letters}{`#1}
+ \else
+ \MathFamily{#1}{1}
+ \fi
+ }
+ \fi
+}
% \end{macrocode}
% With a similar approach we could also create additional macros to set any letter
@@ -1280,20 +1355,21 @@
% \end{macrocode}
% \DescribeMacro{\apply}
-% With the inverse global switch |\MathNormal|, you can apply the normal (italic) style
+% With the inverse switch |\MathNormal|, you can apply the normal (italic) style
% on any comma-separated list of characters. This is achieved using
% the |\apply| macro, \eg |\apply\macro{arg1,arg2}|
% expands to |\macro{arg1}\macro{arg2}|.
% Thus |\apply\MathUp{e,i,j}| is equivalent to |\MathUp{e}\MathUp{i}\MathUp{j}|.
% I discovered this powerfull macro on \texttt{iterate190.rssing.com} by searching for
-% ``TeX How to iterate over a comma separated list?''
+% ``TeX How to iterate over a comma separated list''.
% The answer was posted under the pseudonym `wipet' on 2021/02/26.
% Let its author, Petr Olšák, be thanked.
% This macro allows to accomplish tasks that
% usual loop instructions like |\@for| or |\foreach| cannot achieve due to
% errors like ``!~Improper alphabetic constant''.
% For instance, if you try |\def\letter{A} \MathUp{\letter}| it will fail
-% because the control sequence |\letter| is not equivalent here to the single character `A'.
+% because the control sequence |\letter| is not strictly
+% equivalent here to the single character `A'.
%
% \medskip
% \begin{macrocode}
@@ -1319,64 +1395,70 @@
\newcommand{\enumber}{%
\PackageWarning{mismath}{Old command \string\enumber\space
is used. \MessageBreak
- It can be replaced by \bslash MathUp{e}}
+ It can be replaced by \string\MathUp{e}}
\MathUp{e}
}
\newcommand{\inumber}{%
\PackageWarning{mismath}{Old command \string\inumber\space
is used. \MessageBreak
- It can be replaced by \bslash MathUp{i}}
+ It can be replaced by \string\MathUp{i}}
\MathUp{i}
}
\newcommand{\jnumber}{
\PackageWarning{mismath}{Old command \string\jnumber\space
is used. \MessageBreak
- It can be replaced by \bslash MathUp{j}}
+ It can be replaced by \string\MathUp{j}}
\MathUp{j}
}
\newcommand{\PEupright}{
\PackageWarning{mismath}{Old command \string\PEupright\space
is used. \MessageBreak
- It can be replaced by \bslash MathUp{P}
- and \bslash MathUp{E}}
+ It can be replaced by \string\MathUp{P}\space
+ and \string\MathUp{E}}
\MathUp{P}\MathUp{E}
}
% \end{macrocode}
%
-% The Greek letter pi must be handled differently. The switches are called
-% |\pinumber| and |\pinormal|.
+% Obtaining an upright Greek letter $\pi$ must be handled differently.
+% The switches are called |\pinumber| and |\pinormal|.
% When given without an argument, |\pinumber| uses the LGR font encoding.
% A particularity of the \textsf{fontenc} package is that it can be loaded
% several times with different options without triggering an ``option clash'' error.
+% This macro doesn't work with \textsf{unicode-math}, which provides
+% the |\uppi| command but it cannot be redefined in |\pi|.
% \medskip
% \begin{macrocode}
\newcommand*\pinumber[1][]{
+ \ifmm@unicodemath
+ \PackageError{mismath}{Command \string\pinumber\space
+ is incompatible with unicode-math. \MessageBreak
+ Use \string\uppi\space to get the upright pi}{}
+ \fi
\@ifundefined{itpi}{\let\itpi\pi}{}
\ifthenelse{\equal{#1}{}}{
- \ifx\@onlypreamble\@notprerr
+ \ifx\@onlypreamble\@notprerr % not in preamble
\@ifundefined{savedpi}{
\PackageWarning{mismath}{%
- \bslash pinumber without argument\MessageBreak
+ \string\pinumber\space without argument\MessageBreak
must be used in the preamble first\MessageBreak
to load LGR fontenc for upright pi}
}{\let\pi\savedpi}
\else % in the preamble
\RequirePackage[LGR,T1]{fontenc}
\DeclareSymbolFont{UpGr}{LGR}{lmr}{m}{n}
- \let\pi\relax
+ \let\pi\relax
\DeclareMathSymbol{\pi}\mathalpha{UpGr}{"70}
\let\savedpi\pi
\fi
}{
\@ifundefined{#1}{
\PackageWarning{mismath}{%
- Value #1 must be a valid
- command name\MessageBreak for pinumber,
- but command \bslash #1\space
+ #1 must be a valid command name\MessageBreak
+ for pinumber, but command \bslash #1
is undefined.\MessageBreak
Perhaps a missing package}
- }{\renewcommand{\pi}{%
+ }{\renewcommand{\pi}{%
\csname #1\endcsname}
}
}
@@ -1410,11 +1492,10 @@
\mbox{\tiny\raisebox{1pt}{$\Vert$}} #1
\mbox{\tiny\raisebox{1pt}{$\Vert$}} }
\@ifundefined{norm}{\providecommand*{\norm}[1]{
- \mathchoice{\@norm{#1}}{\@norm{#1}}{\@@norm{#1}}{\@@@norm{#1}}
- }
- }{\mm@warning{norm} } % bad result with libertinust1math
+ \mathchoice{\@norm{#1}}{\@norm{#1}}{\@@norm{#1}}{\@@@norm{#1}}
+ }
+}{\mm@warning{norm}} % bad result with libertinust1math
-\DeclareMathAlphabet{\mathbfsfit}{\encodingdefault}{\sfdefault}{bx}{it}
\newcommand{\tensor}{\mathbfsfit} % isomath uses \mathsfbfit
% \end{macrocode}
@@ -1441,7 +1522,7 @@
\mm@operator{\erf}{erf}
\mm@macro{grad}{\operatorname{\vect{\mathup{grad}}}}
-\mm@operator{\id}{id} % mathop or mathord ?
+\mm@operator{\id}{id} % mathop or mathord?
\mm@operator{\Id}{Id}
\mm@operator{\im}{im}
\let\oldIm\Im \renewcommand{\Im}{\operatorname{Im}}
@@ -1513,6 +1594,7 @@
% \end{macrocode}
% Above, we have used |\mathrm| before |\Delta| in case of defining capital Greek letters
% in italics (for example with the \textsf{fixmath} package).
+%
% The use of |\mbox{}| ensures that the space produced by |\| in the |\then| macro
% is not suppressed in tables.
% \medskip
@@ -1545,10 +1627,16 @@
}{\end{smallmatrix}\right)}
\newenvironment{mathcols}{% needs multicol package
+ \ifmm@multicol
\renewcommand{\columnseprule}{0.1pt}
\begin{multicols}{2}
\par\noindent\hfill
\begin{math}\begin{aligned}\displaystyle
+ \else
+ \PackageError{mismath}{The mathcols environment
+ needs the multicol package}{Add the package multicol
+ to your preamble.}
+ \fi
}{%
\end{aligned}\end{math} \hfill\mbox{}
\end{multicols}
@@ -1559,8 +1647,8 @@
\begin{math}\begin{aligned}\displaystyle
}
% \end{macrocode}
-% \pagebreak
-% \begin{thebibliography}{27}
+%
+% \begin{thebibliography}{28}
% \begin{raggedright}
% \bibitem{TYPMA} \emph{Typesetting mathematics for science and technology according
% to ISO 31/XI}, Claudio Beccari, TUGboat Volume 18 (1997), No.~1.
@@ -1579,11 +1667,14 @@
% \bibitem{AMS} \emph{\textsf{amsmath} -- \AmS\ mathmatical facilities for \LaTeX},
% Frank Mittelbach, Rainer Schöpf, Michael Downes, Davis M.~Jones, David Carlisle,
% CTAN, v2.17n 2022/04/08.
+% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
+% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
+% Khaled Hosny, and others, CTAN, v0.8r 2023/08/13.
% \bibitem{TOOL} \emph{The \textsf{mathtools} package}, Morten Høgholm, Lars Madsen, CTAN,
% v1.29 2022/06/29.
% \bibitem{FIXM} \emph{The \textsf{fixmath} package for \LaTeXe}, Walter Schmidt,
% CTAN, v0.9 2000/04/11.
-% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology}.
+% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology},
% Günter Milde, CTAN, v0.6.1 2012/09/04.
% \bibitem{PMISO} \emph{\textsf{PM-ISOmath}, The Poor Man ISO math bundle},
% the \textsf{pm-isomath} package by Claudio Beccari, CTAN, v1.2.00 2021/08/04.
@@ -1598,22 +1689,22 @@
% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
% Michel Bovani, CTAN, v1.3 30/01/2005.
% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, v1.0 2022/11/16.
-% \bibitem{INT} \emph{The \textsf{interval} package}. Lars Madsen, CTAN,
+% \bibitem{INT} \emph{The \textsf{interval} package}, Lars Madsen, CTAN,
% v0.4 2019/03/06.
-% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe}.
+% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe},
% Walter Schmidt, CTAN, v2.0 2002/03/10.
-% \bibitem{NCC} \emph{The \textsf{ncccomma} package}. Alexander I.~Rozhenko,
+% \bibitem{NCC} \emph{The \textsf{ncccomma} package}, Alexander I.~Rozhenko,
% CTAN, v1.0 2005/02/10.
-% \bibitem{DEC} \emph{The \textsf{decimalcomma} package}. Antoine Missier,
-% CTAN, v1.0 2023/12/06.
+% \bibitem{DEC} \emph{The \textsf{decimalcomma} package}, Antoine Missier,
+% CTAN, v1.4 2023/12/30.
% \bibitem{SYST} \emph{L'extension pour \TeX\ et \LaTeX\ \textsf{systeme}},
-% Christian Tellechea, CTAN v0.32 2019/01/13.
+% Christian Tellechea, CTAN, v0.32 2019/01/13.
% \bibitem{SPAL} \emph{The \textsf{spalign} package}, Joseph Rabinoff, CTAN, 2016/10/05.
% \bibitem{NMATX} \emph{The package \textsf{nicematrix}}, François Pantigny, CTAN,
% v6.14 2023/02/18.
-% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, CTAN, v2.5 2023/02/24.
-% \bibitem{BRACKET} \emph{Intelligent brackets -- The \textsf{ibrackets} package}
-% Antoine Missier, CTAN, v1.1, 2022/12/26.
+% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, CTAN, v2.8 2024/01/22.
+% \bibitem{BRACKET} \emph{Intelligent brackets -- The \textsf{ibrackets} package},
+% Antoine Missier, CTAN, v1.2, 2023/07/26.
% \bibitem{LSHORT} \emph{The Not So Short Introduction to \LaTeXe},
% the \textsf{lshort} package by
% Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl, CTAN, v6.4 2021/04/09.
diff --git a/macros/latex/contrib/mismath/mismath.ins b/macros/latex/contrib/mismath/mismath.ins
index 2ed4bf317d..5a39f8da29 100644
--- a/macros/latex/contrib/mismath/mismath.ins
+++ b/macros/latex/contrib/mismath/mismath.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%% Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
@@ -21,7 +21,7 @@
This is a generated file.
-Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
This file may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license
diff --git a/macros/latex/contrib/mismath/mismath.pdf b/macros/latex/contrib/mismath/mismath.pdf
index e55f6ede13..6bd776ce78 100644
--- a/macros/latex/contrib/mismath/mismath.pdf
+++ b/macros/latex/contrib/mismath/mismath.pdf
Binary files differ
diff --git a/macros/latex/contrib/robust-externalize/robust-externalize.pdf b/macros/latex/contrib/robust-externalize/robust-externalize.pdf
index 58ea1ff714..4eca1dad3f 100644
--- a/macros/latex/contrib/robust-externalize/robust-externalize.pdf
+++ b/macros/latex/contrib/robust-externalize/robust-externalize.pdf
Binary files differ
diff --git a/macros/latex/contrib/robust-externalize/robust-externalize.sty b/macros/latex/contrib/robust-externalize/robust-externalize.sty
index 0a36647946..488cbb7c8f 100644
--- a/macros/latex/contrib/robust-externalize/robust-externalize.sty
+++ b/macros/latex/contrib/robust-externalize/robust-externalize.sty
@@ -1,4 +1,4 @@
-\ProvidesPackage{robust-externalize}[2.5 Cache anything (tikz, latex, python) in a robust, efficient and pure way.]
+\ProvidesPackage{robust-externalize}[2.6 Cache anything (tikz, latex, python) in a robust, efficient and pure way.]
% todo:
% change order argument replace from list, it is hard to read this way
@@ -184,12 +184,17 @@
\cs_generate_variant:Nn \cs_replacement_spec:N { c }
\cs_generate_variant:Nn \cs_argument_spec:N { c }
+\cs_generate_variant:Nn \str_count_ignore_spaces:n { V }
+\cs_generate_variant:Nn \str_count_spaces:n { e }
+
\cs_generate_variant:Nn \regex_extract_all:nnN { VVN, nVN, VVN }
\cs_generate_variant:Nn \regex_extract_all:NnN { NVN }
\cs_generate_variant:Nn \regex_match:nnTF { nVTF }
+\cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn {Nnv}
+
%%%
%%% String manipulation
%%%
@@ -234,6 +239,7 @@
\msg_new:nnn {robExt}{dependency does not exist}{The~dependency~#1~does~not~exist.}
\msg_new:nnn {robExt}{missing compiled pdf parallel with log}{The~compilation~of~the~code~block~at~line~#2~failed:~the~following ~ file~is~indeed~missing: ~ #1.pdf. ~ The ~ compilation ~ command ~ "#3"~used~to~compile~the~environment~on~line~#2~ certainly ~ failed~with~errors:^^Jvvvvvv^^J\l__robExt_tmp_str^^J\string^\string^\string^\string^\string^\string^ ^^JSee~full~logs~#4~ or ~ in ~ #1-compilation.log.}
+\msg_new:nnn {robExt}{remove spaces until non spaces characters}{The~placeholder~#1~contains~characters~other~than~spaces~(#2)~before~the~separator~#3.}
\msg_new:nnn {robExt}{auto forward not in cachemecode}{Auto~forward~is~less~efficient~in~cacheMeCode.}
@@ -674,7 +680,7 @@ if __name__ == '__main__':
% For some reasons, newlines are displayed as \Omega. We need to replace them with \\
% https://tex.stackexchange.com/questions/694716/print-latex3-string-verbatim/694717
\tl_set_eq:Nc \l__robExt_tmp_str { l__robExt_placeholder_#2_str }
- \tl_replace_all:Nnn \l__robExt_tmp_str {^^J} { \par }
+ \tl_replace_all:Nnn \l__robExt_tmp_str {^^J} { \mbox{}\par } % mbox is helpful to print empty lines
\tl_replace_all:Nnn \l__robExt_tmp_str { ~ } { \ }
\IfBooleanTF{#1}{\texttt{\use:c{l__robExt_placeholder_#2_str}}}{\begin{flushleft}\ttfamily%
\l__robExt_tmp_str
@@ -688,7 +694,7 @@ if __name__ == '__main__':
% For some reasons, newlines are displayed as \Omega. We need to replace them with \\
% https://tex.stackexchange.com/questions/694716/print-latex3-string-verbatim/694717
\tl_set_eq:NN \l__robExt_tmp_str \l_robExt_result_str
- \tl_replace_all:Nnn \l__robExt_tmp_str {^^J} { \par }
+ \tl_replace_all:Nnn \l__robExt_tmp_str {^^J} { \mbox{}\par }
\tl_replace_all:Nnn \l__robExt_tmp_str { ~ } { \ }
\IfBooleanTF{#1}{\texttt{\l__robExt_tmp_str}}{\begin{flushleft}\ttfamily%
\l__robExt_tmp_str
@@ -1300,6 +1306,128 @@ if __name__ == '__main__':
}
\let\placeholderReplaceInplaceEval\robExtPlaceholderReplaceInplaceEval
+
+% \group_begin:
+% \char_set_catcode_other:N \^^I
+% Usage:
+% \robExtPlaceholderRemoveSpacesUntil{__MY_PLACEHOLDER__}{>>>}
+\group_begin:
+\char_set_catcode_other:N \^^I
+\cs_new_protected:Npn \__robExt_replace_tabs:N #1 {
+ \str_replace_all:Nnn #1 { ^^I } { ~ }
+}
+\group_end:
+
+\NewDocumentCommand{\robExtPlaceholderRemoveSpacesUntil}{mO{1}m}{
+ %% Cut the string in lines
+ \seq_set_split_keep_spaces:Nnv \l_tmpa_seq {^^J} { l__robExt_placeholder_#1_str }
+ \str_clear:c { l__robExt_placeholder_#1_str }
+ %% We iterate over the lines
+ \seq_map_variable:NNn \l_tmpa_seq \l_tmpa_tl {
+ % \l_tmpa_tl contains the current line
+ \seq_set_split_keep_spaces:NnV \l_tmpb_seq {#3} \l_tmpa_tl
+ %% In any case, the first item must only contain spaces.
+ % The separator was present. Check that the line only contains spaces before the separator
+ \seq_get_left:NN \l_tmpb_seq \l_tmpb_tl
+ \__robExt_replace_tabs:N \l_tmpb_tl
+ %\str_replace_all:Nnn \l__robExt_tmp_str { ^^I } { ~ }
+ %\tl_replace_all:Nnn \l_tmpb_tl {^^I} {~} % we replace tabs with spaces, check if it works
+ % Save the size of the string
+ \int_set:Nn \l_tmpa_int {\str_count:N \l_tmpb_tl}
+ % we remove spaces
+ \tl_trim_spaces:N \l_tmpb_tl
+ \tl_if_empty:VTF \l_tmpb_tl {
+ \int_compare:nNnTF {\seq_count:N \l_tmpb_seq} > {1} {
+ % Empty line: we add it to the current placeholder
+ \str_put_right:cx { l__robExt_placeholder_#1_str } {
+ % the placeholder is a string, so I expect l_tmpa_tl to also be a string. No problem?
+ \str_range:Nnn \l_tmpa_tl {\l_tmpa_int + \str_count:n {#3} + 1 + #2} {-1} ^^J
+ }
+ } {
+ % No separator: it means the line is empty
+ \str_put_right:cn { l__robExt_placeholder_#1_str } {^^J}
+ }
+ }{
+ % The string was not completely empty: raise an error
+ \msg_error:nnxxx{robExt}{remove spaces until non spaces characters}{#1}{\l_tmpa_tl}{#3}
+ }
+ }
+}
+\let\placeholderRemoveSpacesUntil\robExtPlaceholderRemoveSpacesUntil
+
+% Usage:
+% \robExtPlaceholderPrependAllLines{__MY_PLACEHOLDER__}{ }
+\NewDocumentCommand{\robExtPlaceholderPrependAllLines}{mm}{
+ %% Cut the string in lines
+ \seq_set_split_keep_spaces:Nnv \l_tmpa_seq {^^J} { l__robExt_placeholder_#1_str }
+ \str_clear:c { l__robExt_placeholder_#1_str }
+ %% We iterate over the lines
+ \seq_map_variable:NNn \l_tmpa_seq \l_tmpa_tl {
+ \str_put_right:cx { l__robExt_placeholder_#1_str } {
+ #2
+ \l_tmpa_tl ^^J}
+ }
+}
+\let\placeholderPrependAllLines\robExtPlaceholderPrependAllLines
+
+
+%% https://tex.stackexchange.com/questions/709973/latex3-efficient-way-to-remove-spaces-in-front-of-a-command/710006?noredirect=1#comment1765909_710006
+%% Modifies \l_tmpa_tl so that it contains the current number of spaces to remove
+%% It also uses \l_tmpa_str
+\group_begin:
+\char_set_catcode_other:N \^^I
+\cs_new_protected:Npn \__robExt_count_leading_whitespace:n #1
+{
+ \str_set:Nn \l_tmpa_str {#1}
+ \str_replace_all:Nnn \l_tmpa_str { ^^I } { ~ }
+ \tl_if_blank:VF \l_tmpa_str
+ {
+ \int_set:Nn \l_tmpa_int
+ {
+ \int_min:nn
+ { \l_tmpa_int }
+ {
+ \str_count_spaces:N \l_tmpa_str -
+ \str_count_spaces:e
+ { \exp_last_unbraced:NV \use:n \l_tmpa_str {} }
+ }
+ }
+ }
+}
+\cs_generate_variant:Nn \__robExt_count_leading_whitespace:n { V }
+\group_end:
+
+\NewDocumentCommand{\robExtPlaceholderRemoveLeadingSpaces}{m}{
+ %% Cut the string in lines
+ \seq_set_split_keep_spaces:Nnv \l_tmpa_seq {^^J} { l__robExt_placeholder_#1_str }
+ %% Stores the number of spaces we can trim. Since we will take the minimum, we add infinity first
+ \int_set_eq:NN \l_tmpa_int \c_max_int
+ %% We iterate over the lines to find the minimum number of spaces to trim
+ \seq_map_variable:NNn \l_tmpa_seq \l_tmpa_tl {
+ % If the line is empty, let's just remove it:
+ \int_compare:nNnTF {\str_count_ignore_spaces:V \l_tmpa_tl} > {0} {
+ % The line contains also letters, let us count the number of spaces.
+ \__robExt_count_leading_whitespace:V \l_tmpa_tl
+ } {
+ % line contains only spaces, we don't care
+ }
+ }
+ %% We check if the string was not all empty (e.g. if the content is empty)
+ \int_compare:nNnTF {\l_tmpa_int} = {\c_max_int} {} {
+ \str_clear:c { l__robExt_placeholder_#1_str }
+ %% We iterate over the lines to recreate the appropriate placeholder
+ \seq_map_variable:NNn \l_tmpa_seq \l_tmpa_tl {
+ \str_put_right:cx { l__robExt_placeholder_#1_str } {
+ \str_range:Nnn \l_tmpa_tl {\l_tmpa_int + 1} {-1}
+ ^^J
+ }
+ }
+ }
+}
+\let\placeholderRemoveLeadingSpaces\robExtPlaceholderRemoveLeadingSpaces
+
+
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%% Placeholders groups %%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -2371,6 +2499,25 @@ if __name__ == '__main__':
\robExtRemovePlaceholder{__ROBEXT_TMP__}% let us clean our variables
\let\robExtCurrentlyDefiningPreset\undefined%
},
+ add before preset/.code 2 args={%
+ \robExtStrSetDoubleHash{\robExtTmpStr}{#2}%
+ % Sadly, \expanded{\noexpand } does not work, as I get extra {} around the def, creating a group
+ % so the simpler seems to use this library ^^
+ \robExtPlaceholderFromString{__ROBEXT_TMP__}{\robExtTmpStr}%
+ \robExtEvalPlaceholderReplaceFromList{__ROBEXT_TMP__}{%
+ \pgfkeys{%
+ /robExt/.cd,
+ #1/.prefix style={%
+ % Some styles run differently if inside a preset or not,
+ % like if matches word. This macro helps with detecting it.
+ /utils/exec={\def\robExtCurrentlyDefiningPreset{}},%
+ __ROBEXT_TMP__%
+ },%
+ }%
+ }%
+ \robExtRemovePlaceholder{__ROBEXT_TMP__}% let us clean our variables
+ \let\robExtCurrentlyDefiningPreset\undefined%
+ },
new preset/.code 2 args={%
\robExtStrSetDoubleHash{\robExtTmpStr}{#2}%
% Sadly, \expanded{\noexpand } does not work, as I get extra {} around the def, creating a group
@@ -2512,6 +2659,22 @@ if __name__ == '__main__':
placeholder double number hashes in place/.code={\robExtPlaceholderDoubleNumberHashesInplace{#1}},
placeholder replace in place/.code n args={3}{\robExtPlaceholderReplaceInplace{#1}{#2}{#3}},
placeholder replace in place eval/.code n args={3}{\robExtPlaceholderReplaceInplaceEval{#1}{#2}{#3}},
+ placeholder prepend all lines/.code 2 args={\robExtPlaceholderPrependAllLines{#1}{#2}},
+ prepend all lines/.style={
+ placeholder prepend all lines={__ROBEXT_MAIN_CONTENT_ORIG__}{#1},
+ },
+ placeholder remove spaces until/.code 2 args={\robExtPlaceholderRemoveSpacesUntil{#1}{#2}},
+ remove spaces until/.style={
+ placeholder remove spaces until={__ROBEXT_MAIN_CONTENT_ORIG__}{#1},
+ },
+ placeholder strictly remove spaces until/.code 2 args={\robExtPlaceholderRemoveSpacesUntil{#1}[0]{#2}},
+ strictly remove spaces until/.style={
+ placeholder remove spaces until nospace={__ROBEXT_MAIN_CONTENT_ORIG__}{#1},
+ },
+ placeholder remove leading spaces/.code={\robExtPlaceholderRemoveLeadingSpaces{#1}},
+ remove leading spaces/.code={\robExtPlaceholderRemoveLeadingSpaces{__ROBEXT_MAIN_CONTENT_ORIG__}},
+ remove leading spaces if not disabled/.code={\ifdefined\robExtDoNotRemoveLeadingSpaces\else\robExtPlaceholderRemoveLeadingSpaces{__ROBEXT_MAIN_CONTENT_ORIG__}\fi},
+ do not remove leading spaces/.code={\def\robExtDoNotRemoveLeadingSpaces{}},
% Interface to set template
set template/.style={
set placeholder first={__ROBEXT_TEMPLATE__}{#1},
@@ -3484,6 +3647,7 @@ finished_with_no_error()
add import/.style={
add to placeholder no space={__ROBEXT_PYTHON_IMPORT__}{##1^^J},
},
+ remove leading spaces if not disabled,
}
}
@@ -3577,8 +3741,13 @@ print_file.close()
{
\dim_to_decimal_in_unit:nn { #2 } { 1 #1 } #1
}
+\DeclareExpandableDocumentCommand{\robExtLenToCmNoUnit}{ O{cm} m }
+{
+ \dim_to_decimal_in_unit:nn { #2 } { 1 #1 }
+}
\ExplSyntaxOff
\let\lenToCm\robExtLenToCm
+\let\lenToCmNoUnit\robExtLenToCmNoUnit
\robExtConfigure{
verbatim text/.style={
diff --git a/macros/latex/contrib/robust-externalize/robust-externalize.tex b/macros/latex/contrib/robust-externalize/robust-externalize.tex
index f06333b9fe..93d7f664e0 100644
--- a/macros/latex/contrib/robust-externalize/robust-externalize.tex
+++ b/macros/latex/contrib/robust-externalize/robust-externalize.tex
@@ -105,7 +105,7 @@
{\Large\bfseries Cache anything (\tikzname, tikz-cd, python…),\\in a robust, efficient and pure way.}
\vspace{1em}
- {Léo Colisson \quad Version 2.5}\\[3mm]
+ {Léo Colisson \quad Version 2.6}\\[3mm]
{\href{https://github.com/leo-colisson/robust-externalize}{\texttt{github.com/leo-colisson/robust-externalize}}}
\end{center}
@@ -2000,6 +2000,89 @@ We provide a list of placeholders that are useful to escape parts of the strings
\end{pgfmanualentry}
\begin{pgfmanualentry}
+ \extractcommand\placeholderRemoveSpacesUntil\marg{placeholder}\opt{\oarg{nb of additional letters to remove}}\marg{separator}\@@
+ \makeatletter%
+ \def\extrakeytext{style, }
+ \extractkey/robExt/placeholder remove spaces until=\marg{placeholder}\marg{separator}\@nil
+ \extractkey/robExt/remove spaces until=\marg{separator}\@nil
+ \extractkey/robExt/placeholder strictly remove spaces until=\marg{placeholder}\marg{separator}\@nil
+ \extractkey/robExt/strictly remove spaces until=\marg{separator}\@nil
+ \makeatother%
+ \pgfmanualbody
+ (new in v2.6) Removes all the spaces before |separator|, together with the separator itself and the next character (unless you use the |strictly| version, in that case the next character is not dropped, or if you change the default value of |additional letters to remove| that defaults to 1). Note that |prepend all lines| automatically apply it to the |__ROBEXT_MAIN_CONTENT_ORIG__| placeholder, i.e. the text typed by the user.
+
+ This is useful, for instance, if your editor tends to automatically remove the indentation of your python code while indenting automatically the document.
+\begin{codeAndResult}
+%% See that the python code can be freely indented now:
+\begin{CacheMeCode}{python print code and result, remove spaces until={>>>}}
+ >>> for i in range(2):
+ >>> print(f"Hello {i}")
+\end{CacheMeCode}
+\end{codeAndResult}
+\end{pgfmanualentry}
+
+
+\begin{pgfmanualentry}
+ \extractcommand\placeholderPrependAllLines\marg{placeholder}\marg{text}\@@
+ \makeatletter%
+ \def\extrakeytext{style, }
+ \extractkey/robExt/placeholder prepend all lines=\marg{placeholder}\marg{text}\@nil
+ \extractkey/robExt/prepend all lines=\marg{text}\@nil
+ \makeatother%
+ \pgfmanualbody
+ (new in v2.6) Prepend all lines with |text|. This can be useful, for instance, if you want to indent a whole block of python code automatically. Note that the text is evaluated, so in case you want to insert multiple spaces, use |\space| like in:\\
+ |prepend all lines={\space\space\space\space}|\\
+\begin{codeAndResult}
+\begin{PlaceholderFromCode}{__TMP__}
+ >>> def f(x): % hye # 42
+ >>> return 42
+ >>>
+ >>> def g(z):
+ >>> return 48
+\end{PlaceholderFromCode}
+\placeholderRemoveSpacesUntil{__TMP__}{>>>}
+\placeholderPrependAllLines{__TMP__}{My text\space\space\space\space}
+\printPlaceholderNoReplacement{__TMP__}
+\end{codeAndResult}
+Note that |prepend all lines| automatically adds the text to the |__ROBEXT_MAIN_CONTENT_ORIG__| placeholder, i.e. the text typed by the user.
+\end{pgfmanualentry}
+
+\begin{pgfmanualentry}
+ \extractcommand\placeholderRemoveLeadingSpaces\marg{placeholder}\@@
+ \makeatletter%
+ \def\extrakeytext{style, }
+ \extractkey/robExt/placeholder remove leading spaces=\marg{placeholder}\@nil
+ \extractkey/robExt/remove leading spaces\@nil
+ \extractkey/robExt/remove leading spaces if not disabled\@nil
+ \extractkey/robExt/do not remove leading spaces\@nil
+ \makeatother%
+ \pgfmanualbody
+ (new in v2.6) Remove the indentation of a placeholder (the |__ROBEXT_MAIN_CONTENT_ORIG__| placeholder, containing the content typed by the user, is used when not specified), by removing on each line the highest possible number of leading spaces (the same number of spaces is removed on all lines).
+\begin{codeAndResult}
+\begin{PlaceholderFromCode}{__TMP__}
+ def f(x): % hye # 42
+ return 42
+
+ def g(z):
+ return 48
+\end{PlaceholderFromCode}
+\placeholderRemoveLeadingSpaces{__TMP__}
+\printPlaceholderNoReplacement{__TMP__}
+\end{codeAndResult}
+Note that |remove leading spaces if not disabled| is like |remove leading spaces|, except that it is not run if the |do not remove leading spaces| style is applied before. This is used inside some styles like |python| that cares about indentation to remove the leading spaces (before v2.6, it was forbidden to add any indentation to the python code), while allowing the user to disable it temporarily (who knows why?) by using the style:
+\begin{verbatim}
+do not remove leading spaces, python
+\end{verbatim}
+Since |remove leading spaces if not disabled| is enabled by default on python, it is therefore fine to indent your python code like in:
+\begin{codeAndResult}
+\begin{CacheMeCode}{python print code and result}
+ for i in range(3):
+ print(f"Hello {i}")
+\end{CacheMeCode}
+\end{codeAndResult}
+\end{pgfmanualentry}
+
+\begin{pgfmanualentry}
\extractcommand\placeholderHalveNumberHashesInplace\marg{placeholder}\@@
\extractcommand\placeholderDoubleNumberHashesInplace\marg{placeholder}\@@
\makeatletter%
@@ -2074,6 +2157,30 @@ Compare \evalPlaceholder{__MACRO_EVALUATED__} and \evalPlaceholder{__MACRO_NOT_E
Note that this works well for commands that expand completely, but some more complex commands might not expand properly (like |cref|). I need to investigate how to solve this issue, meanwhile you can still disable externalization for these pictures.
\end{pgfmanualentry}
+\begin{pgfmanualentry}
+ \extractcommand\lenToCm\opt{\oarg{unit}}\marg{expression}\@@
+ \extractcommand\lenToCmNoUnit\opt{\oarg{unit}}\marg{expression}\@@
+ \pgfmanualbody
+ |\lenToCm{.75\linewidth}| will output the length of |.75\linewidth| in cm by default, like |10cm|. If you want to change the unit, you can use the optional argument to specify a different unit (like |in| for inches, see |\dim_to_decimal_in_unit| for details). You can remove the unit at the end using |\lenToCmNoUnit{.75\linewidth}| (needs v2.6) to obtain something like |10| instead of |10cm|. These commands are helpful with |set placeholder eval| to send length from \LaTeX{} to your environment:
+\begin{codeAndResult}
+\begin{CacheMeCode}{python, set placeholder eval={__LINEWIDTH__}{\lenToCmNoUnit[in]{.75\linewidth}}}
+import matplotlib.pyplot as plt
+import matplotlib
+from matplotlib.pyplot import figure
+figure(figsize=(__LINEWIDTH__, __LINEWIDTH__))
+year = [2014, 2015, 2016, 2017, 2018, 2019]
+tutorial_count = [39, 117, 111, 110, 67, 29]
+plt.plot(year, tutorial_count, color="#6c3376", linewidth=2)
+plt.title("Simple plot")
+plt.xlabel('Year')
+plt.ylabel('Number of futurestud.io Tutorials')
+print(get_filename_from_extension(".pgf"))
+# https://stackoverflow.com/a/52587591/4987648
+plt.savefig("__ROBEXT_OUTPUT_PDF__", bbox_inches="tight")
+\end{CacheMeCode}
+\end{codeAndResult}
+\end{pgfmanualentry}
+
\subsubsection{Groups: the import system}\label{sec:importSystem}
(This whole system was added v2.0.)
@@ -2340,6 +2447,7 @@ This content is cached $\delta$.
\def\extrakeytext{style, }
\extractkey/robExt/new preset=\marg{name preset}\marg{preset options}\@nil
\extractkey/robExt/add to preset=\marg{name preset}\marg{preset options}\@nil
+ \extractkey/robExt/add before preset=\marg{name preset}\marg{preset options}\@nil
\makeatother%
\pgfmanualbody
You can then create your own style (or preset) in |\robExtConfigure| (that is basically an alias for |\pgfkeys{/robExt/.cd,#1}|) containing your template, add your own placeholders and commands to configure them etc. We provide two helper functions since v2.0:\\
@@ -2390,6 +2498,7 @@ This content is cached $\delta$.
This content is cached $\delta$.
\end{CacheMe}
\end{codeexample}
+The |before| variation (from 2.6) simply adds the style before the existing style. May be useful to disable default options of a style.
\end{pgfmanualentry}
\begin{pgfmanualentry}
@@ -3837,7 +3946,7 @@ with open(get_verbatim_output(), "w") as f:
\end{CacheMeCode}
\end{codeAndResult}
-\textbf{Importantly: you do not want to indent the whole content of CacheMeCode, or the spaces will also appear in the final code.}
+Note that if you use a version before 2.6, you cannot indent further the python code (i.e.\ the first line must not start with any space). This is fixed in 2.6 with the addition of |remove leading spaces if not disabled| in the python preset by default, that will remove automatically any unnecessary indentation. If you use automatic indentation in your text editor, you might also like to use |remove spaces until| so that automatically indenting your whole document does not ruin the indentation of the python code.
You can also generate some images. This code will produce the image in \cref{fig:pythonGeneratedImage2}:
\begin{codeexample}[code only]
@@ -4802,6 +4911,13 @@ Options > Configure TeXstudio > Editor > Replace tabs in text with spaces
\section{Changelog}
\begin{itemize}
+\item v2.6:
+ \begin{itemize}
+ \item Added |\lenToCmNoUnit|
+ \item Added |\placeholderPrependAllLines| and alike
+ \item Added |remove spaces until| and alike
+ \item Added |placeholderRemoveLeadingSpaces| and alike
+ \end{itemize}
\item v2.5:
\begin{itemize}
\item Add tikzit support