diff options
Diffstat (limited to 'Master/texmf-dist')
163 files changed, 4460 insertions, 802 deletions
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/README.md b/Master/texmf-dist/doc/latex-dev/amsmath/README.md index ac10c989eaf..05c4c7543a4 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/README.md +++ b/Master/texmf-dist/doc/latex-dev/amsmath/README.md @@ -1,7 +1,7 @@ The amsmath bundle for LaTeX ============================ -Release 2023-11-01 pre-release 0 +Release 2023-11-01 pre-release 1 Overview -------- diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf Binary files differindex 87bfa6df038..60f9c089207 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf Binary files differindex bbfa58d70d8..582d63279fb 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf Binary files differindex 0a9a85254b7..fdc060f1652 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf Binary files differindex 288bb124459..2e31edf1845 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf Binary files differindex 4a702bb99f1..188ca0bb436 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf Binary files differindex 339f576260d..cae09a4e59b 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf Binary files differindex 09147c84e65..2da56e8d43a 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf Binary files differindex 06c8eab3e77..f7d546fb5de 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt b/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt index 149da6b425e..b0386772067 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt @@ -1,3 +1,7 @@ +2023-08-24 David Carlisle <David.Carlisle@latex-project.org> + + * testmath.tex: remove spaces before ~, + ================================================================================ All changes above are only part of the development branch for the next release. ================================================================================ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf Binary files differindex 5a72c25f098..72caa0c5e75 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf Binary files differindex 14fcc7374a8..6f9c45f5a3d 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf Binary files differindex 4f43dc57b07..c059693f3bc 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf +++ b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.tex b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.tex index 069944ee9d0..c0df3370153 100644 --- a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.tex +++ b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.tex @@ -1,41 +1,15 @@ %%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "testmath.tex", -%%% version = "2.0", -%%% date = "1999/11/15", -%%% time = "15:09:17 EST", -%%% checksum = "07762 2342 7811 82371", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amsmath, examples, documentation", -%%% supported = "yes", -%%% abstract = "This is a test file containing extensive examples of -%%% mathematical constructs supported by the amsmath -%%% package.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } +%%% filename = testmath.tex +%%% version = 2.0a +%%% date = 2023/08/24 +%%% author = American Mathematical Society +%%% copyright = Copyright 1995, 1999 American Mathematical Society +%%% 2023 LaTeX Project. +%%% License = https://www.latex-project.org/lppl/lppl-1-3c +%%% keywords = latex, amsmath, examples, documentation +%%% abstract = This is a test file containing extensive examples of +%%% mathematical constructs supported by the amsmath +%%% package." %%% ==================================================================== \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) [1994/12/01]% LaTeX date must December 1994 or later @@ -45,7 +19,7 @@ \title{Sample Paper for the \pkg{amsmath} Package\\ File name: \fn{testmath.tex}} \author{American Mathematical Society} -\date{Version 2.0, 1999/11/15} +\date{Version 2.0a, 2023/08/24} \usepackage{amsmath,amsthm} @@ -250,7 +224,7 @@ Then, it follows that \end{lem} Note that all basic properties of determinants are direct consequences -of Lemma ~\ref{lem-det}. Write +of Lemma~\ref{lem-det}. Write \begin{equation}\label{sum-bij} \sum_{j\in\mathbf{n}}b_{ij}\hat y_j=\sum_{j\in\mathbf{n}}b^{(\lambda)} _{ij}\hat y_j+(b_{ii}-\lambda_i)\hat y_i\hat y @@ -325,7 +299,7 @@ D(t_1,\dots,t_n) where $\mathbf{K}(t=1,t_1,\dots,t_n; i|i)$ is the $i$th principal submatrix of $\mathbf{K}(t=1,t_1,\dots,t_n)$. -Theorem ~\ref{thm-main} leads to +Theorem~\ref{thm-main} leads to \begin{equation}\label{detK1} \det\mathbf{K}(t_1,t_1,\dots,t_n) =\sum_{I\in\mathbf{n}}(-1)^{\envert{I}}t^{n-\envert{I}} @@ -339,7 +313,7 @@ Note that ^{(\lambda)}(\overline{I}|\overline{I})=0. \end{equation} -Let $t_i=\hat x_i,i=1,\dots,n$. Lemma ~\ref{lem-per} yields +Let $t_i=\hat x_i,i=1,\dots,n$. Lemma~\ref{lem-per} yields \begin{multline} \biggl(\sum_{\,i\in\mathbf{n}}a_{l _i}x_i\biggr) \det\mathbf{K}(t=1,x_1,\dots,x_n;l |l )\\ @@ -381,8 +355,8 @@ D(t_1,\dots,t_n)}_{t_i=\left\{\begin{smallmatrix} \section{Application} \label{lincomp} -We consider here the applications of Theorems~\ref{th-info-ow-ow} and -~\ref{th-weak-ske-owf} to a complete +We consider here the applications of Theorems~\ref{th-info-ow-ow} +and~\ref{th-weak-ske-owf} to a complete multipartite graph $K_{n_1\dots n_p}$. It can be shown that the number of spanning trees of $K_{n_1\dots n_p}$ may be written @@ -395,8 +369,7 @@ where n=n_1+\dots+n_p. \end{equation} -It follows from Theorems~\ref{th-info-ow-ow} and -~\ref{th-weak-ske-owf} that +It follows from Theorems~\ref{th-info-ow-ow} and~\ref{th-weak-ske-owf} that \begin{equation}\label{e:barwq} \begin{split} H_c&=\frac1{2n} @@ -423,7 +396,7 @@ H_c&=\frac12\sum^{n-1}_{l =0} \end{equation} The enumeration of $H_c$ in a $K_{n_1\dotsm n_p}$ graph can also be -carried out by Theorem ~\ref{thm-H-param} or ~\ref{thm-asym} +carried out by Theorem~\ref{thm-H-param} or~\ref{thm-asym} together with the algebraic method of \eqref{multdef}. Some elegant representations may be obtained. For example, $H_c$ in a $K_{n_1n_2n_3}$ graph may be written @@ -499,7 +472,7 @@ We begin our discussion with the following definition: A function $H\colon \Re^n \to \Re^n$ is said to be \emph{B-differentiable} at the point $z$ if (i)~$H$ is Lipschitz -continuous in a neighborhood of $z$, and (ii)~ there exists a positive +continuous in a neighborhood of $z$, and (ii)~there exists a positive homogeneous function $BH(z)\colon \Re^n \to \Re^n$, called the \emph{B-derivative} of $H$ at $z$, such that \[ \lim_{v \to 0} \frac{H(z+v) - H(z) - BH(z)v}{\enVert{v}} = 0. \] @@ -1112,7 +1085,7 @@ A_l = 0,&\text{otherwise }.\end{cases} \label{compl-bip-gr} \end{equation} -Theorem ~\ref{thm-H-param} +Theorem~\ref{thm-H-param} leads to \begin{equation} H_c=\frac1{n_1+n_2}n_1!n_2!\delta_{n_1n_2}. diff --git a/Master/texmf-dist/doc/latex-dev/base/README.md b/Master/texmf-dist/doc/latex-dev/base/README.md index ba50e71a800..cb5a4a60dc4 100644 --- a/Master/texmf-dist/doc/latex-dev/base/README.md +++ b/Master/texmf-dist/doc/latex-dev/base/README.md @@ -1,7 +1,7 @@ The LaTeX kernel ================ -Release 2023-11-01 pre-release 0 +Release 2023-11-01 pre-release 1 Overview -------- diff --git a/Master/texmf-dist/doc/latex-dev/base/alltt.pdf b/Master/texmf-dist/doc/latex-dev/base/alltt.pdf Binary files differindex 2f288f85c3e..f2368d8b8cf 100644 --- a/Master/texmf-dist/doc/latex-dev/base/alltt.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/alltt.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf b/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf Binary files differindex 15f9b2e4b32..dc422901be7 100644 --- a/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/changes.txt b/Master/texmf-dist/doc/latex-dev/base/changes.txt index 86fda4e1ca5..3454f49ac67 100644 --- a/Master/texmf-dist/doc/latex-dev/base/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/base/changes.txt @@ -5,10 +5,74 @@ It is provided for convenience only. It therefore makes no claims to completeness or accuracy and it contains some references to files that are not part of the distribution. ================================================================================ +2023-09-13 Ulrike Fischer <Ulrike.Fischer@latex-project.org> + * ltproperties.dtx: + expand consistently the label/property names in the LaTeX2e commands. + +2023-09-13 Joseph Wright <Joseph.Wright@latex-project.org> + * ltmiscen.dtx: + add test to \enddocument for changes in property values. + +2023-09-05 Ulrike Fischer <Ulrike.Fischer@latex-project.org> + * ltproperties.dtx: + First implementation of properties module + * ltmiscen.dtx: + Correct typo + +2023-09-01 Joseph Wright <Joseph.Wright@latex-project.org> + + * ltmiscen.dtx + Provide global definition for active tab + +2023-06-15 Joseph Wright <Joseph.Wright@latex-project.org> + + * ltmiscen.dtx + Refinements to tab support + +2023-06-14 Joseph Wright <Joseph.Wright@latex-project.org> + + * ltmiscen.dtx, ltspace.dtx + Support (visible) tabs in verbatim material + +2023-08-19 Joseph Wright <Joseph.Wright@latex-project.org> + +2023-08-19 Joseph Wright <Joseph.Wright@latex-project.org> + + * ltcmd.dtx, usrguide.tex + Remove \GetDocumentCommandArgSpec, + \GetDocumentEnvironmentArgSpec, + \ShowDocumentCommandArgSpec, + \ShowDocumentEnvironmentArgSpec + +2023-08-05 Frank Mittelbach <Frank.Mittelbach@latex-project.org> + + * ltsockets.dtx: + First implementation of the sockets module. + +2023-07-10 Marcel Krüger <marcel.krueger@latex-project.org> + + * ltluatex.dtx + Restore post_mlist_to_hlist_filter callback type to reverselist (gh1116) + +2023-07-10 Yukai Chou <muzimuzhi@gmail.com> + + * ltfilehook.dtx (subsection{Declaring a file substitution}): + Drop a redundant \ExplSyntaxOff + +2023-07-02 David Carlisle <David.Carlisle@latex-project.org> + + * ltluatex.dtx modify new_luafunction to ensure + \e@alloc@luafunction@count always matches the size of the Lua + table of function allocations (gh100) + +2023-06-12 Joseph Wright <Joseph.Wright@latex-project.org> + + * usrguide.tex + Correct description of font encodings supported for case changing 2023-06-09 Joseph Wright <Joseph.Wright@latex-project.org> - * usrguide.txt + * usrguide.tex Various refinements to descriptions of \NewDocumentCommand, etc. ================================================================================ @@ -16,6 +80,26 @@ All changes above are only part of the development branch for the next release. ================================================================================ ######################### +# 2023-06-01 PL1 Release +######################### + +2023-06-16 Yukai Chou <muzimuzhi@gmail.com> + + * lthooks.dtx (subsection{Setting rules for hooks code}): + Sync \@expl@@@initialize@all@@ with \__hook_initialize_all: if latter is + rolled back (gh1088) + +2023-06-16 Joseph Wright <Joseph.Wright@latex-project.org> + + * ltfiles.dtx + Allow for pipes in \input, etc. + +2023-06-16 Phelype Oleinik <Joseph.Wright@latex-project.org> + + * lthooks.dtx, ltcmdhooks.dtx + Correct some rollback labels and dates. + +######################### # 2023-06-01 Release ######################### @@ -26,7 +110,7 @@ All changes above are only part of the development branch for the next release. 2023-05-31 Joseph Wright <Joseph.Wright@latex-project.org> - * usrguide.txt + * usrguide.tex Correct syntax of opt. arg. for \DeclareLowercaseMapping, etc. 2023-05-30 Joseph Wright <Joseph.Wright@latex-project.org> diff --git a/Master/texmf-dist/doc/latex-dev/base/classes.pdf b/Master/texmf-dist/doc/latex-dev/base/classes.pdf Binary files differindex d41f58e2768..e77d02dec96 100644 --- a/Master/texmf-dist/doc/latex-dev/base/classes.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/classes.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf b/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf Binary files differindex e5a2ce5fb61..9ed59b22555 100644 --- a/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf b/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf Binary files differindex de72af69526..04c4ea27a4a 100644 --- a/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf b/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf Binary files differindex b1dfbca7d3d..b4f89299177 100644 --- a/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf b/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf Binary files differindex 9b65f892be9..2bdb5043234 100644 --- a/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf b/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf Binary files differindex b6275f54a27..4ed15617dda 100644 --- a/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/doc.pdf b/Master/texmf-dist/doc/latex-dev/base/doc.pdf Binary files differindex b06b8b45f38..e31007c8794 100644 --- a/Master/texmf-dist/doc/latex-dev/base/doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf b/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf Binary files differindex f3b5f66e8e2..df1404ebe56 100644 --- a/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/encguide.pdf b/Master/texmf-dist/doc/latex-dev/base/encguide.pdf Binary files differindex 5cdbd43262f..aa08d7dc010 100644 --- a/Master/texmf-dist/doc/latex-dev/base/encguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/encguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/exscale.pdf b/Master/texmf-dist/doc/latex-dev/base/exscale.pdf Binary files differindex 774055dd4e2..546a2d0549d 100644 --- a/Master/texmf-dist/doc/latex-dev/base/exscale.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/exscale.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf b/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf Binary files differindex 885c9771af5..07a8643054e 100644 --- a/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf b/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf Binary files differindex 38d6bc75b69..1be6ca422f5 100644 --- a/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf b/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf Binary files differindex 7f4f6f97577..02c26dfdb60 100644 --- a/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf b/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf Binary files differindex 5276d75a11d..ff5e6a90408 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf b/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf Binary files differindex 2dc16e5a84d..5b83bb0998c 100644 --- a/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf b/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf Binary files differindex f37100a1aa7..35607608f65 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf b/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf Binary files differindex ec3e02593c7..38f5ef20fb2 100644 --- a/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf b/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf Binary files differindex b080247c6f8..3d6f87b2f13 100644 --- a/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/lb2.err b/Master/texmf-dist/doc/latex-dev/base/lb2.err index d2ea742f82e..74c0e222b6d 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lb2.err +++ b/Master/texmf-dist/doc/latex-dev/base/lb2.err @@ -1,4 +1,4 @@ -\newcommand\erratafiledate{2014-09-30} +\newcommand\erratafiledate{2014/09/30} \def\comando#1{\texttt{\string#1}} diff --git a/Master/texmf-dist/doc/latex-dev/base/lb2.pdf b/Master/texmf-dist/doc/latex-dev/base/lb2.pdf Binary files differindex c01ef84a407..4f1de0028ef 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lb2.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/lb2.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/letter.pdf b/Master/texmf-dist/doc/latex-dev/base/letter.pdf Binary files differindex da4b8da31b6..d4c0361f9ae 100644 --- a/Master/texmf-dist/doc/latex-dev/base/letter.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/letter.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/lgc2.err b/Master/texmf-dist/doc/latex-dev/base/lgc2.err index cb1a3823481..c899388be95 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lgc2.err +++ b/Master/texmf-dist/doc/latex-dev/base/lgc2.err @@ -1,4 +1,4 @@ -\newcommand\erratafiledate{2008-06-13} +\newcommand\erratafiledate{2008/06/13} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % To produce a printed version of this errata file run this file through diff --git a/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf b/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf Binary files differindex e595b3c5770..01e844d1271 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/lppl.pdf b/Master/texmf-dist/doc/latex-dev/base/lppl.pdf Binary files differindex 634e0cf4195..6f35bb62a5a 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lppl.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/lppl.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf Binary files differindex b1cd499d3cf..598e09076d5 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf Binary files differindex 91b366eb9f0..e00d1a517f0 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf Binary files differindex f7422c2a218..423d9c8c605 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf Binary files differindex e30bf34f5da..607cc91ca17 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf b/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf Binary files differindex 60bfdc9c577..452cc324fd1 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf Binary files differindex fe0c9da6b86..379f81449c7 100644 --- a/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf b/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf Binary files differindex 7c5864ac80d..fa5dd9a06a4 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf Binary files differindex bc9395f38d8..7f533207335 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf Binary files differindex feae65cce71..94b2a0a7621 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf Binary files differindex 057069d15c7..a482c44754c 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews.tex index d239fc274fa..0cb6ad55cca 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews.tex +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews.tex @@ -40,7 +40,7 @@ \ProvidesFile{ltnews.tex}% [2022/06/10 v1.4e Master file for ltnews*.tex (LaTeX Project)] -\providecommand*{\lastissue}{37} +\providecommand*{\lastissue}{38} \InputIfFileExists{ltnews-lastissue.cfg}{}{} diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf Binary files differindex 163b63d1f89..45080cd0564 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf Binary files differindex 22d5f44f132..3c92dcbb135 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf Binary files differindex 907142faeac..9c76b172f24 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf Binary files differindex 8ec38ae7aaf..5fc5b7e2f22 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf Binary files differindex a7b467cce34..82f6e2e66bb 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf Binary files differindex 6d3af11e7b3..86868783902 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf Binary files differindex fde4db801ec..dbde03e3c64 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf Binary files differindex 9b5d5b54917..6de4f5dcc29 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf Binary files differindex 6b73bd238d3..703e4fcbc11 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf Binary files differindex a4e1070c637..92cf03c1007 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf Binary files differindex 8655dd1ebb1..7fc53570a7c 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf Binary files differindex adaa3a8030b..7bb2af0d907 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf Binary files differindex 5386e0271e5..238024988fd 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf Binary files differindex 2358596a461..ca1bde861a3 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf Binary files differindex a733dd4666a..e93edf9da62 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf Binary files differindex 0d85052702e..58a8ae986d0 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf Binary files differindex b7a68faf542..48dcad813da 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf Binary files differindex 10dff17af7f..3bd5213f40e 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf Binary files differindex d382282afcf..f61eafeabe2 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf Binary files differindex a8f609ad222..fd2f0c7f6c5 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf Binary files differindex c49a3e744f7..3caee8b8aa2 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf Binary files differindex dc6307cae73..463eef696d0 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf Binary files differindex a29989f019d..fb51fd87384 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf Binary files differindex e537c5858e0..e8ef8254483 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf Binary files differindex 1b3a3bf336a..a7171c631ad 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf Binary files differindex 50882f8175f..6de2aba7016 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf Binary files differindex 2a7f4dada7d..24265921525 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf Binary files differindex 6c539c3d2b9..3b505c36e5c 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf Binary files differindex 1af62187fd9..b9bda4e3adb 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf Binary files differindex 77b50dc8021..6197b581621 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf Binary files differindex aac568ca14a..1de3b0fd5b6 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf Binary files differindex 2d2fbac00a9..e18c5d44fdf 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf Binary files differindex 48e19ae5f22..1190e8ed794 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf Binary files differindex f44a59c817c..eec3c3f35bb 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf Binary files differindex 2163da5a3c4..c03ef0306b5 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf Binary files differindex ae19fc9f58c..5e16afdce01 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf Binary files differindex c8796695da4..02b03b00a0b 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews38.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews38.pdf Binary files differnew file mode 100644 index 00000000000..6dfed260684 --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews38.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex new file mode 100644 index 00000000000..38745b9dbfb --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews38.tex @@ -0,0 +1,257 @@ +% \iffalse meta-comment +% +% Copyright 2021-2023 +% The LaTeX Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% -—————————————— +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% Filename: ltnews38.tex +% +% This is issue 38 of LaTeX News. + +\NeedsTeXFormat{LaTeX2e}[2020-02-02] + +\documentclass{ltnews} + +%% Maybe needed only for Chris' inadequate system: +\providecommand\Dash {\unskip \textemdash} + +%% NOTE: Chris' preferred hyphens! +%%\showhyphens{parameters} +%% \hyphenation{because parameters parameter} + +\usepackage[T1]{fontenc} + +\usepackage{lmodern,url,hologo} + +\usepackage{csquotes} +\usepackage{multicol} +\usepackage{color} + +\providecommand\hook[1]{\texttt{#1}} + +\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$} +\providecommand\option[1]{\texttt{#1}} +\providecommand\env[1]{\texttt{#1}} +\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}} + + +\providecommand\eTeX{\hologo{eTeX}} +\providecommand\XeTeX{\hologo{XeTeX}} +\providecommand\LuaTeX{\hologo{LuaTeX}} +\providecommand\pdfTeX{\hologo{pdfTeX}} +\providecommand\MiKTeX{\hologo{MiKTeX}} +\providecommand\CTAN{\textsc{ctan}} +\providecommand\TL{\TeX\,Live} +\providecommand\githubissue[2][]{\ifhmode\unskip\fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(% + \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}% + {github issue#1 #2}% + )}% + \par\smallskip} +%% But Chris has to mostly disable \href for his TEXPAD app: +%% \def\href #1{} % Only For Chris' deficient TeX engine + +% simple solution right now (just link to the first issue if there are more) +\def\getfirstgithubissue#1 #2\relax{#1} + +\providecommand\sxissue[1]{\ifhmode\unskip + \else + % githubissue preceding + \vskip-\smallskipamount + \vskip-\parskip + \fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par} + +\providecommand\gnatsissue[2]{\ifhmode\unskip\fi + \quad\penalty500\strut\nobreak\hfill + \mbox{\small\slshape(% + \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}% + {gnats issue #1/#2}% + )}% + \par} + +\let\cls\pkg +\providecommand\env[1]{\texttt{#1}} +\providecommand\acro[1]{\textsc{#1}} + +\vbadness=1400 % accept slightly empty columns + + +\makeatletter +% maybe not the greatest design but normally we wouldn't have subsubsections +\renewcommand{\subsubsection}{% + \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}% + {-1em}{\@subheadingfont\colonize}% +} +\providecommand\colonize[1]{#1:} +\makeatother + +\let\finalvspace\vspace % for document layout fixes + +% Undo ltnews's \verbatim@font with active < and > +\makeatletter +\def\verbatim@font{% + \normalsize\ttfamily} +\makeatletter + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\providecommand\tubcommand[1]{} +\tubcommand{\input{tubltmac}} + +\publicationmonth{November} +\publicationyear{2023 --- DRAFT version for upcoming release} + +\publicationissue{38} + +\begin{document} + +\tubcommand{\addtolength\textheight{4.2pc}} % only for TUB + +\maketitle +{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000 +\tableofcontents} + +\setlength\rightskip{0pt plus 3em} + +\medskip + +\section{Introduction} + + +\section{Sockets and plugs} + +\emph{write} + +For documentation see \texttt{texdoc ltsockets-doc} for now. + +\section{Extended cross-referencing of document properties} + +Traditionally \LaTeX{} allowed with \cs{label} to record two \enquote{local} +properties of the document: the representation of the current page number and +of the current counter. Their values could then be referenced with the +(non-expandable) commands \cs{ref} and \cs{pageref} in arbitrary places of a +document. With the summer 2023 release the \cs{label} was enhanced to record +also if set by packages like \pkg{nameref} or \pkg{hyperref} the title and +the name of the link target. + +Over the years packages extended the label-ref system in various ways. +Examples are for example the \pkg{refcount} package to reference the values +expandably, the \pkg{smartref} package, which allows to store more counter +values and so to reference the current chapter together with the current +equation, the \pkg{cleveref} package, which stores in a second internal label +beside other the name of the counter, the \pkg{hyperref} package whose +\cs{autoref} command tries to retrieve the name of the counter from the name +of the link target, the \pkg{tikzmarks} which records absolute positions on +the page, and the \pkg{zref} package which implements a general method to +record and reference properties. + +Starting with this release the \LaTeX{} kernel contains now its own +extension. It is loosely based on \pkg{zref}. It allows to declare new +properties, to record arbitrary combinations of properties. The values are +retrieved expandably. + +As an example to setup a new property which records the current chapter +number the following declaration could be used: +\begin{verbatim} +\NewProperty{chapter}{now}{?}{\thechapter} +\end{verbatim} +The second argument means that the property is recorded immediately +(\enquote{now}) and not at shipout. The third argument sets a default if a +label is unknown. It is then possible to record a list of properties with +\cs{RecordProperties}: +\begin{verbatim} +\RecordProperties{mylabel}{chapter,page,currentlabel} +\end{verbatim} +To reference the value the \cs{RefProperty} command is provided which takes +two arguments, the label and the property: +\begin{verbatim} +\RefProperty{mylabel}{chapter} +\end{verbatim} + +The new module predeclares a set of generally useful properties: +\texttt{currentlabel} (the standard counter representation), \texttt{page} +(the page representation), \texttt{title} (the title if set e.g.~by +\pkg{nameref}), \texttt{target} (the name of the link target if set e.g.~by +\pkg{hyperref}), \texttt{pagenum} (the page as an arabic number), +\texttt{abspage} (the absolute page number), \texttt{counter} (the name of +the current counter), \texttt{xpos} and \texttt{ypos} the position on the +page as set by a previous \cs{pdfsavepos}. + +The module provides both \LaTeXe{} camel case commands and expl3 commands. + +For documentation see \texttt{texdoc ltproperties-doc}. + +\section{New or improved commands} + +% +\githubissue{xxx} + +\section{\emph{Removed} commands} + +It is very rare that commands are removed from the \LaTeX{} kernel. However, in +this release we have elected to remove \cs{GetDocumentCommandArgSpec}, +\cs{GetDocumentEnvironmentArgSpec}, \cs{ShowDocumentCommandArgSpec} and +\cs{ShowDocumentEnvironmentArgSpec} from the kernel. These commands have been +moved back to the \enquote{stub} \pkg{xparse} provided in \pkg{l3packages}. The +reason for this change is that the commands were essentially part of debugging +early forms of the kernel code, and expose implementation detail in a way that +was not helpful. + +\section{Code improvements} + +\subsection{Support for tabs in \cs{verb*} and \texttt{verbatim*}} + +\LaTeX{} converts a single tab to a single space, which is then treated like a +\enquote{real} space in typesetting. The same has been true to date inside +\cs{verb}, but was done in a way that meant that they remained as normal spaces +even in \cs{verb*}, etc. We have now adjusted the code so that tabs are +retained within the argument to \cs{verb} and \cs{verb*}, and the +\texttt{verbatim} and \texttt{verbatim*} environments independently from +spaces, and are set up to print in the same way spaces do. This means that they +now generate visible spaces inside \cs{verb*} and \texttt{verbatim*}, and their +behavior can be adjusted if required to be different from that of spaces. +% +\githubissue{1085} + +\section{Bug fixes} + +\section{Changes to packages in the \pkg{amsmath} category} + +\section{Changes to packages in the \pkg{graphics} category} + +\section{Changes to packages in the \pkg{tools} category} + + +%\medskip + +\begin{thebibliography}{9} + +\fontsize{9.3}{11.3}\selectfont + +\end{thebibliography} + +\end{document} diff --git a/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf Binary files differindex 2a025487387..6836c91ff6b 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf Binary files differindex 1aa8f1fff83..f29cf22b463 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.pdf Binary files differnew file mode 100644 index 00000000000..8176e3fdde7 --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.tex b/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.tex new file mode 100644 index 00000000000..486cefa7b9f --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltproperties-code.tex @@ -0,0 +1,5 @@ +% This will typeset documentation + code +% + +\AtBeginDocument{\AlsoImplementation} +\input{ltproperties.dtx} diff --git a/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.pdf Binary files differnew file mode 100644 index 00000000000..553223ecc23 --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.tex b/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.tex new file mode 100644 index 00000000000..072dfedad07 --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltproperties-doc.tex @@ -0,0 +1,8 @@ +% This will typeset only documentation but not the code +% + +\AtBeginDocument{\OnlyDescription +% \let\tableofcontents\relax + \RenewCommandCopy\MaybeStop\StopEventually + } +\input{ltproperties.dtx} diff --git a/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf Binary files differindex a2b9753e1df..ff0e6d4c2b9 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf Binary files differindex 747936c204c..bf58bd09b98 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.pdf Binary files differnew file mode 100644 index 00000000000..82ccada4097 --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.tex b/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.tex new file mode 100644 index 00000000000..82ca0b059bc --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltsockets-code.tex @@ -0,0 +1,5 @@ +% This will typeset documentation + code +% + +\AtBeginDocument{\AlsoImplementation} +\input{ltsockets.dtx} diff --git a/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.pdf Binary files differnew file mode 100644 index 00000000000..0d32f64a1d5 --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.tex b/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.tex new file mode 100644 index 00000000000..c181fbb3cca --- /dev/null +++ b/Master/texmf-dist/doc/latex-dev/base/ltsockets-doc.tex @@ -0,0 +1,8 @@ +% This will typeset only documentation but not the code +% + +\AtBeginDocument{\OnlyDescription +% \let\tableofcontents\relax + \RenewCommandCopy\MaybeStop\StopEventually + } +\input{ltsockets.dtx} diff --git a/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf b/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf Binary files differindex b29a68a68a0..d80998b77ca 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf Binary files differindex 86b5710cf97..4acf824c6b2 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf b/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf Binary files differindex 2d417f6b01b..aa2de39acef 100644 --- a/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/manifest.txt b/Master/texmf-dist/doc/latex-dev/base/manifest.txt index 22791a24949..ff7bf49ad16 100644 --- a/Master/texmf-dist/doc/latex-dev/base/manifest.txt +++ b/Master/texmf-dist/doc/latex-dev/base/manifest.txt @@ -145,6 +145,7 @@ % ltcmdhooks.dtx -- Hook management (generic) for commands % ltpara.dtx -- Hook management for paragraphs % ltmarks.dtx -- Mark management +% ltsockets.dtx -- Sockets and plugs management % % Standard Classes: % ----------------- diff --git a/Master/texmf-dist/doc/latex-dev/base/modguide.pdf b/Master/texmf-dist/doc/latex-dev/base/modguide.pdf Binary files differindex e03c6e10756..d1f7521e0d2 100644 --- a/Master/texmf-dist/doc/latex-dev/base/modguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/modguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf b/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf Binary files differindex 84599cd94c9..df53f5fa0ef 100644 --- a/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/proc.pdf b/Master/texmf-dist/doc/latex-dev/base/proc.pdf Binary files differindex 4797864d174..79b95b1af0a 100644 --- a/Master/texmf-dist/doc/latex-dev/base/proc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/proc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/slides.pdf b/Master/texmf-dist/doc/latex-dev/base/slides.pdf Binary files differindex af59f4891ac..3efdda8edbc 100644 --- a/Master/texmf-dist/doc/latex-dev/base/slides.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/slides.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf b/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf Binary files differindex 0704a460225..aec17314d41 100644 --- a/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/source2e.pdf b/Master/texmf-dist/doc/latex-dev/base/source2e.pdf Binary files differindex 4b1b06981a7..bb85ca131ce 100644 --- a/Master/texmf-dist/doc/latex-dev/base/source2e.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/source2e.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/source2e.tex b/Master/texmf-dist/doc/latex-dev/base/source2e.tex index 873daebb4de..c538593dddf 100644 --- a/Master/texmf-dist/doc/latex-dev/base/source2e.tex +++ b/Master/texmf-dist/doc/latex-dev/base/source2e.tex @@ -254,6 +254,8 @@ page_precedence "rnaA" \DocInclude{ltcmdhooks}% Hook management for commands (L3 module) + \DocInclude{ltsockets}% Socket and plug management (L3 module) + \DocInclude{ltalloc} % Allocation of counters and others. \DocInclude{ltcntrl} % Program control macros. @@ -301,6 +303,8 @@ page_precedence "rnaA" \DocInclude{ltpageno} % Page numbering \DocInclude{ltxref} % Cross referencing + + \DocInclude{ltproperties} % Extended Cross referencing \DocInclude{ltmiscen} % Miscellaneous environment definitions. diff --git a/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf b/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf Binary files differindex 58ea87a4a4d..c62cd393f79 100644 --- a/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc2.err b/Master/texmf-dist/doc/latex-dev/base/tlc2.err index 5b01ff0513e..5c8723a4cb0 100644 --- a/Master/texmf-dist/doc/latex-dev/base/tlc2.err +++ b/Master/texmf-dist/doc/latex-dev/base/tlc2.err @@ -1,4 +1,4 @@ -\newcommand\erratafiledate{2023-01-08} +\newcommand\erratafiledate{2023/01/08} \def\comando#1{\texttt{\string#1}} diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf b/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf Binary files differindex 9e68702dc87..b43f85c4a8e 100644 --- a/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc3.err b/Master/texmf-dist/doc/latex-dev/base/tlc3.err index b7e2c1c0fde..81975c34e7e 100644 --- a/Master/texmf-dist/doc/latex-dev/base/tlc3.err +++ b/Master/texmf-dist/doc/latex-dev/base/tlc3.err @@ -1,6 +1,4 @@ -\newcommand\erratafiledate{2023-05-30} - -\def\comando#1{\texttt{\string#1}} +\newcommand\erratafiledate{2023/09/01} % needs / not - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % To produce a printed version of this errata file run this file through @@ -255,15 +253,21 @@ % % Specifies the date from which on errata entries should be listed. % -% The format is YYYY/MM/DD. +% The format is YYYY/MM/DD (hyphens are not supported) % % The default below ensures that all entries for a particular % printing are typeset. % \renewcommand\erratastartdate{2023/04/01} +%\renewcommand\erratastartdate{2023/05/30} % for the first digital edition +% If you own a digital edition (which is more often updated than the +% print edition) then you can alter the above date to match the date +% shown at the bottom of the Copyright page --- if it says +% "First digital release, 2023" then use the date 2023/05/30 above. +% % % \myprinting % @@ -306,9 +310,15 @@ \let\u\underline % shortcut for this file \newcommand\meta[1]{$\langle$\textit{#1\/}$\rangle$} -\usepackage{textcomp} +\usepackage{color} +\newcommand\bl{\color{blue}} + +\newcommand\textttu[1]{\texttt{\upshape #1}} + +\usepackage{hyperref} + +\let\u\underline % needs resetting after hyperref -\usepackage{url} \begin{document} @@ -333,9 +343,16 @@ \end{verbatim} -\begin{list}{}{\setlength\leftmargin{0cm}\setlength\rightmargin{3cm}} +\begin{list}{}{\setlength\leftmargin{0cm}% + \setlength\rightmargin{3cm}% + \setlength\listparindent{1em}} \item[] +\tableofcontents + +\bigskip + +\noindent This file (\texttt{\jobname.err}) can be found as part of the \LaTeX{} distribution and its latest version is maintained on the \LaTeX{} project site at \texttt{https://www.latex-project.org/help/books/\jobname.err} @@ -350,6 +367,7 @@ are counted from the bottom of the page). The third column shows the first finder of the problem. You can customize this list to only show errata related to the printing +or digital edition you own by changing the configuration in the file \texttt{\jobname.cfg}. \begin{center} @@ -358,11 +376,11 @@ you own by changing the configuration in the file \texttt{\jobname.cfg}. Any mistake found and reported is a gain for all readers of our book. For this reason Addison-Wesley and the authors offer a prize (for 5 -periods) to the eligible person who finds the largest -number of bugs during that period (in case of a draw a random choice -will be made between all those with the largest number of findings). -A person can receive at most one prize, ever; errors found by any of -the authors do not count. +limited time periods) to the eligible person who finds the largest number of bugs +during that period (more precisely, it is a lottery among the people +with the 5 top-most findings up to that point). A person can receive +at most one prize, ever; errors found by any of the authors do not +count. Each prize is a free choice of any single computing book found on the Addison-Wesley/Pearson web site: @@ -388,9 +406,9 @@ Due to its size the third edition of \textit{The \LaTeX{} Companion} is printed as a two-volume set. The digital version, however, is provided as a single PDF or ePub. This means that a small fraction of the digital content differs from that of the printed version: there is only a -single font matter, a single bibliography, and a single index, whereas +single front matter, a single bibliography, and a single index, whereas in the printed books these are separated out. However, all versions share the main -matter (down to the page numbering) so most of the errata applies to +matter (down to the page numbering) so most of the errata apply to all versions, but a few only to the digital and some only to the printed version. Thus, we end up with three separate lists. @@ -403,21 +421,34 @@ printed version. Thus, we end up with three separate lists. %<-------------------------- \newcommand\BibTeX{\textsc{Bib}\TeX} -\newcommand\cs[1]{\texttt{\textbackslash #1}} +\newcommand\cs[1]{\texttt{\upshape\textbackslash #1}} \newcommand\env[1]{\texttt{#1}} \newcommand\pkg[1]{\textsf{#1}} -\section*{Errata for the print version (not applicable to the digital version)} +\section{Errata for the print version (not applicable to the digital version)} The printed books differ from the digital version in that the -bibliography is split across both volumes (with a few repeats) and that -the font matter of each volume has its own table of contents and list +bibliography is split across both volumes (with a few repeats) and +the front matter of each volume has its own table of contents and list of figures and tables. Therefore these parts have different page numbers and you will see similar errata entries for both print and digital differing only in that respect. \begin{erratalist} +\CHAPTER{General} + +\erroronpage{}{}{FMi}{2023/07/30}{} + +Text or graphics typeset in the the spot color (blue) are not always +perfectly aligned. This is a side-effect of the printing technology. +On most pages everything is fine, but occasionally blue text in a +paragraph seems to be slightly above or below the baseline or blue +text in tables appears slightly misaligned horizontally. It differs +from book to book (and therefore not recorded in this errata) and +can't be controlled by the authors, unfortunately. + + \CHAPTER{Front matter (Part I)} \erroronpage{I-ix\ldots I-xvi}{}{FMi}{2023/04/04}{s} @@ -510,7 +541,7 @@ Publishing \> Publishing\u{,} %<-------------------------- -\section*{Errata for the digital version (not applicable to the print version)} +\section{Errata for the digital version (not applicable to the print version)} All known errors to the digital version have already been incorporated in the product as distributed. @@ -526,7 +557,7 @@ All known errors to the digital version have already been incorporated in the pr %<-------------------------- -\section*{Errata common to the print and digital versions} +\section{Errata common to the print and digital versions} The main matter is identical (also in page numbers) in the print and the digital versions. Therefore most errata entries appear in this @@ -537,48 +568,89 @@ section. \CHAPTER{General} -\erroronpage{}{}{FMi}{2023/04/04}{s} +\erroronpage{}{}{FMi}{2023/04/04}{} Some corrections result in index changes. These are not tracked here; the index is always fully regenerated for new printings. +\erroronpage{}{}{MJo/FMi}{2023/07/07}{} + + There are a dozen occurrences of the word \u{rôle} throughout the book, + which is more commonly spelled \u{role}. However, this is not wrong + but is the somewhat dated form used mostly in British + English. Personally, I prefer the version with accent (as does Don + Knuth) so it is deliberate and will not change. + \CHAPTER{Chapter 1 --- Introduction} \erroronpage{I-5}{para 4, l.4}{kb}{2023/04/04}{s} \u{of} the bugs \> \u{with} the bugs -\\ Already corrected in the digital version. + \erroronpage{I-5}{para 5, l.5}{kb}{2023/04/04}{s} not least \> \u{but} not least -\\ Already corrected in the digital version. + \CHAPTER{Chapter 2 --- The Structure of a \LaTeX{} Document} \erroronpage{I-34}{l.-1}{FMi}{2023/04/04}{s} Moved first line of page 35 to 34. -\\ Already corrected in the digital version. + \erroronpage{I-35}{l.1}{FMi}{2023/04/04}{s} Moved first line of page 35 to 34. -\\ Already corrected in the digital version. + \erroronpage{I-113}{listing}{FMi}{2023/05/14}{s} Situation is the same in the 2023 distributions; listing output updated. -\\ Already corrected in the digital version. + + +\erroronpage{I-117}{l.-5}{BeB}{2023/07/25}{s} +\textit{latexrelease} \> \texttt{latexrelease} \CHAPTER{Chapter 3 --- Basic Formatting Tools -- Paragraph \ldots} +\erroronpage{I-160}{para -2, l.1}{BeB}{2023/07/14}{s} +Repeated word: keys \u{keys} \> keys + +\erroronpage{I-163}{para 2, l.2}{FMi}{2023/07/26}{s} +as we did \u{above}. \> as we did \u{in Example 3-3-14 below}. + +\erroronpage{I-163}{para 3, margin}{FMi}{2023/07/26}{s} +Add a marginal note: \u{No warning if another \LaTeX{} run is necessary!} + +\erroronpage{I-163}{example 3-3-14}{BeB}{2023/07/25}{s} +Output of example misses the page numbers in acronym list \> Run example 3 times (not only twice---there is no warning) + + \CHAPTER{Chapter 4 --- Basic Formatting Tools -- Larger \ldots} +\erroronpage{I-323}{Table 4.4, left column}{BeB}{2023/07/25}{s} +Typo: Assembler (\u{N}otorola68k, x86masm) \> \\ Assembler (\u{M}otorola68k, x86masm) +% Matlab \> Matlab \u{(empty, 5.1)} +% könnte auch aktualisiert werden, steht aber in Version 1.8d nicht drin + \CHAPTER{Chapter 5 --- The Layout of the Page} \CHAPTER{Chapter 6 --- Tabular Material} +\erroronpage{I-489}{para 1, l.3}{EOl}{2023/07/30}{s} +Change: +to \u{additionally} load \textsf{longtable} or \textsf{supertabular} \u{prior} to \> +to load \textsf{longtable} or \textsf{supertabular} \u{in addition} to + +\erroronpage{I-490}{footnote}{EOl}{2023/07/30}{s} +Replace footnote text with \> +If you forget this, you either get an empty cell or, if parts of the +text can be interpreted as a value, a somewhat ``random'' number and +the rest is dropped. For example, \texttt{31 December 2022} would +result in ``31.00'', which is probably not desired. + \CHAPTER{Chapter 7 --- Mastering Floats} @@ -593,54 +665,274 @@ The example uses \verb*/left color=red!20/ but this is not really visible if the red is turned into some gray value in the book (which is then made even lighter through \texttt{!20}). So it is better to start from full red, i.e., \> \verb*/left color=red/ instead. -\\ Already corrected in the digital version. + + + +\erroronpage{I-644}{syntaxbox for \cs{foreach}}{BeB}{2023/07/14}{s} +superfluous ``in'': \ldots\{\textsl{commands}\} \u{in} \> \ldots\{\textsl{commands}\} + + \CHAPTER{Chapter 9 --- Font Selection and Encodings} - + + +\erroronpage{I-688}{para -2, l. 1}{BeB}{2023/08/13}{s} +acronym PSNFSS not explained: PSNFSS \> PostScript New Font Selection Scheme (PSNFSS) + + \erroronpage{I-669}{exa 9-3-11}{FMi}{2023/04/04}{s} Changed line breaks in example. +\erroronpage{I-681}{para 2, l.1}{BeB}{2023/07/14}{s} +Missing space: Theproblem \> The problem + \erroronpage{I-708}{listing}{FMi}{2023/05/14}{s} Situation is the same in the 2023 distributions; listing output updated. -\\ Already corrected in the digital version. + +\erroronpage{I-759}{l.1}{BeB}{2023/08/20}{s} +in the range of 0000 to \u{00FF} \> in the range of 0000 to \u{007F} \CHAPTER{Chapter 10 --- Text and Symbol Fonts} + +\erroronpage{II-5}{table 10.1, l. 5}{BeB/FMi}{2023/08/13}{s} + official \u{companion} family name \> \u{related} official \u{font} family name + +\erroronpage{II-5}{para -1, l.2}{FMi}{2023/08/15}{s} + +then this structure is repeated as often as necessary. \> +then this structure is repeated \u{for the related font families} as often as necessary. + + +\erroronpage{II-24}{para 3, l. -2}{BeB}{2023/08/13}{s} +There is no slanted shape in Grande Mono: \\ +\u{\textsl{naïve}} \> \u{\textsl{\bl naïve}} + + +\erroronpage{II-25}{para -4, margin}{BeB}{2023/08/13}{s} +Open Type font is available: \\ +\u{— no Open Type —} \> \u{Lucida Handwriting OT} + +\erroronpage{II-25}{para -2, l.-2}{BeB}{2023/08/13}{s} +There are no italic blackletters: \\ +\textit{phœnix's official rôle}\> \textit{\bl phœnix's official rôle} + +\erroronpage{II-28}{table 10.14, l. 3}{BeB}{2023/08/13}{s} +Inconsistent order: sl, l \> l, sl + +\erroronpage{II-28}{table 10.14, lines 7 + 19}{BeB}{2023/08/13}{s} +semi-bold twice, extra-bold missing: sbsc, bsc, \u{sbsc} \> sbsc, bsc, \u{ebsc} + +\erroronpage{II-28}{table 10.14, lines 13 + 25}{BeB}{2023/08/13}{s} +semi-bold twice, extra-bold missing: sbec, bec, \u{sbec} \> sbec, bec, \u{ebec} + +\erroronpage{II-29}{table 10.15, lines 7}{BeB}{2023/08/13}{s} +semi-bold twice, extra-bold missing: sbsc, bsc, \u{sbsc} \> sbsc, bsc, \u{ebsc} + +\erroronpage{II-29}{table 10.15, l. 10}{BeB}{2023/08/13}{s} +semi-bold twice, extra-bold missing: sbc, bc, \u{sbc} \> sbc, bc, \u{ebc} + +\erroronpage{II-29}{table 10.15, l.13}{BeB}{2023/08/13}{s} +semi-bold twice, extra-bold missing: sbec, bec, \u{sbec} \> sbec, bec, \u{ebec} + + +\erroronpage{II-34}{table 10.20}{FMi}{2023/08/15}{s} +Add table note: +% +\textit{\textttu{k} (black) is a nonstandard series name for \textttu{eb} (extra +bold) or in some families for \textttu{ub} (ultra bold).} + +\erroronpage{II-40}{table 10.24}{FMi}{2023/08/15}{s} +In table note: \textit{Unfortunately, \u{\texttt{sco}}} \> \textit{Unfortunately, \u{\textttu{sco}}} + + +\erroronpage{II-50}{font sample Cambria}{FMi}{2023/08/14}{s} + +Because of problems with the font names, the Cambria family currently requires a \texttt{Cambria.fontspec} file +(possibly only temporary) when used with Lua\TeX{} with the following content: +\begin{verbatim} +\defaultfontfeatures[Cambria]{% + UprightFont =cambria.ttc, + BoldFont = cambriab.ttf, + ItalicFont = cambriai.ttf, + BoldItalicFont = cambriaz.ttf} +\end{verbatim} +Without it, the bold fonts are not correctly set up, which is why +\textbf{almost anything} is not in bold and \textbf{Fields} is not typeset in +bold small caps in the sample even though Cambria supports these typefaces. + + +\erroronpage{II-61}{table 10.48}{FMi}{2023/08/15}{s} +Add table note: +% +\textit{Unfortunately, \textttu{sco} is a nonstandard shape name for +\textttu{scsl}; thus, low-level shape commands are needed to access it.} + +\erroronpage{II-62}{table 10.50}{FMi}{2023/08/15}{s} +Add table note: +% +\textit{Unfortunately, \textttu{sco} is a nonstandard shape name for +\textttu{scsl}; thus, low-level shape commands are needed to access it.} + +\erroronpage{II-63}{table 10.51}{FMi}{2023/08/15}{s} +Table moved to page II-62 for better pagination. + +\erroronpage{II-65}{para 1, l.1}{YvH}{2023/08/20}{s} + Slap \> Slab + +\erroronpage{II-66}{Unicode box}{DFl}{2023/08/03}{s} + OpenType fonts for the Concrete family do exist. + + Therefore changed the text to + \begin{quote} + OpenType fonts of the family for use in Unicode engines do exist. They offer additional characters + and also true \textbf{bold} and \textbf{\itshape bold italic} shapes. + \end{quote} + and moved it down after the discussion of missing bold fonts. + +\erroronpage{II-66}{table 10.55}{FMi}{2023/08/03}{s} + Change: \u{---no OpenType---} \> \u{CMU Concrete} + + Added line showing: \u{\texttt{b}\qquad\texttt{n, it}} + and the text \u{---Not available with pdf\TeX, only in Unicode engines---} + +\erroronpage{II-66}{1st font example}{FMi}{2023/08/03}{s} + Change: \u{---no OpenType---} \> \u{CMU Concrete} + +\erroronpage{II-66}{2nd font example}{FMi}{2023/08/03}{s} + Added (in margin info): \u{---only OT1---} + +\erroronpage{II-71}{para 1, l.1}{BeB}{2023/08/13}{s} +ub should be upright: \verb+\fontseries{+\u{\textsl{ub}}\verb+}+ \> \verb+\fontseries{ub}+ + + +\erroronpage{II-71}{para 2, l.5}{YFu}{2023/07/25}{s} +\u{Akira Kobayashi} should be written in Japanese style \> \u{KOBAYASHI Akira}\\ +Also corrected in the index. + +\erroronpage{II-75}{table 10.64}{FMi}{2023/08/15}{s} +Add table note: +% +\textit{Unfortunately, \textttu{sco} is a nonstandard shape name for +\textttu{scsl}; thus, low-level shape commands are needed to access it.} + + +\erroronpage{II-76,77}{both font examples}{BeB}{2023/08/13}{s} +Helvetica and its clones do not have true italics but instead an +oblique/slanted face (despite the fact that the internal font +information claims it is ``italic''). For this reason the blue +text in both Helvetica examples should be as follows: + + \textsl{\bl naïve} vis-à -vis the dæmonic \textit{phœnix's official rôle} \> \\ + \textsl{naïve} vis-à -vis the dæmonic \textit{\bl phœnix's official rôle} + + +\erroronpage{II-86}{table 10.74, l.4}{FMi}{2023/08/15}{s} + +It's weights not widths:\\ +\u{S}ome nonstandard \u{widths} \> \u{Also s}ome nonstandard \u{weights} + + +\erroronpage{II-86}{table 10.74}{FMi}{2023/08/15}{s} +Add table note: +% +\textit{Unfortunately, the font family uses the nonstandard series + names \textttu{t} (thin) and \textttu{k} (black) instead of the + standard series names \textttu{ul} (ultra light) and \textttu{ub} + (ultra bold). The \textttu{mb} (medium) is halfway between the + standard \textttu{m} and \textttu{sb} and does not fit into the NFSS + naming conventions. It can serve as a replacement for \textttu{m}, + e.g., via \cs{DeclareFontSeriesDefault}.} + + + +\erroronpage{II-91}{l. -1}{BeB}{2023/08/13}{s} +In the DejaVu Sans Mono Example add: \texttt{OIl or 011?} + + + +\erroronpage{II-102}{para -4, margin}{BeB}{2023/08/13}{s} +Change: \u{— no Open Type —} \> \u{Lucida Handwriting OT} + + +\erroronpage{II-104}{para -1, l.2}{FMi}{2023/08/13}{s} + +Footnote added after: \u{Unicode characters} +\begin{quote} + However, strangely enough this only works in pdf\TeX{} and \emph{not} in Unicode engines! +\end{quote} + +\erroronpage{II-105}{para 1 replaced}{FMi/BeB}{2023/08/13}{s} + +The yfonts have a suprising feature: you can use the Unicode +characters {ÄÖÜäöüß} in pdf\TeX{}, but this is not possible in +Unicode engines! The first paragraph was therefore replaced to +clarify this. The new text is: +\begin{quote} + The next example shows the various ligatures. With pdf\TeX{} one can + use the Unicode characters \texttt{ÄÖÜäöüß} directly and only needs + the ``{short s}'' ligature. However, due to the special font + encoding this \emph{does not work} in Unicode engines\,---\,with + these engines you have to enter the accents as ligatures or \LaTeX{} + commands. +\end{quote} + + +\erroronpage{II-106}{para -3, l. 1}{BeB}{2023/08/13}{s} +Acronym GFS not explained: Greek Font Society \> Greek Font Society (GFS) + + +\erroronpage{II-107}{exa 10-11-1}{FMi}{2023/08/14}{s} + +The Cambria fonts currently require a \texttt{Cambria.fontspec} file +(possibly temporary) when used with Lua\TeX{} --- see errata on page II-50. +Without it, the bold fonts are not correctly set up, which is why they are +not showing in the example. + +\erroronpage{II-110}{exa 10-12-1}{FMi}{2023/08/14}{s} + +The Cambria fonts currently require a \texttt{Cambria.fontspec} file +(possibly temporary) when used with Lua\TeX{} --- see errata on page II-50. +Without it, the bold fonts are not correctly set up, which is why they are +not showing in the example. + + + \erroronpage{II-114}{table 10.89}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + \erroronpage{II-117}{table 10.92}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + \erroronpage{II-121}{table 10.96}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + \erroronpage{II-122}{table 10.98}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + \erroronpage{II-122}{table 10.99}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + \erroronpage{II-123}{table 10.100}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + \erroronpage{II-124}{table 10.103}{FMi}{2023/04/04}{s} Added missing \texttt{U+00Fx} line. There was a bug in code generating it. -\\ Already corrected in the digital version. + @@ -652,44 +944,48 @@ package, \pkg{amsmath}, which \u{makes} \ldots \>\\ \u{In the early nineties the} American Mathematical Society (AMS) \u{provided} a major package, \pkg{amsmath}, which \u{made} \ldots -\\ Already corrected in the digital version. + \erroronpage{II-129}{para -3, l.1}{bb/FMi}{2023/04/04}{s} The principal documentation for these packages \>\\ The principal documentation for these \u{two} packages -\\ Already corrected in the digital version. + \erroronpage{II-129}{para -1, l.3}{bb}{2023/04/04}{s} \u{lot} additions \> \u{many} additions -\\ Already corrected in the digital version. + \erroronpage{II-132}{table 11.1}{bb/FMi}{2023/04/04}{s} Also mention \env{alignat}, \env{alignat*}, and \env{alignedat}. -\\ Already corrected in the digital version. + \erroronpage{II-133}{para 4,l.2}{bb/FMi}{2023/04/04}{s} Add: Furthermore, they move the equation tag out of the way if it would otherwise overprint the formula. -\\ Already corrected in the digital version. + + + +\erroronpage{II-133}{para. -3, l. -1}{BeB}{2023/08/13}{s} +Wrong reference: Section 11.2.\u{10} \> 11.2.\u{11} \erroronpage{II-138}{heading}{bb/FMi}{2023/04/04}{s} Multiple alignments: \env{align} \u{and \env{flalign}} \> Multiple alignments: \env{align}\u{, \env{flalign}, and \env{alignat}} -\\ Already corrected in the digital version. + \erroronpage{II-138}{}{FMi}{2023/04/04}{s} Moved para from 139 to end of this page. -\\ Already corrected in the digital version. + \erroronpage{II-139}{para 1}{FMi}{2023/04/04}{s} Moved para back to page 138. -\\ Already corrected in the digital version. + \erroronpage{II-139}{bottom}{FMi}{2023/04/04}{s} Add: @@ -703,34 +999,34 @@ it does not add any spaces between the pairs, e.g., \begin{alignat}{3} x &= y &\qquad X &= Y &\qquad a &= b+c \\ ... \end{verbatim} As usual, equation numbers can be altered with \cs{tag} or suppressed with \cs{notag}. -\\ Already corrected in the digital version. + \erroronpage{II-140}{para 1, l.2}{bb/FMi}{2023/04/04}{s} Add: Do not forget to reset \cs{minalignsep} if you change it in this manner. -\\ Already corrected in the digital version. -\erroronpage{II-140}{para 2, l.4}{bb/FMi}{2023/04/04}{s} + +\erroronpage{II-140}{para 2, l.4}{bb/FMi}{2023/08/16}{s} Add: You can think of them as subsidiary environments that can be used -within any of the display environments discussed so far (below we use -them inside equation). -\\ Already corrected in the digital version. +within any of the display environments discussed so far. (Below we use +them inside equation.) + \erroronpage{II-140}{para -1}{FMi}{2023/04/04}{s} Paragraph moved to page 141. -\\ Already corrected in the digital version. + \erroronpage{II-141}{}{FMi}{2023/04/04}{s} One paragraph moved over from page 140. -\\ Already corrected in the digital version. + \erroronpage{II-144}{para 2, l.-3}{FMi}{2023/04/04}{s} the issue \> the \u{spacing} issue -\\ Already corrected in the digital version. + \erroronpage{II-145}{para 2, l.1}{bb/FMi}{2023/04/04}{s} Add: @@ -738,47 +1034,270 @@ Add: Another problem is that an empty line introduces an unwanted break point in front of the display, thus \cs{predisplaypenalty} is no longer honored. -\\ Already corrected in the digital version. +\erroronpage{II-167}{para. 3, l. -2}{BeB}{2023/08/13}{s} +option\u e \> option\u{s} + + +\erroronpage{II-178}{table 11.3, l.10}{EOl}{2023/07/30}{s} + Cross-\u{produce} tensor \> Cross-\u{product} tensor + +\erroronpage{II-178}{Tab. 11.3, l.10}{BeB}{2023/08/13}{s} +in the description column: \u{array}-symbol-arrow \> \u{arrow}-symbol-arrow + + + + + \CHAPTER{Chapter 12 --- Fonts in Formulas} \erroronpage{II-225}{heading}{FMi}{2023/04/04}{s} Chapter title not properly capitalized. -\\ Already corrected in the digital version. + + +\erroronpage{II-229}{para -3, l.1}{BeB}{2023/08/15}{s} +for Lucida fonts \> Lucida \u{and Cambria} fonts + +\erroronpage{II-274}{exa 12-18-fig}{FMi}{2023/08/14}{s} + +The Cambria fonts currently require a \texttt{Cambria.fontspec} file +(possibly temporary) when used with Lua\TeX{} --- see errata on page II-50. +Without it, the bold fonts are not correctly set up, which is why they are +missing in the section heading of the example. + \erroronpage{II-261}{para 3, l.3}{FMi}{2023/05/26}{s} Yoda spoke it seems: \ldots \u{and compare we should} \> \ldots \u{and you should compare} -\\ Already corrected in the digital version. + + +\erroronpage{II-286}{fig. 12-36}{FMi}{2023/08/21}{s} + +Heading is not bold because of an error in the distributed +\texttt{.fontspec} file for this family. This needs to be corrected +in the NewComputerModern distribution and maybe also in the +\pkg{fontspec} package itself. A \texttt{NewCM10-Regular.fontspec} +file that works could look like this: +\begin{verbatim} +\defaultfontfeatures[NewCM10-Regular]{ + Extension = .otf , +% Can't use NewCM10-Regular here (or we get a fontspec error). +% Doesn't matter in this case, but looks like a fontspec issue. + UprightFont = NewCM08-Regular , + UprightFeatures = { + SizeFeatures = { + {Size = -8 , Font = NewCM08-Regular} , + {Size = 8- , Font = NewCM10-Regular} , + }, + }, +% Same here: + SlantedFont = NewCM08-Regular , + SlantedFeatures = { + SizeFeatures = { + {Size = -8 , Font = NewCM08-Regular} , + {Size = 8- , Font = NewCM10-Regular} , + }, + FakeSlant=0.25, + }, + ItalicFont = NewCM10-Italic , + ItalicFeatures = { + SizeFeatures = { + {Size = -8 , Font = NewCM08-Italic} , + {Size = 8- , Font = NewCM10-Italic} , + }, + }, + BoldFont = NewCM10-Bold , + BoldItalicFont = NewCM10-BoldItalic , + BoldSlantedFont = NewCM10-Bold , + BoldSlantedFeatures = { FakeSlant=0.25 }, + SmallCapsFeatures = { Numbers=OldStyle }, +} +\end{verbatim} + + +\erroronpage{II-286}{fig. 12-36}{FMi}{2023/08/21}{s} + +Change in title: \u{Mathematical} typesetting \> \u{Math} typesetting + + +\erroronpage{II-286}{fig. 12-37}{FMi}{2023/08/21}{s} + +Heading is not bold because of an error in the distributed +\texttt{.fontspec} file for this family. This needs to be corrected +in the NewComputerModern distribution and maybe also in the +\pkg{fontspec} package itself. A \texttt{NewCM10-Book.fontspec} +file that works could look like this: +\begin{verbatim} +\defaultfontfeatures[NewCM10-Book]{ + Extension = .otf , + UprightFont = NewCM08-Book , + UprightFeatures = { + SizeFeatures = { + {Size = -8 , Font = NewCM08-Book} , + {Size = 8- , Font = NewCM10-Book} , + }, + }, + SlantedFont = NewCM08-Book , + SlantedFeatures = { + SizeFeatures = { + {Size = -8 , Font = NewCM08-Book} , + {Size = 8- , Font = NewCM10-Book} , + }, + FakeSlant=0.25, + }, + ItalicFont = NewCM10-BookItalic , + ItalicFeatures = { + SizeFeatures = { + {Size = -8 , Font = NewCM08-BookItalic} , + {Size = 8- , Font = NewCM10-BookItalic} , + }, + }, + BoldFont = NewCM10-Bold , + BoldItalicFont = NewCM10-BoldItalic , + BoldSlantedFont = NewCM10-Bold , + BoldSlantedFeatures = { FakeSlant=0.25 }, + SmallCapsFeatures = { Numbers=OldStyle }, +} +\end{verbatim} + +\erroronpage{II-286}{fig. 12-37}{FMi}{2023/08/21}{s} +Change title to more or less fit the width of the sample:\\ +\hspace*{1em}\u{Mathematical} typesetting with NewComputerModern \> \\ +\hspace*{1em}\u{Math} typesetting with NewComputerModern \u{Book}\\ + + +\erroronpage{II-288}{para 3, l.-1}{BeB}{2023/08/20}{s} +Typo and spurious comma: series\u{, though} substitution. \> series \u{through} substitution. + + +\erroronpage{II-295}{par -2, l.-1}{BeB}{2023/08/20}{s} + +Options \texttt{vvarbb} and \texttt{upint} show no effect in figure +12.50. This was due to a bug in the package --- now corrected. Thus, +rerunning the example shows the expected behavior. \CHAPTER{Chapter 13 --- Localizing Documents} \erroronpage{II-297}{heading}{FMi}{2023/04/04}{s} Chapter title not properly capitalized. -\\ Already corrected in the digital version. +\erroronpage{II-307}{after exa 13-2-5}{BeB/FMi}{2023/08/20}{s} + +Replace: +On the other hand, \pkg{tikz} provides a library to overcome these issues. +\>\\ +In the particular case of \pkg{tikz}, you can use +\cs{usetikzlibrary}\verb={babel}= instead of \cs{shorthandoff} +to overcome these issues for all \pkg{tikz} pictures of the document. + + + +\erroronpage{II-308}{para 2, l.3}{BeB}{2023/08/20}{s} +Acronyms BCP and IETF not explained:\\ +BCP \> the Best Current Practice (BCP)\\ +IETF \> the Internet Engineering Task Force (IETF) + +\erroronpage{II-308}{para 3, l.1}{BeB}{2023/08/20}{s} + BPD \> BCP + +\erroronpage{II-319}{para 2, l.1}{BeB}{2023/08/20}{s} +Missing word: is described \textit{A History} \> is described \u{in} +\textit{A History} + +\erroronpage{II-332}{exa 13-5-2, and above}{FMi}{2023/04/28}{s} + +The keyword \texttt{Harf\u{b}uzz} should be spelled +\texttt{Harf\u{B}uzz}. Both names are supported, but the recommended +spelling is \texttt{HarfBuzz}. + \CHAPTER{Chapter 14 --- Index Generation} +% Das Beispiel von S. II-352 als File wäre schön, dann könnte man das mit +% dem Index mal durchspielen. Das Beispiel 16-7-6 ist zwar mal wieder +% recht eindrucksvoll, berührt die Thematik aber nur so nebenbei. +% \erroronpage{II-352}{Fig. 14.3}{BeB}{2023/08/31}{} +% The code shown in Fig. 14.3 now is the Example 14-2-1 + + \CHAPTER{Chapter 15 --- Bibliography Generation} +\erroronpage{II-390}{para 4, l.1}{BeB/FMi}{2023/08/31}{s} +Replace: + \u{predates the Internet} and so\> \\ + \u{were developed when the Internet was in its infancy} and so + + +\erroronpage{II-391}{Fig. 15.2, bib-entry jane-2}{BeB}{2023/08/31}{s} +\verb+\title = {A+\texttt{\u{n} second book\}}\> \verb+\title = {A second book}+ + +Changes the output of example 16-7-31 on page II-560 as well. + +% For later: +%S. II-399: Man könnte in dem biber/biblatex Kasten noch anmerken, dass die +% Konvertierung auch on-the-fly geht – hatte mir in der Übergangsphase weitergeholfen: +%\erroronpage{II-399}{biber/biblatex box}{BeB}{2023/08/31}{} +%Add: One can do this conversion directly from a .bib file to a .bbl file by using e.g. +%\verb+biber --output-encoding=ascii --output-safecharsset=full+ +%and stay with one .bib file (in UTF8-encoding). + + \erroronpage{II-435}{code}{FMi}{2023/05/26}{s} -\verb=\textcolor{See= \> \verb=\textcolor{blue}{See= -\\ Already corrected in the digital version. +\verb=\textcolor{See= \> \cs{textcolor}\u{\texttt{\{blue\}}}\texttt{\{See} + +\erroronpage{II-443}{biblatex-mla style}{BeB}{2023/08/31}{s} +Explain acronym: \u{MLA handbook} \> \u{Modern Language Association (MLA) handbook} + +\smallskip + +This moves the text line on the bottom to the next page. \CHAPTER{Chapter 16 --- Managing Citations} +\erroronpage{II-475}{para -2, l.6}{BeB}{2023/08/31}{s} +Figure 15.1 \> Figure 15.1 \u{on pages 382--383} + + +\erroronpage{II-513}{para -1}{BeB/FMi}{2023/08/31}{s} + +Extend the explanation:\\ +is created only if the entry \u{contains} a shorttitle \u{field} and the title and shorttitle fields differ. \>\\ +is created only if the entry \u{has been referenced (prior to typesetting}\\ +\u{the bibliography), contains} a shorttitle \u{field,} and the title and shorttitle fields differ. + + +\erroronpage{II-560}{exa 16-7-31}{FMi}{2023/08/31}{s} +Jane Doe.\ \textit{A\u{n} second book.}\ 2020.\> Jane Doe.\ \textit{A second book.}\ 2020. + \CHAPTER{Chapter 17 --- \LaTeX{} Package Documentation Tools} - + +\erroronpage{II-599}{para 3, l.1}{EOl}{2023/07/30}{s} + +\u{Whencreating automatically} the driver \> \u{When} the driver + \CHAPTER{Appendix A --- \LaTeX{} Overview for Preamble, \ldots} - + +\erroronpage{II-624--629}{}{BeB/FMi}{2023/08/31}{s} +Replace for consistency with section 1.4: \u{command definition} \> \u{code} + +\erroronpage{II-629}{para 1, l.3}{FMi}{2023/08/31}{s} +\u{An} warning \> \u{A} warning + + +\erroronpage{II-633}{para 2}{BeB/FMi}{2023/08/31}{s} +Add at the end: A maximum of nine ``argument'' letters is supported. + + +\erroronpage{II-682}{para -2, l.3}{FMi}{2023/04/28}{s} +\texttt{Harf\u{b}uzz} \> \texttt{Harf\u{B}uzz} + \CHAPTER{Appendix B --- Tracing and Resolving Problems} @@ -787,7 +1306,7 @@ Chapter title not properly capitalized. \erroronpage{II-297}{heading}{FMi}{2023/04/04}{s} Appendix title not properly capitalized. -\\ Already corrected in the digital version. + \CHAPTER{Biographies} @@ -798,13 +1317,21 @@ Appendix title not properly capitalized. +\section*{Notes on this errata document} + \setcounter{collectmore}{3} \begin{multicols}{3}[Thanks to all who have found errors or omissions. Listed are the people who found an errata entry first.] -\contributor{bb}{Barbara Beeton} +\contributor{BeB}{Bernd Burghardt} +\contributor{DFl}{Daniel Flipo} +\contributor{EOl}{Edgar Olthof} \contributor{FMi}{Frank Mittelbach} +\contributor{MJo}{Maciej Jończyk} +\contributor{YFu}{FUJIMURA Yukitoshi} +\contributor{YvH}{Yvon Henel} +\contributor{bb}{Barbara Beeton} \contributor{kb}{Karl Berry} \end{multicols} @@ -827,7 +1354,7 @@ Here is an example: \erroronpage{5}{para 3, l.1}{FMi}{2023/06/21}{} \u{LaTeX} \> \u{\LaTeX} \end{verbatim} -\verb=\u= underlines a text fragment and \verb=\>= produces \>. +\verb=\u{...}= underlines a text fragment, \verb=\>= produces \>, and \verb=\bl= is a short form for \verb=\color{blue}=. \end{document} diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf b/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf Binary files differindex 5228aefe9dd..b7992b71527 100644 --- a/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/tulm.pdf b/Master/texmf-dist/doc/latex-dev/base/tulm.pdf Binary files differindex d99b8c586c0..57f1df3e27b 100644 --- a/Master/texmf-dist/doc/latex-dev/base/tulm.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/tulm.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf b/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf Binary files differindex cb96ab3d50a..aabe4c0543e 100644 --- a/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf b/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf Binary files differindex d61fe208e57..310c0e11ba7 100644 --- a/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide.tex b/Master/texmf-dist/doc/latex-dev/base/usrguide.tex index 5577be9f033..05fc93e7af0 100644 --- a/Master/texmf-dist/doc/latex-dev/base/usrguide.tex +++ b/Master/texmf-dist/doc/latex-dev/base/usrguide.tex @@ -877,33 +877,6 @@ defined as [As an aside: the code is written in \pkg{expl3}, so we don't have to worry about spaces creeping into the definition.] -\subsection{Access to the argument specification} - -The argument specifications for document commands and environments are -available for examination and use. - -\begin{decl} - |\GetDocumentCommandArgSpec| \arg{cmd} \\ - |\GetDocumentEnvironmentArgSpec| \arg{environment} -\end{decl} -These commands transfer the current argument specification for the -requested \meta{cmd} or \meta{environment} into the token list -variable \cs{ArgumentSpecification}. If the \meta{cmd} or -\meta{environment} has no known argument specification then an error -is issued. The assignment to \cs{ArgumentSpecification} is local to -the current \TeX{} group. - -\begin{decl} - |\ShowDocumentCommandArgSpec| \arg{cmd} \\ - |\ShowDocumentEnvironmentArgSpec| \arg{environment} -\end{decl} -These commands show the current argument specification for the -requested \meta{cmd} or \meta{environment} at the terminal. If -the \meta{cmd} or \meta{environment} has no known argument -specification then an error is issued. - - - \section{Copying and showing (robust) commands and environments} If you want to (slightly) alter an existing command you may want to @@ -1212,8 +1185,7 @@ Upper- and lower-casing are well-understood in general conversation. Titlecasing here follows the definition given by the Unicode Consortium: the first character of the input will be converted to (broadly) uppercase, and the rest of the input to lowercase. The full range of Unicode UTF-8 input can be -supported, with the proviso that at present the characters set up with 8-bit -engines match those available in standard input encodings (|T1|, |T2|, |LGR|). +supported. \begin{quotation} \begin{tabular}{rl} |\MakeUppercase{hello WORLD ßüé}| & \MakeUppercase{hello WORLD ßüé} \\ diff --git a/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf b/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf Binary files differindex d008d97030d..3925b86fcbe 100644 --- a/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf diff --git a/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf b/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf Binary files differindex 735f72c3b89..ce28e4400f5 100644 --- a/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf +++ b/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf diff --git a/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt b/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt index e326957807f..17d8f9acdf2 100644 --- a/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt @@ -1,3 +1,10 @@ +2023-07-18 Ulrike Fischer <Ulrike.Fischer@latex-project.org> + * latex2e-first-aid-for-external-files.dtx: remove no longer needed code for + everysel + * latex2e-first-aid-for-external-files.dtx: remove no longer needed code for bidi + * latex2e-first-aid-for-external-files.dtx: + remove no longer needed code for memoir/stockheight + 2023-05-20 Ulrike Fischer <Ulrike.Fischer@latex-project.org> * latex2e-first-aid-for-external-files.dtx: removed temporary fix for @@ -137,5 +144,3 @@ * latex2e-first-aid-for-external-files.dtx: Initial version for 2020-10-01 release containing first aid for packages bidi, filehook and class dinbrief. - - diff --git a/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf b/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf Binary files differindex 991a11ec54c..c024fad142f 100644 --- a/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf +++ b/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf diff --git a/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md index 7c6c7f83c40..f0af1e3c8c9 100644 --- a/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md @@ -7,6 +7,21 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-09-13] + +### Added +- Document ConTeXt as supported `checkformat` + +### Changed +- Extend version string normalisation during checks + (see issue \#96) + +- Extend excludefiles to cover `build.lua` (see \#286) +### Fixed +- Return passing errorlevel if BibTeX issues warnings + (see \#260) +- Respect `excludefiles` when doing (local) installation + ## [2023-09-07] ### Changed @@ -697,7 +712,8 @@ this project uses date-based 'snapshot' version identifiers. - Rationalise short option names: removed `-d`, `-E`, `-r` - Target `cmdcheck`: specific to LaTeX kernel work -[Unreleased]: https://github.com/latex3/l3build/compare/2023-09-07...HEAD +[Unreleased]: https://github.com/latex3/l3build/compare/2023-09-13...HEAD +[2023-09-13]: https://github.com/latex3/l3build/compare/2023-09-07...2023-09-13 [2023-09-07]: https://github.com/latex3/l3build/compare/2023-09-05...2023-09-07 [2023-09-05]: https://github.com/latex3/l3build/compare/2023-07-20...2023-09-05 [2023-07-20]: https://github.com/latex3/l3build/compare/2023-07-17...2023-07-20 diff --git a/Master/texmf-dist/doc/latex/l3build/README.md b/Master/texmf-dist/doc/latex/l3build/README.md index 825c32f55bf..0b7cfe9f97c 100644 --- a/Master/texmf-dist/doc/latex/l3build/README.md +++ b/Master/texmf-dist/doc/latex/l3build/README.md @@ -1,7 +1,7 @@ l3build: a testing and building system for LaTeX ================================================= -Release 2023-09-07 +Release 2023-09-13 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3build/l3build.pdf b/Master/texmf-dist/doc/latex/l3build/l3build.pdf Binary files differindex e713477fca5..4e7c03759d8 100644 --- a/Master/texmf-dist/doc/latex/l3build/l3build.pdf +++ b/Master/texmf-dist/doc/latex/l3build/l3build.pdf diff --git a/Master/texmf-dist/doc/man/man1/l3build.1 b/Master/texmf-dist/doc/man/man1/l3build.1 index 87dbac2ce35..fbf4b84fda6 100644 --- a/Master/texmf-dist/doc/man/man1/l3build.1 +++ b/Master/texmf-dist/doc/man/man1/l3build.1 @@ -1,4 +1,4 @@ -.TH l3build 1 "2023-09-07" +.TH l3build 1 "2023-09-13" .SH NAME l3build \- Checking and building packages .SH SYNOPSIS diff --git a/Master/texmf-dist/doc/man/man1/l3build.man1.pdf b/Master/texmf-dist/doc/man/man1/l3build.man1.pdf Binary files differindex 97ac9ee0187..b1ce60fa57c 100644 --- a/Master/texmf-dist/doc/man/man1/l3build.man1.pdf +++ b/Master/texmf-dist/doc/man/man1/l3build.man1.pdf diff --git a/Master/texmf-dist/scripts/l3build/l3build-check.lua b/Master/texmf-dist/scripts/l3build/l3build-check.lua index 3e26de429be..3279f2c4a16 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-check.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-check.lua @@ -171,6 +171,9 @@ local function normalize_log(content,engine,errlevels) -- Deal with dates if match(line, "[^<]%d%d%d%d[/%-]%d%d[/%-]%d%d") then line = gsub(line,"%d%d%d%d[/%-]%d%d[/%-]%d%d","....-..-..") + -- Semantic version-like ones + line = gsub(line,"v%d+%.%d+%.%d+[%d%a.+%-]*","v...") + -- Classical LaTeX version strings line = gsub(line,"v%d+%.?%d?%d?%w?","v...") end -- Deal with leading spaces for file and page number lines diff --git a/Master/texmf-dist/scripts/l3build/l3build-install.lua b/Master/texmf-dist/scripts/l3build/l3build-install.lua index 64d29fc5904..e96259caa30 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-install.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-install.lua @@ -215,6 +215,7 @@ function install_files(target,full,dry_run) dir = dir or currentdir include = include or { } exclude = exclude or { } + insert(exclude,excludefiles) local excludelist = { } for _,glob_table in pairs(exclude) do for _,glob in pairs(glob_table) do diff --git a/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua b/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua index d0e491d4c59..c12c5447381 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua @@ -72,8 +72,10 @@ function bibtex(name,dir) os_grepexe .. " \"^" .. grep .. "bibdata{\" " .. name .. ".aux > " .. os_null ) == 0 then - return runcmd(bibtexexe .. " " .. bibtexopts .. " " .. name,dir, - {"BIBINPUTS","BSTINPUTS"}) + local errorlevel = runcmd(bibtexexe .. " " .. bibtexopts .. " " .. name, + dir,{"BIBINPUTS","BSTINPUTS"}) + -- BibTeX(8) signals warnings with errorlevel 1 + if errorlevel > 1 then return errorlevel else return 0 end end end return 0 diff --git a/Master/texmf-dist/scripts/l3build/l3build-variables.lua b/Master/texmf-dist/scripts/l3build/l3build-variables.lua index 204c386f690..bbebf2fd081 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-variables.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-variables.lua @@ -83,7 +83,7 @@ cleanfiles = cleanfiles or {"*.log", "*.pdf", "*.zip"} demofiles = demofiles or { } docfiles = docfiles or { } dynamicfiles = dynamicfiles or { } -excludefiles = excludefiles or {"*~"} +excludefiles = excludefiles or {"*~","build.lua","config-*.lua"} exefiles = exefiles or { } installfiles = installfiles or {"*.sty","*.cls"} makeindexfiles = makeindexfiles or {"*.ist"} diff --git a/Master/texmf-dist/scripts/l3build/l3build.lua b/Master/texmf-dist/scripts/l3build/l3build.lua index 1ac608c9711..e520cd18110 100755 --- a/Master/texmf-dist/scripts/l3build/l3build.lua +++ b/Master/texmf-dist/scripts/l3build/l3build.lua @@ -25,7 +25,7 @@ for those people who are interested. --]] -- Version information -release_date = "2023-09-07" +release_date = "2023-09-13" -- File operations are aided by the LuaFileSystem module local lfs = require("lfs") diff --git a/Master/texmf-dist/source/latex-dev/base/format.ins b/Master/texmf-dist/source/latex-dev/base/format.ins index 74cd78ff4a8..ba0965004d1 100644 --- a/Master/texmf-dist/source/latex-dev/base/format.ins +++ b/Master/texmf-dist/source/latex-dev/base/format.ins @@ -169,6 +169,7 @@ the system are in the document `cfgguide.tex'. \from{ltcmd.dtx}{2ekernel} % L3 layer module (used to be xparse) \from{lthooks.dtx}{2ekernel} % L3 layer module \from{ltcmdhooks.dtx}{2ekernel} % L3 layer module + \from{ltsockets.dtx}{2ekernel} % L3 layer module \from{ltalloc.dtx}{2ekernel} \from{ltcntrl.dtx}{2ekernel} \from{lterror.dtx}{2ekernel} @@ -191,6 +192,7 @@ the system are in the document `cfgguide.tex'. \from{lttextcomp.dtx}{2ekernel} \from{ltpageno.dtx}{2ekernel} \from{ltxref.dtx}{2ekernel} + \from{ltproperties.dtx}{2ekernel} \from{ltmiscen.dtx}{2ekernel} \from{ltmath.dtx}{2ekernel} \from{ltlists.dtx}{2ekernel} diff --git a/Master/texmf-dist/source/latex-dev/base/latexrelease.ins b/Master/texmf-dist/source/latex-dev/base/latexrelease.ins index 61315f8e078..93739630e3e 100644 --- a/Master/texmf-dist/source/latex-dev/base/latexrelease.ins +++ b/Master/texmf-dist/source/latex-dev/base/latexrelease.ins @@ -96,6 +96,7 @@ extension .ins) which are part of the distribution. \from{ltcmd.dtx} {latexrelease}% L3 layer module \from{lthooks.dtx} {latexrelease}% L3 layer module \from{ltcmdhooks.dtx} {latexrelease}% L3 layer module + \from{ltsockets.dtx} {latexrelease}% L3 layer module \from{ltalloc.dtx} {latexrelease}% empty \from{ltcntrl.dtx} {latexrelease}% empty \from{lterror.dtx} {latexrelease}% empty @@ -118,6 +119,7 @@ extension .ins) which are part of the distribution. \from{lttextcomp.dtx} {latexrelease}% \from{ltpageno.dtx} {latexrelease}% empty \from{ltxref.dtx} {latexrelease}% empty + \from{ltproperties.dtx}{latexrelease}% \from{ltmiscen.dtx} {latexrelease}% \from{ltmath.dtx} {latexrelease}% \from{ltlists.dtx} {latexrelease}% empty diff --git a/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx b/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx index d6322ff3ee8..dcb85a1ae8d 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltcmd.dtx @@ -34,8 +34,8 @@ %%% From File: ltcmd.dtx % % \begin{macrocode} -\def\ltcmdversion{v1.1e} -\def\ltcmddate{2023-05-26} +\def\ltcmdversion{v1.2a} +\def\ltcmddate{2023-08-19} % \end{macrocode} % %<*driver> @@ -59,6 +59,8 @@ % \section{Creating document commands} % % \changes{v1.0a}{2020/11/20}{Initial version derived from \texttt{xparse.dtx}} +% \changes{v1.2a}{2023/08/19}{Removed commands that should have remained +% only in \texttt{xparse.dtx}} % % Document commands should be created using the tools provided by this module: % \cs{NewDocumentCommand}, etc.\@, in almost all cases. This allows clean @@ -4263,116 +4265,6 @@ % \end{macro} % \end{macro} % -% \subsection{Access to the argument specification} -% -% \begin{macro}{\@@_get_arg_spec_error:N, \@@_get_arg_spec_error:n} -% \begin{macro}{\@@_get_arg_spec_error_aux:n} -% Provide an informative error when trying to get the argument -% specification of a non-\pkg{xparse} command or environment. -% \begin{macrocode} -\cs_new_protected:Npn \@@_get_arg_spec_error:N #1 - { - \bool_set_false:N \l_@@_environment_bool - \tl_set:Nn \l_@@_fn_tl {#1} - \@@_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 } - } -\cs_new_protected:Npn \@@_get_arg_spec_error:n #1 - { - \bool_set_true:N \l_@@_environment_bool - \str_set:Nx \l_@@_environment_str {#1} - \@@_get_arg_spec_error_aux:n - { \cs_if_exist:cTF { \l_@@_environment_str } } - } -\cs_new_protected:Npn \@@_get_arg_spec_error_aux:n #1 - { - #1 - { - \msg_error:nnx { cmd } { non-xparse } - { \@@_environment_or_command: } - } - { - \msg_error:nnx { cmd } { unknown } - { \@@_environment_or_command: } - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_get_arg_spec:NTF} -% If the command is not an \pkg{xparse} command, complain. If it is, -% its second \enquote{item} is the argument specification. -% \begin{macrocode} -\cs_new_protected:Npn \@@_get_arg_spec:NTF #1#2#3 - { - \__kernel_cmd_if_xparse:NTF #1 - { - \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } - #2 - } - {#3} - } -% \end{macrocode} -% \end{macro} -% -% Rolling forward from 2020-10-01 is tricky because the entire |ltcmd| -% module is new, but the user-level commands have the same name, so only -% these will clash. To work around that, in |latexrelease| mode we will -% (temporarily) disable \cs{__kernel_chk_if_free_cs:N} for this final -% part of the code, then restore at the end. -% \begin{macrocode} -%<latexrelease>\cs_new_eq:NN \@@_chk_if_free_cs:N \__kernel_chk_if_free_cs:N -%<latexrelease>\cs_gset_eq:NN \__kernel_chk_if_free_cs:N \use_none:n -% \end{macrocode} -% -% \begin{variable}{\ArgumentSpecification} -% \begin{macrocode} -\tl_new:N \ArgumentSpecification -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{\@@_get_arg_spec:N} -% \begin{macro}{\@@_get_arg_spec:n} -% Recovering the argument specification is now trivial. -% \begin{macrocode} -\cs_new_protected:Npn \@@_get_arg_spec:N #1 - { - \@@_get_arg_spec:NTF #1 { } - { \@@_get_arg_spec_error:N #1 } - } -\cs_new_protected:Npn \@@_get_arg_spec:n #1 - { - \exp_args:Nc \@@_get_arg_spec:NTF - { environment~ \tl_to_str:n {#1} } - { } - { \@@_get_arg_spec_error:n {#1} } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_show_arg_spec:N} -% \begin{macro}{\@@_show_arg_spec:n} -% Showing the argument specification simply means finding it and then -% calling the \cs{tl_show:N} function. -% \begin{macrocode} -\cs_new_protected:Npn \@@_show_arg_spec:N #1 - { - \@@_get_arg_spec:NTF #1 - { \tl_show:N \ArgumentSpecification } - { \@@_get_arg_spec_error:N #1 } - } -\cs_new_protected:Npn \@@_show_arg_spec:n #1 - { - \exp_args:Nc \@@_get_arg_spec:NTF - { environment~ \tl_to_str:n {#1} } - { \tl_show:N \ArgumentSpecification } - { \@@_get_arg_spec_error:n {#1} } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% % \subsection{Utilities} % % \begin{macro}{\@@_check_definable:nNT, \@@_check_definable_aux:nN} @@ -4817,12 +4709,6 @@ LaTeX~did~not~find~this~argument~and~will~insert~a~default~value~ for~further~processing. } -\msg_new:nnnn { cmd } { non-xparse } - { \str_uppercase:n #1~not~defined~using~xparse. } - { - You~have~asked~for~the~argument~specification~for~the~#1,~ - but~this~was~not~defined~using~xparse. - } \msg_new:nnnn { cmd } { arg-split } { Too~many~'#1'~separators~in~argument. } { @@ -4830,12 +4716,6 @@ at~each~occurrence~of~the~separator~'#1'~into~#2~parts.~ Too~many~separators~were~found. } -\msg_new:nnnn { cmd } { unknown } - { Unknown~document~#1. } - { - You~have~asked~for~the~argument~specification~for~the~#1,~ - but~it~is~not~defined. - } \msg_new:nnnn { cmd } { verbatim-nl } { Verbatim-like~#1~ended~by~end~of~line. } { @@ -5153,31 +5033,6 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\GetDocumentCommandArgSpec} -% \begin{macro}{\GetDocumentEnvironmentArgSpec} -% \begin{macro}{\ShowDocumentCommandArgSpec} -% \begin{macro}{\ShowDocumentEnvironmentArgSpec} -% More simple mappings, with a check that the argument is a single -% control sequence or active character. -% \begin{macrocode} -\cs_new_protected:Npn \GetDocumentCommandArgSpec #1 - { - \@@_check_definable:nNT {#1} \GetDocumentCommandArgSpec - { \@@_get_arg_spec:N #1 } - } -\cs_new_eq:NN \GetDocumentEnvironmentArgSpec \@@_get_arg_spec:n -\cs_new_protected:Npn \ShowDocumentCommandArgSpec #1 - { - \@@_check_definable:nNT {#1} \ShowDocumentCommandArgSpec - { \@@_show_arg_spec:N #1 } - } -\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \@@_show_arg_spec:n -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% % Finally as promised, restore \cs{__kernel_chk_if_free_cs:N}: % \begin{macrocode} %<latexrelease>\cs_gset_eq:NN \__kernel_chk_if_free_cs:N \@@_chk_if_free_cs:N diff --git a/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx b/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx index 27907af6798..6f885a2c6ce 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltcmdhooks.dtx @@ -14,8 +14,8 @@ % %%% From File: ltcmdhooks.dtx % -\def\ltcmdhooksversion{v1.0h} -\def\ltcmdhooksdate{2023/05/21} +\def\ltcmdhooksversion{v1.0i} +\def\ltcmdhooksdate{2023/06/16} % % % @@ -1641,10 +1641,10 @@ % \subsection{Messages} % % \begin{macrocode} -%<latexrelease>\IncludeInRelease{2021/11/15}{wrong-cmd-hook}% +%<latexrelease>\IncludeInRelease{2023/06/01}{wrong-cmd-hook}% %<latexrelease> {Standardise~generic~hook~names} %<latexrelease>\EndIncludeInRelease -%<latexrelease>\IncludeInRelease{2021/11/15}{wrong-cmd-hook}% +%<latexrelease>\IncludeInRelease{2021/06/01}{wrong-cmd-hook}% %<latexrelease> {Standardise~generic~hook~names} %<latexrelease>\msg_new:nnnn { hooks } { wrong-cmd-hook } %<latexrelease> { diff --git a/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx b/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx index e10a5416e58..ae183bfeb47 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltfilehook.dtx @@ -32,7 +32,7 @@ % % \begin{macrocode} \providecommand\ltfilehookversion{v1.0o} -\providecommand\ltfilehookdate{2023/04/02} +\providecommand\ltfilehookdate{2023/07/10} % \end{macrocode} % %<*driver> @@ -1043,7 +1043,6 @@ % % \begin{macrocode} %<@@=> -\ExplSyntaxOff % \end{macrocode} % % \subsection{Selecting a file (\cs{set@curr@file})} diff --git a/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx b/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx index 3bac7ea0b22..f079c2cf5b1 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltfiles.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltfiles.dtx} - [2023/05/17 v1.2t LaTeX Kernel (File Handling)] + [2023/06/17 v1.2u LaTeX Kernel (File Handling)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfiles.dtx} @@ -1203,8 +1203,9 @@ % \changes{v1.2d}{2019/10/26}{quote on openin} % \changes{v1.2k}{2021/03/12}{Allow unbalanced conditionals (gh/530)} % \changes{v1.2t}{2023/05/15}{Use \pkg{expl3} file existence test} -% \begin{macro}{\IfFileExists@} +% \begin{macro}{\IfFileExists@@} % \changes{v1.2t}{2023/05/15}{Macro added} +% \changes{v1.2u}{2023/06/16}{Support piped input} % Argument |#1| is |\@curr@file| so catcode 12 string with no quotes. % % The original definition picked up arguments |#2| and |#3| in a @@ -1212,7 +1213,7 @@ % implementation would have been not to pick up the arguments at % all but instead use the usual \cs{@firstoftwo} and % \cs{secondoftwo}. However, that changes how |#| is interpreted -% and so we can't do that nowaways without invalidating a lot of +% and so we can't do that nowadays without invalidating a lot of % code. Therefore the somewhat curious construction near the end. % % Earlier versions used |\openin| here, but this led to two @@ -1224,7 +1225,7 @@ % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> -%<latexrelease>\IncludeInRelease{2023/05/01}% +%<latexrelease>\IncludeInRelease{2023/06/01}% %<latexrelease> {\IfFileExists@}{IfFileExists} \long\def \IfFileExists@#1#2#3{% \edef\@filef@und{\IfFileExists@@{#1}}% @@ -1251,8 +1252,23 @@ \expandafter\def\expandafter\reserved@a \expandafter{\reserved@a{#2}{#3}}% \reserved@a} +% \end{macrocode} +% Pipes are not really files, but at the document level they are supported. +% To quickly trim of any leading spaces, we use a blank test and \cs{use:n} +% rather than \cs{tl_trim_spaces:n} for speed as we don't care about the end +% of the input. +% \begin{macrocode} \ExplSyntaxOn -\cs_new_eq:NN \IfFileExists@@ \file_full_name:n +\cs_new:Npn \IfFileExists@@ #1 + { + \tl_if_blank:nF {#1} + { + \tl_if_head_eq_charcode:oNTF { \use:n #1 } | + {#1} + { \file_full_name:n {#1} } + } + } +\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNTF { o } \ExplSyntaxOff %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease diff --git a/Master/texmf-dist/source/latex-dev/base/lthooks.dtx b/Master/texmf-dist/source/latex-dev/base/lthooks.dtx index 3807d25c44b..e43fa4ef351 100644 --- a/Master/texmf-dist/source/latex-dev/base/lthooks.dtx +++ b/Master/texmf-dist/source/latex-dev/base/lthooks.dtx @@ -31,8 +31,8 @@ %%% From File: lthooks.dtx % % \begin{macrocode} -\def\lthooksversion{v1.1e} -\def\lthooksdate{2023/06/06} +\def\lthooksversion{v1.1f} +\def\lthooksdate{2023/08/11} % \end{macrocode} % %<*driver> @@ -298,10 +298,6 @@ % consumed and any further attempt to add to it will result in % executing the code to be added immediately. % -% The \meta{hook} \emph{cannot} be specified using the dot-syntax. -% A leading |.| is treated literally. See -% section~\ref{sec:default-label} for details. -% % Using \cs{UseOneTimeHook} several times with the same % \Arg{hook} means that it only executes the first time it is used. % For example, if it is used in a command that can be called several times @@ -311,6 +307,11 @@ % Mixing \cs{UseHook} and \cs{UseOneTimeHook} for the same % \Arg{hook} should be avoided, but if this is done then neither will execute % after the first \cs{UseOneTimeHook}. +% +% The \meta{hook} \emph{cannot} be specified using the dot-syntax. +% A leading |.| is treated literally. See +% section~\ref{sec:default-label} for details. +% % \end{function} % % \begin{function}{\UseOneTimeHookWithArguments} @@ -327,6 +328,11 @@ % longer possible to use \cs{AddToHookWithArguments} or similar with % that hook. \cs{AddToHook} continues to work as normal. % Section~\ref{sec:hook-args} explains hooks with arguments. +% +% The \meta{hook} \emph{cannot} be specified using the dot-syntax. +% A leading |.| is treated literally. See +% section~\ref{sec:default-label} for details. +% % \end{function} % % @@ -607,7 +613,10 @@ % \meta{hook} arguments, both in the \LaTeXe{} interface, and the \LaTeX3 % interface described in section~\ref{sec:l3hook-interface}. % -% Note, however, that the replacement of |.| by the \meta{default label} +% Note,\marginpar{\raggedleft\rightskip5pt\itshape \textbf{Important:}\break The dot-syntax +% is \textbf{not} available with +% \cs{UseHook} and some other commands that are typically used within code!} +% however, that the replacement of |.| by the \meta{default label} % takes place when the hook command is executed, so actions that are % somehow executed after the package ends will have the wrong % \meta{default label} if the dot-syntax is used. For that reason, @@ -1997,8 +2006,9 @@ % % \item[\hook{begindocument}] % -% This hook is added to when using \cs{AtBeginDocument} and it is -% executed after the \texttt{.aux} file as be read in and most +% This hook is added to by using \cs{AddToHook}\texttt{\{begindocument\}} +% or by using \cs{AtBeginDocument} and it is +% executed after the \texttt{.aux} file has been read and most % initialization are done, so they can be altered and inspected by % the hook code. It is followed by a small number of further % initializations that shouldn't be altered and are therefore @@ -3534,7 +3544,7 @@ % \changes{v1.1a}{2023/04/06} % {Add \cs{hook_gput_code_with_args:nnn} (hook-args).} % \begin{macrocode} -%<latexrelease>\IncludeInRelease{2023/06/01}{\hook_gput_code_with_args:nnn} +%<latexrelease>\IncludeInRelease{2023/06/01}{\hook_gput_code:nnn} %<latexrelease> {Hooks~with~args} \cs_new_protected:Npn \hook_gput_code:nnn #1 #2 #3 { @@ -4386,7 +4396,7 @@ % \end{macrocode} % % \begin{macrocode} -%<latexrelease>\IncludeInRelease{2023/06/01}{\hook_gremove_code:nn} +%<latexrelease>\IncludeInRelease{2020/10/01}{\hook_gremove_code:nn} %<latexrelease> {Hooks~with~args} %<latexrelease>\cs_new_protected:Npn \@@_gremove_code:nn #1 #2 %<latexrelease> { @@ -5287,6 +5297,10 @@ %<latexrelease> \cs_gset_eq:NN \hook_use:n \@@_use_initialized:n %<latexrelease> \cs_gset_eq:NN \@@_preamble_hook:n \use_none:n %<latexrelease> } +%<@@=> +%<latexrelease>\cs_gset_eq:NN \@expl@@@initialize@all@@ +%<latexrelease> \__hook_initialize_all: +%<@@=hook> %<latexrelease>\EndIncludeInRelease % \end{macrocode} % \end{macro} @@ -7365,7 +7379,7 @@ \NewDocumentCommand \NewMirroredHookPairWithArguments { mmm } { \hook_new_pair_with_args:nnn {#1} {#2} {#3} } %<latexrelease>\EndIncludeInRelease -%<latexrelease>\IncludeInRelease{2023/06/01}{\NewHookWithArguments} +%<latexrelease>\IncludeInRelease{2020/10/01}{\NewHookWithArguments} %<latexrelease> {Hooks~with~args} %<latexrelease>\cs_new_protected:Npn \NewHookWithArguments #1 #2 { } %<latexrelease>\cs_new_protected:Npn \NewReversedHookWithArguments #1 #2 { } diff --git a/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx b/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx index 135cb630096..6d274ed5c33 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx @@ -28,7 +28,7 @@ \ProvidesFile{ltluatex.dtx} %</driver> %<*tex> -[2023/01/19 v1.2b +[2023/08/03 v1.2c %</tex> %<plain> LuaTeX support for plain TeX (core) %<*tex> @@ -1284,6 +1284,7 @@ luatexbase.new_chunkname = new_chunkname % % \begin{macro}{new_luafunction} % \changes{v1.1i}{2018/10/21}{Function added} +% \changes{v1.2c}{2023/07/02}{Ensure existing table entries not overwritten gh/1100} % Much the same as for attribute allocation in Lua. % The optional \meta{name} argument is used in the log if given. % \begin{macrocode} @@ -1291,7 +1292,11 @@ local luafunction_count_name = luafunction_count_name or "e@alloc@luafunction@count" local function new_luafunction(name) tex_setcount("global", luafunction_count_name, - tex_count[luafunction_count_name] + 1) + math.max( + #(lua.get_functions_table()), + tex_count[luafunction_count_name]) + + 1) + lua.get_functions_table()[tex_count[luafunction_count_name]] = false if tex_count[luafunction_count_name] > 65534 then luatexbase_error("No room for a new luafunction register") end @@ -2147,12 +2152,13 @@ luatexbase.uninstall = uninstall % \begin{macro}{mlist_to_hlist} % \changes{v1.1l}{2020/02/02}{|pre/post_mlist_to_hlist| added} % \changes{v1.1y}{2022/08/13}{Use shared\_callback system for pre/post/mlist_to_hlist} +% \changes{v1.2c}{2023/08/03}{Fix callback type of post_mlist_to_hlist_callback} % To emulate these callbacks, the ``real'' |mlist_to_hlist| is replaced by a % wrapper calling the wrappers before and after. % \begin{macrocode} create_callback('pre_mlist_to_hlist_filter', 'list') create_callback('mlist_to_hlist', 'exclusive', node.mlist_to_hlist) -create_callback('post_mlist_to_hlist_filter', 'list') +create_callback('post_mlist_to_hlist_filter', 'reverselist') function shared_callbacks.mlist_to_hlist.handler(head, display_type, need_penalties) local current = call_callback("pre_mlist_to_hlist_filter", head, display_type, need_penalties) if current == false then diff --git a/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx b/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx index 801d1e68627..74a9685f1fb 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltmiscen.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltmiscen.dtx} - [2022/11/06 v1.2a LaTeX Kernel (Misc. Environments)] + [2023/09/13 v1.2c LaTeX Kernel (Misc. Environments)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltmiscen.dtx} @@ -194,8 +194,8 @@ % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> -%<latexrelease>\IncludeInRelease{2020/10/01}% -%<latexrelease> {\enddocument}{Use Hooks}% +%<latexrelease>\IncludeInRelease{2023/11/01}% +%<latexrelease> {\enddocument}{check property labels}% \def\enddocument{% % \end{macrocode} % The |\end{document}| hook is executed first. If necessary it can @@ -230,6 +230,10 @@ \let\@setckpt\@gobbletwo \let\@newl@bel\@testdef % \end{macrocode} +% \changes{v1.2b}{2023/09/06}{Test changes of values in \cs{new@label@record}} +% \begin{macrocode} + \let\new@label@record\@kernel@new@label@record@testdef +% \end{macrocode} % \changes{v1.0z}{1995/07/13}{Shorten redefinition of \cs{bibcite} and % \cs{newlabel}} % The previous line is equiv to setting @@ -357,6 +361,67 @@ % \begin{macrocode} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\enddocument}{Use Hooks}% +%<latexrelease>\def\enddocument{% +%<latexrelease> \@kernel@before@enddocument +%<latexrelease> \UseOneTimeHook{enddocument}% +%<latexrelease> \@kernel@after@enddocument +%<latexrelease> \@checkend{document}% +%<latexrelease> \clearpage +%<latexrelease> \UseOneTimeHook{enddocument/afterlastpage}% +%<latexrelease> \@kernel@after@enddocument@afterlastpage +%<latexrelease> \begingroup +%<latexrelease> \if@filesw +%<latexrelease> \immediate\closeout\@mainaux +%<latexrelease> \let\@setckpt\@gobbletwo +%<latexrelease> \let\@newl@bel\@testdef +%<latexrelease> \@tempswafalse +%<latexrelease> \makeatletter \@@input\jobname.aux +%<latexrelease> \fi +%<latexrelease> \UseOneTimeHook{enddocument/afteraux}% +%<latexrelease> \UseOneTimeHook{enddocument/info}% +%<latexrelease> \endgroup +%<latexrelease> \UseOneTimeHook{enddocument/end}% +%<latexrelease> \deadcycles\z@\@@end} +%<latexrelease>\NewHook{enddocument} +%<latexrelease>\NewHook{enddocument/afterlastpage} +%<latexrelease>\NewHook{enddocument/afteraux} +%<latexrelease>\NewHook{enddocument/info} +%<latexrelease>\NewHook{enddocument/end} +%<latexrelease>\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} +%<latexrelease>\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} +%<latexrelease>\AddToHook{enddocument/info}[kernel/release]{% +%<latexrelease> \let\show@release@info\wlog +%<latexrelease> \show@release@info{ ***********}% +%<latexrelease> \the\LaTeXReleaseInfo +%<latexrelease> \show@release@info{ ***********}} +%<latexrelease> +%<latexrelease>\DeclareHookRule{enddocument/info}{kernel/release}{before}{kernel/filelist} +%<latexrelease>\DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings} +%<latexrelease>\def\@enddocument@kernel@warnings{% +%<latexrelease> \ifdim \font@submax >\fontsubfuzz\relax +%<latexrelease> \@font@warning{Size substitutions with differences\MessageBreak +%<latexrelease> up to \font@submax\space have occurred.\@gobbletwo}% +%<latexrelease> \fi +%<latexrelease> \@defaultsubs +%<latexrelease> \@refundefined +%<latexrelease> \if@filesw +%<latexrelease> \ifx \@multiplelabels \relax +%<latexrelease> \if@tempswa +%<latexrelease> \@latex@warning@no@line{Label(s) may have changed. +%<latexrelease> Rerun to get cross-references right}% +%<latexrelease> \fi +%<latexrelease> \else +%<latexrelease> \@multiplelabels +%<latexrelease> \fi +%<latexrelease> \ifx \@extra@page@added \relax +%<latexrelease> \@latex@warning@no@line{Temporary extra page added at the end. +%<latexrelease> Rerun to get it removed}% +%<latexrelease> \fi +%<latexrelease> \fi +%<latexrelease>} +%<latexrelease>\EndIncludeInRelease %<latexrelease>\IncludeInRelease{0000/00/00}% %<latexrelease> {\enddocument}{Use Hooks}% %<latexrelease> @@ -496,8 +561,7 @@ \protected\def\protected@file@percent{} % \end{macrocode} % \end{macro} - - +% % \begin{macro}{\add@percent@to@temptokena} % Helper function which is used to inspect a sequence of tokens % (the second argument of \cs{@writefile} and it the last token is @@ -1189,11 +1253,33 @@ % print as the \TeX{}book's space character instead of as blank spaces. % % \begin{macro}{\@vobeyspaces} +% \changes{v1.2b}{2023/06/15}{Support tabs} +% \begin{macro}{\@vobeytabs} +% \changes{v1.2b}{2023/06/14}{Macro added} +% \changes{v1.2c}{2023/09/01}{Provide global definition for active tab} % \begin{macrocode} +%</2ekernel> +%<latexrelease>\IncludeInRelease{2023/11/01}% +%<latexrelease> {\@vobeytabs}{Obeyed tabs}% +%<*2ekernel|latexrelease> {\catcode`\ =\active% -\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}} +\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp\@vobeytabs}} +{\catcode`\^^I=\active +\gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}% +\global\let^^I=\space +} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\@vobeytabs}{Obeyed tabs}% +%<latexrelease>{\catcode`\ =\active% +%<latexrelease>\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}} +%<latexrelease>\let\@vobeytabs\@undefined +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}{\@xobeysp} % \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}} @@ -1368,44 +1454,8 @@ % \end{macro} % % - -% \begin{macro}{\@setupverbvisiblespace} -% -% In pdf\TeX{} a catcode 12 space will produce the character in -% slot 32 which is assumed to be a visible space character (in a -% typewriter font in OT1 or T1 encoding). In Xe\TeX{} or Lua\TeX{} a -% font in TU encoding is normally used and that has a real space in -% this slot. So what we do in this case is this: we check the -% definition of -% |\verbvisiblespace| and if it is |\asciispace| we assume that the -% char32 can be used (e.g., in pdf\TeX{}). We then redefine -% |\@xobeysp| so that after running |\@vobeyspaces| we get -% characters from slot 32 for each active space. -% -% \changes{v1.1o}{2018/10/11} -% {Provide visible space in \cs{verb*} also for XeTeX and LuaTeX (github/69)} -% \begin{macrocode} -\def\@setupverbvisiblespace{% - \ifx\verbvisiblespace\asciispace - \let\@xobeysp\asciispace - \else -% \end{macrocode} Otherwise we measure the width of a character in -% the mon-spaced current font and place a -% |\verbvisiblespace| into a box of the right width which we are then -% using as the character for a space. By default this will be the space -% character from OT1 cmtt but by changing -% |\verbvisiblespace| one could use, for example, the |\textvisiblespace| -% of the current typewriter font. -% \begin{macrocode} - \setbox\z@\hbox{x}% - \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% - \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% - \fi -} -% \end{macrocode} -% \end{macro} +% ^^A \@setupverbvisiblespace was here % - % \begin{macro}{\@verbvisiblespacebox} % The box to hold the visible space character if it isn't in slot % 32 in the current typewriter font. @@ -1426,6 +1476,8 @@ % check if space is already active---it shouldn't be. % \changes{v1.1o}{2018/10/11} % {Provide visible space in \cs{verb*} also for XeTeX and LuaTeX (github/69)} +% \changes{v1.2b}{2023/06/14} +% {Support visible tabs in \cs{verb*}} % \begin{macrocode} \@namedef{verbatim*}{\@verbatim \@setupverbvisiblespace @@ -1434,8 +1486,6 @@ % \end{macrocode} % \end{environment} % -% -% % \begin{macrocode} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease @@ -1452,7 +1502,88 @@ %<*2ekernel> % \end{macrocode} % +% \begin{macro}{\@setupverbvisiblespace} % +% In pdf\TeX{} a catcode 12 space will produce the character in +% slot 32 which is assumed to be a visible space character (in a +% typewriter font in OT1 or T1 encoding). In Xe\TeX{} or Lua\TeX{} a +% font in TU encoding is normally used and that has a real space in +% this slot. So what we do in this case is this: we check the +% definition of +% |\verbvisiblespace| and if it is |\asciispace| we assume that the +% char32 can be used (e.g., in pdf\TeX{}). We then redefine +% |\@xobeysp| so that after running |\@vobeyspaces| we get +% characters from slot 32 for each active space. +% +% \changes{v1.1o}{2018/10/11} +% {Provide visible space in \cs{verb*} also for XeTeX and LuaTeX (github/69)} +% \changes{v1.2b}{2023/06/15} +% {Support visible tabs} +% \begin{macrocode} +%</2ekernel> +%<*2ekernel|latexrelease> +%<latexrelease>\IncludeInRelease{2023/11/01}% +%<latexrelease> {\@setupverbvisiblespace}{Setup visible tab for \verb}% +\def\@setupverbvisiblespace{% + \ifx\verbvisiblespace\asciispace + \let\@xobeysp\asciispace + \else +% \end{macrocode} +% Otherwise we measure the width of a character in +% the mono-spaced current font and place a +% |\verbvisiblespace| into a box of the right width which we are then +% using as the character for a space. By default this will be the space +% character from OT1 cmtt but by changing +% |\verbvisiblespace| one could use, for example, the |\textvisiblespace| +% of the current typewriter font. +% \begin{macrocode} + \setbox\z@\hbox{x}% + \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% + \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% + \fi + \@setupverbvisibletab +} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{2018/12/01}% +%<latexrelease> {\@setupverbvisiblespace}{Setup visible space for \verb}% +%<latexrelease>\def\@setupverbvisiblespace{% +%<latexrelease> \ifx\verbvisiblespace\asciispace +%<latexrelease> \let\@xobeysp\asciispace +%<latexrelease> \else +%<latexrelease> \setbox\z@\hbox{x}% +%<latexrelease> \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% +%<latexrelease> \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% +%<latexrelease> \fi +%<latexrelease>} +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\@setupverbvisiblespace}{Setup visible space for \verb}% +%<latexrelease>\let\@setupverbvisiblespace\@undefined +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@setupverbvisibletab} +% \changes{v1.2q}{2023/06/15} +% {Provide visible tab in \cs{verb*}} +% A redirection: just a simple wrapper. +% \begin{macrocode} +%</2ekernel> +%<latexrelease>\IncludeInRelease{2023/11/01}% +%<latexrelease> {\@setupverbvisibletab}{Setup visible tab for \verb}% +%<*2ekernel|latexrelease> +\def\@setupverbvisibletab{\let\@xobeytab\@xobeysp} +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\@setupverbvisibletab}{Setup visible tab for \verb}% +%<latexrelease>\let\@setupverbvisibletab\@undefined +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> +% \end{macrocode} +% \end{macro} % % \begin{macro}{\@sverb} % \begin{macro}{\@@sverb} @@ -1464,8 +1595,8 @@ % \begin{macrocode} %</2ekernel> %<*2ekernel|latexrelease> -%<latexrelease>\IncludeInRelease{2020/10/01}% -%<latexrelease> {\@sverb}{Drop spaces before \verb delimiter}% +%<latexrelease>\IncludeInRelease{2023/11/01}% +%<latexrelease> {\@sverb}{Support visible tabs}% % \end{macrocode} % % If the users types \verb=\verb !~! foo= then surprisingly we would @@ -1496,8 +1627,13 @@ % it the definition for the active space character. % \changes{v1.1o}{2018/10/11} % {Provide visible space in \cs{verb*} also for XeTeX and LuaTeX (github/69)} +% \changes{v1.2b}{2023/06/15} +% {Support visible tabs} % \begin{macrocode} - \ifnum\catcode`\ =\active + \ifnum0% + \ifnum\catcode`\ =\active\else 1\fi + \ifnum\catcode`\^^I=\active\else 1\fi + =0 % \else \@setupverbvisiblespace \@vobeyspaces \fi } % \end{macrocode} @@ -1505,6 +1641,19 @@ % \begin{macrocode} %</2ekernel|latexrelease> %<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{2020/10/01}% +%<latexrelease> {\@sverb}{Drop spaces before \verb delimiter}% +%<latexrelease>\def\@@sverb#1{% +%<latexrelease> \catcode`#1\active +%<latexrelease> \lccode`\~`#1% +%<latexrelease> \gdef\verb@balance@group{\verb@egroup +%<latexrelease> \@latex@error{\noexpand\verb illegal in argument}\@ehc}% +%<latexrelease> \aftergroup\verb@balance@group +%<latexrelease> \lowercase{\let~\verb@egroup}% +%<latexrelease> \ifnum\catcode`\ =\active +%<latexrelease> \else \@setupverbvisiblespace \@vobeyspaces \fi +%<latexrelease>} +%<latexrelease>\EndIncludeInRelease %<latexrelease>\IncludeInRelease{2018/12/01}% %<latexrelease> {\@sverb}{Setup visible space for \verb}% %<latexrelease> diff --git a/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx b/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx new file mode 100644 index 00000000000..71b6e2a14fe --- /dev/null +++ b/Master/texmf-dist/source/latex-dev/base/ltproperties.dtx @@ -0,0 +1,943 @@ +% \iffalse meta-comment +% +%% File: ltproperties.dtx +% +% Copyright (C) 2021-2023 The LaTeX Project +% +% It may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in the file +% +% http://www.latex-project.org/lppl.txt +% +% This file is part of the LaTeX base system. (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% ----------------------------------------------------------------------- +% +% The development version of the bundle can be found at +% +% https://github.com/latex3/latex2e +% +% for those people who are interested. +% \begin{macrocode} +\def\ltpropertiesversion{1.0b} +\def\ltpropertiesdate{2023-09-13} +% \end{macrocode} + +%<*driver> +\documentclass[full]{l3doc} +\EnableCrossrefs +\CodelineIndex +\begin{document} + \DocInput{ltproperties.dtx} +\end{document} +%</driver> +% \fi +% +% \title{^^A +% Recording and cross-referencing document properties^^A +% \thanks{This module has version +% \ltpropertiesversion\ dated \ltpropertiesdate, \copyright\ The \LaTeX\ +% Project.} +% } +% +% \author{^^A +% The \LaTeX\ Project\thanks +% {^^A +% E-mail: +% \href{mailto:latex-team@latex-project.org} +% {latex-team@latex-project.org}^^A +% }^^A +% } +% +% \maketitle +% +% \begin{documentation} +% \begin{abstract} +% This code implements command to record and (expandably) reference +% document properties. It extends the standard \cs{label}/\cs{ref}/\cs{pageref} +% commands. +% \end{abstract} +% +% \tableofcontents +% +% \section{Introduction} +% +% The module allows to record the \enquote{current state} of various +% document properties (typically the content of macros and values of counters) +% and to access them in other places through a label. +% The list of properties that can be recorded and retrieved +% are not fix and can be extended by the user. The values of the properties +% are recorded in the \texttt{.aux} file and can be retrieved at the second compilation. +% +% +% The module uses the ideas of properties and labels. A label is +% a document reference point: a name for the user. An property is something +% that \LaTeX{} can track, such as a page number, section number or name. +% The names of labels and properties may be arbitrary. Note that there is +% a single namespace for each. +% +% \section{Design discussion} +% +% The design here largely follows ideas from \pkg{zref}. In particular, there +% are two independent concepts: properties that can be recorded between runs, +% and labels which consist of lists of these properties. The reason for the +% split is that individual labels will want to record some but not all +% properties. For examples, a label concerned with position would track +% the $x$ and $y$ co-ordinates of the current point, but not for example +% the page number. +% +% In the current implementation, properties share a single namespace. This +% allows multiple lists to re-use the same properties, for example page number, +% absolute page number, etc. This does mean that \emph{changing} a standard +% property is an issue. However, some properties have complex definitions +% (again, see \pkg{zref} at present): having them in a single shared space +% avoids the need to copy code. +% +% Labels could be implemented as |prop| data. That is not done at present as +% there is no obvious need to map to or copy the data. As such, faster +% performance is available using a hash table approach as in a \enquote{classical} +% set up. Data written to the |.aux| file uses simple paired \emph{balanced +% text} not keyvals: this avoids any restrictions on names and again offers +% increased performance. +% +% The \pkg{expl3} versions of the label command do not +% use \cs{@bsphack}/\cs{@esphack} to avoid double spaces, +% but the \LaTeXe{} command does as it lives at the document command level. +% +% The reference commands are expandable. +% +% Currently the code has nearly no impact on the main \cs{label} and \cs{ref} commands as +% too many external packages rely on the concrete implementation. +% There is one exception: +% the label names share the same namespace. That means that if both |\label{ABC}| and +% |\RecordProperties{ABC}{page}| are used there is a warning +% \texttt{Label `ABC' multiply defined}. +% +% \section{Handling unknown labels and properties} +% With the standard \cs{label}/\cs{ref} commands the requested label is +% either in the |.aux|-file (and so known) or not. +% In the first case the stored value can be used, +% in the second case the reference commands print two question marks. +% +% With flexible property lists a reference commands asks for the +% value of a specific property stored under a label name +% and we have to consider more variants: +% \begin{itemize} +% \item If the requested property is unknown (not declared) the system +% is not correctly set up and an error is issued. +% \item If the label is unknown, the default of the property is used. +% \item If the label is known, but doesn't provide a value for the +% property then again the default of the property is used. +% \item The command |\property_ref:nnn| allows to give a local default +% which is used instead of the property default in the two cases before. +% \end{itemize} +% +% \section{Rerun messages} +% +% As the reference commands are expandable they can neither issue a message that +% the label or the label-property combination is unknown, nor can they trigger the +% rerun message at the end of the \LaTeX{} run. +% +% Where needed such messages must therefore be triggered manually. For this two commands +% are provided: \cs{property_ref_undefined_warn:} and \cs{property_ref_undefined_warn:nn}. +% See below for a description. +% +% \section{Open points} +% +% \begin{itemize} +% \item The \texttt{xpos} and \texttt{ypos} properties require that the position is +% stored first but there is no (public) engine independent interface yet. Code must +% use \cs{tex_savepos:D}. +% \end{itemize} +% +% \section{Code interfaces} +% +% \begin{function}{\property_new:nnnn,\property_gset:nnnn} +% \begin{syntax} +% \cs{property_new:nnnn} \Arg{property} \Arg{setpoint} \Arg{default} \Arg{code} +% \cs{property_gset:nnnn} \Arg{property}\Arg{setpoint} \Arg{default} \Arg{code} +% \end{syntax} +% \LaTeXe-interface: see \cs{NewProperty}, \cs{SetProperty}.\\ +% Sets the \meta{property} to have the \meta{default} specified, and at the +% \meta{setpoint} (either |now| or |shipout|) to write the result of the +% \meta{code} as part of a label. The \meta{code} should be expandable. The expansion +% of \meta{code} (the value of the property) is written to the |.aux| file and read +% back from there at the next compilation. Values should assume that the +% standard \LaTeX{} catcode régime with |@| a letter is active then. +% +% If the property is declared within a package it is suggested +% that its name is build from letters, hyphens and slashes, +% and is always structured as follows:\\ +% \meta{package-name}\texttt{/}\meta{property-name}. +% \end{function} +% +% \begin{function} +% { +% \property_record:nN, +% \property_record:nn, \property_record:nV, \property_record:xx +% } +% \begin{syntax} +% \cs{property_record:nN} \Arg{label} \Arg{clist var} +% \cs{property_record:nn} \Arg{label} \Arg{clist} +% \end{syntax} +% \LaTeXe{}-interface: see \cs{RecordProperties}.\\ +% Writes the list of properties given by the \meta{clist} to the |.aux| +% file with the \meta{label} specified. +% \end{function} +% +% \begin{function}[EXP]{\property_ref:nn,\property_ref:ee} +% \begin{syntax} +% \cs{property_ref:nn} \Arg{label} \Arg{property} +% \end{syntax} +% \LaTeXe{}-interface: see \cs{RefProperty}.\\ +% Expands to the value of the \meta{property} for the \meta{label}, if +% available, and the default value of the property otherwise. +% If \meta{property} has not been declared with |\property_new:nnnn| +% an error is issued. The command raises an internal, expandable, local flag +% if the reference can not be resolved. +% \end{function} +% +% \begin{function}[EXP]{\property_ref:nnn,\property_ref:een} +% \begin{syntax} +% \cs{property_ref:nnn} \Arg{label} \Arg{property} \Arg{local default} +% \end{syntax} +% \LaTeXe{}-interface: see \cs{RefProperty}.\\ +% Expands to the value of the \meta{property} for the \meta{label}, if +% available, and to \meta{local default} otherwise. +% If \meta{property} has not been declared with |\property_new:nnnn| +% an error is issued. The command raises an internal, expandable local flag +% if the reference can not be resolved. +% \end{function} +% +% \begin{function}{\property_ref_undefined_warn:} +% \begin{syntax} +% \cs{property_ref_undefined_warn:} +% \end{syntax} +% \LaTeXe{}-interface: not provided.\\ +% The commands triggers the standard warning +% \\ +% \hspace*{1em}\texttt{LaTeX Warning: There were undefined references.} +% \\ +% at the end of the document if there was a recent +% \cs{property_ref:nn} or \cs{property_ref:nnn} which couldn't be resolved +% and so raised the flag. \enquote{Recent} means in the same group +% or in some outer group! +% \end{function} +% +% \begin{function}{\property_ref_undefined_warn:n,\property_ref_undefined_warn:x} +% \begin{syntax} +% \cs{property_ref_undefined_warn:n} \Arg{label} +% \end{syntax} +% \LaTeXe{}-interface: not provided.\\ +% The commands triggers the standard warning\\ +% \hspace*{1em}\texttt{LaTeX Warning: There were undefined references.} +% \\ +% at the end of the document if \meta{label} is not known. +% At the point where it is called it also issues the warning\\ +% \hspace*{1em}% +% \texttt{Reference~`\meta{label}'~on~page~\meta{page}\space undefined}. +% \end{function} +% +% \begin{function}{\property_ref_undefined_warn:nn,\property_ref_undefined_warn:xx} +% \begin{syntax} +% \cs{property_ref_undefined_warn:nn} \Arg{label} \Arg{property} +% \end{syntax} +% \LaTeXe{}-interface: see \cs{RefUndefinedWarn}.\\ +% The commands triggers the standard warning\\ +% \hspace*{1em}% +% \texttt{LaTeX Warning: There were undefined references.}\\ +% at the end of the document if the reference can not be resolved. +% At the point where it is called it also issues the warning\\ +% \hspace*{1em}% +% \texttt{Reference~`\meta{label}'~on~page~\meta{page}\space undefined}\\ +% if the label +% is unknown, or the more specific\\ +% \hspace*{1em}% +% \texttt{Property `\meta{property}' undefined for reference +% `\meta{label}' on page \meta{page}}\\ +% if the label is known but doesn't provide a value for the requested property. +% \end{function} +% +% \begin{function}[pTF]{\property_if_exist:n,\property_if_exist:e} +% \begin{syntax} +% \cs{property_if_exist_p:n} \Arg{property} +% \cs{property_if_exist:nTF} \Arg{property} \Arg{true code} \Arg{false code} +% \end{syntax} +% \LaTeXe{}-interface: \cs{IfPropertyExistTF}.\\ +% Tests if the \meta{property} has been declared. +% \end{function} +% +% \begin{function}[pTF]{\property_if_recorded:n,\property_if_recorded:e} +% \begin{syntax} +% \cs{property_if_recorded_p:n} \Arg{label} +% \cs{property_if_recorded:nTF} \Arg{label} \Arg{true code} \Arg{false code} +% \end{syntax} +% \LaTeXe{}-interface: \cs{IfLabelExistTF}\\ +% Tests if the \meta{label} is known. This is also true if the label has been +% set with the standard \cs{label} command. +% \end{function} +% +% \begin{function}[pTF]{\property_if_recorded:nn,\property_if_recorded:ee} +% \begin{syntax} +% \cs{property_if_recorded_p:nn} \Arg{label} \Arg{property} +% \cs{property_if_recorded:nnTF} \Arg{label} \Arg{property} \Arg{true code} \Arg{false code} +% \end{syntax} +% \LaTeXe{}-interface: \cs{IfPropertyRecordedTF}.\\ +% Tests if the label \meta{label} is known and if it provides a value of the \meta{property}. +% \end{function} +% +% \section{Auxiliary file interfaces} +% +% \begin{function}{\new@label@record} +% \begin{syntax} +% \cs{new@label@record} \Arg{label} \Arg{data} +% \end{syntax} +% This is a command only for use in the |.aux| file. It loads the key--value +% list of \meta{data} to be available for the \meta{label}. +% \end{function} +% +% \section{\LaTeXe{} interface} +% +% The LaTeXe{} interfaces always expand label and property arguments. +% +% \begin{function}{\NewProperty,\SetProperty} +% \begin{syntax} +% \cs{NewProperty} \Arg{property} \Arg{setpoint} \Arg{default} \Arg{code} +% \cs{SetProperty} \Arg{property} \Arg{setpoint} \Arg{default} \Arg{code} +% \end{syntax} +% Sets the \meta{property} to have the \meta{default} specified, and at the +% \meta{setpoint} (either |now| or |shipout|) to write the result of the +% \meta{code} as part of a label. The \meta{code} should be expandable. The expansion +% of \meta{code} (the value of the property) is written to the |.aux| file and read +% back from there at the next compilation (at which point normally +% the standard \LaTeX{} catcode régime with |@| a letter is active). +% +% \end{function} +% +% \begin{function}{\RecordProperties} +% \begin{syntax} +% \cs{RecordProperties} \Arg{label} \Arg{clist} +% \end{syntax} +% Writes the list of properties given by the \meta{clist} to the |.aux| +% file with the \meta{label} specified. Similar to the standard \cs{label} command +% the arguments are expanded. So \meta{clist} can be a macro containing a list +% of properties. Also similar to the standard \cs{label} command, the command is surrounded +% by an \cs{@bsphack}/\cs{@esphack} pair to preserve spacing. +% \end{function} + +% \begin{function}[EXP]{\RefProperty} +% \begin{syntax} +% \cs{RefProperty} \oarg{local default} \Arg{label} \Arg{property} +% \end{syntax} +% Expands to the value of the \meta{property} for the \meta{label}, if +% available, and the default value of the property or -- if given -- +% to \meta{local default} otherwise. +% If \Arg{property} has not been declared an error is issued. +% \end{function} +% +% \begin{function}{\IfPropertyExistTF} +% \begin{syntax} +% \cs{IfPropertyExistTF} \Arg{property} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests if the \meta{property} has been declared. +% \end{function} +% +% \begin{function}{\IfLabelExistTF} +% \begin{syntax} +% \cs{IfLabelExistTF} \Arg{label} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests if the \meta{label} has been recorded. This is also true if a label +% has been set with the standard \cs{label} command. +% \end{function} +% +% \begin{function}{\IfPropertyRecordedTF} +% \begin{syntax} +% \cs{IfPropertyRecordedTF} \Arg{label} \Arg{property} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests if the label and a value of the \meta{property} for the \meta{label} are both known. +% \end{function} + +% \begin{function}{\RefUndefinedWarn} +% \begin{syntax} +% \cs{RefUndefinedWarn} \Arg{label} \Arg{property} +% \end{syntax} +% This commands triggers the standard warning\\ +% \hspace*{1em}% +% \texttt{LaTeX Warning: There were undefined references.}\\ +% at the end of the document if the reference for \meta{label} and \meta{property} +% can not be resolved. +% At the point where it is called it also issues the warning\\ +% \hspace*{1em}% +% \texttt{Reference `\meta{label}' on page \meta{page} undefined}\\ +% if the label is unknown, or the more specific\\ +% \hspace*{1em}% +% \texttt{Property `\meta{property}' undefined for reference +% `\meta{label}' on page \meta{page}} +% if the label is known but doesn't provide a value for the requested property. +% \end{function} +% +% \section{Pre-declared properties} +% +% \begin{variable}{abspage} +% (shipout) The absolute value of the current page: starts at $1$ and increases +% monotonically at each shipout. +% \end{variable} +% +% \begin{variable}{page} +% (shipout) The current page as given by \cs{thepage}: this may or may not +% be a numerical value, depending on the current style. Contrast with +% \cs{abspage}. You get this value also with the standard \cs{label}/\cs{pageref}. +% \end{variable} +% +% \begin{variable}{pagenum} +% (shipout) The current page as arabic number. This is suitable for integer operations and +% comparisions. +% \end{variable} +% +% \begin{variable}{currentlabel} +% (now) The content of \cs{@currentlabel}. This is the value that +% you get also with the standard \cs{label}/\cs{ref}. +% \end{variable} +% +% \begin{variable}{title} +% (now) The content of \cs{@currentlabelname}. +% This command is filled beside others by the \pkg{nameref} package and some +% classes (e.g.~\pkg{memoir}). +% \end{variable} +% +% \begin{variable}{target} +% (now) The content of \cs{@currentHref}. +% This command is normally filled by for example by +% \pkg{hyperref} and gives the name of the last destination it created. +% \end{variable} +% +% \begin{variable}{counter} +% (now) The content of \cs{@currentcounter}. +% This command contains after a \cs{refstepcounter} the name of the counter. +% \end{variable} +% +% \begin{variable}{xpos,ypos} +% (shipout) This stores the $x$~and $y$ coordinates of a point previously +% stored with \cs{pdfsavepos}/\cs{savepos}. +% E.g.~(if bidi is used it can be necessary to save the position +% before and after the label): +% \begin{verbatim} +% \tex_savepos:D +% \property_record:nn{myposition}{xpos,ypos} +% \tex_savepos:D +% \end{verbatim} +% \end{variable} +% \end{documentation} +% +% \begin{implementation} +% +% \section{The Implementation} +% +% \begin{macrocode} +%<*2ekernel|latexrelease> +% \end{macrocode} +% \begin{macrocode} +\ExplSyntaxOn +% \end{macrocode} +% +% \begin{macrocode} +%<@@=property> +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\NewModuleRelease{2023/11/01}{ltproperties} +%<latexrelease> {Cross-referencing~properties} +% \end{macrocode} +% +% The approach here is based closely on that from \pkg{zref}; separate out +% lists of properties and the properties themselves, so the latter can be +% used multiple times and in varying combinations. +% However, not everything is a straight copy. Firstly, +% we treat lists of properties as simple comma lists: that allows us to have +% either saved or dynamic lists and to avoid another data structure. The cost +% is that errors are detected at point-of-use, but in any real case that should +% be true anyway (and is true for \tn{zref@labelbyprop} already). Secondly, +% we allow properties to have +% arbitrary names, as the code does not require them to tokenize as control +% sequences. +% +% \begin{macro}{\property_new:nnnn, \property_gset:nnnn, \@@_gset:nnnn} +% As properties can be reset, they are not constants. But they also have +% various pieces of required data. So we use the same approach as color and +% make them declarations. Data-wise, we need the detail of the implementation, +% the default and a flag to show if the code works now or at shipout. This +% last entry is done using text so needs a check. We could use a set of +% |prop| here, but as we never need to map or copy the lists, we can gain +% performance using the hash table approach. +% \begin{macrocode} +\cs_new_protected:Npn \property_new:nnnn #1#2#3#4 + { + \cs_if_free:cTF { @@_code_ #1 : } + { + \exp_args:Nx \@@_gset:nnnn { \tl_to_str:n {#1} } + {#2} {#3} {#4} + } + { + \msg_error:nn { property }{ exists }{#1} + } + } +\cs_new_protected:Npn \property_gset:nnnn #1#2#3#4 + { + \@@_gset:xnnn { \tl_to_str:n {#1} } + {#2} {#3} {#4} + } +\cs_new_protected:Npn \@@_gset:nnnn #1#2#3#4 + { + \cs_gset:cpn { @@_code_ #1 : } {#4} + \tl_gclear_new:c { g_@@_default_ #1 _tl } + \tl_gset:cn { g_@@_default_ #1 _tl } {#3} + \bool_if_exist:cF { g_@@_shipout_ #1 _tl } + { \bool_new:c { g_@@_shipout_ #1 _tl } } + \str_case:nnF {#2} + { + { now } { { \bool_gset_false:c { g_@@_shipout_ #1 _tl } } } + { shipout } + { \bool_gset_true:c { g_@@_shipout_ #1 _tl } } + } + { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} } + } +\cs_generate_variant:Nn \@@_gset:nnnn {xnnn} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NewProperty,\SetProperty} +% For consistency we expand the property name, but this doesn't warant a +% variant of the L3-commands. +% \begin{macrocode} +\cs_new_protected:Npn \NewProperty #1#2#3#4 + { + \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4} + } +\cs_new_protected:Npn \SetProperty #1#2#3#4 + { + \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\property_record:nN} +% \begin{macro} +% { +% \property_record:nn, +% \property_record:nV, +% \property_record:xx, +% \@@_record:nn, +% \@@_record:xn +% } +% \begin{macro}[EXP] +% {\@@_record_value:n, \@@_record_value_aux:n, \@@_record_value_aux:e} +% Writing data when it is labelled means expanding at this stage and possibly +% later too. That is all pretty easy using \pkg{expl3}: we accept a stray +% comma at the end of the list as that is easier to deal with than trying +% to tidy up, and there is no real downside. +% \begin{macrocode} +\cs_new_protected:Npn \property_record:nN #1#2 + { \property_record:nV {#1} #2 } +\cs_new_protected:Npn \property_record:nn #1#2 + { \@@_record:xn { \tl_to_str:n {#1} } {#2} } +\cs_generate_variant:Nn \property_record:nn { nV , xx } +\cs_new_protected:Npn \@@_record:nn #1#2 + { + \legacy_if:nT { @filesw } + { + \iow_shipout_x:Nx \@auxout + { + \token_to_str:N \new@label@record + {#1} + { \clist_map_function:nN {#2} \@@_record_value:n } + } + } + } +\cs_generate_variant:Nn \@@_record:nn { x } +\cs_new:Npn \@@_record_value:n #1 + { \@@_record_value_aux:e { \tl_to_str:n {#1} } } +\cs_new:Npn \@@_record_value_aux:n #1 + { + \cs_if_exist:cTF { @@_code_ #1 : } + { + {#1} + { + \bool_if:cTF { g_@@_shipout_ #1 _tl } + { \exp_not:c } + { \use:c } + { @@_code_ #1 : } + } + } + { \msg_expandable_error:nnn { property } { not-declared } {#1} } + } +\cs_generate_variant:Nn \@@_record_value_aux:n { e } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\RecordProperties} +% \begin{macrocode} +\NewDocumentCommand\RecordProperties { m m } + { + \@bsphack + \property_record:xx {#1}{#2} + \@esphack + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Reference commands} +% +% \begin{variable}{ l_@@_ref_flag } +% A flag that is set if a reference couldn't be resolved. +% \begin{macrocode} +\flag_new:n { l_@@_ref_flag } +% \end{macrocode} +% \end{variable} +% +% \begin{macro}[EXP]{\property_ref:nn,\property_ref:ee} +% Search for the label/property combination, and if not found fall back +% to the default of the property. +% \begin{macrocode} +\cs_new:Npn \property_ref:nn #1#2 + { + \@@_ref:een + { \tl_to_str:n {#1} } + { \tl_to_str:n {#2} } + { \tl_use:c { g_@@_default_ #2 _tl } } + } +\cs_generate_variant:Nn \property_ref:nn {ee} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[EXP]{\property_ref:nnn,\property_ref:een, \@@_ref:nnn, \@@_ref:een} +% This allows to set a local default value which overrides the default value +% of the property. +% \begin{macrocode} +\cs_new:Npn \property_ref:nnn #1#2#3 + { + \@@_ref:een + { \tl_to_str:n {#1} } + { \tl_to_str:n {#2} } + {#3} + } +\cs_new:Npn \@@_ref:nnn #1#2#3 + { + \tl_if_exist:cTF { g_@@_label_ #1 _ #2 _tl } + { \tl_use:c { g_@@_label_ #1 _ #2 _tl } } + { + \flag_if_raised:nF + { l_@@_ref_flag } { \flag_raise:n { l_@@_ref_flag } } +% \end{macrocode} +% We test for the default of the property only to check if the property has +% been declared. +% \begin{macrocode} + \tl_if_exist:cTF { g_@@_default_ #2 _tl } + { #3 } + { \msg_expandable_error:nnn { property } { not-declared } {#2} } + } + } +\cs_generate_variant:Nn \@@_ref:nnn { ee } +\cs_generate_variant:Nn \property_ref:nnn {een} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[EXP]{\RefProperty} +% Search for the label/property combination, and if not found fall back +% to the default of the property or the given default. +% \begin{macrocode} +\NewExpandableDocumentCommand \RefProperty { o m m } + { + \IfNoValueTF {#1} + { + \property_ref:ee {#2}{#3} + } + { + \property_ref:een {#2}{#3}{#1} + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\new@label@record} +% \begin{macro}{\@@_data:nnn} +% A standard recursion loop. +% \begin{macrocode} +\cs_new_protected:Npn \new@label@record #1#2 + { + \tl_if_exist:cTF { r@#1 } + { + \gdef \@multiplelabels + { \@latex@warning@no@line { There~were~multiply-defined~labels } } + \@latex@warning@no@line { Label~`#1'~multiply~defined } + } + { + \tl_new:c { r@#1 } + \tl_gset:cn { r@#1 }{#2} + } + \@@_data:nnn {#1} #2 { \q_recursion_tail } { ? } \q_recursion_stop + } +\cs_new_protected:Npn \@@_data:nnn #1#2#3 + { + \quark_if_recursion_tail_stop:n {#2} + \tl_gclear_new:c { g_@@_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } + \tl_gset:cn { g_@@_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } {#3} + \@@_data:nnn {#1} + } +% \end{macrocode} +% +% This command is used in \cs{enddocument} to test if some label values have changed. +% \begin{macrocode} +\cs_new_protected:Npn \@kernel@new@label@record@testdef #1 #2 + { + \tl_if_eq:cnF { r@#1 } {#2} + { \@tempswatrue } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Tests and warnings} +% +% \begin{macro}[pTF]{\property_if_exist:n} +% Tests if property has been declared. +% \begin{macrocode} +\prg_new_conditional:Npnn \property_if_exist:n #1 { p , T , F, TF } + % #1 property + { + \cs_if_exist:cTF { @@_code_ #1 : } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{IfPropertyExistTF} +% \begin{macrocode} +\cs_new_eq:NN \IfPropertyExistTF \property_if_exist:eTF +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[pTF]{\property_if_recorded:n} +% Tests if the label has been set. +% This can then be used to setup e.g.~rerun messages. +% \begin{macrocode} +\prg_new_conditional:Npnn \property_if_recorded:n #1 { p , T , F, TF } + % #1 label + { + \tl_if_exist:cTF { r@#1 } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\IfLabelExistTF} +% \begin{macrocode} +\cs_new_eq:NN \IfLabelExistTF \property_if_recorded:eTF +% \end{macrocode} +% \end{macro} +% +% \begin{macro}[pTF]{\property_if_recorded:nn} +% tests if the label/property combination has been set +% This can then be used to setup e.g.~rerun messages. +% \begin{macrocode} +\prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF } + % #1 label #2 property + { + \tl_if_exist:cTF { g_@@_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {TF} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\IfPropertyRecordedTF} +% \begin{macrocode} +\cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\property_ref_undefined_warn:} +% \cs{G@refundefinedtrue} is defined in \texttt{ltxref} and redefines a warning message. +% \begin{macrocode} +\cs_new_protected:Npn \property_ref_undefined_warn: + { + \flag_if_raised:nT { l_@@_ref_flag } + { + \G@refundefinedtrue + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\property_ref_undefined_warn:n} +% \begin{macrocode} +\cs_new_protected:Npn \property_ref_undefined_warn:n #1 %#1 label + { + \property_if_recorded:nF {#1} + { + \G@refundefinedtrue + \@latex@warning{Reference~`#1'~on~page~\thepage\space undefined}% + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\property_ref_undefined_warn:nn, +% \property_ref_undefined_warn:xx, +% \RefUndefinedWarn} +% \begin{macrocode} +\cs_new_protected:Npn \property_ref_undefined_warn:nn #1#2 %#1 label, #2 property + { + \property_if_recorded:nTF {#1} + { + \property_if_recorded:nnF {#1}{#2} + { + \G@refundefinedtrue + \@latex@warning + { Property~`#2'~undefined~for~reference~`#1'~on~page~\thepage } + } + } + { + \G@refundefinedtrue + \@latex@warning { Reference~`#1'~on~page~\thepage\space undefined }% + } + } +\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx} +\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx +% \end{macrocode} +% \end{macro} +% +% \subsection{Predeclared properties} +% +% \begin{variable}{abspage} +% \begin{macrocode} +\property_new:nnnn { abspage } { shipout } + { 0 } { \int_use:N \g_shipout_readonly_int } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{page} +% \begin{macrocode} +\property_new:nnnn { page } { shipout } { 0 } { \thepage } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{pagenum} +% \begin{macrocode} +\property_new:nnnn { pagenum } { shipout } { 0 } { \the \value { page } } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{currentlabel} +% \begin{macrocode} +\property_new:nnnn { currentlabel } { now } { ?? } { \@currentlabel } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{title} +% \begin{macrocode} +\property_new:nnnn { title } { now } + { \exp_not:n { \textbf { ?? } } } { \@currentlabelname } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{target} +% \begin{macrocode} +\property_new:nnnn { target } { now } { } { \@currentHref } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{counter} +% \begin{macrocode} +\property_new:nnnn { counter } { now } { } { \@currentcounter } +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{xpos,ypos} +% \begin{macrocode} +\property_new:nnnn { xpos } { shipout } { 0} { \int_use:N \tex_lastxpos:D } +\property_new:nnnn { ypos } { shipout } { 0} { \int_use:N \tex_lastypos:D } +% \end{macrocode} +% \end{variable} +% +% \subsection{Messages} +% \begin{macrocode} +\msg_new:nnnn { property } { exists } + { Property~'#1'~ has~ already~ been~ declared. } + { There~ already~ exists~ a~ property~ declaration~ with~ this~ + name.\\ + Please~ use~ a~ different~ name~ for~ your~ property.} + +\msg_new:nnnn { property } { not-declared } + { Property~'#1'~not~declared. } + { + LaTeX~has~been~asked~to~use~property~'#1',~but~this~ + name~has~not~been~declared. + } +\msg_new:nnnn { property } { unknown-setpoint } + { Unknown~keyword~'#2'~for~setting~property~'#1'. } + { + LaTeX~has~been~asked~to~set~the~property~'#1',~but~the~keyword~ + '#2'~is~not~one~of~the~two~known~values:~'now'~or~'shipout'. + } +% \end{macrocode} +% +% \begin{macrocode} +% +%<latexrelease>\IncludeInRelease{0000/00/00}{ltproperties} +%<latexrelease> {cross-referencing~properties~(undo)}% +%<latexrelease> +%<latexrelease>\let \NewProperty \@undefined +%<latexrelease>\let \SetProperty \@undefined +%<latexrelease> +%<latexrelease>\let \RecordProperties \@undefined +%<latexrelease>\let \RefProperty \@undefined +%<latexrelease>\let \RefUndefinedWarn \@undefined +%<latexrelease> +%<latexrelease>\let \IfPropertyExistTF \@undefined +%<latexrelease>\let \IfLabelExistTF \@undefined +%<latexrelease>\let \IfPropertyRecordedTF \@undefined +%<latexrelease> +%<latexrelease>\let\new@label@record \@undefined +%<latexrelease>\let\@kernel@new@label@record@testdef\@undefined +%<latexrelease>\EndModuleRelease +% \end{macrocode} +% +% \begin{macrocode} +\ExplSyntaxOff +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +% \end{macrocode} +% +% Reset module prefix: +% \begin{macrocode} +%<@@=> +% \end{macrocode} +% +% +% \end{implementation} +% +% \Finale diff --git a/Master/texmf-dist/source/latex-dev/base/ltsockets.dtx b/Master/texmf-dist/source/latex-dev/base/ltsockets.dtx new file mode 100644 index 00000000000..7d2940f454b --- /dev/null +++ b/Master/texmf-dist/source/latex-dev/base/ltsockets.dtx @@ -0,0 +1,1069 @@ +% \iffalse meta-comment +% +% Copyright (C) 2023 +% Frank Mittelbach, The LaTeX Project +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3c +% of this license or (at your option) any later version. +% The latest version of this license is in +% https://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2008 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +% +%%% From File: ltsockets.dtx +% +% \begin{macrocode} +\def\ltsocketsversion{0.9a} +\def\ltsocketsdate{2023-08-21} +% \end{macrocode} +% +%<*driver> +\documentclass{l3doc} + + +\providecommand\InternalDetectionOff{} +\providecommand\InternalDetectionOn{} + +\EnableCrossrefs +\CodelineIndex +\begin{document} + \DocInput{ltsockets.dtx} +\end{document} +%</driver> +% +% \fi +% +% +% +% +% \title{\LaTeX{}'s socket management\thanks{This module has version +% \ltsocketsversion\ dated \ltsocketsdate, \copyright\ \LaTeX\ +% Project.}} +% +% \author{Frank Mittelbach} +% +% \maketitle +% +% ^^A this needs some cleanup: +% \long\def\fmi#1{\begin{quote} TODO: \itshape #1\end{quote}} +% +% \providecommand\pkg[1]{\texttt{#1}} +% \providecommand\hook[1]{\texttt{#1}} +% \providecommand\env[1]{\texttt{#1}} +% \providecommand\plug[1]{\texttt{#1}} +% \providecommand\socket[1]{\texttt{#1}} +% +% +% \begin{abstract} +% This code implements sockets which are places in the code into +% which predeclared chunks of code (plugs) can be placed. Both the sockets +% and the plugs are \enquote{named} and each socket is +% assigned exactly one plug at any given time. +% \end{abstract} +% +% \tableofcontents +% +% \section{Introduction} +% +% A \LaTeX{} source file is transformed into a typeset document by +% executing code for each command or environment in the document +% source. Through various steps this code transforms the input and +% eventually generates typeset output appearing in a \enquote{galley} +% from which individual pages are cut off in an asyncronous way. This +% page generating process is normally not directly associated with +% commands in the input\footnote{Excepts for directives such as +% \cs{newpage}.} but is triggered whenever the galley has received +% enough material to form another page (giving current settings). +% +% As part of this transformation input data may get stored in some form +% and later reused, for example, as part of the output routine +% processing. +% +% \section{Configuration of the transformation process} +% +% There are three different major methods offered by \LaTeX{} to +% configure the transformation process: +% \begin{itemize} +% \item through the template mechanism, +% \item through the hook mechanism, or +% \item through sockets and plugs. +% \end{itemize} +% They offer different possibilities (with different features and +% limitations) and are intended for specific use cases, though it is +% possible to combine them. +% +% \subsection{The template mechanism} +% +% The template mechanism is intended for more complex document-level +% elements (e.g., headings such as \verb=\section= or environments like +% \env{itemize}). The template code implements the overall processing +% logic for such an element and offers a set of parameters to influence +% the final result. +% +% The document element is then implemented by (a) selecting a suitable +% template (there may be more than one available for the kind of +% document element) and (b) by setting its parameters to desired +% values. This then forms a so-called instance which is executed when +% the document element is found in the source. +% +% By altering the parameter values (in a document class or in the +% document preamble) or, if more drastic layout changes are desired, by +% selecting a different template and then adjusting its parameters, a +% wide variety of layouts can be realized through simple configuration +% setups without the need to develop new code. +% +% The target audience of this method are therefore document class +% developers or users who wish to alter an existing layout (implemented +% by a document class) in certain (minor) ways. +% +% The template mechanism is currently documented as part of the +% \pkg{xtemplate} package and one more elaborate implementation can be +% found as part of the \texttt{latex-lab} code for lists (to be +% documented further). +% +% \subsection{The hook mechanism} +% +% Hooks are places in the kernel code (or in packages) that offer +% packages the possibility to inject additional code at specific +% points in the processing in a controlled way without the need to +% replace the existing code block (and thereby overwriting +% modifications/extensions made by other packages). The target +% audience is therefore mainly package developers, even though some +% hooks can be useful for document authors. +% +% Obviously, what can reasonably be added into a hook depends on the +% individual hook (hopefully documented as part of the hook +% documentation), but in general the idea behind hooks is that more +% than one package could add code into the hook at the same +% time. Perhaps the most famous hook (that \LaTeX{} had for a very +% long time) is \hook{begindocument} into which many packages add code +% to through \cs{AtBeginDocument}\marg{code} (which is nowadays +% implemented as a shorthand for +% \cs{AddToHook}\texttt{\{\hook{begindocument}\}}\marg{code}). To +% resolve possible conflicts between injections by different packages +% there is a rule mechanism by which code chunks in a hook can be +% ordered in a certain way and by which incompatible packages can be +% detected if a resolution is impossible. +% +% In contrast to template code, there is no standard configuration +% method through parameters for hooks, i.e., the code added to a hook +% \enquote{is} the configuration. If it wants to provide for +% configuration through parameters it has to also provide its own +% method to set such parameters in some way. However, in that case it +% is likely that using a hook is not the right approach and the +% developer better calls a template instance instead which then offers +% configuration through a key/value interface. +% +% In most cases, hooks do not take any arguments as input. Instead, the data +% that they can (and are allowed to) access depends on the surrounding +% context. +% +% For example, the various hooks available during the page shipout +% process in \LaTeX's output routine can (and have to) access the +% accumulated page material stored in a box named +% \verb=\ShipoutBox=. This way, code added to, say, the +% \hook{shipout/before} hook could access the page content, alter it, +% and then write it back into \verb=\ShipoutBox= and any other code +% added to this hook could then operate on the modified content. Of +% course, for such a scheme to work the code prior to executing the hook +% would need to setup up data in appropriate places and the hook +% documentation would need to document what kind of storage can be +% accessed (and possibly altered) by the hook. +% +% There are also hooks that take arguments (typically portions of +% document data) and in that case the hook code can access these +% arguments through \verb=#1=, \verb=#2=, etc. +% +% The hook mechanism is documented in \texttt{lthooks-doc.pdf}. +% +% +% +% \subsection{The socket mechanism} +% +% In some cases there is code that implements a certain programming +% logic (for example, combining footnotes, floats, and the text for the +% current page to be shipped out) and if this logic should change (e.g., +% footnotes to be placed above bottom floats instead of below) then this +% whole code block needs to be replaced with different code. +% +% In theory, this could be implemented with templates, i.e., the code +% simply calls some instance that implements the logic and that instance +% is altered by selecting a different templates and/or adjusting their +% parameters. However, in many cases customization through parameters is +% overkill in such a case (or otherwise awkward, because paramerization +% is better done on a higher level instead of individually for small +% blocks of code) and using the template mechanism just to replace one +% block of code with a different one results in a fairly high +% performance hit. It is therefore usually not a good choice. +% +% In theory, it would also be possible to use a hook, but again that is +% basically a misuse of the concept, because in this use case there should +% never be more than one block of code inside the hook; thus, to alter +% the processing logic one would need to set up rules that replace code +% rather than (as intended) execute all code added to the hook. +% +% +% +% For this reason \LaTeX{} now offers a third mechanism: +% \enquote{sockets} into which one can place exactly one code block +% --- a \enquote{plug}. +% +% In a nutshell: instead of having a fixed code block somewhere as part +% of the code, implementing a certain programming logic there is a +% reference to a named socket at this point. +% This is done by first declaring the named socket with: +% \begin{quote} +% \cs{NewSocket}\marg{socket-name}\marg{number-of-inputs} +% \end{quote} +% This is then referenced at the point where the replaceable code block +% should be executed with: +% \begin{quote} +% \cs{UseSocket}\marg{socket-name} +% \end{quote} +% or, if the socket should take a number of inputs (additional +% arguments beside the name) with +% \begin{quote} +% \cs{UseSocket}\marg{socket-name}\marg{arg\textsubscript{1}}\ldots +% \marg{arg\textsubscript{\meta{number-of-inputs}}} +% \end{quote} +% +% In addition, several code blocks (a.k.a.\ plugs) implementing different logic for this +% socket are set up, each with a declaration of the form: +% \begin{quote} +% \cs{NewSocketPlug}\marg{socket-name}\marg{socket-plug-name}\marg{code} +% \end{quote} +% Finally, +% one of them is assigned to the socket: +% \begin{quote} +% \cs{AssignSocketPlug}\marg{socket-name}\marg{socket-plug-name} +% \end{quote} +% If the programming logic should change, then all that is necessary is +% to make a new assignment with \cs{AssignSocketPlug} to a different +% \marg{socket-plug-name}. This assignment obeys scope so that an +% environment can alter a socket without the need to restore the +% previous setting manually. +% +% If the socket takes inputs, then those need to be provided to +% \cs{UseSocket} and in that case they can be referenced in the \meta{code} +% argument of \cs{NewSocketPlug} with \verb=#1=, \verb=#2=, etc. +% +% In most cases a named socket is used only in a single place, but there +% is, of course, nothing wrong with using it in several places, as long +% as the code in all places is supposed to change in the same way. +% +% +% +% +% +% \subsubsection{Examples} +% +% +% We start by declaring a new socket named \socket{foo} that expects +% two inputs: +%\begin{verbatim} +% \NewSocket{foo}{2} +%\end{verbatim} +% \NewSocket{foo}{2} +% +% Such a declaration has do be unique across the whole \LaTeX{} +% run. Thus, if another package attempts to use the same name +% (regardless of the number of inputs) it will generate an error: +%\begin{verbatim} +% \NewSocket{foo}{2} +% \NewSocket{foo}{1} +% \end{verbatim} +% Both declarations would therefore produce: +% \begin{verbatim} +% ! LaTeX socket Error: Socket 'foo' already declared! +%\end{verbatim} +% +% You also get an error if you attempt to declare some socket plug and +% the socket name is not yet declared, e.g., +%\begin{verbatim} +% \NewSocketPlug{baz}{undeclared}{some code} +%\end{verbatim} +% generates +%\begin{verbatim} +% ! LaTeX socket Error: Socket 'baz' undeclared! +%\end{verbatim} +% +% +% Setting up plugs for the socket is done like this: +%\begin{verbatim} +% \NewSocketPlug{foo}{plug-A} +% {\begin{quote}\itshape foo-A: #1!#2\end{quote}} +% \NewSocketPlug{foo}{plug-B} +% {\begin{quote}\sffamily foo-B: #2\textsuperscript{2}\end{quote}} +%\end{verbatim} +% This will set up the plugs \texttt{plug-A} and \texttt{plug-B} for +% this socket. +% +%\NewSocketPlug{foo}{plug-A}{\begin{quote}\itshape foo-A: #1!#2\end{quote}} +%\NewSocketPlug{foo}{plug-B}{\begin{quote}\sffamily foo-B: #2\textsuperscript{2}\end{quote}} +% +% We still have to assign one or the other to the socket, thus without +% doing that the line +% \begin{verbatim} +% \UseSocket{foo}{hello}{world} +% \end{verbatim} +% produces nothing because the default plug for sockets with 2 inputs +% is \plug{noop} (which grabs the additional arguments and throws them +% away).\footnote{If socket \socket{foo} would have been a socket with one +% input, then the default plug would be \plug{identity}, in which case +% the socket input would remain without braces and gets typeset!} +% +% \UseSocket{foo}{hello}{world} ^^A nothing happens +% +% So let's do the assignment +% \begin{verbatim} +% \AssignSocketPlug{foo}{plug-A} +% \end{verbatim} +% and then +% \begin{verbatim} +% \UseSocket{foo}{hello}{world} +% \end{verbatim} +% will properly typeset +% \AssignSocketPlug{foo}{plug-A}\UseSocket{foo}{hello}{world} +% and after +% \begin{verbatim} +% \AssignSocketPlug{foo}{plug-B} +% \end{verbatim} +% and another call to +% \begin{verbatim} +% \UseSocket{foo}{hello}{world} +% \end{verbatim} +% we get +% \AssignSocketPlug{foo}{plug-B}\UseSocket{foo}{hello}{world} +% +% If we attempt to assign a plug that was not defined, e.g., +% \begin{verbatim} +% \AssignSocketPlug{foo}{plug-C} +% \end{verbatim} +% then we get an error during the assignment +% \begin{verbatim} +% ! LaTeX socket Error: Plug 'plug-C' for socket 'foo' undeclared! +% \end{verbatim} +% and the previous assignment remains in place. +% +% To see what is known about a socket and its plugs you can use +% \cs{ShowSocket} or \cs{LogSocket} which displays information similar +% to this on the terminal or in the transcript file: +% \begin{verbatim} +% Socket foo: +% number of inputs = 2 +% available plugs = noop, plug-A, plug-B +% current plug = plug-B +% definition = \protected\long macro:#1#2->\begin {quote}\sffamily +% foo-B: #2\textsuperscript {2}\end {quote} +% \end{verbatim} +% \LogSocket{foo} +% +% +% \subsubsection{Details and semantics} +% +% In this section we collect some normative statements. +% +% \begin{itemize} +% +% \item +% From a functional point of view sockets are like simple \TeX{} macros, +% i.e., they expect 0 to 9 mandatory arguments (the socket inputs) and get replaced by +% their \enquote{expansion} +% +% \item +% A socket is \enquote{named} and the name consists of ASCII letters +% \texttt{[a-z]}, +% \texttt{[A-Z]}, \texttt{[0-9]}, \texttt{[-/@]} only +% +% \item +% Socket names have to be unique, i.e., there can be only one socket +% named \meta{name}. This is ensured by declaring each socket with +% \cs{NewSocket}. +% +% However, there is no requirement that sockets and +% hook names have to be different. In fact, if a certain action that +% could overwise be specified as hook code has to be executed always +% last (or first) one could ensure this by placing a socket (single +% action) after a hook (or vice versa) and using the same name to +% indicate the relationship, e.g., +%\begin{verbatim} +% \UseHook{foo} % different package can add code here +% \UseSocket{foo} % only one package can assign a plug +%\end{verbatim} +% This avoids the need to order the hook code to ensure that +% something is always last. +% +% \item +% Best practice naming conventions are \ldots\ \emph{to be documented} +% +% \item +% A socket has documented inputs which are +% +% \begin{itemize} +% \item +% the positional arguments (if any) with a description of what +% they contain when used +% +% \item +% implicit data (registers and other 2e/expl3 data stores) that +% the socket is allowed to make use of, with a documented description +% of what they contain (if relevant for the task at hand---no need to +% describe the whole \LaTeX{} universe) +% +% \item +% information about the state of the \TeX{} engine (again when +% relevant), e.g. is called in mmode or vmode or in the output routine or \ldots +% +% \item +% \ldots\ \empty{anything missing?} +% \end{itemize} +% +% +% \item +% A socket has documented results/outputs which can be +% +% \begin{itemize} +% \item +% what kind of data it should write to the current list (if that +% is part of its task) +% +% \item +% what kind of registers and other 2e/expl3 data stores it should +% modify and in what way +% +% \item +% what kind of state changes it should do (if any) +% +% \item +% \emph{\ldots\ anything else?} +% \end{itemize} +% +% \item +% +% At any time a socket has one block of code (a plug \iffalse(\fi:-)\,) +% associated with it. Such code is itself named and the association +% is done by linking the socket name to the code name (putting a +% plug into the socket). +% +% \item +% +% The name of a plug consists of ASCII letters \texttt{[a-z]}, +% \texttt{[A-Z]}, \texttt{[0-9]}, \texttt{[-/@]} only. +% +% \item +% Socket plug names have to be unique within on a per socket basis, +% but it is perfectly allowed (and sensible in some cases) to use +% the same plug name with different sockets (where based on the +% sockets' purposes, different actions may be associated with the plug +% name). For example \plug{noop} is a plug name declared for every +% socket, yet it action \enquote{grab the socket inputs and throw +% them away} obviously differs depending on how many inputs the +% socket has. +% +% \item +% +% When declaring a plug it is stated for which socket it is meant +% (i.e., its code can only be used with that socket). This means +% that the same plug name can be used with different sockets +% referring to different code in each case. +% +% \item +% Configuration of a socket can only be done by +% linking different code to it. Nevertheless the code linked to it can +% provide its own means of configuration (but this is outside of the +% spec). +% +% \item +% Technically execution of a socket (\cs{UseSocket}) involves +% +% \begin{itemize} +% \item +% doing any house keeping (like writing debugging info, \ldots); +% +% \item +% looking up the current code association (what plug is in the socket); +% +% \item +% executing this code which will pick up the mandatory arguments +% (happens at this point, not +% before), i.e., it is like calling a csname defined with +% \begin{verbatim} +% \def\foo#1#2...{...#1...#2...} +% \end{verbatim} +% +% \item +% do some further house keeping (if needed). +% \end{itemize} +% +% \item +% A socket is typically only used in one place in code, but this is not +% a requirement, i.e., if the same operation with the same inputs need +% to be carried out in several places the same named socket can be used. +% +% \end{itemize} +% +% +% +% +% +% \subsubsection{Command syntax} +% +% We give both the \LaTeXe{} and the L3 programming layer command names. +% +% \begin{function}{\NewSocket,\socket_new:nn} +% \begin{syntax} +% \cs{NewSocket} \Arg{socket-name}\Arg{number-of-inputs} +% \cs{socket_new:nn}\Arg{socket-name}\Arg{number-of-inputs} +% \end{syntax} +% Declares a new socket with name \meta{socket-name} having +% \meta{number-of-inputs} inputs. There is automatically a +% plug \plug{noop} declared for it, which does nothing, i.e., it gobbles +% the socket inputs (if any). This is made the default plug except for +% sockets with one input which additionally define the plug +% \plug{identity} and assign that as their default. +% +% This \plug{identity} plug simply returns the socket input without +% its outer braces. +% The use case for this plug are situations like this: +% \begin{quote} +% \cs{UseSocket}\verb={tagsupport/footnote}=\Arg{code} +% \end{quote} +% If tagging is not active and the socket contains the plug \plug{identity} +% then this returns \meta{code} without the outer braces and to +% activate tagging all that is necessary is to change the plug to +% say \plug{tagpdf} so +% that it surrounds \meta{code} by some tagging magic. +% This is the most common use case for sockets with one input, which +% is why they have this special default. +% +% The socket documentation should describe its purpose, its inputs and the +% expected results as discussed above. +% +% The declaration is only allowed at top-level, i.e., not inside a group. +% \end{function} +% +% +% \begin{function}{\NewSocketPlug,\socket_new_plug:nnn,\socket_set_plug:nnn} +% \begin{syntax} +% \cs{NewSocketPlug} \Arg{socket-name}\Arg{socket-plug-name}\Arg{code} +% \cs{socket_new_plug:nnn}\Arg{socket-name}\Arg{socket-plug-name}\Arg{code} +% \cs{socket_set_plug:nnn}\Arg{socket-name}\Arg{socket-plug-name}\Arg{code} +% \end{syntax} +% Declares a new plug for socket \meta{socket-name} that runs +% \meta{code} when executing. It complains if the plug was already +% declared previously. +% +% The form \cs{socket_set_plug:nnn} changes an existing plug. As +% this should normally not be necessary, we currently have only an L3 +% layer name for the few cases it might be useful. +% +% The declarations can be made inside a group and obey scope, i.e., +% they vanish if the group ends. +% \end{function} +% +% +% \begin{function}{\AssignSocketPlug,\socket_assign_plug:nn} +% \begin{syntax} +% \cs{AssignSocketPlug} \Arg{socket-name}\Arg{socket-plug-name} +% \cs{socket_assign_plug:nn}\Arg{socket-name}\Arg{socket-plug-name} +% \end{syntax} +% Assigns the plug \meta{socket-plug-name} to the socket +% \meta{socket-name}. It errors if either socket or plug is not +% defined. +% +% The assignment is local, i.e., it obeys scope. +% \end{function} +% +% +% \begin{function}{\UseSocket,\socket_use:nw,\socket_use:n,\socket_use:nn,\socket_use:nnn,\socket_use:nnnn} +% \begin{syntax} +% \cs{UseSocket} \Arg{socket-name} +% \cs{socket_use:nnn}\Arg{socket-name} \Arg{socket-arg\textsubscript{1}} \Arg{socket-arg\textsubscript{2}} +% \end{syntax} +% Executes the socket \meta{socket-name} by retrieving the +% \meta{code} of the current plug assigned to the socket. This is +% the only command that would appear inside macro code in packages. +% +% For performance reasons there is no explicit check that the socket +% was declared! +% +% The different L3 programming layer commands are really doing the +% same thing: they grab as many arguments as defined as inputs for the socket +% and then pass them to the plug. The different names are only there +% to make the code more readable, i.e., to indicate how many +% arguments are grabbed in total (note that no runtime check is made to +% verify that this is actually true). We only provide them for +% sockets with up to 3 inputs (most likely those with zero or one input would +% have been sufficient). If you happen to have a socket with more +% inputs, use \cs{socket_use:nw}. +% \end{function} +% +% +% \begin{function}{\ShowSocket,\LogSocket,\socket_show:n,\socket_log:n} +% \begin{syntax} +% \cs{ShowSocket} \Arg{socket-name} +% \cs{socket_show:n}\Arg{socket-name} +% \end{syntax} +% Displays information about the socket \meta{socket-name} and its +% state then stops and waits for further instructions --- at the +% moment some what rudimentary. +% +% \cs{LogSocket} and \cs{socket_log:n} only differ in that they don't stop. +% \end{function} +% +% +% \begin{function}{\DebugSocketsOn,\DebugSocketsOff, +% \socket_debug_on:,\socket_debug_off:} +% \begin{syntax} +% \cs{DebugSocketsOn} \ldots\ \cs{DebugSocketsOff} +% \end{syntax} +% Turns debugging of sockets on or off. +% \end{function} +% +% \subsubsection{Rationale for error handling} +% +% The errors during the declarations are produced to help with +% typos---after all, such declarations might be part of a document +% preamble (not that likely, but possible). However, \cs{UseSocket} is +% not doing much checking, e.g., +% \begin{verbatim} +% \UseSocket{mispelled-socket}{hello}{world} +% \end{verbatim} +% will generate a rather low-level error and then typesets +% ``{hello}{world}'' because there is no dedicated runtime check if +% \texttt{mispelled-socket} is a known socket. +% +% The reason is that if the misspelling is in the code, then this is a +% programming error in the package and for speed reasons \LaTeX{} does +% not repeately make runtime checks for coding errors unless they can or +% are likely to be user introduced. +% +% +% \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex } +% +% +% \section{The Implementation} +% +% The implementation of the socket mechanism should be (partially) +% redone and we should probably store the different code chunks in +% a property list so that we can have a decent \cs{ShowSocket} +% command that shows the available alternatives.\fmi{implement?} +% +% \begin{macrocode} +%<*2ekernel|latexrelease> +% \end{macrocode} +% +% \begin{macrocode} +\ExplSyntaxOn +% \end{macrocode} +% +% \begin{macrocode} +%<@@=socket> +% \end{macrocode} +% +% \begin{macrocode} +%<latexrelease>\NewModuleRelease{2023/11/01}{ltsockets} +%<latexrelease> {The~socket~management~system} +% \end{macrocode} +% +% +% +% \subsection{Debugging the socket structures} +% +% Code and commands in this section are not final, it needs more +% experimentation to see what kind of tracing information is going to +% be useful in practice. For now the tracing is mainly meant to be used +% for code testing and not so much for application testing. +% +% It is quite likely that the +% commands and the behavior of the tracing might change in the +% future once we gained some experience with it. +% +% \begin{macro}{\g_@@_debug_bool} +% Holds the current debugging state. +% \begin{macrocode} +\bool_new:N \g_@@_debug_bool +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\socket_debug_on:,\socket_debug_off:} +% \begin{macro}{\@@_debug:n, \@@_debug_term:n} +% \begin{macro}{\@@_debug_gset:} +% Turns debugging on and off by redefining \cs{@@_debug:n} and +% \cs{@@_debug_term:n}. By default they do nothing. +% \begin{macrocode} +\cs_new_eq:NN \@@_debug:n \use_none:n +\cs_new_eq:NN \@@_debug_term:n \use_none:n +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Npn \socket_debug_on: + { + \bool_gset_true:N \g_@@_debug_bool + \@@_debug_gset: + } +\cs_new_protected:Npn \socket_debug_off: + { + \bool_gset_false:N \g_@@_debug_bool + \@@_debug_gset: + } +\cs_new_protected:Npn \@@_debug_gset: + { + \cs_gset_protected:Npx \@@_debug:n ##1 + { \bool_if:NT \g_@@_debug_bool {##1} } + \cs_gset_protected:Npx \@@_debug_term:n ##1 + { \bool_if:NT \g_@@_debug_bool + { \iow_term:x { ^^J [Sockets]~ ==>~ ##1} } } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{The L3 layer commands} +% +% \begin{macro}{\socket_new:nn} +% +% Declaring a socket creates a str to hold the name (a pointer) to the +% code that should be used when the socket is executed, and an integer to +% hold the number of inputs of that socket. Initially, an +% ``empty'' code chunk is created and assigned so the socket +% does nothing by default other than swallowing its inputs (if any). +% \begin{macrocode} +\cs_new_protected:Npn \socket_new:nn #1 #2 { + \str_if_exist:cTF { l_@@_#1_plug_str } + { + \msg_error:nnn { socket } { already-declared } {#1} + } + { +% \end{macrocode} +% We only support declarations on top-level. +% \begin{macrocode} + \int_if_zero:nTF \tex_currentgrouplevel:D + { + \str_new:c { l_@@_#1_plug_str } + \seq_new:c { l_@@_#1_plugs_seq } + \int_const:cn { c_@@_#1_args_int } {#2} + \socket_new_plug:nnn {#1} { noop } {} + \int_compare:nNnTF {#2} = 1 + { + \socket_new_plug:nnn {#1} { identity } {##1} + \socket_assign_plug:nn {#1} { identity } + } + { \socket_assign_plug:nn {#1} { noop } } + \@@_debug_term:n + { Socket~ '#1'~ declared~ with~ #2~ input(s) } + } + { + \msg_error:nn { socket } { not-top-level } + } + } +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\socket_log:n,\socket_show:n} +% Show the current state of the socket --- for now this is just a +% quick draft and should be redone and extended. +% \begin{macrocode} +\cs_new_protected:Npn \socket_log:n #1 { + \typeout{ Socket~ #1:} + \str_if_exist:cTF { l_@@_#1_plug_str } + { + \typeout{ \@spaces number~ of~ inputs~ =~ + \int_use:c { c_@@_#1_args_int } } + \typeout{ \@spaces available~plugs~ =~ + \seq_use:cnnn { l_@@_#1_plugs_seq }{,~}{,~}{,~} } + \typeout{ \@spaces current~ plug~ =~ + \str_use:c { l_@@_#1_plug_str } } + \typeout{ \@spaces definition~ =~ + \cs_meaning:c + { @@_#1_plug_ \str_use:c { l_@@_#1_plug_str } :w } } + \typeout{} + } + { +% \end{macrocode} +% If we are showing a socket it is not an error if it doesn't exist. +% \begin{macrocode} + \typeout { Socket~ is~ not~ declared! } + } +} +% \end{macrocode} +% And here the version that stops: +% \begin{macrocode} +\cs_new_protected:Npn \socket_show:n #1 {\socket_log:n {#1} \errmessage{}} +% \end{macrocode} +% \end{macro} +% +% +% +% +% +% \begin{macro}{\socket_new_plug:nnn,\socket_set_plug:nnn} +% +% Declaring a code for a socket is just making a definition, taking +% the number of arguments from the saved int. +% \begin{macrocode} +\cs_new_protected:Npn \socket_new_plug:nnn #1#2#3 { + \str_if_exist:cTF { l_@@_#1_plug_str } + { + \cs_if_exist:cTF { @@_#1_plug_#2:w } + { + \msg_error:nnnn { socket } { plug-already-declared } {#1} {#2} + } + { + \cs_generate_from_arg_count:cNnn + { @@_#1_plug_#2:w } + \cs_new_protected:Npn + { \int_use:c { c_@@_#1_args_int } } + {#3} +% \end{macrocode} +% This is a new declaration so we add the name to a seq for the +% debugging info. +% \begin{macrocode} + \seq_put_right:cn { l_@@_#1_plugs_seq } {#2} + \@@_debug_term:n + { Plug~ '#2'~ for~ socket~ '#1'~ declared. } + } + } + { + \msg_error:nnn { socket } { undeclared } {#1} + } +} +% \end{macrocode} +% Changing the plug of an existing socket is rather similar, except +% that we don't have to deal with adding it to the debugging +% sequence. +% \begin{macrocode} +\cs_new_protected:Npn \socket_set_plug:nnn #1#2#3 { + \str_if_exist:cTF { l_@@_#1_plug_str } + { + \cs_if_exist:cTF { @@_#1_plug_#2:w } + { + \cs_generate_from_arg_count:cNnn + { @@_#1_plug_#2:w } + \cs_set_protected:Npn + { \int_use:c { c_@@_#1_args_int } } + {#3} + \@@_debug_term:n + { Plug~ '#2'~ for~ socket~ '#1'~ changed. } + } + { + \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2} + } + } + { + \msg_error:nnn { socket } { undeclared } {#1} + } +} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\socket_assign_plug:nn} +% +% Assigning a plug to a socket just changes the name in +% the socket string. The assignment is local to the current group. +% \begin{macrocode} +\cs_new_protected:Npn \socket_assign_plug:nn #1 #2 { + \str_if_exist:cTF { l_@@_#1_plug_str } + { + \cs_if_exist:cTF { @@_#1_plug_#2:w } + { + \@@_debug_term:n + { Replacing~ plug~ '\str_use:c { l_@@_#1_plug_str }'~ + with~ '#2'~ in~ socket~ '#1'. } + \str_set:cn { l_@@_#1_plug_str } {#2} + } + { + \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2} + } + } + { \msg_error:nnn { socket } { undeclared } {#1} } +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\socket_use:nw,\socket_use:n,\socket_use:nn,\socket_use:nnn,\socket_use:nnnn} +% +% And using it is more or less a \cs{use:c} so very lightweight. We do not +% add a runtime check for speed reasons! +% +% This command is named +% \cs{socket_use:nw} because we don't know how many inputs the +% socket has until we have looked at the socket name (in argument \verb=#1=). +% But, of course, the developer knows so we also offer a few aliases +% \cs{socket_use:nn}, etc.\ so that one can indicate the correct number of +% arguments (socket inputs plus one) in the L3 layer code. +% +% \begin{macrocode} +\cs_new_protected:Npn \socket_use:nw #1 { + \@@_debug_term:n + { Socket~ '#1'~ containing~ plug~ + '\str_use:c { l_@@_#1_plug_str }'~ used. } + \use:c { @@_#1_plug_ \str_use:c { l_@@_#1_plug_str } :w } +} +% \end{macrocode} +% To make code a bit more readable we also define functions that +% indicate how many arguments are picked up. However, this is just for +% code documentation: internally they all do the same and the number +% of arguments isn't checked by default. +% \begin{macrocode} +\cs_new_eq:NN \socket_use:n \socket_use:nw % socket with no inputs +\cs_new_eq:NN \socket_use:nn \socket_use:nw % socket with one input +\cs_new_eq:NN \socket_use:nnn \socket_use:nw % socket with two inputs +\cs_new_eq:NN \socket_use:nnnn \socket_use:nw % socket with three inputs +% \end{macrocode} +% The above commands could be changed to check how many inputs +% the socket is declared with (for example, when checking is in +% force). +% \fmi{Implement?} +% \end{macro} +% +% +% +% +% +% +% +% \subsection{Error messages} +% + +% +% \begin{macrocode} +\msg_new:nnnn { socket } { already-declared } + { Socket~ '#1'~ already~ declared! } + { A~ socket~ can~ only~ be~ declared~ once.~ The~ name~ '#1'~ is~ + already~ taken.~ Use~ \ShowSocket{#1}~ to~ see~ its~ definition. } + +\msg_new:nnnn { socket } { undeclared } + { Socket~ '#1'~ undeclared! } + { You~ tried~ to~ use~ a~ socket~ that~ was~ not~ declared~ before. } + +\msg_new:nnnn { socket } { not-top-level } + { Sockets~ can~ only~ be~ declared~ at~ top-level! } + { It~ is~ not~ allowed~ to~ declare~ sockets~ inside~ a~ + group.~ Move~ the~ declaration~ to~ the~ top-level. } +% \end{macrocode} +% +% \begin{macrocode} +\msg_new:nnnn { socket } { plug-already-declared } + { Plug~ '#2'~ for~ socket~ '#1'~ already~ declared! } + { You~ can't~ change~ an~ existing~ plug~ with~ \NewSocketPlug~ and~ it~ + is~ normally~ not~ sensible~ to~ do~ so.~ Use~ the~ L3~ programming~ + layer~ function~ \socket_set_plug:nnn~ if~ you~ really~ have~ to. } + +\msg_new:nnnn { socket } { plug-undeclared } + { Plug~ '#2'~ for~ socket~ '#1'~ undeclared! } + { The~ plug~ name~ is~ unknown.~ Is~ the~ name~ misspelled~ or~ did~ you~ + intend~ to~ assign~ it~ to~ a~ different~ socket? } +% \end{macrocode} +% +% \begin{macrocode} +\prop_gput:Nnn \g_msg_module_type_prop { socket } { LaTeX } +% \end{macrocode} +% +% +% +% +% \subsection{The \LaTeXe{} interface commands} +% +% \begin{macro}{\NewSocket,\NewSocketPlug, +% \ShowSocket,\LogSocket, +% \AssignSocketPlug,\UseSocket, +% \DebugSocketsOn,\DebugSocketsOff} +% As we expect that there are existing \LaTeXe{} packages that may +% want to make use of the socket mechanism, we provide 2e names for +% most of the commands. +% \begin{macrocode} +\cs_new_eq:NN \NewSocket \socket_new:nn +\cs_new_eq:NN \ShowSocket \socket_show:n +\cs_new_eq:NN \LogSocket \socket_log:n +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_eq:NN \NewSocketPlug \socket_new_plug:nnn +\cs_new_eq:NN \AssignSocketPlug \socket_assign_plug:nn +\cs_new_eq:NN \UseSocket \socket_use:nw +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_eq:NN \DebugSocketsOn \socket_debug_on: +\cs_new_eq:NN \DebugSocketsOff \socket_debug_off: +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macrocode} +% +%<latexrelease>\IncludeInRelease{0000/00/00}{ltsockets} +%<latexrelease> {The~socket~management~(undo)}% +%<latexrelease> +%<latexrelease>\let \NewSocket \@undefined +%<latexrelease>\let \ShowSocket \@undefined +%<latexrelease>\let \LogSocket \@undefined +%<latexrelease> +%<latexrelease>\let \NewSocketPlug \@undefined +%<latexrelease>\let \AssignSocketPlug \@undefined +%<latexrelease>\let \UseSocket \@undefined +%<latexrelease> +%<latexrelease>\let \DebugSocketsOn \@undefined +%<latexrelease>\let \DebugSocketsOff \@undefined +%<latexrelease> +%<latexrelease>\EndModuleRelease +% \end{macrocode} +% +% \begin{macrocode} +\ExplSyntaxOff +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|latexrelease> +% \end{macrocode} +% +% Reset module prefix: +% \begin{macrocode} +%<@@=> +% \end{macrocode} +% +% +% \Finale +% +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput + + + +^^A Needed for emacs +^^A +^^A Local Variables: +^^A mode: latex +^^A coding: utf-8-unix +^^A End: + + + diff --git a/Master/texmf-dist/source/latex-dev/base/ltspace.dtx b/Master/texmf-dist/source/latex-dev/base/ltspace.dtx index a77314b1bd1..66841cae384 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltspace.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltspace.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltspace.dtx} - [2023/05/26 v1.3p LaTeX Kernel (spacing)] + [2023/06/14 v1.3q LaTeX Kernel (spacing)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltspace.dtx} @@ -1223,9 +1223,24 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\@xobeytab} +% \changes{v1.3q}{2023/06/14}{Macro added} +% Equivalent to the space case with the default settings. % \begin{macrocode} +%</2ekernel> +%<latexrelease>\IncludeInRelease{2023/11/01}% +%<latexrelease> {\@xobeytab}{Obeyed tabs}% +%<*2ekernel|latexrelease> +\let\@xobeytab\@xobeysp +%</2ekernel|latexrelease> +%<latexrelease>\EndIncludeInRelease +%<latexrelease>\IncludeInRelease{0000/00/00}% +%<latexrelease> {\@xobeytab}{Obeyed tabs}% +%<latexrelease>\let\@xobeytab\@undefined +%<latexrelease>\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} -% +% \end{macro} % % % \begin{macro}{\@} diff --git a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx index 5b124febd9e..5b78c3bc5ed 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx @@ -115,7 +115,7 @@ {2023-11-01} %</2ekernel|latexrelease> %<*2ekernel> -\def\patch@level{-0} +\def\patch@level{-1} % \end{macrocode} % % \begin{macro}{\development@branch@name} diff --git a/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins b/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins index cd5ea2006db..b3f30c30daa 100644 --- a/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins +++ b/Master/texmf-dist/source/latex-dev/firstaid/firstaid.ins @@ -3,7 +3,7 @@ %% driver files from the doc files in this package when run through %% LaTeX or TeX. %% -%% Copyright (C) 2020-2021 +%% Copyright (C) 2020-2023 %% The LaTeX Project and any individual authors listed elsewhere %% in this file. %% @@ -44,7 +44,7 @@ reports for it can be opened at https://latex-project.org/bugs/ (but please observe conditions on bug reports sent to that address!) -Copyright (C) 2020-2021 +Copyright (C) 2020-2023 The LaTeX Project and any individual authors listed elsewhere in this file. @@ -72,7 +72,4 @@ without such generated files. \generate{\file{filehook-ltx.sty} {\from{latex2e-first-aid-for-external-files.dtx}{filehook-ltx}}} -\generate{\file{everysel-ltx.sty} - {\from{latex2e-first-aid-for-external-files.dtx}{everysel-ltx}}} - \endbatchfile diff --git a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx index 90958ed7776..d1eeaf5ce2a 100644 --- a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx +++ b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx @@ -111,8 +111,8 @@ % \end{macrocode} % % \begin{macrocode} -\def\LaTeXFirstAidDate{2023/05/20} -\def\LaTeXFirstAidVersion{v1.0z} +\def\LaTeXFirstAidDate{2023/07/18} +\def\LaTeXFirstAidVersion{v1.1a} % \end{macrocode} % % \begin{macrocode} @@ -285,62 +285,10 @@ %</filehook-ltx> % \end{macrocode} % -% -% -% -% \subsection{The \pkg{bidi} package first aid} -% -% The \pkg{bidi} package adds a lot of hooks in various places and -% those added to \cs{document} and \cs{enddocument} are now no -% longer necessary as the kernel already provides the right hooks -% there. -% -% However, we aren't trying to change that but instead only make -% sure that the existing patches still work by adding some first -% aid after \pkg{biditools} has been loaded. -% -% If the package gets updated one can easily take that out simply -% through -%\begin{verbatim} -% \RemoveFromHook{file/biditools.sty/after}[firstaid] -%\end{verbatim} -% This makes it easy to test new bidi code while the first aid code -% is still in the kernel. -% % \begin{macrocode} %<*kernel> % \end{macrocode} % -% Bidi is now ar a new version: patches are no longer needed. -% \begin{macrocode} -%\AddToHook{file/biditools.sty/after}[firstaid]{% -% \FirstAidNeededT{biditools}{sty}% -% {2020/05/13 v2 Programming tools for bidi package}% -% {% -% \end{macrocode} -% \pkg{bidi} adds some code to the beginning of \cs{document} which -% contains \cs{endgroup} and \cs{begingroup} which is no longer -% correct. -% -% Patching \cs{document} using \cs{bidi@patchcmd} doesn't work so -% we take the extra groups out by hand: -% \begin{macrocode} -% \def\firstaid@bidi@document@patch -% \endgroup#1\begingroup#2\firstaid@bidi@document@patch -% {\unexpanded{#1#2}}% -% \edef\document{\expandafter\firstaid@bidi@document@patch\document -% \firstaid@bidi@document@patch}% -% \end{macrocode} -% There are also some patches into \cs{enddocument}, some continue -% to go in but one fails, so we add that now into the right place. -% \begin{macrocode} -% \AddToHook{enddocument/info}% -% {\let\bidi@AfterEndDocumentCheckLabelsRerun\@firstofone -% \bidi@afterenddocumentchecklabelsrerunhook}% -% }% -%} -% \end{macrocode} -% % \subsection{The \pkg{dinbrief} class first aid} % % Again a case of a no longer correct \cs{endgroup} in document. @@ -482,46 +430,6 @@ %</kernel> % \end{macrocode} % -% \subsection{The \pkg{everysel} package first aid} -% -% -% The \cs{selectfont} command got a hook (with the 2021/05 release) which -% was originally provided by the \pkg{everysel} -% package. Now that it is in the kernel this package is no longer -% needed (or only in a simplified manner). -% -% If it is requested we replace it with a simplified package -% (until) it gets updated at which point this line can be removed. -% \changes{v2.2k}{2020/12/04}{Emulate everysel package} -% \begin{macrocode} -%<*kernel> -% this has been updated -%\declare@file@substitution{everysel.sty}{everysel-ltx.sty} -%</kernel> -% \end{macrocode} -% -% -% -% \begin{macrocode} -%<*everysel-ltx> -\ProvidesPackage{everysel-ltx} - [2020/12/04 v1.0a - Emulation of the original everysel^^Jpackage with kernel methods] -% \end{macrocode} -% -% \begin{macrocode} -\newcommand*{\EverySelectfont}[1] - {\AddToHook{selectfont}{#1}} -\newcommand*{\AtNextSelectfont}[1] - {\AddToHookNext{selectfont}{#1}} -% \end{macrocode} -% -% -% \begin{macrocode} -%</everysel-ltx> -% \end{macrocode} -% -% % % \begin{macrocode} %<*kernel> @@ -652,31 +560,6 @@ } % \end{macrocode} % -% -% \subsection{First aid for \pkg{memoir}} -% -% The introduction of \cs{stockheight} and \cs{stockwidth} into the -% kernel requires some first aid. This has to go in \emph{before} -% loading the class, so we cannot check the version string here. -% \begin{macrocode} -\AddToHook{file/memoir.cls/before}[firstaid]{% - \expandafter\def\expandafter\@tempa\string\dimen{}% - \edef\kernel@stockheight{\expandafter\@tempa\meaning\stockheight}% - \edef\kernel@stockwidth{\expandafter\@tempa\meaning\stockwidth}% - \let\stockheight\@undefined - \let\stockwidth\@undefined -} -\AddToHook{file/memoir.cls/after}[firstaid]{% - \dimen\kernel@stockheight=\stockheight - \dimen\kernel@stockwidth=\stockwidth - \dimendef\stockheight=\kernel@stockheight - \dimendef\stockwidth=\kernel@stockwidth -} -% \end{macrocode} -% -% -% -% % \begin{macrocode} %</kernel> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3build/l3build.dtx b/Master/texmf-dist/source/latex/l3build/l3build.dtx index d8778fcce7c..b6787a1044f 100644 --- a/Master/texmf-dist/source/latex/l3build/l3build.dtx +++ b/Master/texmf-dist/source/latex/l3build/l3build.dtx @@ -88,7 +88,7 @@ \luavarset{demofiles} {\{\}}{Files which show how to use a module} \luavarset{docfiles} {\{\}}{Files which are part of the documentation but should not be typeset} \luavarset{dynamicfiles} {\{ \}}{Secondary files to cleared before each test is run} -\luavarset{excludefiles} {\{"*\string~"\}}{Files to ignore entirely (default for Emacs backup files)} +\luavarset{excludefiles} {\{"*\string~","build.lua","config-*.lua"\}}{Files to ignore entirely (default for Emacs backup files)} \luavarset{installfiles} {\{"*.sty","*.cls"\}}{Files to install to the \texttt{tex} area of the \texttt{texmf} tree} \luavarset{makeindexfiles} {\{"*.ist"\}}{MakeIndex files to be included in a TDS-style zip} \luavarset{scriptfiles} {\{ \}}{Files to install to the \texttt{scripts} area of the \texttt{texmf} tree} @@ -251,7 +251,7 @@ % }^^A % } % -% \date{Released 2023-09-07} +% \date{Released 2023-09-13} % % \maketitle % \tableofcontents @@ -433,11 +433,13 @@ % configurations are used and need adjustment to the standard engine, this does % need to be given explicitly using \var{stdengine}. % The format used for tests can be altered by setting \var{checkformat}: the default setting \texttt{latex} means that tests are run using \emph{e.g.}~\texttt{pdflatex}, whereas setting to \texttt{tex} will run tests using \emph{e.g.}~\texttt{pdftex}. -% (Currently, this should be one of \texttt{latex} or \texttt{tex}.) +% (Currently, this should be one of \texttt{latex}, \texttt{tex}, or +% \texttt{context}.) % To perform the check, the engine typesets each test up to \var{checkruns} times. % More detail on this in the documentation on |save|. -% Options passed to the binary are defined in the variable \var{checkopts}. -% These are applied in addition to any +% Options passed to the binary are those defined in the variable +% \var{checkopts}, followed by the engine-specific ones for the current +% \var{checkformat} (stored in table \var{specialformats}), if exist. % % By default, |texmf| trees are searched for input files when checking. This can be disabled by setting \var{checksearch} to |false|: isolation provides confidence that the tests cannot accidentally be running with incorrect files installed in the main distribution or |hometexmf|. % @@ -819,12 +821,13 @@ % For more complex set ups, \var{specialformats} should be used. This is a % table with one entry per \var{checkformat}. Each entry is itself a table, % and these contain a list of engines and settings for |binary|, |format| -% and |options|. For example, for Con\TeX{}t and appropriate set up is +% and |options|. For example, the set up for Con\TeX{}t in \pkg{l3build} 2023-07-17 is % \begin{verbatim} % specialformats.context = { -% luatex = {binary = "context", format = ""}, -% pdftex = {binary = "texexec", format = ""}, -% xetex = {binary = "texexec", format = "", options = "--xetex"} +% luametatex = {binary = "context", format = ""}, +% luatex = {binary = "context", format = "", options = "--luatex"}, +% pdftex = {binary = "texexec", format = ""}, +% xetex = {binary = "texexec", format = "", options = "--xetex"} % } % \end{verbatim} % Additional tokens can also be injected before the loading of a test file using diff --git a/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty b/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty index 2f63091fb5d..35b348e5456 100644 --- a/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty +++ b/Master/texmf-dist/tex/latex-dev/base/atveryend-ltx.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltfilehook.dtx \providecommand\ltfilehookversion{v1.0o} -\providecommand\ltfilehookdate{2023/04/02} +\providecommand\ltfilehookdate{2023/07/10} \ProvidesPackage{atveryend-ltx} [2020/08/19 v1.0a Emulation of the original atveryend package^^Jwith kernel methods] diff --git a/Master/texmf-dist/tex/latex-dev/base/latex.ltx b/Master/texmf-dist/tex/latex-dev/base/latex.ltx index f976b8d04f1..54b3e969575 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latex.ltx +++ b/Master/texmf-dist/tex/latex-dev/base/latex.ltx @@ -13,6 +13,7 @@ %% ltcmd.dtx (with options: `2ekernel') %% lthooks.dtx (with options: `2ekernel') %% ltcmdhooks.dtx (with options: `2ekernel') +%% ltsockets.dtx (with options: `2ekernel') %% ltalloc.dtx (with options: `2ekernel') %% ltcntrl.dtx (with options: `2ekernel') %% lterror.dtx (with options: `2ekernel') @@ -34,6 +35,7 @@ %% lttextcomp.dtx (with options: `2ekernel') %% ltpageno.dtx (with options: `2ekernel') %% ltxref.dtx (with options: `2ekernel') +%% ltproperties.dtx (with options: `2ekernel') %% ltmiscen.dtx (with options: `2ekernel') %% ltmath.dtx (with options: `2ekernel') %% ltlists.dtx (with options: `2ekernel') @@ -706,7 +708,7 @@ \def\fmtname{LaTeX2e} \edef\fmtversion {2023-11-01} -\def\patch@level{-0} +\def\patch@level{-1} \edef\development@branch@name{develop \the\year-\the\month-\the\day} \iffalse \def\reserved@a#1/#2/#3\@nil{% @@ -1803,8 +1805,8 @@ \xdef#1{\the\toks@}% \endgroup} %%% From File: ltcmd.dtx -\def\ltcmdversion{v1.1e} -\def\ltcmddate{2023-05-26} +\def\ltcmdversion{v1.2a} +\def\ltcmddate{2023-08-19} \message{document commands,} \ExplSyntaxOn \tl_new:N \l__cmd_arg_spec_tl @@ -4005,66 +4007,6 @@ \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi: } -\cs_new_protected:Npn \__cmd_get_arg_spec_error:N #1 - { - \bool_set_false:N \l__cmd_environment_bool - \tl_set:Nn \l__cmd_fn_tl {#1} - \__cmd_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 } - } -\cs_new_protected:Npn \__cmd_get_arg_spec_error:n #1 - { - \bool_set_true:N \l__cmd_environment_bool - \str_set:Nx \l__cmd_environment_str {#1} - \__cmd_get_arg_spec_error_aux:n - { \cs_if_exist:cTF { \l__cmd_environment_str } } - } -\cs_new_protected:Npn \__cmd_get_arg_spec_error_aux:n #1 - { - #1 - { - \msg_error:nnx { cmd } { non-xparse } - { \__cmd_environment_or_command: } - } - { - \msg_error:nnx { cmd } { unknown } - { \__cmd_environment_or_command: } - } - } -\cs_new_protected:Npn \__cmd_get_arg_spec:NTF #1#2#3 - { - \__kernel_cmd_if_xparse:NTF #1 - { - \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } - #2 - } - {#3} - } -\tl_new:N \ArgumentSpecification -\cs_new_protected:Npn \__cmd_get_arg_spec:N #1 - { - \__cmd_get_arg_spec:NTF #1 { } - { \__cmd_get_arg_spec_error:N #1 } - } -\cs_new_protected:Npn \__cmd_get_arg_spec:n #1 - { - \exp_args:Nc \__cmd_get_arg_spec:NTF - { environment~ \tl_to_str:n {#1} } - { } - { \__cmd_get_arg_spec_error:n {#1} } - } -\cs_new_protected:Npn \__cmd_show_arg_spec:N #1 - { - \__cmd_get_arg_spec:NTF #1 - { \tl_show:N \ArgumentSpecification } - { \__cmd_get_arg_spec_error:N #1 } - } -\cs_new_protected:Npn \__cmd_show_arg_spec:n #1 - { - \exp_args:Nc \__cmd_get_arg_spec:NTF - { environment~ \tl_to_str:n {#1} } - { \tl_show:N \ArgumentSpecification } - { \__cmd_get_arg_spec_error:n {#1} } - } \cs_new_protected:Npn \__cmd_check_definable:nNT #1 { \tl_trim_spaces_apply:nN {#1} \__cmd_check_definable_aux:nN } \group_begin: @@ -4396,12 +4338,6 @@ LaTeX~did~not~find~this~argument~and~will~insert~a~default~value~ for~further~processing. } -\msg_new:nnnn { cmd } { non-xparse } - { \str_uppercase:n #1~not~defined~using~xparse. } - { - You~have~asked~for~the~argument~specification~for~the~#1,~ - but~this~was~not~defined~using~xparse. - } \msg_new:nnnn { cmd } { arg-split } { Too~many~'#1'~separators~in~argument. } { @@ -4409,12 +4345,6 @@ at~each~occurrence~of~the~separator~'#1'~into~#2~parts.~ Too~many~separators~were~found. } -\msg_new:nnnn { cmd } { unknown } - { Unknown~document~#1. } - { - You~have~asked~for~the~argument~specification~for~the~#1,~ - but~it~is~not~defined. - } \msg_new:nnnn { cmd } { verbatim-nl } { Verbatim-like~#1~ended~by~end~of~line. } { @@ -4605,23 +4535,11 @@ \cs_new_eq:NN \SplitList \__cmd_split_list:nn \cs_new_eq:NN \TrimSpaces \__cmd_trim_spaces:n \cs_new_eq:NN \ProcessList \tl_map_function:nN -\cs_new_protected:Npn \GetDocumentCommandArgSpec #1 - { - \__cmd_check_definable:nNT {#1} \GetDocumentCommandArgSpec - { \__cmd_get_arg_spec:N #1 } - } -\cs_new_eq:NN \GetDocumentEnvironmentArgSpec \__cmd_get_arg_spec:n -\cs_new_protected:Npn \ShowDocumentCommandArgSpec #1 - { - \__cmd_check_definable:nNT {#1} \ShowDocumentCommandArgSpec - { \__cmd_show_arg_spec:N #1 } - } -\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \__cmd_show_arg_spec:n \ExplSyntaxOff %%% From File: lthooks.dtx -\def\lthooksversion{v1.1e} -\def\lthooksdate{2023/06/06} +\def\lthooksversion{v1.1f} +\def\lthooksdate{2023/08/11} \ExplSyntaxOn \bool_new:N \g__hook_debug_bool \cs_new_eq:NN \__hook_debug:n \use_none:n @@ -6391,8 +6309,8 @@ %% Copyright (C) 2020-2023 %% Frank Mittelbach, Phelype Oleinik, The LaTeX Project %%% From File: ltcmdhooks.dtx -\def\ltcmdhooksversion{v1.0h} -\def\ltcmdhooksdate{2023/05/21} +\def\ltcmdhooksversion{v1.0i} +\def\ltcmdhooksdate{2023/06/16} \ExplSyntaxOn \tl_new:N \g_hook_patch_action_list_tl \int_new:N \l__hook_patch_num_args_int @@ -6832,6 +6750,181 @@ } \ExplSyntaxOff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% From File: ltsockets.dtx +\def\ltsocketsversion{0.9a} +\def\ltsocketsdate{2023-08-21} +\ExplSyntaxOn +\bool_new:N \g__socket_debug_bool +\cs_new_eq:NN \__socket_debug:n \use_none:n +\cs_new_eq:NN \__socket_debug_term:n \use_none:n +\cs_new_protected:Npn \socket_debug_on: + { + \bool_gset_true:N \g__socket_debug_bool + \__socket_debug_gset: + } +\cs_new_protected:Npn \socket_debug_off: + { + \bool_gset_false:N \g__socket_debug_bool + \__socket_debug_gset: + } +\cs_new_protected:Npn \__socket_debug_gset: + { + \cs_gset_protected:Npx \__socket_debug:n ##1 + { \bool_if:NT \g__socket_debug_bool {##1} } + \cs_gset_protected:Npx \__socket_debug_term:n ##1 + { \bool_if:NT \g__socket_debug_bool + { \iow_term:x { ^^J [Sockets]~ ==>~ ##1} } } + } +\cs_new_protected:Npn \socket_new:nn #1 #2 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \msg_error:nnn { socket } { already-declared } {#1} + } + { + \int_if_zero:nTF \tex_currentgrouplevel:D + { + \str_new:c { l__socket_#1_plug_str } + \seq_new:c { l__socket_#1_plugs_seq } + \int_const:cn { c__socket_#1_args_int } {#2} + \socket_new_plug:nnn {#1} { noop } {} + \int_compare:nNnTF {#2} = 1 + { + \socket_new_plug:nnn {#1} { identity } {##1} + \socket_assign_plug:nn {#1} { identity } + } + { \socket_assign_plug:nn {#1} { noop } } + \__socket_debug_term:n + { Socket~ '#1'~ declared~ with~ #2~ input(s) } + } + { + \msg_error:nn { socket } { not-top-level } + } + } +} +\cs_new_protected:Npn \socket_log:n #1 { + \typeout{ Socket~ #1:} + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \typeout{ \@spaces number~ of~ inputs~ =~ + \int_use:c { c__socket_#1_args_int } } + \typeout{ \@spaces available~plugs~ =~ + \seq_use:cnnn { l__socket_#1_plugs_seq }{,~}{,~}{,~} } + \typeout{ \@spaces current~ plug~ =~ + \str_use:c { l__socket_#1_plug_str } } + \typeout{ \@spaces definition~ =~ + \cs_meaning:c + { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } } + \typeout{} + } + { + \typeout { Socket~ is~ not~ declared! } + } +} +\cs_new_protected:Npn \socket_show:n #1 {\socket_log:n {#1} \errmessage{}} +\cs_new_protected:Npn \socket_new_plug:nnn #1#2#3 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \cs_if_exist:cTF { __socket_#1_plug_#2:w } + { + \msg_error:nnnn { socket } { plug-already-declared } {#1} {#2} + } + { + \cs_generate_from_arg_count:cNnn + { __socket_#1_plug_#2:w } + \cs_new_protected:Npn + { \int_use:c { c__socket_#1_args_int } } + {#3} + \seq_put_right:cn { l__socket_#1_plugs_seq } {#2} + \__socket_debug_term:n + { Plug~ '#2'~ for~ socket~ '#1'~ declared. } + } + } + { + \msg_error:nnn { socket } { undeclared } {#1} + } +} +\cs_new_protected:Npn \socket_set_plug:nnn #1#2#3 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \cs_if_exist:cTF { __socket_#1_plug_#2:w } + { + \cs_generate_from_arg_count:cNnn + { __socket_#1_plug_#2:w } + \cs_set_protected:Npn + { \int_use:c { c__socket_#1_args_int } } + {#3} + \__socket_debug_term:n + { Plug~ '#2'~ for~ socket~ '#1'~ changed. } + } + { + \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2} + } + } + { + \msg_error:nnn { socket } { undeclared } {#1} + } +} +\cs_new_protected:Npn \socket_assign_plug:nn #1 #2 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \cs_if_exist:cTF { __socket_#1_plug_#2:w } + { + \__socket_debug_term:n + { Replacing~ plug~ '\str_use:c { l__socket_#1_plug_str }'~ + with~ '#2'~ in~ socket~ '#1'. } + \str_set:cn { l__socket_#1_plug_str } {#2} + } + { + \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2} + } + } + { \msg_error:nnn { socket } { undeclared } {#1} } +} +\cs_new_protected:Npn \socket_use:nw #1 { + \__socket_debug_term:n + { Socket~ '#1'~ containing~ plug~ + '\str_use:c { l__socket_#1_plug_str }'~ used. } + \use:c { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } +} +\cs_new_eq:NN \socket_use:n \socket_use:nw % socket with no inputs +\cs_new_eq:NN \socket_use:nn \socket_use:nw % socket with one input +\cs_new_eq:NN \socket_use:nnn \socket_use:nw % socket with two inputs +\cs_new_eq:NN \socket_use:nnnn \socket_use:nw % socket with three inputs + +\msg_new:nnnn { socket } { already-declared } + { Socket~ '#1'~ already~ declared! } + { A~ socket~ can~ only~ be~ declared~ once.~ The~ name~ '#1'~ is~ + already~ taken.~ Use~ \ShowSocket{#1}~ to~ see~ its~ definition. } + +\msg_new:nnnn { socket } { undeclared } + { Socket~ '#1'~ undeclared! } + { You~ tried~ to~ use~ a~ socket~ that~ was~ not~ declared~ before. } + +\msg_new:nnnn { socket } { not-top-level } + { Sockets~ can~ only~ be~ declared~ at~ top-level! } + { It~ is~ not~ allowed~ to~ declare~ sockets~ inside~ a~ + group.~ Move~ the~ declaration~ to~ the~ top-level. } +\msg_new:nnnn { socket } { plug-already-declared } + { Plug~ '#2'~ for~ socket~ '#1'~ already~ declared! } + { You~ can't~ change~ an~ existing~ plug~ with~ \NewSocketPlug~ and~ it~ + is~ normally~ not~ sensible~ to~ do~ so.~ Use~ the~ L3~ programming~ + layer~ function~ \socket_set_plug:nnn~ if~ you~ really~ have~ to. } + +\msg_new:nnnn { socket } { plug-undeclared } + { Plug~ '#2'~ for~ socket~ '#1'~ undeclared! } + { The~ plug~ name~ is~ unknown.~ Is~ the~ name~ misspelled~ or~ did~ you~ + intend~ to~ assign~ it~ to~ a~ different~ socket? } +\prop_gput:Nnn \g_msg_module_type_prop { socket } { LaTeX } +\cs_new_eq:NN \NewSocket \socket_new:nn +\cs_new_eq:NN \ShowSocket \socket_show:n +\cs_new_eq:NN \LogSocket \socket_log:n +\cs_new_eq:NN \NewSocketPlug \socket_new_plug:nnn +\cs_new_eq:NN \AssignSocketPlug \socket_assign_plug:nn +\cs_new_eq:NN \UseSocket \socket_use:nw +\cs_new_eq:NN \DebugSocketsOn \socket_debug_on: +\cs_new_eq:NN \DebugSocketsOff \socket_debug_off: +\ExplSyntaxOff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltalloc.dtx \chardef\@xxxii=32 \mathchardef\@Mi=10001 @@ -7520,6 +7613,7 @@ Type H <return> for immediate help.}% \catcode `\~=13 \def~{\nobreakspace{}} \expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname +\let\@xobeytab\@xobeysp \def\@{\spacefactor\@m{}}% \DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} \newskip\sp@ce@skip @@ -7786,7 +7880,16 @@ Type H <return> for immediate help.}% \expandafter{\reserved@a{#2}{#3}}% \reserved@a} \ExplSyntaxOn -\cs_new_eq:NN \IfFileExists@@ \file_full_name:n +\cs_new:Npn \IfFileExists@@ #1 + { + \tl_if_blank:nF {#1} + { + \tl_if_head_eq_charcode:oNTF { \use:n #1 } | + {#1} + { \file_full_name:n {#1} } + } + } +\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNTF { o } \ExplSyntaxOff \long\def\@iffileonpath#1{% \let\reserved@a\@secondoftwo @@ -11840,6 +11943,262 @@ Type H <return> for immediate help.}% \NewDocumentCommand\Ref{s} {\IfBooleanTF{#1}{\@kernel@sRef}{\@kernel@Ref}} \def\@currentlabel{} +%% File: ltproperties.dtx +\def\ltpropertiesversion{1.0b} +\def\ltpropertiesdate{2023-09-13} + + + +\ExplSyntaxOn +\cs_new_protected:Npn \property_new:nnnn #1#2#3#4 + { + \cs_if_free:cTF { __property_code_ #1 : } + { + \exp_args:Nx \__property_gset:nnnn { \tl_to_str:n {#1} } + {#2} {#3} {#4} + } + { + \msg_error:nn { property }{ exists }{#1} + } + } +\cs_new_protected:Npn \property_gset:nnnn #1#2#3#4 + { + \__property_gset:xnnn { \tl_to_str:n {#1} } + {#2} {#3} {#4} + } +\cs_new_protected:Npn \__property_gset:nnnn #1#2#3#4 + { + \cs_gset:cpn { __property_code_ #1 : } {#4} + \tl_gclear_new:c { g__property_default_ #1 _tl } + \tl_gset:cn { g__property_default_ #1 _tl } {#3} + \bool_if_exist:cF { g__property_shipout_ #1 _tl } + { \bool_new:c { g__property_shipout_ #1 _tl } } + \str_case:nnF {#2} + { + { now } { { \bool_gset_false:c { g__property_shipout_ #1 _tl } } } + { shipout } + { \bool_gset_true:c { g__property_shipout_ #1 _tl } } + } + { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} } + } +\cs_generate_variant:Nn \__property_gset:nnnn {xnnn} +\cs_new_protected:Npn \NewProperty #1#2#3#4 + { + \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4} + } +\cs_new_protected:Npn \SetProperty #1#2#3#4 + { + \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4} + } +\cs_new_protected:Npn \property_record:nN #1#2 + { \property_record:nV {#1} #2 } +\cs_new_protected:Npn \property_record:nn #1#2 + { \__property_record:xn { \tl_to_str:n {#1} } {#2} } +\cs_generate_variant:Nn \property_record:nn { nV , xx } +\cs_new_protected:Npn \__property_record:nn #1#2 + { + \legacy_if:nT { @filesw } + { + \iow_shipout_x:Nx \@auxout + { + \token_to_str:N \new@label@record + {#1} + { \clist_map_function:nN {#2} \__property_record_value:n } + } + } + } +\cs_generate_variant:Nn \__property_record:nn { x } +\cs_new:Npn \__property_record_value:n #1 + { \__property_record_value_aux:e { \tl_to_str:n {#1} } } +\cs_new:Npn \__property_record_value_aux:n #1 + { + \cs_if_exist:cTF { __property_code_ #1 : } + { + {#1} + { + \bool_if:cTF { g__property_shipout_ #1 _tl } + { \exp_not:c } + { \use:c } + { __property_code_ #1 : } + } + } + { \msg_expandable_error:nnn { property } { not-declared } {#1} } + } +\cs_generate_variant:Nn \__property_record_value_aux:n { e } +\NewDocumentCommand\RecordProperties { m m } + { + \@bsphack + \property_record:xx {#1}{#2} + \@esphack + } +\flag_new:n { l__property_ref_flag } +\cs_new:Npn \property_ref:nn #1#2 + { + \__property_ref:een + { \tl_to_str:n {#1} } + { \tl_to_str:n {#2} } + { \tl_use:c { g__property_default_ #2 _tl } } + } +\cs_generate_variant:Nn \property_ref:nn {ee} +\cs_new:Npn \property_ref:nnn #1#2#3 + { + \__property_ref:een + { \tl_to_str:n {#1} } + { \tl_to_str:n {#2} } + {#3} + } +\cs_new:Npn \__property_ref:nnn #1#2#3 + { + \tl_if_exist:cTF { g__property_label_ #1 _ #2 _tl } + { \tl_use:c { g__property_label_ #1 _ #2 _tl } } + { + \flag_if_raised:nF + { l__property_ref_flag } { \flag_raise:n { l__property_ref_flag } } + \tl_if_exist:cTF { g__property_default_ #2 _tl } + { #3 } + { \msg_expandable_error:nnn { property } { not-declared } {#2} } + } + } +\cs_generate_variant:Nn \__property_ref:nnn { ee } +\cs_generate_variant:Nn \property_ref:nnn {een} +\NewExpandableDocumentCommand \RefProperty { o m m } + { + \IfNoValueTF {#1} + { + \property_ref:ee {#2}{#3} + } + { + \property_ref:een {#2}{#3}{#1} + } + } +\cs_new_protected:Npn \new@label@record #1#2 + { + \tl_if_exist:cTF { r@#1 } + { + \gdef \@multiplelabels + { \@latex@warning@no@line { There~were~multiply-defined~labels } } + \@latex@warning@no@line { Label~`#1'~multiply~defined } + } + { + \tl_new:c { r@#1 } + \tl_gset:cn { r@#1 }{#2} + } + \__property_data:nnn {#1} #2 { \q_recursion_tail } { ? } \q_recursion_stop + } +\cs_new_protected:Npn \__property_data:nnn #1#2#3 + { + \quark_if_recursion_tail_stop:n {#2} + \tl_gclear_new:c { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } + \tl_gset:cn { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } {#3} + \__property_data:nnn {#1} + } +\cs_new_protected:Npn \@kernel@new@label@record@testdef #1 #2 + { + \tl_if_eq:cnF { r@#1 } {#2} + { \@tempswatrue } + } +\prg_new_conditional:Npnn \property_if_exist:n #1 { p , T , F, TF } + % #1 property + { + \cs_if_exist:cTF { __property_code_ #1 : } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF} +\cs_new_eq:NN \IfPropertyExistTF \property_if_exist:eTF +\prg_new_conditional:Npnn \property_if_recorded:n #1 { p , T , F, TF } + % #1 label + { + \tl_if_exist:cTF { r@#1 } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF} +\cs_new_eq:NN \IfLabelExistTF \property_if_recorded:eTF +\prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF } + % #1 label #2 property + { + \tl_if_exist:cTF { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {TF} +\cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +\cs_new_protected:Npn \property_ref_undefined_warn: + { + \flag_if_raised:nT { l__property_ref_flag } + { + \G@refundefinedtrue + } + } +\cs_new_protected:Npn \property_ref_undefined_warn:n #1 %#1 label + { + \property_if_recorded:nF {#1} + { + \G@refundefinedtrue + \@latex@warning{Reference~`#1'~on~page~\thepage\space undefined}% + } + } +\cs_new_protected:Npn \property_ref_undefined_warn:nn #1#2 %#1 label, #2 property + { + \property_if_recorded:nTF {#1} + { + \property_if_recorded:nnF {#1}{#2} + { + \G@refundefinedtrue + \@latex@warning + { Property~`#2'~undefined~for~reference~`#1'~on~page~\thepage } + } + } + { + \G@refundefinedtrue + \@latex@warning { Reference~`#1'~on~page~\thepage\space undefined }% + } + } +\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx} +\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx +\property_new:nnnn { abspage } { shipout } + { 0 } { \int_use:N \g_shipout_readonly_int } +\property_new:nnnn { page } { shipout } { 0 } { \thepage } +\property_new:nnnn { pagenum } { shipout } { 0 } { \the \value { page } } +\property_new:nnnn { currentlabel } { now } { ?? } { \@currentlabel } +\property_new:nnnn { title } { now } + { \exp_not:n { \textbf { ?? } } } { \@currentlabelname } +\property_new:nnnn { target } { now } { } { \@currentHref } +\property_new:nnnn { counter } { now } { } { \@currentcounter } +\property_new:nnnn { xpos } { shipout } { 0} { \int_use:N \tex_lastxpos:D } +\property_new:nnnn { ypos } { shipout } { 0} { \int_use:N \tex_lastypos:D } +\msg_new:nnnn { property } { exists } + { Property~'#1'~ has~ already~ been~ declared. } + { There~ already~ exists~ a~ property~ declaration~ with~ this~ + name.\\ + Please~ use~ a~ different~ name~ for~ your~ property.} + +\msg_new:nnnn { property } { not-declared } + { Property~'#1'~not~declared. } + { + LaTeX~has~been~asked~to~use~property~'#1',~but~this~ + name~has~not~been~declared. + } +\msg_new:nnnn { property } { unknown-setpoint } + { Unknown~keyword~'#2'~for~setting~property~'#1'. } + { + LaTeX~has~been~asked~to~set~the~property~'#1',~but~the~keyword~ + '#2'~is~not~one~of~the~two~known~values:~'now'~or~'shipout'. + } +\ExplSyntaxOff %%% From File: ltmiscen.dtx \message{environments,} \def\@currenvir{document} @@ -11860,6 +12219,7 @@ Type H <return> for immediate help.}% \immediate\closeout\@mainaux \let\@setckpt\@gobbletwo \let\@newl@bel\@testdef + \let\new@label@record\@kernel@new@label@record@testdef \@tempswafalse \makeatletter \@@input\jobname.aux \fi @@ -11910,7 +12270,6 @@ Type H <return> for immediate help.}% \def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname \reserved@a \else \@tempswatrue \fi} \protected\def\protected@file@percent{} - \catcode`\^^A=9 \long\gdef\add@percent@to@temptokena #1\protected@file@percent#2\add@percent@to@temptokena @@ -12019,7 +12378,11 @@ Type H <return> for immediate help.}% \def\endflushright{\endtrivlist} \message{verbatim,} {\catcode`\ =\active% -\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}} +\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp\@vobeytabs}} +{\catcode`\^^I=\active +\gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}% +\global\let^^I=\space +} \begingroup \catcode `|=0 \catcode `[= 1 \catcode`]=2 \catcode `\{=12 \catcode `\}=12 \catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]] @@ -12053,7 +12416,11 @@ Type H <return> for immediate help.}% \DeclareRobustCommand\verbvisiblespace {\leavevmode{\usefont{OT1}{cmtt}{m}{n}\asciispace}} % xetex/luatex version \fi - +\newbox\@verbvisiblespacebox +\@namedef{verbatim*}{\@verbatim + \@setupverbvisiblespace + \frenchspacing\@vobeyspaces\@sxverbatim} +\expandafter\let\csname endverbatim*\endcsname =\endverbatim \def\@setupverbvisiblespace{% \ifx\verbvisiblespace\asciispace \let\@xobeysp\asciispace @@ -12062,13 +12429,9 @@ Type H <return> for immediate help.}% \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% \fi + \@setupverbvisibletab } - -\newbox\@verbvisiblespacebox -\@namedef{verbatim*}{\@verbatim - \@setupverbvisiblespace - \frenchspacing\@vobeyspaces\@sxverbatim} -\expandafter\let\csname endverbatim*\endcsname =\endverbatim +\def\@setupverbvisibletab{\let\@xobeytab\@xobeysp} \def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi} \def\@@sverb#1{% \catcode`#1\active @@ -12077,7 +12440,10 @@ Type H <return> for immediate help.}% \@latex@error{\noexpand\verb illegal in argument}\@ehc}% \aftergroup\verb@balance@group \lowercase{\let~\verb@egroup}% - \ifnum\catcode`\ =\active + \ifnum0% + \ifnum\catcode`\ =\active\else 1\fi + \ifnum\catcode`\^^I=\active\else 1\fi + =0 % \else \@setupverbvisiblespace \@vobeyspaces \fi } \def\@makeother#1{\catcode`#112\relax} @@ -15864,7 +16230,7 @@ Type H <return> for immediate help.}% \ExplSyntaxOff %%% From File: ltfilehook.dtx \providecommand\ltfilehookversion{v1.0o} -\providecommand\ltfilehookdate{2023/04/02} +\providecommand\ltfilehookdate{2023/07/10} \ExplSyntaxOn \tl_new:N \CurrentFile \tl_new:N \CurrentFilePath @@ -16002,7 +16368,6 @@ Type H <return> for immediate help.}% \cs_new_eq:NN \declare@file@substitution \__filehook_subst_add:nn \cs_new_eq:NN \undeclare@file@substitution \__filehook_subst_remove:n \ExplSyntaxOff -\ExplSyntaxOff \def\set@curr@file{% \begingroup \set@curr@file@aux} diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty index 9ada4b71c40..c8776b66f93 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty +++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty @@ -15,6 +15,7 @@ %% ltcmd.dtx (with options: `latexrelease') %% lthooks.dtx (with options: `latexrelease') %% ltcmdhooks.dtx (with options: `latexrelease') +%% ltsockets.dtx (with options: `latexrelease') %% ltalloc.dtx (with options: `latexrelease') %% ltcntrl.dtx (with options: `latexrelease') %% lterror.dtx (with options: `latexrelease') @@ -37,6 +38,7 @@ %% lttextcomp.dtx (with options: `latexrelease') %% ltpageno.dtx (with options: `latexrelease') %% ltxref.dtx (with options: `latexrelease') +%% ltproperties.dtx (with options: `latexrelease') %% ltmiscen.dtx (with options: `latexrelease') %% ltmath.dtx (with options: `latexrelease') %% ltlists.dtx (with options: `latexrelease') @@ -1986,8 +1988,8 @@ of this package available from CTAN} \EndIncludeInRelease %%% From File: ltcmd.dtx -\def\ltcmdversion{v1.1e} -\def\ltcmddate{2023-05-26} +\def\ltcmdversion{v1.2a} +\def\ltcmddate{2023-08-19} \edef\@latexrelease@catcode@null{\the\catcode`\^^@ } \catcode`\^^@=12 \ExplSyntaxOn @@ -4248,68 +4250,6 @@ of this package available from CTAN} \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN { \if_false: } \fi: } -\cs_new_protected:Npn \__cmd_get_arg_spec_error:N #1 - { - \bool_set_false:N \l__cmd_environment_bool - \tl_set:Nn \l__cmd_fn_tl {#1} - \__cmd_get_arg_spec_error_aux:n { \cs_if_exist:NTF #1 } - } -\cs_new_protected:Npn \__cmd_get_arg_spec_error:n #1 - { - \bool_set_true:N \l__cmd_environment_bool - \str_set:Nx \l__cmd_environment_str {#1} - \__cmd_get_arg_spec_error_aux:n - { \cs_if_exist:cTF { \l__cmd_environment_str } } - } -\cs_new_protected:Npn \__cmd_get_arg_spec_error_aux:n #1 - { - #1 - { - \msg_error:nnx { cmd } { non-xparse } - { \__cmd_environment_or_command: } - } - { - \msg_error:nnx { cmd } { unknown } - { \__cmd_environment_or_command: } - } - } -\cs_new_protected:Npn \__cmd_get_arg_spec:NTF #1#2#3 - { - \__kernel_cmd_if_xparse:NTF #1 - { - \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } - #2 - } - {#3} - } -\cs_new_eq:NN \__cmd_chk_if_free_cs:N \__kernel_chk_if_free_cs:N -\cs_gset_eq:NN \__kernel_chk_if_free_cs:N \use_none:n -\tl_new:N \ArgumentSpecification -\cs_new_protected:Npn \__cmd_get_arg_spec:N #1 - { - \__cmd_get_arg_spec:NTF #1 { } - { \__cmd_get_arg_spec_error:N #1 } - } -\cs_new_protected:Npn \__cmd_get_arg_spec:n #1 - { - \exp_args:Nc \__cmd_get_arg_spec:NTF - { environment~ \tl_to_str:n {#1} } - { } - { \__cmd_get_arg_spec_error:n {#1} } - } -\cs_new_protected:Npn \__cmd_show_arg_spec:N #1 - { - \__cmd_get_arg_spec:NTF #1 - { \tl_show:N \ArgumentSpecification } - { \__cmd_get_arg_spec_error:N #1 } - } -\cs_new_protected:Npn \__cmd_show_arg_spec:n #1 - { - \exp_args:Nc \__cmd_get_arg_spec:NTF - { environment~ \tl_to_str:n {#1} } - { \tl_show:N \ArgumentSpecification } - { \__cmd_get_arg_spec_error:n {#1} } - } \cs_new_protected:Npn \__cmd_check_definable:nNT #1 { \tl_trim_spaces_apply:nN {#1} \__cmd_check_definable_aux:nN } \group_begin: @@ -4641,12 +4581,6 @@ of this package available from CTAN} LaTeX~did~not~find~this~argument~and~will~insert~a~default~value~ for~further~processing. } -\msg_new:nnnn { cmd } { non-xparse } - { \str_uppercase:n #1~not~defined~using~xparse. } - { - You~have~asked~for~the~argument~specification~for~the~#1,~ - but~this~was~not~defined~using~xparse. - } \msg_new:nnnn { cmd } { arg-split } { Too~many~'#1'~separators~in~argument. } { @@ -4654,12 +4588,6 @@ of this package available from CTAN} at~each~occurrence~of~the~separator~'#1'~into~#2~parts.~ Too~many~separators~were~found. } -\msg_new:nnnn { cmd } { unknown } - { Unknown~document~#1. } - { - You~have~asked~for~the~argument~specification~for~the~#1,~ - but~it~is~not~defined. - } \msg_new:nnnn { cmd } { verbatim-nl } { Verbatim-like~#1~ended~by~end~of~line. } { @@ -4860,18 +4788,6 @@ of this package available from CTAN} \cs_new_eq:NN \SplitList \__cmd_split_list:nn \cs_new_eq:NN \TrimSpaces \__cmd_trim_spaces:n \cs_new_eq:NN \ProcessList \tl_map_function:nN -\cs_new_protected:Npn \GetDocumentCommandArgSpec #1 - { - \__cmd_check_definable:nNT {#1} \GetDocumentCommandArgSpec - { \__cmd_get_arg_spec:N #1 } - } -\cs_new_eq:NN \GetDocumentEnvironmentArgSpec \__cmd_get_arg_spec:n -\cs_new_protected:Npn \ShowDocumentCommandArgSpec #1 - { - \__cmd_check_definable:nNT {#1} \ShowDocumentCommandArgSpec - { \__cmd_show_arg_spec:N #1 } - } -\cs_new_eq:NN \ShowDocumentEnvironmentArgSpec \__cmd_show_arg_spec:n \cs_gset_eq:NN \__kernel_chk_if_free_cs:N \__cmd_chk_if_free_cs:N \cs_undefine:N \__cmd_chk_if_free_cs:N @@ -4884,8 +4800,8 @@ of this package available from CTAN} \catcode`\^^@=\@latexrelease@catcode@null\relax %%% From File: lthooks.dtx -\def\lthooksversion{v1.1e} -\def\lthooksdate{2023/06/06} +\def\lthooksversion{v1.1f} +\def\lthooksdate{2023/08/11} \ExplSyntaxOn \NewModuleRelease{2020/10/01}{lthooks} {The~hook~management~system} @@ -5367,7 +5283,7 @@ of this package available from CTAN} } { \tl_gset:Nn \g__hook_hook_curr_name_tl {#1} } } -\IncludeInRelease{2023/06/01}{\hook_gput_code_with_args:nnn} +\IncludeInRelease{2023/06/01}{\hook_gput_code:nnn} {Hooks~with~args} \cs_new_protected:Npn \hook_gput_code:nnn #1 #2 #3 { @@ -5844,7 +5760,7 @@ of this package available from CTAN} } } \EndIncludeInRelease -\IncludeInRelease{2023/06/01}{\hook_gremove_code:nn} +\IncludeInRelease{2020/10/01}{\hook_gremove_code:nn} {Hooks~with~args} \cs_new_protected:Npn \__hook_gremove_code:nn #1 #2 { @@ -6302,6 +6218,8 @@ of this package available from CTAN} \cs_gset_eq:NN \hook_use:n \__hook_use_initialized:n \cs_gset_eq:NN \__hook_preamble_hook:n \use_none:n } +\cs_gset_eq:NN \@expl@@@initialize@all@@ + \__hook_initialize_all: \EndIncludeInRelease \IncludeInRelease{2023/06/01}{\__hook_initialize_hook_code:n} {Hooks~with~args} @@ -7511,7 +7429,7 @@ of this package available from CTAN} \NewDocumentCommand \NewMirroredHookPairWithArguments { mmm } { \hook_new_pair_with_args:nnn {#1} {#2} {#3} } \EndIncludeInRelease -\IncludeInRelease{2023/06/01}{\NewHookWithArguments} +\IncludeInRelease{2020/10/01}{\NewHookWithArguments} {Hooks~with~args} \cs_new_protected:Npn \NewHookWithArguments #1 #2 { } \cs_new_protected:Npn \NewReversedHookWithArguments #1 #2 { } @@ -7736,8 +7654,8 @@ of this package available from CTAN} %% Copyright (C) 2020-2023 %% Frank Mittelbach, Phelype Oleinik, The LaTeX Project %%% From File: ltcmdhooks.dtx -\def\ltcmdhooksversion{v1.0h} -\def\ltcmdhooksdate{2023/05/21} +\def\ltcmdhooksversion{v1.0i} +\def\ltcmdhooksdate{2023/06/16} \ExplSyntaxOn \NewModuleRelease{2021/06/01}{ltcmdhooks} {The~hook~management~system~for~commands} @@ -8305,10 +8223,10 @@ of this package available from CTAN} \cs_gset_eq:NN #1 \kerneltmpDoNotUse } \EndIncludeInRelease -\IncludeInRelease{2021/11/15}{wrong-cmd-hook}% +\IncludeInRelease{2023/06/01}{wrong-cmd-hook}% {Standardise~generic~hook~names} \EndIncludeInRelease -\IncludeInRelease{2021/11/15}{wrong-cmd-hook}% +\IncludeInRelease{2021/06/01}{wrong-cmd-hook}% {Standardise~generic~hook~names} \msg_new:nnnn { hooks } { wrong-cmd-hook } { @@ -8346,6 +8264,198 @@ of this package available from CTAN} \EndModuleRelease \ExplSyntaxOff %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% From File: ltsockets.dtx +\def\ltsocketsversion{0.9a} +\def\ltsocketsdate{2023-08-21} +\ExplSyntaxOn +\NewModuleRelease{2023/11/01}{ltsockets} + {The~socket~management~system} +\bool_new:N \g__socket_debug_bool +\cs_new_eq:NN \__socket_debug:n \use_none:n +\cs_new_eq:NN \__socket_debug_term:n \use_none:n +\cs_new_protected:Npn \socket_debug_on: + { + \bool_gset_true:N \g__socket_debug_bool + \__socket_debug_gset: + } +\cs_new_protected:Npn \socket_debug_off: + { + \bool_gset_false:N \g__socket_debug_bool + \__socket_debug_gset: + } +\cs_new_protected:Npn \__socket_debug_gset: + { + \cs_gset_protected:Npx \__socket_debug:n ##1 + { \bool_if:NT \g__socket_debug_bool {##1} } + \cs_gset_protected:Npx \__socket_debug_term:n ##1 + { \bool_if:NT \g__socket_debug_bool + { \iow_term:x { ^^J [Sockets]~ ==>~ ##1} } } + } +\cs_new_protected:Npn \socket_new:nn #1 #2 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \msg_error:nnn { socket } { already-declared } {#1} + } + { + \int_if_zero:nTF \tex_currentgrouplevel:D + { + \str_new:c { l__socket_#1_plug_str } + \seq_new:c { l__socket_#1_plugs_seq } + \int_const:cn { c__socket_#1_args_int } {#2} + \socket_new_plug:nnn {#1} { noop } {} + \int_compare:nNnTF {#2} = 1 + { + \socket_new_plug:nnn {#1} { identity } {##1} + \socket_assign_plug:nn {#1} { identity } + } + { \socket_assign_plug:nn {#1} { noop } } + \__socket_debug_term:n + { Socket~ '#1'~ declared~ with~ #2~ input(s) } + } + { + \msg_error:nn { socket } { not-top-level } + } + } +} +\cs_new_protected:Npn \socket_log:n #1 { + \typeout{ Socket~ #1:} + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \typeout{ \@spaces number~ of~ inputs~ =~ + \int_use:c { c__socket_#1_args_int } } + \typeout{ \@spaces available~plugs~ =~ + \seq_use:cnnn { l__socket_#1_plugs_seq }{,~}{,~}{,~} } + \typeout{ \@spaces current~ plug~ =~ + \str_use:c { l__socket_#1_plug_str } } + \typeout{ \@spaces definition~ =~ + \cs_meaning:c + { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } } + \typeout{} + } + { + \typeout { Socket~ is~ not~ declared! } + } +} +\cs_new_protected:Npn \socket_show:n #1 {\socket_log:n {#1} \errmessage{}} +\cs_new_protected:Npn \socket_new_plug:nnn #1#2#3 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \cs_if_exist:cTF { __socket_#1_plug_#2:w } + { + \msg_error:nnnn { socket } { plug-already-declared } {#1} {#2} + } + { + \cs_generate_from_arg_count:cNnn + { __socket_#1_plug_#2:w } + \cs_new_protected:Npn + { \int_use:c { c__socket_#1_args_int } } + {#3} + \seq_put_right:cn { l__socket_#1_plugs_seq } {#2} + \__socket_debug_term:n + { Plug~ '#2'~ for~ socket~ '#1'~ declared. } + } + } + { + \msg_error:nnn { socket } { undeclared } {#1} + } +} +\cs_new_protected:Npn \socket_set_plug:nnn #1#2#3 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \cs_if_exist:cTF { __socket_#1_plug_#2:w } + { + \cs_generate_from_arg_count:cNnn + { __socket_#1_plug_#2:w } + \cs_set_protected:Npn + { \int_use:c { c__socket_#1_args_int } } + {#3} + \__socket_debug_term:n + { Plug~ '#2'~ for~ socket~ '#1'~ changed. } + } + { + \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2} + } + } + { + \msg_error:nnn { socket } { undeclared } {#1} + } +} +\cs_new_protected:Npn \socket_assign_plug:nn #1 #2 { + \str_if_exist:cTF { l__socket_#1_plug_str } + { + \cs_if_exist:cTF { __socket_#1_plug_#2:w } + { + \__socket_debug_term:n + { Replacing~ plug~ '\str_use:c { l__socket_#1_plug_str }'~ + with~ '#2'~ in~ socket~ '#1'. } + \str_set:cn { l__socket_#1_plug_str } {#2} + } + { + \msg_error:nnnn { socket } { plug-undeclared } {#1} {#2} + } + } + { \msg_error:nnn { socket } { undeclared } {#1} } +} +\cs_new_protected:Npn \socket_use:nw #1 { + \__socket_debug_term:n + { Socket~ '#1'~ containing~ plug~ + '\str_use:c { l__socket_#1_plug_str }'~ used. } + \use:c { __socket_#1_plug_ \str_use:c { l__socket_#1_plug_str } :w } +} +\cs_new_eq:NN \socket_use:n \socket_use:nw % socket with no inputs +\cs_new_eq:NN \socket_use:nn \socket_use:nw % socket with one input +\cs_new_eq:NN \socket_use:nnn \socket_use:nw % socket with two inputs +\cs_new_eq:NN \socket_use:nnnn \socket_use:nw % socket with three inputs + +\msg_new:nnnn { socket } { already-declared } + { Socket~ '#1'~ already~ declared! } + { A~ socket~ can~ only~ be~ declared~ once.~ The~ name~ '#1'~ is~ + already~ taken.~ Use~ \ShowSocket{#1}~ to~ see~ its~ definition. } + +\msg_new:nnnn { socket } { undeclared } + { Socket~ '#1'~ undeclared! } + { You~ tried~ to~ use~ a~ socket~ that~ was~ not~ declared~ before. } + +\msg_new:nnnn { socket } { not-top-level } + { Sockets~ can~ only~ be~ declared~ at~ top-level! } + { It~ is~ not~ allowed~ to~ declare~ sockets~ inside~ a~ + group.~ Move~ the~ declaration~ to~ the~ top-level. } +\msg_new:nnnn { socket } { plug-already-declared } + { Plug~ '#2'~ for~ socket~ '#1'~ already~ declared! } + { You~ can't~ change~ an~ existing~ plug~ with~ \NewSocketPlug~ and~ it~ + is~ normally~ not~ sensible~ to~ do~ so.~ Use~ the~ L3~ programming~ + layer~ function~ \socket_set_plug:nnn~ if~ you~ really~ have~ to. } + +\msg_new:nnnn { socket } { plug-undeclared } + { Plug~ '#2'~ for~ socket~ '#1'~ undeclared! } + { The~ plug~ name~ is~ unknown.~ Is~ the~ name~ misspelled~ or~ did~ you~ + intend~ to~ assign~ it~ to~ a~ different~ socket? } +\prop_gput:Nnn \g_msg_module_type_prop { socket } { LaTeX } +\cs_new_eq:NN \NewSocket \socket_new:nn +\cs_new_eq:NN \ShowSocket \socket_show:n +\cs_new_eq:NN \LogSocket \socket_log:n +\cs_new_eq:NN \NewSocketPlug \socket_new_plug:nnn +\cs_new_eq:NN \AssignSocketPlug \socket_assign_plug:nn +\cs_new_eq:NN \UseSocket \socket_use:nw +\cs_new_eq:NN \DebugSocketsOn \socket_debug_on: +\cs_new_eq:NN \DebugSocketsOff \socket_debug_off: +\IncludeInRelease{0000/00/00}{ltsockets} + {The~socket~management~(undo)}% + +\let \NewSocket \@undefined +\let \ShowSocket \@undefined +\let \LogSocket \@undefined + +\let \NewSocketPlug \@undefined +\let \AssignSocketPlug \@undefined +\let \UseSocket \@undefined + +\let \DebugSocketsOn \@undefined +\let \DebugSocketsOff \@undefined + +\EndModuleRelease +\ExplSyntaxOff +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% From File: ltalloc.dtx %%% From File: ltcntrl.dtx %%% From File: lterror.dtx @@ -8920,6 +9030,14 @@ of this package available from CTAN} \@esphack \fi} \EndIncludeInRelease +\IncludeInRelease{2023/11/01}% + {\@xobeytab}{Obeyed tabs}% +\let\@xobeytab\@xobeysp +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@xobeytab}{Obeyed tabs}% +\let\@xobeytab\@undefined +\EndIncludeInRelease \IncludeInRelease{2015/01/01}% {\@}{Space after \@}% \def\@{\spacefactor\@m{}}% @@ -9371,7 +9489,7 @@ of this package available from CTAN} \reserved@a} \EndIncludeInRelease -\IncludeInRelease{2023/05/01}% +\IncludeInRelease{2023/06/01}% {\IfFileExists@}{IfFileExists} \long\def \IfFileExists@#1#2#3{% \edef\@filef@und{\IfFileExists@@{#1}}% @@ -9390,7 +9508,16 @@ of this package available from CTAN} \expandafter{\reserved@a{#2}{#3}}% \reserved@a} \ExplSyntaxOn -\cs_new_eq:NN \IfFileExists@@ \file_full_name:n +\cs_new:Npn \IfFileExists@@ #1 + { + \tl_if_blank:nF {#1} + { + \tl_if_head_eq_charcode:oNTF { \use:n #1 } | + {#1} + { \file_full_name:n {#1} } + } + } +\cs_generate_variant:Nn \tl_if_head_eq_charcode:nNTF { o } \ExplSyntaxOff \EndIncludeInRelease \IncludeInRelease{2021/06/01}% @@ -13111,7 +13238,344 @@ of this package available from CTAN} \let\Ref\@undefined \EndIncludeInRelease +%% File: ltproperties.dtx +\def\ltpropertiesversion{1.0b} +\def\ltpropertiesdate{2023-09-13} + + + +\ExplSyntaxOn +\NewModuleRelease{2023/11/01}{ltproperties} + {Cross-referencing~properties} +\cs_new_protected:Npn \property_new:nnnn #1#2#3#4 + { + \cs_if_free:cTF { __property_code_ #1 : } + { + \exp_args:Nx \__property_gset:nnnn { \tl_to_str:n {#1} } + {#2} {#3} {#4} + } + { + \msg_error:nn { property }{ exists }{#1} + } + } +\cs_new_protected:Npn \property_gset:nnnn #1#2#3#4 + { + \__property_gset:xnnn { \tl_to_str:n {#1} } + {#2} {#3} {#4} + } +\cs_new_protected:Npn \__property_gset:nnnn #1#2#3#4 + { + \cs_gset:cpn { __property_code_ #1 : } {#4} + \tl_gclear_new:c { g__property_default_ #1 _tl } + \tl_gset:cn { g__property_default_ #1 _tl } {#3} + \bool_if_exist:cF { g__property_shipout_ #1 _tl } + { \bool_new:c { g__property_shipout_ #1 _tl } } + \str_case:nnF {#2} + { + { now } { { \bool_gset_false:c { g__property_shipout_ #1 _tl } } } + { shipout } + { \bool_gset_true:c { g__property_shipout_ #1 _tl } } + } + { \msg_error:nnnn { property } { unknown-setpoint } {#1} {#2} } + } +\cs_generate_variant:Nn \__property_gset:nnnn {xnnn} +\cs_new_protected:Npn \NewProperty #1#2#3#4 + { + \exp_args:Nx \property_new:nnnn {#1}{#2}{#3}{#4} + } +\cs_new_protected:Npn \SetProperty #1#2#3#4 + { + \exp_args:Nx \property_gset:nnnn {#1}{#2}{#3}{#4} + } +\cs_new_protected:Npn \property_record:nN #1#2 + { \property_record:nV {#1} #2 } +\cs_new_protected:Npn \property_record:nn #1#2 + { \__property_record:xn { \tl_to_str:n {#1} } {#2} } +\cs_generate_variant:Nn \property_record:nn { nV , xx } +\cs_new_protected:Npn \__property_record:nn #1#2 + { + \legacy_if:nT { @filesw } + { + \iow_shipout_x:Nx \@auxout + { + \token_to_str:N \new@label@record + {#1} + { \clist_map_function:nN {#2} \__property_record_value:n } + } + } + } +\cs_generate_variant:Nn \__property_record:nn { x } +\cs_new:Npn \__property_record_value:n #1 + { \__property_record_value_aux:e { \tl_to_str:n {#1} } } +\cs_new:Npn \__property_record_value_aux:n #1 + { + \cs_if_exist:cTF { __property_code_ #1 : } + { + {#1} + { + \bool_if:cTF { g__property_shipout_ #1 _tl } + { \exp_not:c } + { \use:c } + { __property_code_ #1 : } + } + } + { \msg_expandable_error:nnn { property } { not-declared } {#1} } + } +\cs_generate_variant:Nn \__property_record_value_aux:n { e } +\NewDocumentCommand\RecordProperties { m m } + { + \@bsphack + \property_record:xx {#1}{#2} + \@esphack + } +\flag_new:n { l__property_ref_flag } +\cs_new:Npn \property_ref:nn #1#2 + { + \__property_ref:een + { \tl_to_str:n {#1} } + { \tl_to_str:n {#2} } + { \tl_use:c { g__property_default_ #2 _tl } } + } +\cs_generate_variant:Nn \property_ref:nn {ee} +\cs_new:Npn \property_ref:nnn #1#2#3 + { + \__property_ref:een + { \tl_to_str:n {#1} } + { \tl_to_str:n {#2} } + {#3} + } +\cs_new:Npn \__property_ref:nnn #1#2#3 + { + \tl_if_exist:cTF { g__property_label_ #1 _ #2 _tl } + { \tl_use:c { g__property_label_ #1 _ #2 _tl } } + { + \flag_if_raised:nF + { l__property_ref_flag } { \flag_raise:n { l__property_ref_flag } } + \tl_if_exist:cTF { g__property_default_ #2 _tl } + { #3 } + { \msg_expandable_error:nnn { property } { not-declared } {#2} } + } + } +\cs_generate_variant:Nn \__property_ref:nnn { ee } +\cs_generate_variant:Nn \property_ref:nnn {een} +\NewExpandableDocumentCommand \RefProperty { o m m } + { + \IfNoValueTF {#1} + { + \property_ref:ee {#2}{#3} + } + { + \property_ref:een {#2}{#3}{#1} + } + } +\cs_new_protected:Npn \new@label@record #1#2 + { + \tl_if_exist:cTF { r@#1 } + { + \gdef \@multiplelabels + { \@latex@warning@no@line { There~were~multiply-defined~labels } } + \@latex@warning@no@line { Label~`#1'~multiply~defined } + } + { + \tl_new:c { r@#1 } + \tl_gset:cn { r@#1 }{#2} + } + \__property_data:nnn {#1} #2 { \q_recursion_tail } { ? } \q_recursion_stop + } +\cs_new_protected:Npn \__property_data:nnn #1#2#3 + { + \quark_if_recursion_tail_stop:n {#2} + \tl_gclear_new:c { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } + \tl_gset:cn { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } {#3} + \__property_data:nnn {#1} + } +\cs_new_protected:Npn \@kernel@new@label@record@testdef #1 #2 + { + \tl_if_eq:cnF { r@#1 } {#2} + { \@tempswatrue } + } +\prg_new_conditional:Npnn \property_if_exist:n #1 { p , T , F, TF } + % #1 property + { + \cs_if_exist:cTF { __property_code_ #1 : } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_exist:n {e} {TF} +\cs_new_eq:NN \IfPropertyExistTF \property_if_exist:eTF +\prg_new_conditional:Npnn \property_if_recorded:n #1 { p , T , F, TF } + % #1 label + { + \tl_if_exist:cTF { r@#1 } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_recorded:n {e} {TF} +\cs_new_eq:NN \IfLabelExistTF \property_if_recorded:eTF +\prg_new_conditional:Npnn \property_if_recorded:nn #1#2 { p , T , F, TF } + % #1 label #2 property + { + \tl_if_exist:cTF { g__property_label_ \tl_to_str:n {#1} _ \tl_to_str:n {#2} _tl } + { + \prg_return_true: + } + { + \prg_return_false: + } + } +\prg_generate_conditional_variant:Nnn \property_if_recorded:nn {ee} {TF} +\cs_new_eq:NN \IfPropertyRecordedTF \property_if_recorded:eeTF +\cs_new_protected:Npn \property_ref_undefined_warn: + { + \flag_if_raised:nT { l__property_ref_flag } + { + \G@refundefinedtrue + } + } +\cs_new_protected:Npn \property_ref_undefined_warn:n #1 %#1 label + { + \property_if_recorded:nF {#1} + { + \G@refundefinedtrue + \@latex@warning{Reference~`#1'~on~page~\thepage\space undefined}% + } + } +\cs_new_protected:Npn \property_ref_undefined_warn:nn #1#2 %#1 label, #2 property + { + \property_if_recorded:nTF {#1} + { + \property_if_recorded:nnF {#1}{#2} + { + \G@refundefinedtrue + \@latex@warning + { Property~`#2'~undefined~for~reference~`#1'~on~page~\thepage } + } + } + { + \G@refundefinedtrue + \@latex@warning { Reference~`#1'~on~page~\thepage\space undefined }% + } + } +\cs_generate_variant:Nn \property_ref_undefined_warn:nn {xx} +\cs_set_eq:NN \RefUndefinedWarn \property_ref_undefined_warn:xx +\property_new:nnnn { abspage } { shipout } + { 0 } { \int_use:N \g_shipout_readonly_int } +\property_new:nnnn { page } { shipout } { 0 } { \thepage } +\property_new:nnnn { pagenum } { shipout } { 0 } { \the \value { page } } +\property_new:nnnn { currentlabel } { now } { ?? } { \@currentlabel } +\property_new:nnnn { title } { now } + { \exp_not:n { \textbf { ?? } } } { \@currentlabelname } +\property_new:nnnn { target } { now } { } { \@currentHref } +\property_new:nnnn { counter } { now } { } { \@currentcounter } +\property_new:nnnn { xpos } { shipout } { 0} { \int_use:N \tex_lastxpos:D } +\property_new:nnnn { ypos } { shipout } { 0} { \int_use:N \tex_lastypos:D } +\msg_new:nnnn { property } { exists } + { Property~'#1'~ has~ already~ been~ declared. } + { There~ already~ exists~ a~ property~ declaration~ with~ this~ + name.\\ + Please~ use~ a~ different~ name~ for~ your~ property.} + +\msg_new:nnnn { property } { not-declared } + { Property~'#1'~not~declared. } + { + LaTeX~has~been~asked~to~use~property~'#1',~but~this~ + name~has~not~been~declared. + } +\msg_new:nnnn { property } { unknown-setpoint } + { Unknown~keyword~'#2'~for~setting~property~'#1'. } + { + LaTeX~has~been~asked~to~set~the~property~'#1',~but~the~keyword~ + '#2'~is~not~one~of~the~two~known~values:~'now'~or~'shipout'. + } +\IncludeInRelease{0000/00/00}{ltproperties} + {cross-referencing~properties~(undo)}% + +\let \NewProperty \@undefined +\let \SetProperty \@undefined + +\let \RecordProperties \@undefined +\let \RefProperty \@undefined +\let \RefUndefinedWarn \@undefined + +\let \IfPropertyExistTF \@undefined +\let \IfLabelExistTF \@undefined +\let \IfPropertyRecordedTF \@undefined + +\let\new@label@record \@undefined +\let\@kernel@new@label@record@testdef\@undefined +\EndModuleRelease +\ExplSyntaxOff %%% From File: ltmiscen.dtx +\IncludeInRelease{2023/11/01}% + {\enddocument}{check property labels}% +\def\enddocument{% + \@kernel@before@enddocument + \UseOneTimeHook{enddocument}% + \@kernel@after@enddocument + \@checkend{document}% + \clearpage + \UseOneTimeHook{enddocument/afterlastpage}% + \@kernel@after@enddocument@afterlastpage + \begingroup + \if@filesw + \immediate\closeout\@mainaux + \let\@setckpt\@gobbletwo + \let\@newl@bel\@testdef + \let\new@label@record\@kernel@new@label@record@testdef + \@tempswafalse + \makeatletter \@@input\jobname.aux + \fi + \UseOneTimeHook{enddocument/afteraux}% + \UseOneTimeHook{enddocument/info}% + \endgroup + \UseOneTimeHook{enddocument/end}% + \deadcycles\z@\@@end} +\NewHook{enddocument} +\NewHook{enddocument/afterlastpage} +\NewHook{enddocument/afteraux} +\NewHook{enddocument/info} +\NewHook{enddocument/end} +\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist} +\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings} +\AddToHook{enddocument/info}[kernel/release]{% + \let\show@release@info\wlog + \show@release@info{ ***********}% + \the\LaTeXReleaseInfo + \show@release@info{ ***********}} + +\DeclareHookRule{enddocument/info}{kernel/release}{before}{kernel/filelist} +\DeclareHookRule{enddocument/info}{kernel/filelist}{before}{kernel/warnings} +\def\@enddocument@kernel@warnings{% + \ifdim \font@submax >\fontsubfuzz\relax + \@font@warning{Size substitutions with differences\MessageBreak + up to \font@submax\space have occurred.\@gobbletwo}% + \fi + \@defaultsubs + \@refundefined + \if@filesw + \ifx \@multiplelabels \relax + \if@tempswa + \@latex@warning@no@line{Label(s) may have changed. + Rerun to get cross-references right}% + \fi + \else + \@multiplelabels + \fi + \ifx \@extra@page@added \relax + \@latex@warning@no@line{Temporary extra page added at the end. + Rerun to get it removed}% + \fi + \fi +} +\EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\enddocument}{Use Hooks}% \def\enddocument{% @@ -13225,7 +13689,6 @@ of this package available from CTAN} \IncludeInRelease{2018/12/01}% {\protected@file@percent}{Mask line endings}% \protected\def\protected@file@percent{} - \catcode`\^^A=9 \long\gdef\add@percent@to@temptokena #1\protected@file@percent#2\add@percent@to@temptokena @@ -13443,6 +13906,21 @@ of this package available from CTAN} \kernel@make@fragile\raggedleft \EndIncludeInRelease +\IncludeInRelease{2023/11/01}% + {\@vobeytabs}{Obeyed tabs}% +{\catcode`\ =\active% +\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp\@vobeytabs}} +{\catcode`\^^I=\active +\gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}% +\global\let^^I=\space +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@vobeytabs}{Obeyed tabs}% +{\catcode`\ =\active% +\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}} +\let\@vobeytabs\@undefined +\EndIncludeInRelease \IncludeInRelease{2017-04-15}{\@verbatim}% {Disable hyphenation in verbatim}% \def\@verbatim{\trivlist \item\relax @@ -13494,17 +13972,6 @@ of this package available from CTAN} \DeclareRobustCommand\verbvisiblespace {\leavevmode{\usefont{OT1}{cmtt}{m}{n}\asciispace}} % xetex/luatex version \fi - -\def\@setupverbvisiblespace{% - \ifx\verbvisiblespace\asciispace - \let\@xobeysp\asciispace - \else - \setbox\z@\hbox{x}% - \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% - \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% - \fi -} - \newbox\@verbvisiblespacebox \@namedef{verbatim*}{\@verbatim \@setupverbvisiblespace @@ -13521,9 +13988,62 @@ of this package available from CTAN} \let\@setupverbvisiblespace\@undefined \let\@verbvisiblespacebox \@undefined \EndIncludeInRelease +\IncludeInRelease{2023/11/01}% + {\@setupverbvisiblespace}{Setup visible tab for \verb}% +\def\@setupverbvisiblespace{% + \ifx\verbvisiblespace\asciispace + \let\@xobeysp\asciispace + \else + \setbox\z@\hbox{x}% + \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% + \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% + \fi + \@setupverbvisibletab +} +\EndIncludeInRelease +\IncludeInRelease{2018/12/01}% + {\@setupverbvisiblespace}{Setup visible space for \verb}% +\def\@setupverbvisiblespace{% + \ifx\verbvisiblespace\asciispace + \let\@xobeysp\asciispace + \else + \setbox\z@\hbox{x}% + \setbox\@verbvisiblespacebox\hbox to\wd\z@{\hss\verbvisiblespace\hss}% + \def\@xobeysp{\leavevmode\copy\@verbvisiblespacebox}% + \fi +} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@setupverbvisiblespace}{Setup visible space for \verb}% +\let\@setupverbvisiblespace\@undefined +\EndIncludeInRelease +\IncludeInRelease{2023/11/01}% + {\@setupverbvisibletab}{Setup visible tab for \verb}% +\def\@setupverbvisibletab{\let\@xobeytab\@xobeysp} +\EndIncludeInRelease +\IncludeInRelease{0000/00/00}% + {\@setupverbvisibletab}{Setup visible tab for \verb}% +\let\@setupverbvisibletab\@undefined +\EndIncludeInRelease +\IncludeInRelease{2023/11/01}% + {\@sverb}{Support visible tabs}% +\def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi} +\def\@@sverb#1{% + \catcode`#1\active + \lccode`\~`#1% + \gdef\verb@balance@group{\verb@egroup + \@latex@error{\noexpand\verb illegal in argument}\@ehc}% + \aftergroup\verb@balance@group + \lowercase{\let~\verb@egroup}% + \ifnum0% + \ifnum\catcode`\ =\active\else 1\fi + \ifnum\catcode`\^^I=\active\else 1\fi + =0 % + \else \@setupverbvisiblespace \@vobeyspaces \fi +} +\EndIncludeInRelease \IncludeInRelease{2020/10/01}% {\@sverb}{Drop spaces before \verb delimiter}% -\def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi} \def\@@sverb#1{% \catcode`#1\active \lccode`\~`#1% @@ -16609,7 +17129,7 @@ of this package available from CTAN} \EndIncludeInRelease %%% From File: ltfilehook.dtx \providecommand\ltfilehookversion{v1.0o} -\providecommand\ltfilehookdate{2023/04/02} +\providecommand\ltfilehookdate{2023/07/10} \IncludeInRelease{2020/10/01}% {\CurrentFile}{Hook management file}% \ExplSyntaxOn diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua index 5573fc75636..45bd9dff75b 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua @@ -230,7 +230,11 @@ local luafunction_count_name = luafunction_count_name or "e@alloc@luafunction@count" local function new_luafunction(name) tex_setcount("global", luafunction_count_name, - tex_count[luafunction_count_name] + 1) + math.max( + #(lua.get_functions_table()), + tex_count[luafunction_count_name]) + + 1) + lua.get_functions_table()[tex_count[luafunction_count_name]] = false if tex_count[luafunction_count_name] > 65534 then luatexbase_error("No room for a new luafunction register") end @@ -758,7 +762,7 @@ end luatexbase.uninstall = uninstall create_callback('pre_mlist_to_hlist_filter', 'list') create_callback('mlist_to_hlist', 'exclusive', node.mlist_to_hlist) -create_callback('post_mlist_to_hlist_filter', 'list') +create_callback('post_mlist_to_hlist_filter', 'reverselist') function shared_callbacks.mlist_to_hlist.handler(head, display_type, need_penalties) local current = call_callback("pre_mlist_to_hlist_filter", head, display_type, need_penalties) if current == false then diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex index ddef389f103..c42a75e40b1 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex @@ -47,7 +47,7 @@ #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}} \fi \ProvidesFile{ltluatex.tex}% -[2023/01/19 v1.2b +[2023/08/03 v1.2c LuaTeX support for plain TeX (core) ] \edef\etatcatcode{\the\catcode`\@} diff --git a/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty b/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty index cd77c7b8d2c..a5392defc98 100644 --- a/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty +++ b/Master/texmf-dist/tex/latex-dev/base/structuredlog.sty @@ -43,7 +43,7 @@ %% extension .ins) which are part of the distribution. %%% From File: ltfilehook.dtx \providecommand\ltfilehookversion{v1.0o} -\providecommand\ltfilehookdate{2023/04/02} +\providecommand\ltfilehookdate{2023/07/10} \ProvidesExplPackage {structuredlog}{\ltfilehookdate}{\ltfilehookversion} {Structuring the TeX transcript file} diff --git a/Master/texmf-dist/tex/latex-dev/firstaid/everysel-ltx.sty b/Master/texmf-dist/tex/latex-dev/firstaid/everysel-ltx.sty deleted file mode 100644 index c7e7e6e06ca..00000000000 --- a/Master/texmf-dist/tex/latex-dev/firstaid/everysel-ltx.sty +++ /dev/null @@ -1,46 +0,0 @@ -%% -%% This is file `everysel-ltx.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% latex2e-first-aid-for-external-files.dtx (with options: `everysel-ltx') -%% -%% The source is maintained by the LaTeX Project team and bug -%% reports for it can be opened at https://latex-project.org/bugs/ -%% (but please observe conditions on bug reports sent to that address!) -%% -%% -%% Copyright (C) 2020-2021 -%% The LaTeX Project and any individual authors listed elsewhere -%% in this file. -%% -%% This file was generated from file(s) of the Standard LaTeX `First Aid Bundle'. -%% ------------------------------------------------------------------------------ -%% -%% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3c -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% https://www.latex-project.org/lppl.txt -%% and version 1.3c or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This file may only be distributed together with a copy of the LaTeX -%% `First Aid Bundle'. You may however distribute the LaTeX `First Aid Bundle' -%% without such generated files. -%% -%% File: latex2e-first-aid-for-external-files.dtx (C) Copyright 2020-2023 -%% -%% The LaTeX Project and any individual authors listed elsewhere -%% in this file. -\ProvidesPackage{everysel-ltx} - [2020/12/04 v1.0a - Emulation of the original everysel^^Jpackage with kernel methods] -\newcommand*{\EverySelectfont}[1] - {\AddToHook{selectfont}{#1}} -\newcommand*{\AtNextSelectfont}[1] - {\AddToHookNext{selectfont}{#1}} -\endinput -%% -%% End of file `everysel-ltx.sty'. diff --git a/Master/texmf-dist/tex/latex-dev/firstaid/filehook-ltx.sty b/Master/texmf-dist/tex/latex-dev/firstaid/filehook-ltx.sty index 2415a38f1c8..ffff6eb4d99 100644 --- a/Master/texmf-dist/tex/latex-dev/firstaid/filehook-ltx.sty +++ b/Master/texmf-dist/tex/latex-dev/firstaid/filehook-ltx.sty @@ -11,7 +11,7 @@ %% (but please observe conditions on bug reports sent to that address!) %% %% -%% Copyright (C) 2020-2021 +%% Copyright (C) 2020-2023 %% The LaTeX Project and any individual authors listed elsewhere %% in this file. %% diff --git a/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx b/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx index df4b77ed714..4cfc1c4d1f8 100644 --- a/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx +++ b/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx @@ -11,7 +11,7 @@ %% (but please observe conditions on bug reports sent to that address!) %% %% -%% Copyright (C) 2020-2021 +%% Copyright (C) 2020-2023 %% The LaTeX Project and any individual authors listed elsewhere %% in this file. %% @@ -34,8 +34,8 @@ %% %% The LaTeX Project and any individual authors listed elsewhere %% in this file. -\def\LaTeXFirstAidDate{2023/05/20} -\def\LaTeXFirstAidVersion{v1.0z} +\def\LaTeXFirstAidDate{2023/07/18} +\def\LaTeXFirstAidVersion{v1.1a} \ProvidesFile{latex2e-first-aid-for-external-files.ltx} [\LaTeXFirstAidDate\space \LaTeXFirstAidVersion\space LaTeX kernel fixes to external files and packages] @@ -167,19 +167,6 @@ \ngermanTeX }% } -\AddToHook{file/memoir.cls/before}[firstaid]{% - \expandafter\def\expandafter\@tempa\string\dimen{}% - \edef\kernel@stockheight{\expandafter\@tempa\meaning\stockheight}% - \edef\kernel@stockwidth{\expandafter\@tempa\meaning\stockwidth}% - \let\stockheight\@undefined - \let\stockwidth\@undefined -} -\AddToHook{file/memoir.cls/after}[firstaid]{% - \dimen\kernel@stockheight=\stockheight - \dimen\kernel@stockwidth=\stockwidth - \dimendef\stockheight=\kernel@stockheight - \dimendef\stockwidth=\kernel@stockwidth -} \endinput %% %% End of file `latex2e-first-aid-for-external-files.ltx'. |