summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/README.md4
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdfbin174944 -> 174946 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdfbin179945 -> 179953 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdfbin178187 -> 178185 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdfbin508210 -> 508225 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdfbin419913 -> 419994 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdfbin140095 -> 140093 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdfbin217498 -> 217497 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdfbin113561 -> 113557 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/changes.txt5
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdfbin109731 -> 109734 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/technote.pdfbin147462 -> 147458 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdfbin454511 -> 454535 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/README.md2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/alltt.pdfbin223829 -> 223829 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/cfgguide.pdfbin264161 -> 264161 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/changes.txt139
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/classes.pdfbin560248 -> 560972 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdfbin0 -> 415568 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/clsguide-historic.tex1881
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/clsguide.pdfbin414447 -> 451991 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/clsguide.tex1903
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/cmfonts.pdfbin292136 -> 292590 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/cyrguide.pdfbin257355 -> 257355 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/doc-code.pdfbin1074767 -> 1075457 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/doc.pdfbin755242 -> 755883 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/docstrip.pdfbin504361 -> 504397 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/encguide.pdfbin1318139 -> 1318562 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/exscale.pdfbin204709 -> 204709 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/fix-cm.pdfbin287724 -> 287724 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/fntguide.pdfbin517890 -> 517677 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/fntguide.tex21
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/graphpap.pdfbin161725 -> 161725 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ifthen.pdfbin221226 -> 221226 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/inputenc.pdfbin318166 -> 318166 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdfbin170874 -> 170874 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/latexrelease.pdfbin282105 -> 282105 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/latexsym.pdfbin200762 -> 200762 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/lb2.pdfbin252313 -> 252510 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/letter.pdfbin337493 -> 337766 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/lgc2.pdfbin217560 -> 217757 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/lppl.pdfbin132384 -> 132384 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdfbin719205 -> 755337 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdfbin478517 -> 498869 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdfbin803151 -> 803843 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdfbin547988 -> 548468 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdfbin1091279 -> 1242206 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdfbin701283 -> 739995 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltluatex.pdfbin325056 -> 325056 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdfbin715474 -> 716217 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdfbin585862 -> 586545 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews.pdfbin1265382 -> 1285592 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews01.pdfbin161534 -> 161534 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews02.pdfbin159811 -> 159811 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews03.pdfbin159349 -> 159349 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews04.pdfbin152545 -> 152545 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews05.pdfbin174686 -> 174686 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews06.pdfbin142870 -> 142870 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews07.pdfbin138211 -> 138211 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews08.pdfbin155426 -> 155426 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews09.pdfbin129989 -> 129989 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews10.pdfbin169414 -> 169414 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews11.pdfbin112191 -> 112191 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews12.pdfbin156746 -> 156746 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews13.pdfbin182464 -> 182464 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews14.pdfbin170716 -> 170716 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews15.pdfbin130323 -> 130323 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews16.pdfbin138090 -> 138090 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews17.pdfbin166247 -> 166247 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews18.pdfbin38320 -> 38424 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews19.pdfbin230181 -> 230331 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews20.pdfbin318566 -> 318787 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews20.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews21.pdfbin244870 -> 245007 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews21.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews22.pdfbin317779 -> 318003 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews23.pdfbin286600 -> 286796 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews24.pdfbin265292 -> 265470 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews25.pdfbin204948 -> 205087 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews26.pdfbin379472 -> 379718 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews27.pdfbin251083 -> 251260 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews28.pdfbin376652 -> 376892 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews29.pdfbin455116 -> 455423 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews30.pdfbin511895 -> 512207 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews30.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews31.pdfbin526332 -> 526646 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews31.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews32.pdfbin546186 -> 546525 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews32.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews33.pdfbin522416 -> 522729 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews33.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews34.pdfbin508052 -> 508339 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews34.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews35.pdfbin563098 -> 563295 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews35.tex20
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews36.pdfbin517571 -> 517917 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews36.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews37.pdfbin456714 -> 500493 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltnews37.tex472
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdfbin671573 -> 672305 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdfbin559554 -> 560232 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdfbin821006 -> 821768 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdfbin566006 -> 566650 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltx3info.pdfbin219354 -> 219354 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdfbin243283 -> 244221 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/makeindx.pdfbin165817 -> 165817 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/manifest.txt6
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/modguide.pdfbin257827 -> 257827 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/nfssfont.pdfbin211180 -> 211180 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/proc.pdfbin227056 -> 227056 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/slides.pdfbin375514 -> 375514 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/slifonts.pdfbin234188 -> 234188 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/source2e.pdfbin5797424 -> 6002270 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/syntonly.pdfbin189552 -> 189847 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/tlc2.pdfbin291015 -> 291239 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/tlc3.err829
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/tlc3.pdfbin0 -> 249698 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/tulm.pdfbin162766 -> 162766 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdfbin438570 -> 438586 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/usrguide.pdfbin474841 -> 479591 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/usrguide.tex93
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdfbin353281 -> 353320 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/base/webcomp.pdfbin146195 -> 146195 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/README.md2
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/afterpage.pdfbin197738 -> 197733 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/array.pdfbin516836 -> 517094 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/bm.pdfbin323432 -> 323437 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/calc.pdfbin370657 -> 370647 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/changes.txt19
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdfbin220834 -> 220839 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/delarray.pdfbin191064 -> 191066 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/enumerate.pdfbin215498 -> 215500 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/fileerr.pdfbin187725 -> 187723 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdfbin146446 -> 146446 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/ftnright.pdfbin387231 -> 387234 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/hhline.pdfbin189679 -> 189674 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdfbin157954 -> 157956 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/layout.pdfbin259969 -> 259966 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/longtable.pdfbin391313 -> 391316 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/multicol.pdfbin521367 -> 523525 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdfbin138963 -> 138962 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/shellesc.pdfbin175929 -> 176209 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/showkeys.pdfbin251782 -> 252911 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/somedefs.pdfbin167572 -> 167585 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/tabularx.pdfbin287073 -> 287073 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/theorem.pdfbin351702 -> 351675 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdfbin73672 -> 73672 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/tools-overview.tex2
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/trace.pdfbin222076 -> 222080 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/varioref.pdfbin398798 -> 393151 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/verbatim.pdfbin330746 -> 330773 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/xr.pdfbin169986 -> 169986 bytes
-rw-r--r--Master/texmf-dist/doc/latex-dev/tools/xspace.pdfbin257018 -> 257019 bytes
154 files changed, 4099 insertions, 1317 deletions
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/README.md b/Master/texmf-dist/doc/latex-dev/amsmath/README.md
index 059ebb7f300..a636bfca30c 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-05-01 pre-release 0
+Release 2023-06-01 pre-release 3
Overview
--------
@@ -77,5 +77,5 @@ version 1.3c or later.
-----
<p>Copyright (C) 2001-2004, 2007, 2008, 2010, 2011, 2013 American Mathematical Society. <br />
-<p>Copyright (C) 2016-2022 The LaTeX Project and American Mathematical Society. <br />
+<p>Copyright (C) 2016-2023 The LaTeX Project and American Mathematical Society. <br />
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf
index fef1eb8058e..6111ecae01c 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf
index 54650bb11da..a2c2ed34614 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf
index 487f9c57dd9..d390ea31c1b 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf
index 75882027b2f..e4a1de1d673 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.tex b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.tex
index 4a8230e39f9..5c4b9e0d89e 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.tex
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.tex
@@ -1,6 +1,6 @@
%
% Copyright (C) 1995, 2000, 2013 American Mathematical Society.
-% Copyright (C) 2016-2022 LaTeX Project and American Mathematical Society.
+% Copyright (C) 2016-2023 LaTeX Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf
index 3f4832c1d9a..448b93eb6ef 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf
index 03ebc9dcc87..600d07b4515 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf
index 7478fd056fd..22d74846a0c 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf
index 1c089bcc8b4..db5c8935781 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt b/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt
index 83d6c6e3a12..afa03be5dd2 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/changes.txt
@@ -2,6 +2,11 @@
All changes above are only part of the development branch for the next release.
================================================================================
+
+2023-05-13 David Carlisle <David.Carlisle@latex-project.org>
+
+ * amsmath.dtx: Adjust the definition of \@@eqno (gh/1059)
+
#########################
# 2022-06-01 Release
#########################
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf
index 396c9f26eab..a57bf089772 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf
index ae2549ac2a9..fa8c5fb8d33 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf
index a18992e79c2..91af9de8693 100644
--- a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf
+++ b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/README.md b/Master/texmf-dist/doc/latex-dev/base/README.md
index 49f51d34a3e..494705bbabf 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-06-01 pre-release 2
+Release 2023-06-01 pre-release 3
Overview
--------
diff --git a/Master/texmf-dist/doc/latex-dev/base/alltt.pdf b/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
index b5a773fce83..c03d4793516 100644
--- a/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/alltt.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf b/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
index 91991951612..8e27a300f15 100644
--- a/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/changes.txt b/Master/texmf-dist/doc/latex-dev/base/changes.txt
index 218b2b9db7a..790f9a5ad10 100644
--- a/Master/texmf-dist/doc/latex-dev/base/changes.txt
+++ b/Master/texmf-dist/doc/latex-dev/base/changes.txt
@@ -6,19 +6,156 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
================================================================================
+2023-05-22 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * usrguide.tex
+ Ensure url package is always loaded
+
+2023-05-21 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * lthooks.dtx, ltcmdhooks.dtx:
+ Add support for accessing arguments in 'cmd' hooks.
+
+2023-05-19 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * usrguide.tex (section Creating document commands and environments)
+ Add details of result of trailing optional arguments on
+ \inputlineno
+
+2023-05-12 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * ltxref.dtx
+ extend \label to store five values and add a hook with argument
+
+2023-05-17 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * usrguide.tex (section Creating document commands and environments)
+ Add details of brace stripping by \SplitList
+ Add guidance on creating commands to use at start of
+ tabular cells
+
+2023-05-15 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltfiles.dtx:
+ Use expl3-based file-existence test
+
+2023-05-13 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltmath.dtx: Add \ignorespaces to \eqno (gh/1059)
+
+2023-04-19 Joseph Wright <joseph.wright@latex-project.org>
+
+ * ltfinal.dtx (subsection{Lccodes and uccodes}):
+ Add \DeclareLowercaseMapping, \DeclareTitlecaseMapping and
+ \DeclareUppercaseMapping (gh/1033)
+
+2023-04-19 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * lthooks.dtx (subsection{Specifying code for next invocation}):
+ Initialise hook structure when adding 'next' code (gh/1052)
+
+2023-04-17 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltfinal.dtx (subsubsection{Lccodes and uccodes}):
+ Add \BCPdata (gh/1035)
+ Adapt \MakeLowercase, \MakeTitlecase and \MakeLowercase
+ to use \BCPdata for locale info
+
+2023-04-16 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * lthooks.dtx (subsubsection{Setting hooks up}):
+ Use \@@_replacing_args_false: in \@@_include_legacy_code_chunk:n.
+
+2023-04-15 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltplain.dtx: adjust \extrafloats so it does not error if thousands
+ of float boxes are allocated. github/1041
+
+2023-04-14 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * ltclass.dtx (\@onefilewithoptions):
+ When in latexrelease.sty, define \load@onefilewithoptions (gh/992).
+
+2023-04-13 David Carlisle <David.Carlisle@latex-project.org>
+
+ * cmfonts.fdd: add missing substitution for U/cmtt/bx/sl gh/1037
+
+2023-04-12 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * ltcmd.dtx (subsection{Grabbing arguments}):
+ Set \tex_endlinechar:D earlier to correct parsing of newlines in
+ special catcode settings (e.g., \ExplSyntaxOn) (gh/876).
+
+2023-04-02 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltfilehook.dtx: allow par as a filename. (gh/942)
+
+2023-04-06 Phelype Oleinik <phelype.oleinik@latex-project.org>
+
+ * lthooks.dtx, ltcmdhooks.dtx:
+ Add support for providing and using arguments in hooks:
+ - Modify hook data structures to allow access to arguments;
+ - Add commands to declare hooks with arguments;
+ - Add commands to add code that references hook arguments;
+ - Add commands to use hooks with arguments.
+
+2023-04-01 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltfssbas.dtx: locally reset frozen mathversions when the math
+ version changes. (gh/1028)
+
+2023-03-28 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltclass.dtx:
+ Add \IfFileAtLeastTF (gh/1015)
+
+2023-03-28 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltxdoc.dtx (section{Options}):
+ Define \cs if doc is rolled back to v2 (gh/981)
+
+2023-03-28 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltfinal.dtx: Restore groups to \MakeUppercase and
+ \MakeLowercase, and add a group to \MakeTitlecase. (gh/1021)
+
+2023-03-22 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltspace.dtx:
+ Add \predisplaypenalty setting of 10000 to \samepage in case
+ that was changed (gh/1022)
+
+2023-03-11 Yukai Chou <muzimuzhi@gmail.com>
+
+ * ltcmd.dtx (subsubsection{Showing the definition of a command}),
+ (subsubsection{Copying a command and its internal structure}):
+ Correctly recognize (non-expandable) document commands with empty or only
+ m-type arguments (gh/1009)
+
2023-01-30 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* ltpara.dtx (subsection{Providing hooks for paragraphs}):
Backout \parskip at top of minipage if it shouldn't be there
but is due to whatsits (gh/989)
+2023-02-05 Yukai Chou <muzimuzhi@gmail.com>
+
+ * fntguide.tex:
+ Adjusted pagination due to recently added doc paragraphs (gh/994)
+
2023-01-16 Yukai Chou <muzimuzhi@gmail.com>
* ltnews.cls:
- Added full release date yyyy-mm-dd to _all_ ltnews issues.
+ Added full release date yyyy-mm-dd to _all_ ltnews issues (gh/982)
Added \publicationday{<day>} to specify day in a month in ltnews<n>.tex.
<day> defaults to 01.
+2023-01-12 Joseph Joseph <Joseph.Joseph@latex-project.org>
+
+ * clsguide.tex, clsguide-historic,tex
+ Pre-2023 source moved to new name, re-worked material which remains
+ relevant in updated file
+
================================================================================
All changes above are only part of the development branch for the next release.
================================================================================
diff --git a/Master/texmf-dist/doc/latex-dev/base/classes.pdf b/Master/texmf-dist/doc/latex-dev/base/classes.pdf
index 39f29d0e8b9..ef4ed23c754 100644
--- a/Master/texmf-dist/doc/latex-dev/base/classes.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/classes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf b/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf
new file mode 100644
index 00000000000..196a93f86e5
--- /dev/null
+++ b/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.tex b/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.tex
new file mode 100644
index 00000000000..d7a27e3c406
--- /dev/null
+++ b/Master/texmf-dist/doc/latex-dev/base/clsguide-historic.tex
@@ -0,0 +1,1881 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1993-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
+% http://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: clsguide-historic.tex
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+\documentclass{ltxguide}[1995/11/28]
+
+\title{\LaTeXe~for class and package writers --- historic version}
+
+\author{Copyright \copyright~1995--2006 The \LaTeX\ Project\\
+ All rights reserved.%
+ \footnote{This file 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. See the source
+ \texttt{clsguide.tex} for full details.}%
+}
+
+\date{11 January 2023}
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+This document is an introduction to writing classes and packages for
+\LaTeX{}, with special attention given to upgrading existing
+\LaTeX~2.09 packages to \LaTeXe{}. The latter subject is also
+covered in an article by Johannes Braams published in TUGboat~15.3.
+
+It is somewhat of an historical document now, since \LaTeXe{} came into
+existence in 1994.
+
+\subsection{Writing classes and packages for \LaTeXe}
+
+\LaTeX{} is a document preparation system that enables the document
+writer to concentrate on the contents of their text, without bothering
+too much about the formatting of it. For example, chapters are
+indicated by |\chapter{<title>}| rather than by selecting 18pt bold.
+
+The file that contains the information about how to turn logical
+structure (like `|\chapter|') into formatting (like `18pt bold ragged
+right') is a \emph{document class}. In addition, some features (such
+as colour or included graphics) are independent of the document class
+and these are contained in \emph{packages}.
+
+One of the largest differences between \LaTeX~2.09 and \LaTeXe{} is in
+the commands used to write packages and classes. In \LaTeX~2.09,
+there was very little support for writing |.sty| files, and so writers
+had to resort to using low-level commands.
+
+\LaTeXe{} provides high-level commands for structuring packages.
+It is also much easier to build classes and packages on top of each
+other, for example writing a local technical report class |cetechr|
+(for the Chemical Engineering department) based on |article|.
+
+\subsection{Overview}
+
+This document contains an overview of how to write classes and
+packages for \LaTeX{}. It does \emph{not} introduce all of the
+commands necessary to write packages: these can be found in either
+\emph{\LaTeXbook} or \emph{\LaTeXcomp}. But it does describe the new
+commands for structuring classes and packages.
+
+\begin{description}
+
+\item[Section~\ref{Sec:general}] contains some general advice about
+ writing classes and packages. It describes the difference between
+ classes and packages, the command naming conventions, the use of
+ |doc| and |docstrip|, how \TeX's primitive file and box commands
+ interact with \LaTeX{}. It also contains some hints about general
+ \LaTeX{} style.
+
+\item[Section~\ref{Sec:structure}] describes the structure of classes
+ and packages. This includes building classes and packages on top of
+ other classes and packages, declaring options and declaring
+ commands. It also contains example classes.
+
+\item[Section~\ref{Sec:commands}] lists the new class and package
+ commands.
+
+ \item[Section~\ref{Sec:upgrade}] gives detailed advice on how to
+ upgrade existing \LaTeX~2.09 classes and packages to \LaTeXe{}.
+
+\end{description}
+
+\subsection{Further information}
+
+For a general introduction to \LaTeX{}, including the new features of
+\LaTeXe{}, you should read \emph{\LaTeXbook}
+by Leslie Lamport~\cite{A-W:LLa94}.
+
+A more detailed description of the new features of \LaTeX, including an
+overview of more than 200 packages and nearly 1000 ready to run examples, is
+to be found in \emph{\LaTeXcomp\ second edition} by Frank Mittelbach and
+Michel Goossens~\cite{A-W:MG2004}.
+
+The \LaTeX{} system is based on \TeX{}, which is
+described in \emph{The \TeX book} by Donald E.~Knuth~\cite{A-W:DEK91}.
+
+There are a number of documentation files which accompany every copy
+of \LaTeX{}. A copy of \emph{\LaTeX{} News} will come out with each
+six-monthly release of \LaTeX{}, and is found in the files
+|ltnews*.tex|. The author's guide \emph{\usrguide} describes the new
+\LaTeX{} document features; it is in |usrguide.tex|. The guide
+\emph{\fntguide} describes the \LaTeX{} font selection scheme for
+class- and package-writers; it is in |fntguide.tex|. Configuring
+\LaTeX{} is covered by the guide \emph{\cfgguide} in
+\texttt{cfgguide.tex} whilst the philosophy behind our policy on
+modifying \LaTeX{} is described in \emph{\modguide} in
+\texttt{modguide.tex}.
+
+The documented source code (from the files used to produce the kernel
+format via |latex.ltx|) is now available as
+\emph{The \LaTeXe\ Sources}.
+This very large document also includes an index of
+\LaTeX{} commands. It can be typeset from the \LaTeX{} file
+|source2e.tex| in the |base| directory, using the source files and
+the class file |ltxdoc.cls| from this directory.
+
+For more information about \TeX{} and \LaTeX{}, please contact your
+local \TeX{} Users Group, or the international \TeX{} Users Group.
+Addresses and other details can be found at:
+\begin{quote}\small\label{addrs}
+ \texttt{http://www.tug.org/lugs.html}
+\end{quote}
+
+
+\subsection{Policy on standard classes}
+
+Many of the problem reports we receive concerning the standard classes
+are not concerned with bugs but are suggesting, more or less politely,
+that the design decisions embodied in them are `not optimal' and
+asking us to modify them.
+
+There are several reasons why we should not make such changes to these
+files.
+\begin{itemize}
+\item
+ However misguided, the current behaviour is clearly what was
+ intended when these classes were designed.
+\item
+ It is not good practice to change such aspects of `standard classes'
+ because many people will be relying on them.
+\end{itemize}
+
+We have therefore decided not to even consider making such
+modifications, nor to spend time justifying that decision. This does
+not mean that we do not agree that there are many deficiencies in the
+design of these classes, but we have many tasks with higher priority
+than continually explaining why the standard classes for \LaTeX{}
+cannot be changed.
+
+We would, of course, welcome the production of better classes, or of
+packages that can be used to enhance these classes. So your first
+thought when you consider such a deficiency will, we hope, be ``what
+can I do to improve this?''
+
+Similar considerations apply to those parts of the kernel that are
+implementing design decisions, many of which should be left to the
+class file but are not in the current system. We realise that in such
+cases it is much more difficult for you to rectify the problem
+yourself but it is also the case that making such changes in the
+kernel would probably be a major project for us; therefore such
+enhancements will have to wait for \LaTeX3.
+
+\section{Writing classes and packages}
+\label{Sec:writing}
+
+This section covers some general points concerned with writing
+\LaTeX{} classes and packages.
+
+
+\subsection{Old versions}
+
+If you are upgrading an existing \LaTeX~2.09 style file then we
+recommend freezing the 2.09 version and no longer maintaining it.
+Experience with the various dialects of \LaTeX{} which existed in the
+early 1990's suggests that maintaining packages for different versions
+of \LaTeX{} is almost impossible. It will, of course, be necessary
+for some organisations to maintain both versions in parallel for some
+time but this is not essential for those packages and classes
+supported by individuals: they should support only the new standard
+\LaTeXe{}, not obsolete versions of \LaTeX{}.
+
+
+\subsection{Using `docstrip' and `doc'}
+
+If you are going to write a large class or package for \LaTeX{} then
+you should consider using the |doc| software which comes with
+\LaTeX{}.
+\LaTeX{} classes and packages written using this can be
+processed in two ways: they can be run through \LaTeX{}, to produce
+documentation; and they can be processed with |docstrip|, to produce
+the |.cls| or |.sty| file.
+
+The |doc| software can automatically generate indexes of definitions,
+indexes of command use, and change-log lists. It is very useful for
+maintaining and documenting large \TeX{} sources.
+
+The documented sources of the \LaTeX{} kernel itself, and of the
+standard classes, etc, are |doc| documents; they are in the |.dtx|
+files in the distribution. You can, in fact, typeset the source code
+of the kernel as one long document, complete with index, by running
+\LaTeX{} on |source2e.tex|. Typesetting these documents uses the
+class file |ltxdoc.cls|.
+
+For more information on |doc| and |docstrip|, consult the files
+|docstrip.dtx|, |doc.dtx|, and \emph{\LaTeXcomp}. For examples of its
+use, look at the |.dtx| files.
+
+\subsection{Is it a class or a package?}
+\label{Sec:classorpkg}
+
+The first thing to do when you want to put some new \LaTeX{} commands
+in a file is to decide whether it should be a \emph{document class} or a
+\emph{package}. The rule of thumb is:
+\begin{quote}
+ If the commands could be used with any document class, then make
+ them a package; and if not, then make them a class.
+\end{quote}
+
+There are two major types of class: those like |article|, |report| or
+|letter|, which are free-standing; and those which are extensions or
+variations of other classes---for example, the |proc| document class,
+which is built on the |article| document class.
+
+Thus, a company might have a local |ownlet| class for printing letters
+with their own headed note-paper. Such a class would build on top of
+the existing |letter| class but it cannot be used with any other
+document class, so we have |ownlet.cls| rather than |ownlet.sty|.
+
+The |graphics| package, in contrast, provides commands for including
+images into a \LaTeX{} document. Since these commands can be used
+with any document class, we have |graphics.sty| rather than
+|graphics.cls|.
+
+
+\subsection{Command names}
+
+\LaTeX{} has three types of command.
+
+There are the author commands, such as |\section|, |\emph| and
+|\times|: most of these have short names, all in lower case.
+
+There are also the class and package writer commands:
+most of these have long mixed-case names such as the following.
+\begin{verbatim}
+ \InputIfFileExists \RequirePackage \PassOptionsToClass
+\end{verbatim}
+
+Finally, there are the internal commands used in the \LaTeX{}
+implementation, such as |\@tempcnta|, |\@ifnextchar| and |\@eha|:
+most of these commands contain |@| in their name, which means they
+cannot be used in documents, only in class and package files.
+
+Unfortunately, for historical reasons the distinction between these
+commands is often blurred. For example, |\hbox| is an internal
+command which should only be used in the \LaTeX{} kernel, whereas
+|\m@ne| is the constant $-1$ and could have been |\MinusOne|.
+
+However, this rule of thumb is still useful: if a command has |@| in
+its name then it is not part of the supported \LaTeX{} language---and
+its behaviour may change in future releases! If a command is
+mixed-case, or is described in \emph{\LaTeXbook}, then you can rely on
+future releases of \LaTeXe{} supporting the command.
+
+\subsection{Box commands and colour}
+\label{Sec:colour}
+
+Even if you do not intend to use colour in your own documents, by
+taking note of the points in this section you can ensure that your
+class or package is compatible with the |color| package. This may
+benefit people using your class or package who have access to colour
+printers.
+
+The simplest way to ensure `colour safety' is to always use \LaTeX{}
+box commands rather than \TeX{} primitives, that is use |\sbox| rather
+than |\setbox|, |\mbox| rather than |\hbox| and |\parbox| or
+the |minipage| environment rather than |\vbox|.
+The \LaTeX{} box commands have new options which mean that they are now
+as powerful as the \TeX{} primitives.
+
+As an example of what can go wrong, consider that in
+|{\ttfamily <text>}|
+the font is restored just \emph{before} the |}|, whereas in the
+similar looking construction
+|{\color{green} <text>}|
+the colour is restored just \emph{after} the final |}|. Normally this
+distinction does not matter at all; but consider a primitive \TeX{}
+box assignment such as:
+\begin{verbatim}
+ \setbox0=\hbox{\color{green} <text>}
+\end{verbatim}
+Now the colour-restore occurs after the |}| and so is \emph{not}
+stored in the box. Exactly what bad effects this can have depends on
+how colour is implemented: it can range from getting the wrong
+colours in the rest of the document, to causing errors in the
+dvi-driver used to print the document.
+
+Also of interest is the command |\normalcolor|. This is
+normally just |\relax| (i.e., does nothing)
+but you can use it rather like |\normalfont| to
+set regions of the page such as captions or section headings to the
+`main document colour'.
+
+
+\subsection{Defining text and math characters}
+\label{Sec:chars}
+
+Because \LaTeXe{} supports different encodings, definitions of commands
+for producing symbols, accents, composite glyphs, etc.\ must be
+defined using the commands provided for this purpose and described in
+\emph{\fntguide}. This part of the system is still under development
+so such tasks should be undertaken with great caution.
+
+Also, |\DeclareRobustCommand| should be used for encoding-independent
+commands of this type.
+
+Note that it is no longer possible to refer to the math font set-up
+outside math mode: for example, neither |\textfont 1| nor
+|\scriptfont 2| are guaranteed to be defined in other modes.
+
+
+\subsection{General style}
+\label{Sec:general}
+
+The new system provides many commands designed to help you produce
+well-structured class and package files that are both robust and
+portable. This section outlines some ways to make intelligent use of
+these.
+
+\subsubsection{Loading other files}
+\label{Sec:loading}
+
+\NEWdescription{1995/12/01}
+\LaTeX{} provides these commands:
+\begin{verbatim}
+ \LoadClass \LoadClassWithOptions
+ \RequirePackage \RequirePackageWithOptions
+\end{verbatim}
+for using classes or packages inside other classes or packages. We
+recommend strongly that you use them, rather than the primitive
+|\input| command, for a number of reasons.
+
+Files loaded with |\input <filename>| will not be listed in the
+|\listfiles| list.
+
+If a package is always loaded with |\RequirePackage...| or |\usepackage|
+then, even if its loading is requested several times, it will be
+loaded only once. By contrast, if it is loaded with |\input| then it
+can be loaded more than once; such an extra loading may waste time and
+memory and it may produce strange results.
+
+If a package provides option-processing then, again, strange results
+are possible if the package is |\input| rather than loaded by means of
+|\usepackage| or |\RequirePackage...|.
+
+If the package |foo.sty| loads the package |baz.sty| by use of
+|\input baz.sty| then the user will get a warning:
+\begin{verbatim}
+ LaTeX Warning: You have requested package `foo',
+ but the package provides `baz'.
+\end{verbatim}
+Thus, for several reasons, using |\input| to load packages is not a
+good idea.
+
+Unfortunately, if you are upgrading the file |myclass.sty| to a class
+file then you have to make sure that any old files which contain
+|\input myclass.sty| still work.
+
+This was also true for the standard classes (|article|, |book| and
+|report|), since a lot of existing \LaTeX~2.09 document styles contain
+|\input article.sty|. The approach which we use to solve this is
+to provide minimal files |article.sty|, |book.sty| and |report.sty|,
+which simply load the appropriate class files.
+
+For example, |article.sty| contains just the following lines:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \@obsoletefile{article.cls}{article.sty}
+ \LoadClass{article}
+\end{verbatim}
+You may wish to do the same or, if you think that it is safe to do so,
+you may decide to just remove |myclass.sty|.
+
+\subsubsection{Make it robust}
+
+We consider it good practice, when writing packages and classes, to use
+\LaTeX{} commands as much as possible.
+
+Thus, instead of using |\def...| we recommend using one of
+|\newcommand|, |\renewcommand| or |\providecommand|; |\CheckCommand| is
+also useful. Doing this makes
+it less likely that you will inadvertently redefine a command, giving
+unexpected results.
+
+When you define an environment, use |\newenvironment| or
+|\renewenvironment| instead |\def\foo{...}| and |\def\endfoo{...}|.
+
+If you need to set or change the value of a \m{dimen} or \m{skip}
+register, use |\setlength|.
+
+To manipulate boxes, use \LaTeX{} commands such as |\sbox|,
+|\mbox| and |\parbox| rather than |\setbox|, |\hbox| and |\vbox|.
+
+Use |\PackageError|, |\PackageWarning| or |\PackageInfo| (or the
+equivalent class commands) rather than |\@latexerr|, |\@warning| or
+|\wlog|.
+
+It is still possible to declare options by defining |\ds@<option>| and
+calling |\@options|; but we recommend the |\DeclareOption| and
+|\ProcessOptions| commands instead. These are more powerful and use
+less memory. So rather than using:
+\begin{verbatim}
+ \def\ds@draft{\overfullrule 5pt}
+ \@options
+\end{verbatim}
+you should use:
+\begin{verbatim}
+ \DeclareOption{draft}{\setlength{\overfullrule}{5pt}}
+ \ProcessOptions\relax
+\end{verbatim}
+
+The advantage of this kind of practice is that your code is more
+readable and, more important, that it is less likely to break when
+used with future versions of \LaTeX{}.
+
+\subsubsection{Make it portable}
+
+It is also sensible to make your files are as portable as possible. To
+ensure this; they should contain only visible 7-bit text; and the
+filenames should contain at most eight characters (plus the three
+letter extension). Also, of course, it \textbf{must not} have the
+same name as a file in the standard \LaTeX{} distribution, however
+similar its contents may be to one of these files.
+
+It is also useful if local classes or packages have a common prefix,
+for example the University of Nowhere classes might begin with |unw|.
+This helps to avoid every University having its own thesis class, all
+called |thesis.cls|.
+
+If you rely on some features of the \LaTeX{} kernel, or on a package,
+please specify the release-date you need. For example, the package
+error commands were introduced in the June 1994 release so, if you use
+them then you should put:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\end{verbatim}
+
+\subsubsection{Useful hooks}
+
+Some packages and document styles had to redefine the command
+|\document| or |\enddocument| to achieve their goal. This is no
+longer necessary. You can now use the `hooks' |\AtBeginDocument| and
+|\AtEndDocument| (see Section~\ref{Sec:delays}). Again, using these
+hooks makes it less likely that your code breaks with future versions
+of \LaTeX{}. It also makes it more likely that your package can work
+together with someone else's.
+
+\NEWdescription{1996/12/01}
+However, note that code in the |\AtBeginDocument| hook is part of the
+preamble. Thus there are restrictions on what can be put there; in
+particular, no typesetting can be done.
+
+\section{The structure of a class or package}
+\label{Sec:structure}
+
+\LaTeXe{} classes and packages have more structure than \LaTeX~2.09
+style files did. The outline of a class or package file is:
+\begin{description}
+\item[Identification] The file says that it is a \LaTeXe{} package or
+ class, and gives a short description of itself.
+\item[Preliminary declarations]
+ Here the file declares some commands and can also load
+ other files. Usually these commands will be just those needed for
+ the code used in the declared options.
+\item[Options] The file declares and processes its options.
+\item[More declarations] This is where the file does most of its work:
+ declaring new variables, commands and fonts; and loading other files.
+\end{description}
+
+\subsection{Identification}
+
+The first thing a class or package file does is identify itself.
+Package files do this as follows:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{<package>}[<date> <other information>]
+\end{verbatim}
+For example:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{latexsym}[1994/06/01 Standard LaTeX package]
+\end{verbatim}
+Class files do this as follows:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesClass{<class-name>}[<date> <other information>]
+\end{verbatim}
+For example:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesClass{article}[1994/06/01 Standard LaTeX class]
+\end{verbatim}
+\NEWdescription{1998/06/19}
+The \m{date} should be given in the form `\textsc{yyyy/mm/dd}' and
+must be present if the optional argument is used (this is also true
+for the |\NeedsTeXFormat| command).
+Any derivation from this syntax will result in low-level \TeX{}
+errors---the commands expect a valid syntax to speed up the daily
+usage of the package or class and make no provision for the case that
+the developer made a mistake!
+
+This date is checked whenever a user specifies a date in their
+|\documentclass| or |\usepackage| command. For example, if you wrote:
+\begin{verbatim}
+ \documentclass{article}[1995/12/23]
+\end{verbatim}
+then users at a different location
+would get a warning that their copy of |article| was out of
+date.
+
+The description of a class is displayed when the class is used. The
+description of a package is put into the log file. These descriptions
+are also displayed by the |\listfiles| command. The phrase
+\texttt{Standard LaTeX} \textbf{must not} be used in the identification
+banner of any file other than those in the standard \LaTeX{}
+distribution.
+
+
+\subsection{Using classes and packages}
+
+The first major difference between \LaTeX~2.09 style files and
+\LaTeXe{} packages and classes is that \LaTeXe{} supports
+\emph{modularity}, in the sense of building files from small
+building-blocks rather than using large single files.
+
+A \LaTeX{} package or class can load a package as follows:
+\begin{verbatim}
+ \RequirePackage[<options>]{<package>}[<date>]
+\end{verbatim}
+For example:
+\begin{verbatim}
+ \RequirePackage{ifthen}[1994/06/01]
+\end{verbatim}
+This command has the same syntax as the author command |\usepackage|.
+It allows packages or classes to use features provided by other
+packages. For example, by loading the |ifthen| package, a package
+writer can use the `if\dots then\dots else\dots' commands provided
+by that package.
+
+A \LaTeX{} class can load one other class as follows:
+\begin{verbatim}
+ \LoadClass[<options>]{<class-name>}[<date>]
+\end{verbatim}
+For example:
+\begin{verbatim}
+ \LoadClass[twocolumn]{article}
+\end{verbatim}
+This command has the same syntax as the author command |\documentclass|.
+It allows classes to be based on the syntax and appearance of another
+class. For example, by loading the |article| class, a class writer
+only has to change the bits of |article| they don't like, rather than
+writing a new class from scratch.
+
+\NEWfeature{1995/12/01}
+The following commands can be used in the common case that you want to
+simply load a class or package file with exactly those options that
+are being used by the current class.
+\begin{verbatim}
+ \LoadClassWithOptions{<class-name>}[<date>]
+ \RequirePackageWithOptions{<package>}[<date>]
+\end{verbatim}
+For example:
+\begin{verbatim}
+ \LoadClassWithOptions{article}
+ \RequirePackageWithOptions{graphics}[1995/12/01]
+\end{verbatim}
+
+\subsection{Declaring options}
+
+\NEWdescription{1998/12/01}
+The other major difference between \LaTeX~2.09 styles and \LaTeXe{}
+packages and classes is in option handling. Packages and classes can
+now declare options and these can be specified by authors; for
+example, the |twocolumn| option is declared by the |article| class.
+Note that the name of an option should contain only those characters
+allowed in a `\LaTeX{} name'; in particular it must not contain any
+control sequences.
+
+An option is declared as follows:
+\begin{verbatim}
+ \DeclareOption{<option>}{<code>}
+\end{verbatim}
+For example, the |dvips| option (slightly simplified)
+to the |graphics| package is implemented as:
+\begin{verbatim}
+ \DeclareOption{dvips}{\input{dvips.def}}
+\end{verbatim}
+This means that when an author writes |\usepackage[dvips]{graphics}|,
+the file |dvips.def| is loaded. As another example, the |a4paper|
+option is declared in the |article| class to set the |\paperheight|
+and |\paperwidth| lengths:
+\begin{verbatim}
+ \DeclareOption{a4paper}{%
+ \setlength{\paperheight}{297mm}%
+ \setlength{\paperwidth}{210mm}%
+ }
+\end{verbatim}
+Sometimes a user will request an option which the class
+or package has not explicitly declared. By default this will produce
+a warning (for classes) or error (for packages); this behaviour
+can be altered as follows:
+\begin{verbatim}
+ \DeclareOption*{<code>}
+\end{verbatim}
+For example, to make the package |fred| produce a warning rather than
+an error for unknown options, you could specify:
+\begin{verbatim}
+ \DeclareOption*{%
+ \PackageWarning{fred}{Unknown option `\CurrentOption'}%
+ }
+\end{verbatim}
+Then, if an author writes |\usepackage[foo]{fred}|, they will get a
+warning \texttt{Package fred Warning: Unknown option `foo'.} As
+another example, the |fontenc| package tries to load a file
+|<ENC>enc.def| whenever the \m{ENC} option is used. This
+can be done by writing:
+\begin{verbatim}
+ \DeclareOption*{%
+ \input{\CurrentOption enc.def}%
+ }
+\end{verbatim}
+\NEWdescription{1998/12/01}
+It is possible to pass options on to another package or class, using
+the command |\PassOptionsToPackage| or |\PassOptionsToClass| (note
+that this is a specialised operation that works only for option
+names). For example, to pass every unknown option on to the |article|
+class, you can use:
+\begin{verbatim}
+ \DeclareOption*{%
+ \PassOptionsToClass{\CurrentOption}{article}%
+ }
+\end{verbatim}
+If you do this then you should make sure you load the class at some
+later point, otherwise the options will never be processed!
+
+So far, we have explained only how to declare options, not how to
+execute them. To process the options with which the file was called,
+you should use:
+\begin{verbatim}
+ \ProcessOptions\relax
+\end{verbatim}
+This executes the \m{code} for each option that was both specified and
+declared (see Section~\ref{Sec:commands.options} for details of how
+this is done).
+
+For example, if the |jane| package file contains:
+\begin{verbatim}
+ \DeclareOption{foo}{\typeout{Saw foo.}}
+ \DeclareOption{baz}{\typeout{Saw baz.}}
+ \DeclareOption*{\typeout{What's \CurrentOption?}}
+ \ProcessOptions\relax
+\end{verbatim}
+and an author writes |\usepackage[foo,bar]{jane}|, then they will see
+the messages \texttt{Saw foo.} and \texttt{What's bar?}
+
+\subsection{A minimal class file}
+
+Most of the work of a class or package is in defining new commands, or
+changing the appearance of documents. This is done in the body of the
+package, using commands such as |\newcommand| or |\setlength|.
+
+\LaTeXe{} provides several new commands to help class and package
+writers; these are described in detail in Section~\ref{Sec:commands}.
+
+There are four things that every class file \emph{must} contain: these
+are a definition of |\normalsize|, values for |\textwidth| and
+|\textheight| and a specification for page-numbering. So a minimal
+document class file\footnote {This class is now in the standard
+distribution, as \texttt{minimal.cls}.} looks like this:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesClass{minimal}[1995/10/30 Standard LaTeX minimal class]
+ \renewcommand{\normalsize}{\fontsize{10pt}{12pt}\selectfont}
+ \setlength{\textwidth}{6.5in}
+ \setlength{\textheight}{8in}
+ \pagenumbering{arabic} % needed even though this class will
+ % not show page numbers
+\end{verbatim}
+However, this class file will not support footnotes, marginals,
+floats, etc., nor will it provide any of the 2-letter font commands
+such as |\rm|; thus most classes will contain more than this minimum!
+
+\subsection{Example: a local letter class}
+
+A company may have its own letter class, for setting letters in the
+company style. This section shows a simple implementation of such a
+class, although a real class would need more structure.
+
+The class begins by announcing itself as |neplet.cls|.
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesClass{neplet}[1995/04/01 NonExistent Press letter class]
+\end{verbatim}
+Then this next bit passes any options on to the |letter| class, which
+is loaded with the |a4paper| option.
+\begin{verbatim}
+ \DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}}
+ \ProcessOptions\relax
+ \LoadClass[a4paper]{letter}
+\end{verbatim}
+In order to use the company letter head, it redefines the
+|firstpage| page style: this is the page style that is used on
+the first page of letters.
+\begin{verbatim}
+ \renewcommand{\ps@firstpage}{%
+ \renewcommand{\@oddhead}{<letterhead goes here>}%
+ \renewcommand{\@oddfoot}{<letterfoot goes here>}%
+ }
+\end{verbatim}
+And that's it!
+
+\subsection{Example: a newsletter class}
+
+A simple newsletter can be typeset with \LaTeX{}, using a variant of the
+|article| class.
+The class begins by announcing itself as |smplnews.cls|.
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesClass{smplnews}[1995/04/01 The Simple News newsletter class]
+
+ \newcommand{\headlinecolor}{\normalcolor}
+\end{verbatim}
+It passes most specified options on to the |article| class: apart from
+the |onecolumn| option, which is switched off, and the |green| option,
+which sets the headline in green.
+\begin{verbatim}
+ \DeclareOption{onecolumn}{\OptionNotUsed}
+ \DeclareOption{green}{\renewcommand{\headlinecolor}{\color{green}}}
+
+ \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+ \ProcessOptions\relax
+\end{verbatim}
+It then loads the class |article| with the option |twocolumn|.
+\begin{verbatim}
+ \LoadClass[twocolumn]{article}
+\end{verbatim}
+Since the newsletter is to be printed in colour, it now loads the
+|color| package. The class does not specify a device driver option
+since this should be specified by the user of the |smplnews| class.
+\begin{verbatim}
+ \RequirePackage{color}
+\end{verbatim}
+The class then redefines |\maketitle| to produce the title in 72pt
+Helvetica bold oblique, in the appropriate colour.
+\begin{verbatim}
+ \renewcommand{\maketitle}{%
+ \twocolumn[%
+ \fontsize{72}{80}\fontfamily{phv}\fontseries{b}%
+ \fontshape{sl}\selectfont\headlinecolor
+ \@title
+ ]%
+ }
+\end{verbatim}
+It redefines |\section| and switches off section numbering.
+\begin{verbatim}
+ \renewcommand{\section}{%
+ \@startsection
+ {section}{1}{0pt}{-1.5ex plus -1ex minus -.2ex}%
+ {1ex plus .2ex}{\large\sffamily\slshape\headlinecolor}%
+ }
+
+ \setcounter{secnumdepth}{0}
+\end{verbatim}
+It also sets the three essential things.
+\begin{verbatim}
+ \renewcommand{\normalsize}{\fontsize{9}{10}\selectfont}
+ \setlength{\textwidth}{17.5cm}
+ \setlength{\textheight}{25cm}
+\end{verbatim}
+In practice, a class would need more than this: it would provide
+commands for issue numbers, authors of articles, page styles and so
+on; but this skeleton gives a start. The |ltnews| class file is not
+much more complex than this one.
+
+\section{Commands for class and package writers}
+\label{Sec:commands}
+
+This section describes briefly each of the new commands for class and
+package writers. To find out about other aspects of the new system,
+you should also read \emph{\LaTeXbook}, \emph{\LaTeXcomp} and
+\emph{\usrguide}.
+
+\subsection{Identification}
+
+The first group of commands discussed here are those used
+to identify your class or package file.
+
+\begin{decl}
+|\NeedsTeXFormat| \arg{format-name} \oarg{release-date}
+\end{decl}
+This command tells \TeX{} that this file should be processed using a
+format with name \m{format-name}. You can use the optional argument
+\m{release-date} to further specify the earliest release date of the
+format that is needed. When the release date of the format is older
+than the one specified a warning will be generated. The standard
+\m{format-name} is \texttt{LaTeX2e}. The date, if present, must be in
+the form \textsc{yyyy/mm/dd}.
+
+Example:
+\begin{verbatim}
+ \NeedsTeXFormat{LaTeX2e}[1994/06/01]
+\end{verbatim}
+
+\begin{decl}
+|\ProvidesClass| \arg{class-name} \oarg{release-info} \\
+|\ProvidesPackage| \arg{package-name} \oarg{release-info}
+\end{decl}
+This declares that the current file contains the definitions for the
+document class \m{class-name} or package \m{package-name}.
+
+The optional \m{release-info}, if used, must contain:
+\begin{itemize}
+ \item the release date of
+ this version of the file, in the form \textsc{yyyy/mm/dd};
+\item optionally followed by a space and a short description, possibly
+ including a version number.
+\end{itemize}
+The above syntax must be followed exactly so that this information
+can be used by |\LoadClass| or |\documentclass| (for classes) or
+|\RequirePackage| or |\usepackage| (for packages) to test that the
+release is not too old.
+
+The whole of this \m{release-info} information is displayed by
+|\listfiles| and should therefore not be too long.
+
+Example:
+\begin{verbatim}
+ \ProvidesClass{article}[1994/06/01 v1.0 Standard LaTeX class]
+ \ProvidesPackage{ifthen}[1994/06/01 v1.0 Standard LaTeX package]
+\end{verbatim}
+
+\begin{decl}
+ |\ProvidesFile| \arg{file-name} \oarg{release-info}
+\end{decl}
+This is similar to the two previous commands except that here the full
+filename, including the extension, must be given. It is used for
+declaring any files other than main class and package files.
+
+Example:
+\begin{verbatim}
+ \ProvidesFile{T1enc.def}[1994/06/01 v1.0 Standard LaTeX file]
+\end{verbatim}
+
+Note that the phrase \texttt{Standard LaTeX} \textbf{must not} be used
+in the identification banner of any file other than those in the
+standard \LaTeX{} distribution.
+
+\subsection{Loading files}
+\label{Sec:loadf}
+
+\NEWfeature{1995/12/01}
+This group of commands can be used to create your own document class or
+package by building on existing classes or packages.
+\begin{decl}
+ |\RequirePackage| \oarg{options-list} \arg{package-name}
+ \oarg{release-info}\\
+ |\RequirePackageWithOptions| \arg{package-name}
+ \oarg{release-info}
+\end{decl}
+Packages and classes should use these commands to load other packages.
+
+The use of |\RequirePackage| is the same as the author command
+|\usepackage|.
+
+Examples:
+\begin{verbatim}
+ \RequirePackage{ifthen}[1994/06/01]
+ \RequirePackageWithOptions{graphics}[1995/12/01]
+\end{verbatim}
+
+\begin{decl}
+ |\LoadClass| \oarg{options-list} \arg{class-name}
+ \oarg{release-info}\\
+ |\LoadClassWithOptions| \arg{class-name}
+ \oarg{release-info}
+\end{decl}
+\NEWfeature{1995/12/01}
+These commands are for use \emph{only} in class files, they cannot be
+used in packages files;
+they can be used at most once within a class file.
+
+The use of |\LoadClass| is the same as
+the use of |\documentclass| to load a class file.
+
+Examples:
+\begin{verbatim}
+ \LoadClass{article}[1994/06/01]
+ \LoadClassWithOptions{article}[1995/12/01]
+\end{verbatim}
+
+\NEWfeature{1995/12/01}
+The two |WithOptions| versions simply load the class (or package) file
+with exactly those options that are being used by the current file
+(class or package). See below, in \ref{Sec:opmove}, for further
+discussion of their use.
+
+
+\subsection{Option declaration}
+\label{Sec:commands.options.dec}
+
+\NEWdescription{1998/12/01}
+The following commands deal with the declaration and handling of
+options to document classes and packages. Every option name must be a
+`\LaTeX{} name'.
+
+There are some commands designed especially for use within the
+\m{code} argument of these commands (see below).
+
+\begin{decl}
+ |\DeclareOption| \arg{option-name} \arg{code}
+\end{decl}
+This makes \m{option-name} a `declared option' of the class or package
+in which it is put.
+
+The \m{code} argument contains the code to be executed if that option
+is specified for the class or package; it can contain any valid
+\LaTeXe{} construct.
+
+Example:
+\begin{verbatim}
+ \DeclareOption{twoside}{\@twosidetrue}
+\end{verbatim}
+
+\begin{decl}
+ |\DeclareOption*| \arg{code}
+\end{decl}
+This declares the \m{code} to be executed for every option which is
+specified for, but otherwise not explicitly declared by, the class or
+package; this code is called the `default option code' and it can
+contain any valid \LaTeXe{} construct.
+
+If a class file contains no |\DeclareOption*| then, by default, all
+specified but undeclared options for that class will be silently
+passed to all packages (as will the specified and declared options for
+that class).
+
+If a package file contains no |\DeclareOption*| then, by default, each
+specified but undeclared option for that package will produce an error.
+
+
+\subsection{Commands within option code}
+\label{Sec:within.code}
+
+These two commands can be used only within the \m{code} argument of
+either |\DeclareOption| or |\DeclareOption*|. Other commands commonly
+used within these arguments can be found in the next few subsections.
+
+\begin{decl}
+ |\CurrentOption|
+\end{decl}
+This expands to the name of the current option.
+
+\begin{decl}
+ |\OptionNotUsed|
+\end{decl}
+This causes the current option to
+be added to the list of `unused options'.
+
+\NEWfeature{1995/06/01}
+ You can now include hash marks (\texttt{\#}) within these \m{code}
+ arguments without special treatment (formerly, it had been
+ necessary to double them).
+
+\subsection{Moving options around}
+\label{Sec:opmove}
+
+These two commands are also very useful within the \m{code} argument
+of |\DeclareOption| or |\DeclareOption*|:
+\begin{decl}
+ |\PassOptionsToPackage| \arg{options-list} \arg{package-name}\\
+ |\PassOptionsToClass| \arg{options-list} \arg{class-name}
+\end{decl}
+The command |\PassOptionsToPackage| passes the option names in
+\m{options-list} to package \m{package-name}.
+This means that it adds the \m{option-list} to the
+list of options used by any future |\RequirePackage| or |\usepackage|
+command for package \m{package-name}.
+
+Example:
+\begin{verbatim}
+ \PassOptionsToPackage{foo,bar}{fred}
+ \RequirePackage[baz]{fred}
+\end{verbatim}
+is the same as:
+\begin{verbatim}
+ \RequirePackage[foo,bar,baz]{fred}
+\end{verbatim}
+
+Similarly, |\PassOptionsToClass| may be used in a class file to pass
+options to another class to be loaded with |\LoadClass|.
+
+\NEWdescription{1995/12/01}
+The effects and use of these two commands should be contrasted with
+those of the following two (documented above, in \ref{Sec:loadf}):
+\begin{verbatim}
+ \LoadClassWithOptions
+ \RequirePackageWithOptions
+\end{verbatim}
+The command |\RequirePackageWithOptions| is similar to
+|\RequirePackage|, but it always loads the required package with
+exactly the same option list as that being used by the current class
+or package, rather than with any option explicitly supplied or passed
+on by |\PassOptionsToPackage|.
+
+The main purpose of |\LoadClassWithOptions| is to allow one class to
+simply build on another, for example:
+\begin{verbatim}
+ \LoadClassWithOptions{article}
+\end{verbatim}
+This should be compared with the slightly different construction
+\begin{verbatim}
+ \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+ \ProcessOptions\relax
+ \LoadClass{article}
+\end{verbatim}
+As used above, the effects are more or less the same, but the first is
+a lot less to type; also the |\LoadClassWithOptions| method runs
+slightly quicker.
+
+If, however, the class declares options of its own then
+the two constructions are different. Compare, for example:
+\begin{verbatim}
+ \DeclareOption{landscape}{\@landscapetrue}
+ \ProcessOptions\relax
+ \LoadClassWithOptions{article}
+\end{verbatim}
+with:
+\begin{verbatim}
+ \DeclareOption{landscape}{\@landscapetrue}
+ \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+ \ProcessOptions\relax
+ \LoadClass{article}
+\end{verbatim}
+In the first example, the \textsf{article} class will be loaded with
+option |landscape| precisely when the current class is called with
+this option. By contrast, in the second example it will never be
+called with option \texttt{landscape} as in that case \textsf{article}
+is passed options only by the default option handler, but this handler
+is not used for |landscape| because that option is explicitly
+declared.
+
+\subsection{Delaying code}
+\label{Sec:delays}
+
+These first two commands are also intended primarily for use within
+the \m{code} argument of |\DeclareOption| or |\DeclareOption*|.
+
+\begin{decl}
+ |\AtEndOfClass| \arg{code}\\
+ |\AtEndOfPackage| \arg{code}
+\end{decl}
+These commands declare \m{code} that is saved away internally and then
+executed after processing the whole of the current class or package
+file.
+
+Repeated use of these commands is permitted: the code in the
+arguments is stored (and later executed) in the order of their
+declarations.
+
+\begin{decl}
+ |\AtBeginDocument| \arg{code}\\
+ |\AtEndDocument| \arg{code}
+\end{decl}
+These commands declare \m{code} to be saved internally and executed
+while \LaTeX{} is executing |\begin{document}| or |\end{document}|.
+
+The \m{code} specified in the argument to |\AtBeginDocument| is
+executed near the end of the |\begin{document}| code, \emph{after} the
+font selection tables have been set up. It is therefore a useful
+place to put code which needs to be executed after everything has been
+prepared for typesetting and when the normal font for the document is
+the current font.
+
+\NEWdescription{1995/12/01}
+The |\AtBeginDocument| hook should not be used for code that does any
+typesetting since the typeset result would be unpredictable.
+
+The \m{code} specified in the argument to |\AtEndDocument| is
+executed at the beginning of the |\end{document}| code,
+\emph{before} the final page is finished and before any leftover
+floating environments are processed. If some of the \m{code} is to be
+executed after these two processes, you should include a |\clearpage|
+at the appropriate point in \m{code}.
+
+Repeated use of these commands is permitted: the code in the
+arguments is stored (and later executed) in the order of their
+declarations.
+
+\begin{decl}[1994/12/01]
+ |\AtBeginDvi| \arg{specials}
+\end{decl}
+These commands save in a box register things which are written to the
+|.dvi| file at the beginning of the `shipout' of the first page of the
+document.
+
+This should not be used for anything that will add any typeset
+material to the |.dvi| file.
+
+Repeated use of this command is permitted.
+
+
+\subsection{Option processing}
+\label{Sec:commands.options}
+
+\begin{decl}
+ |\ProcessOptions|
+\end{decl}
+This command executes the \m{code} for each selected option.
+
+We shall first describe how |\ProcessOptions| works in a package file,
+and then how this differs in a class file.
+
+To understand in detail what |\ProcessOptions| does in a package file,
+you have to know the difference between \emph{local} and \emph{global}
+options.
+\begin{itemize}
+\item \textbf{Local options} are those which have been explicitly
+ specified for this particular package in the \m{options} argument of
+ any of these:
+\begin{quote}
+ |\PassOptionsToPackage{<options>}| \ |\usepackage[<options>]|\\
+ |\RequirePackage[<options>]|
+\end{quote}
+\item \textbf{Global options} are any other options that are specified
+ by the author in the \m{options} argument of
+ |\documentclass[<options>]|.
+\end{itemize}
+For example, suppose that a document begins:
+\begin{verbatim}
+ \documentclass[german,twocolumn]{article}
+ \usepackage{gerhardt}
+\end{verbatim}
+whilst package |gerhardt| calls package |fred| with:
+\begin{verbatim}
+ \PassOptionsToPackage{german,dvips,a4paper}{fred}
+ \RequirePackage[errorshow]{fred}
+\end{verbatim}
+then:
+\begin{itemize}
+\item |fred|'s local options are |german|, |dvips|, |a4paper|
+ and |errorshow|;
+\item |fred|'s only global option is |twocolumn|.
+\end{itemize}
+
+When |\ProcessOptions| is called, the following happen.
+\begin{itemize}
+\item \emph{First}, for each option so far declared in |fred.sty|
+ by |\DeclareOption|, it looks to see if that option is either a
+ global or a local option for |fred|: if it is then the corresponding
+ code is executed.
+
+ This is done in the order in which these options
+ were declared in |fred.sty|.
+\item \emph{Then}, for each remaining \emph{local} option, the command
+ |\ds@<option>| is executed if it has been defined somewhere (other
+ than by a |\DeclareOption|); otherwise, the `default option code' is
+ executed. If no default option code has been declared then an error
+ message is produced.
+
+ This is done in the order in which these
+ options were specified.
+\end{itemize}
+Throughout this process, the system ensures that the code declared for
+an option is executed at most once.
+
+Returning to the example, if |fred.sty| contains:
+\begin{verbatim}
+ \DeclareOption{dvips}{\typeout{DVIPS}}
+ \DeclareOption{german}{\typeout{GERMAN}}
+ \DeclareOption{french}{\typeout{FRENCH}}
+ \DeclareOption*{\PackageWarning{fred}{Unknown `\CurrentOption'}}
+ \ProcessOptions\relax
+\end{verbatim}
+then the result of processing this document will be:
+\begin{verbatim}
+ DVIPS
+ GERMAN
+ Package fred Warning: Unknown `a4paper'.
+ Package fred Warning: Unknown `errorshow'.
+\end{verbatim}
+Note the following:
+
+\begin{itemize}
+\item the code for the |dvips| option is executed before that for the
+ |german| option, because that is the order in which they are declared
+ in |fred.sty|;
+\item the code for the |german| option is executed only once, when the
+ declared options are being processed;
+\item the |a4paper| and |errorshow| options produce the warning from
+ the code declared by |\DeclareOption*| (in the order in which they
+ were specified), whilst the |twocolumn| option does not: this is
+ because |twocolumn| is a global option.
+\end{itemize}
+
+In a class file, |\ProcessOptions| works in the same way, except
+that: \emph{all} options are local; and the default value for
+|\DeclareOption*| is |\OptionNotUsed| rather than an error.
+
+\NEWdescription{1995/12/01}
+Note that, because |\ProcessOptions| has a |*|-form, it is wise to
+follow the non-star form with |\relax|, as in the previous examples,
+since this prevents unnecessary look ahead and possibly misleading
+error messages being issued.
+
+\begin{decl}
+ |\ProcessOptions*| \\
+ |\@options|
+\end{decl}
+This is like |\ProcessOptions| but it executes the options in the
+order specified in the calling commands, rather than in the order of
+declaration in the class or package. For a package this means that the
+global options are processed first.
+
+The |\@options| command from \LaTeX~2.09 has been made equivalent to
+this in order to ease the task of updating old document styles to
+\LaTeXe{} class files.
+
+\begin{decl}
+ |\ExecuteOptions| \arg{options-list}
+\end{decl}
+
+For each option in the \m{options-list}, in order,
+this command simply executes the command
+|\ds@<option>| (if this command is not defined, then that option is
+silently ignored).
+
+It can be used to provide a `default option list' just before
+|\ProcessOptions|. For example, suppose that in a class file you want
+to set up the default design to be: two-sided printing; 11pt fonts;
+in two columns. Then it could specify:
+\begin{verbatim}
+ \ExecuteOptions{11pt,twoside,twocolumn}
+\end{verbatim}
+
+
+\subsection{Safe file commands}
+
+These commands deal with file input; they ensure that the non-existence
+of a requested file can be handled in a user-friendly way.
+
+\begin{decl}
+|\IfFileExists| \arg{file-name} \arg{true} \arg{false}
+\end{decl}
+If the file exists then the code specified in \m{true} is
+executed.
+
+If the file does not exist then the code specified in \m{false} is
+executed.
+
+This command does \emph{not} input the file.
+
+\begin{decl}
+ |\InputIfFileExists| \arg{file-name} \arg{true} \arg{false}
+\end{decl}
+This inputs the file \m{file-name} if it exists and, immediately
+before the input, the code specified in \m{true} is executed.
+
+If the file does not exist then the code specified in \m{false} is
+executed.
+
+It is implemented using |\IfFileExists|.
+
+
+\subsection{Reporting errors, etc}
+
+These commands should be used by third party classes and packages to
+report errors, or to provide information to authors.
+
+\begin{decl}
+ |\ClassError| \arg{class-name} \arg{error-text} \arg{help-text}\\
+ |\PackageError| \arg{package-name} \arg{error-text} \arg{help-text}
+\end{decl}
+These produce an error message. The \m{error-text} is displayed and the
+|?| error prompt is shown. If the user types |h|, they will be shown
+the \m{help-text}.
+
+Within the \m{error-text} and \m{help-text}: |\protect| can be used to
+stop a command from expanding; |\MessageBreak| causes a line-break;
+and |\space| prints a space.
+
+Note that the \m{error-text} will have a full stop added to it, so do
+not put one into the argument.
+
+For example:
+\begin{verbatim}
+ \newcommand{\foo}{FOO}
+ \PackageError{ethel}{%
+ Your hovercraft is full of eels,\MessageBreak
+ and \protect\foo\space is \foo
+ }{%
+ Oh dear! Something's gone wrong.\MessageBreak
+ \space \space Try typing \space <<return>>
+ \space to proceed, ignoring \protect\foo.
+ }
+\end{verbatim}
+produces this display:
+\begin{verbatim}
+ ! Package ethel Error: Your hovercraft is full of eels,
+ (ethel) and \foo is FOO.
+
+ See the ethel package documentation for explanation.
+\end{verbatim}
+If the user types |h|, this will be shown:
+\begin{verbatim}
+ Oh dear! Something's gone wrong.
+ Try typing <<return>> to proceed, ignoring \foo.
+\end{verbatim}
+
+\begin{decl}
+ |\ClassWarning| \arg{class-name} \arg{warning-text}\\
+ |\PackageWarning| \arg{package-name} \arg{warning-text}\\
+ |\ClassWarningNoLine| \arg{class-name} \arg{warning-text}\\
+ |\PackageWarningNoLine| \arg{package-name} \arg{warning-text}\\
+ |\ClassInfo| \arg{class-name} \arg{info-text}\\
+ |\PackageInfo| \arg{package-name} \arg{info-text}
+\end{decl}
+The four |Warning| commands are similar to the error commands, except
+that they produce only a warning on the screen, with no error prompt.
+
+The first two, |Warning| versions, also show the line number where the
+warning occurred, whilst the second two, |WarningNoLine| versions, do
+not.
+
+The two |Info| commands are similar except that they log the
+information only in the transcript file, including the line number.
+There are no |NoLine| versions of these two.
+
+Within the \m{warning-text} and \m{info-text}: |\protect| can be used to
+stop a command from expanding; |\MessageBreak| causes a line-break;
+and |\space| prints a space.
+Also, these should not end with a full stop as one is
+automatically added.
+
+
+\subsection{Defining commands}
+\label{Sec:commands.define}
+
+\LaTeXe{} provides some extra methods of (re)defining commands that are
+intended for use in class and package files.
+
+\NEWfeature{1994/12/01}
+The \texttt{*}-forms of these commands should be used to define
+commands that are not, in \TeX{} terms, long. This can be useful for
+error-trapping with commands whose arguments are not intended to
+contain whole paragraphs of text.
+
+\begin{decl}
+ |\DeclareRobustCommand| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}\\
+ |\DeclareRobustCommand*| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}
+\end{decl}
+This command takes the same arguments as |\newcommand| but it declares
+a robust command, even if some code within the \m{definition} is
+fragile. You can use this command to define new robust commands, or
+to redefine existing commands and make them robust. A log is put into
+the transcript file if a command is redefined.
+
+For example, if |\seq| is defined as follows:
+\begin{verbatim}
+ \DeclareRobustCommand{\seq}[2][n]{%
+ \ifmmode
+ #1_{1}\ldots#1_{#2}%
+ \else
+ \PackageWarning{fred}{You can't use \protect\seq\space in text}%
+ \fi
+ }
+\end{verbatim}
+Then the command |\seq| can be used in moving arguments, even though
+|\ifmmode| cannot, for example:
+\begin{verbatim}
+ \section{Stuff about sequences $\seq{x}$}
+\end{verbatim}
+
+Note also that there is no need to put a |\relax| before the
+|\ifmmode| at the beginning of the definition; this is because the
+protection given by this |\relax| against expansion at the wrong time
+will be provided internally.
+
+\begin{decl}
+ |\CheckCommand| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}\\
+ |\CheckCommand*| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}
+\end{decl}
+This takes the same arguments as |\newcommand| but, rather than define
+\m{cmd}, it just checks that the current definition of \m{cmd} is
+exactly as given by \m{definition}. An error is raised if these
+definitions differ.
+
+This command is useful for checking the state of the system before
+your package starts altering the definitions of commands. It allows
+you to check, in particular, that no other package has redefined the
+same command.
+
+\subsection{Moving arguments}
+
+\NEWdescription{1994/12/01}
+The setting of protect whilst processing (i.e.~moving) moving arguments
+has been reimplemented, as has the method of writing information from
+the |.aux| file to other files such as the |.toc| file. Details can
+be found in the file |ltdefns.dtx|.
+
+We hope that these changes will not affect many packages.
+
+\section{Miscellaneous commands, etc}
+\label{Sec:commands.misc}
+
+\subsection{Layout parameters}
+
+\begin{decl}
+|\paperheight|\\
+|\paperwidth|
+\end{decl}
+These two parameters are usually set by the class to be the size of
+the paper being used. This should be actual paper size, unlike
+|\textwidth| and |\textheight| which are the size of the main text
+body within the margins.
+
+
+\subsection{Case changing}
+\label{sec:case}
+
+\begin{decl}
+ |\MakeUppercase| \arg{text} \\
+ |\MakeLowercase| \arg{text}
+\end{decl}
+
+\NEWfeature{1995/06/01}
+\TeX{} provides two primitives |\uppercase| and |\lowercase| for
+changing the case of text. These are sometimes used in document
+classes, for example to set information in running heads in all
+capitals.
+
+Unfortunately, these \TeX{} primitives do not change the case of
+characters accessed by commands like |\ae| or |\aa|. To overcome this
+problem, \LaTeX{} provides two new commands |\MakeUppercase| and
+|\MakeLowercase| to do this.
+
+For example:
+\begin{quotation}
+\begin{tabular}{rl}
+ |\uppercase{aBcD\ae\AA\ss\OE}| & \uppercase{aBcD\ae\AA\ss\OE}\\
+ |\lowercase{aBcD\ae\AA\ss\OE}| & \lowercase{aBcD\ae\AA\ss\OE}\\
+ |\MakeUppercase{aBcD\ae\AA\ss\OE}| &
+ \MakeUppercase{aBcD\ae\AA\ss\OE}\\
+ |\MakeLowercase{aBcD\ae\AA\ss\OE}| & \MakeLowercase{aBcD\ae\AA\ss\OE}
+\end{tabular}
+\end{quotation}
+
+The commands |\MakeUppercase| and |\MakeLowercase| themselves are
+robust, but they have moving arguments.
+
+The commands use the \TeX{} primitives |\uppercase| and |\lowercase|,
+and so have a number of unexpected `features'. In particular, they
+change the case of everything (except characters in the names of
+control-sequences) in their text argument: this includes mathematics,
+environment names, and label names.
+
+For example:
+\begin{verbatim}
+ \MakeUppercase{$x+y$ in \ref{foo}}
+\end{verbatim}
+produces $X+Y$ and the warning:
+\begin{verbatim}
+ LaTeX Warning: Reference `FOO' on page ... undefined on ...
+\end{verbatim}
+In the long run, we would like to use all-caps fonts rather than any
+command like |\MakeUppercase| but this is not possible at the moment
+because such fonts do not exist.
+
+\NEWdescription{1995/12/01}
+In order that upper/lower-casing will work reasonably well, and in
+order to provide any correct hyphenation, \LaTeXe{} \emph{must} use,
+throughout a document, the same fixed table for changing case.
+The table used is designed for the font encoding |T1|; this works well
+with the standard \TeX{} fonts for all Latin alphabets but will cause
+problems when using other alphabets.
+
+\subsection{The `openany' option in the `book' class}
+
+\NEWdescription{1996/06/01}
+The |openany| option allows chapter and similar openings to
+occur on left hand pages. Previously this option affected only
+|\chapter| and |\backmatter|. It now also affects
+|\part|, |\frontmatter| and |\mainmatter|.
+
+\subsection{Better user-defined math display environments}
+
+\begin{decl}
+ |\ignorespacesafterend|
+\end{decl}
+
+\NEWfeature{1996/12/01}
+\NEWdescription{2003/12/01}
+Suppose that you want to define an environment for displaying text
+that is numbered as an equation. A straightforward way to do this is
+as follows:
+\begin{verbatim}
+ \newenvironment{texteqn}
+ {\begin{equation}
+ \begin{minipage}{0.9\linewidth}}
+ {\end{minipage}
+ \end{equation}}
+\end{verbatim}
+However, if you have tried this then you will probably have noticed
+that it does not work perfectly when used in the middle of a paragraph
+because an inter-word space appears at the beginning of the first
+line after the environment.
+
+There is now an extra command (with a very long name) available that
+you can use to avoid this problem; it should be inserted as shown here:
+\begin{verbatim}
+ \newenvironment{texteqn}
+ {\begin{equation}
+ \begin{minipage}{0.9\linewidth}}
+ {\end{minipage}
+ \end{equation}
+ \ignorespacesafterend}
+\end{verbatim}
+
+This command may also have other uses.
+
+\subsection{Normalising spacing}
+
+\begin{decl}
+ |\normalsfcodes|
+\end{decl}
+
+\NEWfeature{1997/06/01}
+This command should be used to restore the normal settings of the
+parameters that affect spacing between words, sentences, etc.
+
+An important use of this feature is to correct a problem, reported by
+Donald Arseneau, that punctuation in page headers has always (in all
+known \TeX{} formats) been potentially wrong whenever a page break
+happens while a local setting of the space codes is in effect. These
+space codes are changed by, for example, the command
+\verb|\frenchspacing|) and the \textsf{verbatim} environment.
+
+It is normally given the correct definition automatically in
+|\begin{document}| and so need not be explicitly set; however, if it
+is explicitly made nonempty in a class file then automatic
+default setting will be over-ridden.
+
+
+\section{Upgrading \LaTeX~2.09 classes and packages}
+\label{Sec:upgrade}
+
+This section describes the changes you may need to make when you
+upgrade an existing \LaTeX{} style to a package or class but we shall
+start in optimistic mode.
+
+Many existing style files will run with \LaTeXe{} without any
+modification to the file itself. When everything is running OK,
+please put a note in the newly created package or class file to record
+that it runs with the new standard \LaTeX{}; then distribute it to
+your users.
+
+\subsection{Try it first!}
+\label{Sec:try-it}
+
+The first thing you should do is to test your style in `compatibility
+mode'. The only change you need to make in order to do this is,
+possibly, to change the extension of the file to |.cls|: you should
+make this change only if your file was used as a main document style.
+Now, without any other modifications, run \LaTeXe{} on a document that
+uses your file. This assumes that you have a suitable collection of
+files that tests all the functionality provided by your style file.
+(If you haven't, now is the time to make one!)
+
+You now need to change the test document files so that they are
+\LaTeXe{} documents: see \emph{\usrguide} for details of how to do
+this and then try them again. You have now tried the test documents
+in both \LaTeXe{} native mode and \LaTeX~2.09 compatibility mode.
+
+\subsection{Troubleshooting}
+\label{Sec:trouble}
+
+If your file does not work with \LaTeXe{}, there are two likely
+reasons.
+\begin{itemize}
+\item \LaTeX{} now has a robust, well-defined designer's interface for
+ selecting fonts, which is very different from the \LaTeX~2.09
+ internals.
+\item Your style file may have used some \LaTeX~2.09 internal commands
+ which have changed, or which have been removed.
+\end{itemize}
+
+When you are debugging your file, you will probably need more
+information than is normally displayed by \LaTeXe. This is achieved
+by resetting the counter |errorcontextlines| from its default value of
+$-1$ to a much higher value, e.g.~999.
+
+\subsection{Accommodating compatibility mode}
+
+Sometimes an existing collection of \LaTeX~2.09 documents makes it
+inconvenient or impossible to abandon the old commands entirely.
+If this is the case, then it is possible to accommodate both conventions
+by making special provision for documents processed in compatibility
+mode.
+
+\begin{decl}
+|\if@compatibility|
+\end{decl}
+This switch is set when a document begins with |\documentstyle| rather
+than |\documentclass|. Appropriate code can be supplied for either
+condition, as follows:
+\begin{verbatim}
+ \if@compatibility
+ <code emulating LaTeX 2.09 behavior>
+ \else
+ <code suitable for LaTeX2e>
+ \fi
+\end{verbatim}
+
+
+\subsection{Font commands}
+
+Some font and size commands are now defined by the document class
+rather than by the \LaTeX{} kernel. If you are upgrading a
+\LaTeX~2.09 document style to a class that does not load one of the
+standard classes, then you will probably need to add definitions for
+these commands.
+
+\begin{decl}
+ |\rm| |\sf| |\tt| |\bf| |\it| |\sl| |\sc|
+\end{decl}
+None of these short-form font selection commands are defined in the
+\LaTeXe{} kernel. They are defined by all the standard class files.
+
+If you want to define them in your class file, there are several
+reasonable ways to do this.
+
+One possible definition is:
+\begin{verbatim}
+ \newcommand{\rm}{\rmfamily}
+ ...
+ \newcommand{\sc}{\scshape}
+\end{verbatim}
+This would make the font commands orthogonal; for example
+|{\bf\it text}| would produce bold italic, thus: \textbf{\textit{text}}.
+It will also make them produce an error if used in math mode.
+
+Another possible definition is:
+\begin{verbatim}
+ \DeclareOldFontCommand{\rm}{\rmfamily}{\mathrm}
+ ...
+ \DeclareOldFontCommand{\sc}{\scshape}{\mathsc}
+\end{verbatim}
+This will make |\rm| act like |\rmfamily| in text mode (see above) and
+it will make |\rm| select the |\mathrm| math alphabet in math mode.
+
+Thus |${\rm math} = X + 1$| will produce `${\rm math} = X + 1$'.
+
+If you do not want font selection to be orthogonal then you can
+follow the standard classes and define:
+\begin{verbatim}
+ \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+ ...
+ \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\mathsc}
+\end{verbatim}
+This means, for example, that |{\bf\it text}| will produce medium
+weight (rather than bold) italic, thus: \textit{text}.
+
+\begin{decl}
+ |\normalsize| \\
+ |\@normalsize|
+\end{decl}
+The command |\@normalsize| is retained for compatibility with
+\LaTeX~2.09 packages which may have used its value; but redefining it
+in a class file will have no effect since it is always reset to have
+the same meaning as |\normalsize|.
+
+This means that classes \emph{must} now redefine |\normalsize| rather
+than redefining |\@normalsize|; for example (a rather incomplete one):
+\begin{verbatim}
+ \renewcommand{\normalsize}{\fontsize{10}{12}\selectfont}
+\end{verbatim}
+Note that |\normalsize| is defined by the \LaTeX{} kernel to be an
+error message.
+
+\begin{decl}
+ |\tiny| |\footnotesize| |\small| |\large|\\
+ |\Large| |\LARGE| |\huge| |\Huge|
+\end{decl}
+None of these other `standard' size-changing commands are defined in
+the kernel: each needs to be defined in a class file if you need it.
+They are all defined by the standard classes.
+
+This means you should use |\renewcommand| for |\normalsize| and
+|\newcommand| for the other size-changing commands.
+
+
+\subsection{Obsolete commands}
+
+Some packages will not work with \LaTeXe{}, normally because they relied
+on an internal \LaTeX{} command which was never supported and has now
+changed, or been removed.
+
+In many cases there will now be a robust, high-level means of
+achieving what previously required low-level commands. Please consult
+Section~\ref{Sec:commands} to see if you can now use the \LaTeXe{}
+class and package writers commands.
+
+Also, of course, if your package or class redefined any of the kernel
+commands (i.e.~those defined in the files |latex.tex|, |slitex.tex|,
+|lfonts.tex|, |sfonts.tex|) then you will need to check it very
+carefully against the new kernel in case the implementation has
+changed or the command no longer exists in the \LaTeX2e{} kernel.
+
+Too many of the internal commands of \LaTeX~2.09 have been
+re-implemented or removed to be able to list them all here. You must
+check any that you have used or changed.
+
+We shall, however, list some of the more important commands which are
+no longer supported.
+
+\begin{decl}
+ |\tenrm| |\elvrm| |\twlrm| \dots\\
+ |\tenbf| |\elvbf| |\twlbf| \dots\\
+ |\tensf| |\elvsf| |\twlsf| \dots\\
+ \qquad$\vdots$
+\end{decl}
+The (approximately) seventy internal commands of this form are no longer
+defined. If your class or package uses them then \emph{please}
+replace them with new font commands described in \emph{\fntguide}.
+
+For example, the command |\twlsf| should be replaced by:
+\begin{verbatim}
+ \fontsize{12}{14}\normalfont\sffamily\selectfont
+\end{verbatim}
+
+Another possibility is to use the |rawfonts| package, described in
+\emph{\usrguide}.
+
+Also, remember that many of the fonts preloaded by \LaTeX~2.09
+are no longer preloaded.
+
+\begin{decl}
+ |\vpt| |\vipt| |\viipt| \dots
+\end{decl}
+These were the internal size-selecting commands in \LaTeX~2.09.
+(They can still be used in \LaTeX~2.09 compatibility mode.)
+Please use the command |\fontsize| instead: see \emph{\fntguide} for
+details.
+
+For example, |\vpt| should be replaced by:
+\begin{verbatim}
+ \fontsize{5}{6}\normalfont\selectfont
+\end{verbatim}
+
+\begin{decl}
+ |\prm|, |\pbf|, |\ppounds|, |\pLaTeX| \dots
+\end{decl}
+\LaTeX~2.09 used several commands beginning with |\p| in order to
+provide `protected' commands. For example, |\LaTeX| was defined to be
+|\protect\pLaTeX|, and |\pLaTeX| was defined to produce the \LaTeX{}
+logo. This made |\LaTeX| robust, even though |\pLaTeX| was not.
+
+These commands have now been reimplemented using
+|\DeclareRobustCommand|
+(described in Section~\ref{Sec:commands.define}).
+If your package redefined one of the |\p|-commands then you must
+remove the redefinition and use |\DeclareRobustCommand| to redefine the
+non-|\p| command.
+
+\begin{decl}
+|\footheight|\\
+|\@maxsep|\\
+|\@dblmaxsep|
+\end{decl}
+These parameters are not used by \LaTeXe{} so they have been removed,
+except in \LaTeX~2.09 compatibility mode. Classes should no longer
+set them.
+
+\begin{thebibliography}{1}
+
+\bibitem{A-W:DEK91}
+Donald~E. Knuth.
+\newblock {\em The \TeX book}.
+\newblock Addison-Wesley, Reading, Massachusetts, 1986.
+\newblock Revised to cover \TeX3, 1991.
+
+\bibitem{A-W:LLa94}
+Leslie Lamport.
+\newblock {\em {\LaTeX:} A Document Preparation System}.
+\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+
+\bibitem{A-W:MG2004}
+Frank Mittelbach and Michel Goossens.
+\newblock {\em The {\LaTeX} Companion second edition}.
+\newblock With Johannes Braams, David Carlisle, and Chris Rowley.
+\newblock Addison-Wesley, Reading, Massachusetts, 2004.
+
+\end{thebibliography}
+
+\newpage
+\thispagestyle{empty}
+
+\section*{\LaTeXe{} Summary sheet: updating old styles}
+
+Section references below are to \emph{\clsguide}.
+
+\begin{enumerate}
+
+\item Should it become a class or a package?
+ See Section~\ref{Sec:classorpkg} for how to answer this question.
+
+\item If it uses another style file, then you will need to obtain an
+ updated version of this other file. Look at Section~\ref{Sec:loading}
+ for information on how to load other class and package files.
+
+\item Try it: see Section~\ref{Sec:try-it}.
+
+\item It worked? Excellent, but there are probably still some things
+ you should change in order to make your file into a well-structured
+ \LaTeXe{} file that is both robust and portable. So you should now
+ read Section~\ref{Sec:writing}, especially~\ref{Sec:general}. You
+ will also find some useful examples in Section~\ref{Sec:structure}.
+
+ If your file sets up new fonts, font-changing commands or symbols,
+ you should also read \emph{\fntguide}.
+
+\item It did not work? There are three possibilities here:
+ \begin{itemize}
+ \item error messages are produced whilst reading your file;
+ \item error messages are produced whilst processing test documents;
+ \item there are no errors but the output is not as it should be.
+ \end{itemize}
+ Don't forget to check carefully for this last possibility.
+
+ If you have got to this stage then you will need to read
+ Section~\ref{Sec:upgrade} to find the solutions that will make your
+ file work.
+\end{enumerate}
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf b/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
index ab8af60728e..3d17c94cba2 100644
--- a/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide.tex b/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
index ce2c1dcf813..7225425ec8a 100644
--- a/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/clsguide.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2023
+% Copyright (C) 2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -28,21 +28,32 @@
% \fi
% Filename: clsguide.tex
-\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\documentclass{ltxguide}
-\documentclass{ltxguide}[1995/11/28]
+\usepackage[T1]{fontenc} % needed for \textbackslash in tt
+\usepackage{csquotes}
-\title{\LaTeXe~for class and package writers}
-
-\author{Copyright \copyright~1995--2006 The \LaTeX\ Project\\
+\title{\LaTeX\ for package and class authors --- current version}
+\author{\copyright~Copyright 2023, \LaTeX\ Project Team.\\
All rights reserved.%
- \footnote{This file may be distributed and/or modified under the
+ \footnote{This file may distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
of this license or (at your option) any later version. See the source
\texttt{clsguide.tex} for full details.}%
}
-\date{15 February 2006}
+\date{2023-01-12}
+
+\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
+\NewDocumentCommand\marg{m}{\arg{#1}}
+\NewDocumentCommand\meta{m}{\ensuremath{\langle}\textit{#1}\ensuremath{\rangle}}
+\NewDocumentCommand\pkg{m}{\textsf{#1}}
+\NewDocumentCommand\text{m}{\ifmmode\mbox{#1}\else#1\fi}
+% Fix a 'feature'
+\makeatletter
+\renewcommand \verbatim@font {\normalfont \ttfamily}
+\makeatother
+\providecommand\url[1]{\texttt{#1}}
\begin{document}
@@ -52,105 +63,74 @@
\section{Introduction}
-This document is an introduction to writing classes and packages for
-\LaTeX{}, with special attention given to upgrading existing
-\LaTeX~2.09 packages to \LaTeXe{}. The latter subject is also
-covered in an article by Johannes Braams published in TUGboat~15.3.
-
-\subsection{Writing classes and packages for \LaTeXe}
-
-\LaTeX{} is a document preparation system that enables the document
-writer to concentrate on the contents of their text, without bothering
-too much about the formatting of it. For example, chapters are
-indicated by |\chapter{<title>}| rather than by selecting 18pt bold.
-
-The file that contains the information about how to turn logical
-structure (like `|\chapter|') into formatting (like `18pt bold ragged
-right') is a \emph{document class}. In addition, some features (such
-as colour or included graphics) are independent of the document class
-and these are contained in \emph{packages}.
+\LaTeXe{} was released in 1994 and added a number of then-new concepts to
+\LaTeX{}. For package and class authors, these are described in
+\texttt{clsguide-historic}, which has largely remained unchanged. Since then,
+the \LaTeX{} team have worked on a number of ideas, firstly a programming
+language for \LaTeX{} (L3 programming layer) and then a range of tools for
+authors which build on that language. Here, we describe the current, stable set
+of tools provided by the \LaTeX{} kernel for package and class developers. We
+assume familiarity with general \LaTeX{} usage as a document author, and that
+the material here is read in conjunction with \texttt{usrguide}, which provides
+information for general \LaTeX{} users on up-to-date approaches to creating
+commands, etc.
-One of the largest differences between \LaTeX~2.09 and \LaTeXe{} is in
-the commands used to write packages and classes. In \LaTeX~2.09,
-there was very little support for writing |.sty| files, and so writers
-had to resort to using low-level commands.
+\section{Writing classes and packages}
+\label{Sec:writing}
-\LaTeXe{} provides high-level commands for structuring packages.
-It is also much easier to build classes and packages on top of each
-other, for example writing a local technical report class |cetechr|
-(for the Chemical Engineering department) based on |article|.
+This section covers some general points concerned with writing
+\LaTeX{} classes and packages.
-\subsection{Overview}
+\subsection{Is it a class or a package?}
+\label{Sec:classorpkg}
-This document contains an overview of how to write classes and
-packages for \LaTeX{}. It does \emph{not} introduce all of the
-commands necessary to write packages: these can be found in either
-\emph{\LaTeXbook} or \emph{\LaTeXcomp}. But it does describe the new
-commands for structuring classes and packages.
+The first thing to do when you want to put some new \LaTeX{} commands
+in a file is to decide whether it should be a \emph{document class} or a
+\emph{package}. The rule of thumb is:
+\begin{quote}
+ If the commands could be used with any document class, then make
+ them a package; and if not, then make them a class.
+\end{quote}
-\begin{description}
+There are two major types of class: those like |article|, |report| or
+|letter|, which are free-standing; and those which are extensions or
+variations of other classes---for example, the |proc| document class,
+which is built on the |article| document class.
-\item[Section~\ref{Sec:general}] contains some general advice about
- writing classes and packages. It describes the difference between
- classes and packages, the command naming conventions, the use of
- |doc| and |docstrip|, how \TeX's primitive file and box commands
- interact with \LaTeX{}. It also contains some hints about general
- \LaTeX{} style.
+Thus, a company might have a local |ownlet| class for printing letters
+with their own headed note-paper. Such a class would build on top of
+the existing |letter| class but it cannot be used with any other
+document class, so we have |ownlet.cls| rather than |ownlet.sty|.
-\item[Section~\ref{Sec:structure}] describes the structure of classes
- and packages. This includes building classes and packages on top of
- other classes and packages, declaring options and declaring
- commands. It also contains example classes.
+The |graphics| package, in contrast, provides commands for including
+images into a \LaTeX{} document. Since these commands can be used
+with any document class, we have |graphics.sty| rather than
+|graphics.cls|.
-\item[Section~\ref{Sec:commands}] lists the new class and package
- commands.
+\subsection{Using `docstrip' and `doc'}
- \item[Section~\ref{Sec:upgrade}] gives detailed advice on how to
- upgrade existing \LaTeX~2.09 classes and packages to \LaTeXe{}.
+If you are going to write a large class or package for \LaTeX{} then
+you should consider using the |doc| software which comes with
+\LaTeX{}.
+\LaTeX{} classes and packages written using this can be
+processed in two ways: they can be run through \LaTeX{}, to produce
+documentation; and they can be processed with |docstrip|, to produce
+the |.cls| or |.sty| file.
-\end{description}
+The |doc| software can automatically generate indexes of definitions,
+indexes of command use, and change-log lists. It is very useful for
+maintaining and documenting large \TeX{} sources.
-\subsection{Further information}
-
-For a general introduction to \LaTeX{}, including the new features of
-\LaTeXe{}, you should read \emph{\LaTeXbook}
-by Leslie Lamport~\cite{A-W:LLa94}.
-
-A more detailed description of the new features of \LaTeX, including an
-overview of more than 200 packages and nearly 1000 ready to run examples, is
-to be found in \emph{\LaTeXcomp\ second edition} by Frank Mittelbach and
-Michel Goossens~\cite{A-W:MG2004}.
-
-The \LaTeX{} system is based on \TeX{}, which is
-described in \emph{The \TeX book} by Donald E.~Knuth~\cite{A-W:DEK91}.
-
-There are a number of documentation files which accompany every copy
-of \LaTeX{}. A copy of \emph{\LaTeX{} News} will come out with each
-six-monthly release of \LaTeX{}, and is found in the files
-|ltnews*.tex|. The author's guide \emph{\usrguide} describes the new
-\LaTeX{} document features; it is in |usrguide.tex|. The guide
-\emph{\fntguide} describes the \LaTeX{} font selection scheme for
-class- and package-writers; it is in |fntguide.tex|. Configuring
-\LaTeX{} is covered by the guide \emph{\cfgguide} in
-\texttt{cfgguide.tex} whilst the philosophy behind our policy on
-modifying \LaTeX{} is described in \emph{\modguide} in
-\texttt{modguide.tex}.
-
-The documented source code (from the files used to produce the kernel
-format via |latex.ltx|) is now available as
-\emph{The \LaTeXe\ Sources}.
-This very large document also includes an index of
-\LaTeX{} commands. It can be typeset from the \LaTeX{} file
-|source2e.tex| in the |base| directory, using the source files and
-the class file |ltxdoc.cls| from this directory.
-
-For more information about \TeX{} and \LaTeX{}, please contact your
-local \TeX{} Users Group, or the international \TeX{} Users Group.
-Addresses and other details can be found at:
-\begin{quote}\small\label{addrs}
- \texttt{http://www.tug.org/lugs.html}
-\end{quote}
+The documented sources of the \LaTeX{} kernel itself, and of the
+standard classes, etc., are |doc| documents; they are in the |.dtx|
+files in the distribution. You can, in fact, typeset the source code
+of the kernel as one long document, complete with index, by running
+\LaTeX{} on |source2e.tex|. Typesetting these documents uses the
+class file |ltxdoc.cls|.
+For more information on |doc| and |docstrip|, consult the files
+|docstrip.dtx|, |doc.dtx|, and \emph{\LaTeXcomp}. For examples of its
+use, look at the |.dtx| files.
\subsection{Policy on standard classes}
@@ -182,89 +162,10 @@ packages that can be used to enhance these classes. So your first
thought when you consider such a deficiency will, we hope, be ``what
can I do to improve this?''
-Similar considerations apply to those parts of the kernel that are
-implementing design decisions, many of which should be left to the
-class file but are not in the current system. We realise that in such
-cases it is much more difficult for you to rectify the problem
-yourself but it is also the case that making such changes in the
-kernel would probably be a major project for us; therefore such
-enhancements will have to wait for \LaTeX3.
-
-\section{Writing classes and packages}
-\label{Sec:writing}
-
-This section covers some general points concerned with writing
-\LaTeX{} classes and packages.
-
-
-\subsection{Old versions}
-
-If you are upgrading an existing \LaTeX~2.09 style file then we
-recommend freezing the 2.09 version and no longer maintaining it.
-Experience with the various dialects of \LaTeX{} which existed in the
-early 1990's suggests that maintaining packages for different versions
-of \LaTeX{} is almost impossible. It will, of course, be necessary
-for some organisations to maintain both versions in parallel for some
-time but this is not essential for those packages and classes
-supported by individuals: they should support only the new standard
-\LaTeXe{}, not obsolete versions of \LaTeX{}.
-
-
-\subsection{Using `docstrip' and `doc'}
-
-If you are going to write a large class or package for \LaTeX{} then
-you should consider using the |doc| software which comes with
-\LaTeX{}.
-\LaTeX{} classes and packages written using this can be
-processed in two ways: they can be run through \LaTeX{}, to produce
-documentation; and they can be processed with |docstrip|, to produce
-the |.cls| or |.sty| file.
-
-The |doc| software can automatically generate indexes of definitions,
-indexes of command use, and change-log lists. It is very useful for
-maintaining and documenting large \TeX{} sources.
-
-The documented sources of the \LaTeX{} kernel itself, and of the
-standard classes, etc, are |doc| documents; they are in the |.dtx|
-files in the distribution. You can, in fact, typeset the source code
-of the kernel as one long document, complete with index, by running
-\LaTeX{} on |source2e.tex|. Typesetting these documents uses the
-class file |ltxdoc.cls|.
-
-For more information on |doc| and |docstrip|, consult the files
-|docstrip.dtx|, |doc.dtx|, and \emph{\LaTeXcomp}. For examples of its
-use, look at the |.dtx| files.
-
-\subsection{Is it a class or a package?}
-\label{Sec:classorpkg}
-
-The first thing to do when you want to put some new \LaTeX{} commands
-in a file is to decide whether it should be a \emph{document class} or a
-\emph{package}. The rule of thumb is:
-\begin{quote}
- If the commands could be used with any document class, then make
- them a package; and if not, then make them a class.
-\end{quote}
-
-There are two major types of class: those like |article|, |report| or
-|letter|, which are free-standing; and those which are extensions or
-variations of other classes---for example, the |proc| document class,
-which is built on the |article| document class.
-
-Thus, a company might have a local |ownlet| class for printing letters
-with their own headed note-paper. Such a class would build on top of
-the existing |letter| class but it cannot be used with any other
-document class, so we have |ownlet.cls| rather than |ownlet.sty|.
-
-The |graphics| package, in contrast, provides commands for including
-images into a \LaTeX{} document. Since these commands can be used
-with any document class, we have |graphics.sty| rather than
-|graphics.cls|.
-
-
\subsection{Command names}
-\LaTeX{} has three types of command.
+Prior to the introduction of the L3~programming layer described in the next
+section, \LaTeX{} had three types of command.
There are the author commands, such as |\section|, |\emph| and
|\times|: most of these have short names, all in lower case.
@@ -289,117 +190,97 @@ However, this rule of thumb is still useful: if a command has |@| in
its name then it is not part of the supported \LaTeX{} language---and
its behaviour may change in future releases! If a command is
mixed-case, or is described in \emph{\LaTeXbook}, then you can rely on
-future releases of \LaTeXe{} supporting the command.
-
-\subsection{Box commands and colour}
-\label{Sec:colour}
-
-Even if you do not intend to use colour in your own documents, by
-taking note of the points in this section you can ensure that your
-class or package is compatible with the |color| package. This may
-benefit people using your class or package who have access to colour
-printers.
-
-The simplest way to ensure `colour safety' is to always use \LaTeX{}
-box commands rather than \TeX{} primitives, that is use |\sbox| rather
-than |\setbox|, |\mbox| rather than |\hbox| and |\parbox| or
-the |minipage| environment rather than |\vbox|.
-The \LaTeX{} box commands have new options which mean that they are now
-as powerful as the \TeX{} primitives.
-
-As an example of what can go wrong, consider that in
-|{\ttfamily <text>}|
-the font is restored just \emph{before} the |}|, whereas in the
-similar looking construction
-|{\color{green} <text>}|
-the colour is restored just \emph{after} the final |}|. Normally this
-distinction does not matter at all; but consider a primitive \TeX{}
-box assignment such as:
+future releases of \LaTeX{} supporting the command.
+
+\subsection{Programming support}
+
+As noted in the introduction, the \LaTeX{} kernel today loads dedicated support
+from programming, here referred to as the L3 programming layer but also often
+called \pkg{expl3}. Details of the general approach taken by the L3
+programming layer are given in the document \texttt{expl3}, while a reference
+for all current code interfaces is available as \texttt{interface3}. This layer
+contains two types of command: a documented set of commands making up the API
+and a large number of private internal commands. The latter all start with two
+underscores and should not be used outside of the code module which defines
+them. This more structured approach means that using the L3 programming layer
+does not suffer from the somewhat fluid situation mentioned above with
+`\texttt{@} commands'.
+
+We do not cover the detail of using the L3 programming layer here. A good
+introduction to the approach is provided at
+\url{https://www.alanshawn.com/latex3-tutorial/}.
+
+\subsection{Box commands and color}
+\label{Sec:color}
+
+Even if you do not intend to use color in your own documents, by taking note of
+the points in this section you can ensure that your class or package is
+compatible with the |color| package. This may benefit people using your class
+or package and wish to use color.
+
+The simplest way to ensure `color safety' is to always use \LaTeX{} box
+commands rather than \TeX{} primitives, that is use |\sbox| rather than
+|\setbox|, |\mbox| rather than |\hbox| and |\parbox| or the |minipage|
+environment rather than |\vbox|. The \LaTeX{} box commands have new options
+which mean that they are now as powerful as the \TeX{} primitives.
+
+As an example of what can go wrong, consider that in |{\ttfamily <text>}| the
+font is restored just \emph{before} the |}|, whereas in the similar looking
+construction |{\color{green} <text>}| the color is restored just \emph{after}
+the final |}|. Normally this distinction does not matter at all; but consider a
+primitive \TeX{} box assignment such as:
\begin{verbatim}
\setbox0=\hbox{\color{green} <text>}
\end{verbatim}
-Now the colour-restore occurs after the |}| and so is \emph{not}
-stored in the box. Exactly what bad effects this can have depends on
-how colour is implemented: it can range from getting the wrong
-colours in the rest of the document, to causing errors in the
-dvi-driver used to print the document.
-
-Also of interest is the command |\normalcolor|. This is
-normally just |\relax| (i.e., does nothing)
-but you can use it rather like |\normalfont| to
-set regions of the page such as captions or section headings to the
-`main document colour'.
-
-
-\subsection{Defining text and math characters}
-\label{Sec:chars}
-
-Because \LaTeXe{} supports different encodings, definitions of commands
-for producing symbols, accents, composite glyphs, etc.\ must be
-defined using the commands provided for this purpose and described in
-\emph{\fntguide}. This part of the system is still under development
-so such tasks should be undertaken with great caution.
-
-Also, |\DeclareRobustCommand| should be used for encoding-independent
-commands of this type.
-
-Note that it is no longer possible to refer to the math font set-up
-outside math mode: for example, neither |\textfont 1| nor
-|\scriptfont 2| are guaranteed to be defined in other modes.
+Now the color-restore occurs after the |}| and so is \emph{not} stored in the
+box. Exactly what bad effects this can have depends on how color is
+implemented: it can range from getting the wrong colors in the rest of the
+document, to causing errors in the dvi-driver used to print the document.
+Also of interest is the command |\normalcolor|. This is normally just |\relax|
+(i.e., does nothing) but you can use it rather like |\normalfont| to set
+regions of the page such as captions or section headings to the `main document
+color'.
\subsection{General style}
\label{Sec:general}
-The new system provides many commands designed to help you produce
-well-structured class and package files that are both robust and
-portable. This section outlines some ways to make intelligent use of
-these.
+\LaTeX{} provides many commands designed to help you produce well-structured
+class and package files that are both robust and portable. This section
+outlines some ways to make intelligent use of these.
\subsubsection{Loading other files}
\label{Sec:loading}
-\NEWdescription{1995/12/01}
\LaTeX{} provides these commands:
\begin{verbatim}
\LoadClass \LoadClassWithOptions
\RequirePackage \RequirePackageWithOptions
\end{verbatim}
-for using classes or packages inside other classes or packages. We
-recommend strongly that you use them, rather than the primitive
-|\input| command, for a number of reasons.
+for using classes or packages inside other classes or packages. We recommend
+strongly that you use them, rather than the primitive |\input| command, for a
+number of reasons.
-Files loaded with |\input <filename>| will not be listed in the
-|\listfiles| list.
+Files loaded with |\input <filename>| will not be listed in the |\listfiles|
+list.
-If a package is always loaded with |\RequirePackage...| or |\usepackage|
-then, even if its loading is requested several times, it will be
-loaded only once. By contrast, if it is loaded with |\input| then it
-can be loaded more than once; such an extra loading may waste time and
-memory and it may produce strange results.
+If a package is always loaded with |\RequirePackage...| or |\usepackage| then,
+even if its loading is requested several times, it will be loaded only once. By
+contrast, if it is loaded with |\input| then it can be loaded more than once;
+such an extra loading may waste time and memory and it may produce strange
+results.
-If a package provides option-processing then, again, strange results
-are possible if the package is |\input| rather than loaded by means of
+If a package provides option-processing then, again, strange results are
+possible if the package is |\input| rather than loaded by means of
|\usepackage| or |\RequirePackage...|.
-If the package |foo.sty| loads the package |baz.sty| by use of
-|\input baz.sty| then the user will get a warning:
+If the package |foo.sty| loads the package |baz.sty| by use of |\input baz.sty|
+then the user will get a warning:
\begin{verbatim}
LaTeX Warning: You have requested package `foo',
but the package provides `baz'.
\end{verbatim}
-Thus, for several reasons, using |\input| to load packages is not a
-good idea.
-
-Unfortunately, if you are upgrading the file |myclass.sty| to a class
-file then you have to make sure that any old files which contain
-|\input myclass.sty| still work.
-
-This was also true for the standard classes (|article|, |book| and
-|report|), since a lot of existing \LaTeX~2.09 document styles contain
-|\input article.sty|. The approach which we use to solve this is
-to provide minimal files |article.sty|, |book.sty| and |report.sty|,
-which simply load the appropriate class files.
+Thus, for several reasons, using |\input| to load packages is not a good idea.
For example, |article.sty| contains just the following lines:
\begin{verbatim}
@@ -407,93 +288,72 @@ For example, |article.sty| contains just the following lines:
\@obsoletefile{article.cls}{article.sty}
\LoadClass{article}
\end{verbatim}
-You may wish to do the same or, if you think that it is safe to do so,
-you may decide to just remove |myclass.sty|.
+You may wish to do the same or, if you think that it is safe to do so, you may
+decide to just remove |myclass.sty|.
\subsubsection{Make it robust}
We consider it good practice, when writing packages and classes, to use
\LaTeX{} commands as much as possible.
-Thus, instead of using |\def...| we recommend using one of
-|\newcommand|, |\renewcommand| or |\providecommand|; |\CheckCommand| is
-also useful. Doing this makes
-it less likely that you will inadvertently redefine a command, giving
-unexpected results.
+Thus, instead of using |\def...| we recommend using one of |\newcommand|,
+|\renewcommand| or |\providecommand| for programming and for defining document
+interfaces |\NewDocumentCommand|, etc. (see \texttt{usrguide} for details of
+these commands).
-When you define an environment, use |\newenvironment| or
-|\renewenvironment| instead |\def\foo{...}| and |\def\endfoo{...}|.
+When you define an environment, use |\NewDocumentEnvironment|, etc., (or
+|\newenvironment|, etc., for simple cases) instead of using |\def\foo{...}| and
+|\def\endfoo{...}|.
-If you need to set or change the value of a \m{dimen} or \m{skip}
-register, use |\setlength|.
+If you need to set or change the value of a \m{dimen} or \m{skip} register, use
+|\setlength|.
-To manipulate boxes, use \LaTeX{} commands such as |\sbox|,
-|\mbox| and |\parbox| rather than |\setbox|, |\hbox| and |\vbox|.
+To manipulate boxes, use \LaTeX{} commands such as |\sbox|, |\mbox| and
+|\parbox| rather than |\setbox|, |\hbox| and |\vbox|.
-Use |\PackageError|, |\PackageWarning| or |\PackageInfo| (or the
-equivalent class commands) rather than |\@latexerr|, |\@warning| or
-|\wlog|.
-
-It is still possible to declare options by defining |\ds@<option>| and
-calling |\@options|; but we recommend the |\DeclareOption| and
-|\ProcessOptions| commands instead. These are more powerful and use
-less memory. So rather than using:
-\begin{verbatim}
- \def\ds@draft{\overfullrule 5pt}
- \@options
-\end{verbatim}
-you should use:
-\begin{verbatim}
- \DeclareOption{draft}{\setlength{\overfullrule}{5pt}}
- \ProcessOptions\relax
-\end{verbatim}
+Use |\PackageError|, |\PackageWarning| or |\PackageInfo| (or the equivalent
+class commands) rather than |\@latexerr|, |\@warning| or |\wlog|.
-The advantage of this kind of practice is that your code is more
-readable and, more important, that it is less likely to break when
-used with future versions of \LaTeX{}.
+The advantage of this kind of practice is that your code is more readable and
+accessible to other experienced \LaTeX{} programmers.
\subsubsection{Make it portable}
-It is also sensible to make your files are as portable as possible. To
-ensure this; they should contain only visible 7-bit text; and the
-filenames should contain at most eight characters (plus the three
-letter extension). Also, of course, it \textbf{must not} have the
-same name as a file in the standard \LaTeX{} distribution, however
-similar its contents may be to one of these files.
+It is also sensible to make your files are as portable as possible. To ensure
+this, files must not have the same name as a file in the standard \LaTeX{}
+distribution, however similar its contents may be to one of these files. It is
+also still lower risk to stick to file names which use only the ASCII range:
+whilst \LaTeX{} works natively with UTF-8, the same cannot be said with
+certainty for all tools. For the same reason, avoid spaces in file names.
-It is also useful if local classes or packages have a common prefix,
-for example the University of Nowhere classes might begin with |unw|.
-This helps to avoid every University having its own thesis class, all
-called |thesis.cls|.
+It is also useful if local classes or packages have a common prefix, for
+example the University of Nowhere classes might begin with |unw|. This helps to
+avoid every University having its own thesis class, all called |thesis.cls|.
If you rely on some features of the \LaTeX{} kernel, or on a package,
please specify the release-date you need. For example, the package
-error commands were introduced in the June 1994 release so, if you use
+error commands were introduced in the June 2022 release so, if you use
them then you should put:
\begin{verbatim}
- \NeedsTeXFormat{LaTeX2e}[1994/06/01]
+ \NeedsTeXFormat{LaTeX2e}[2022-06-01]
\end{verbatim}
\subsubsection{Useful hooks}
-Some packages and document styles had to redefine the command
-|\document| or |\enddocument| to achieve their goal. This is no
-longer necessary. You can now use the `hooks' |\AtBeginDocument| and
-|\AtEndDocument| (see Section~\ref{Sec:delays}). Again, using these
-hooks makes it less likely that your code breaks with future versions
-of \LaTeX{}. It also makes it more likely that your package can work
-together with someone else's.
-
-\NEWdescription{1996/12/01}
-However, note that code in the |\AtBeginDocument| hook is part of the
-preamble. Thus there are restrictions on what can be put there; in
-particular, no typesetting can be done.
+It is sometimes necessary for a package to arrange for code to be
+executed at the start or end of the preamble, at the end of the document
+or at the start of every use of an environment. This can be carried
+out by using hooks. As a document author, you will likely be familiar with
+|\AtBeginDocument|, a wrapper around the more powerful command |\AddToHook|.
+The \LaTeX{} kernel provides a large number of dedicated hooks (applying in
+a pre-defined location) and generic hooks (applying to arbitrary commands):
+the interface for using these is described in \texttt{lthooks} . There are
+also hooks to apply to files, described in \texttt{ltfilehooks}.
\section{The structure of a class or package}
\label{Sec:structure}
-\LaTeXe{} classes and packages have more structure than \LaTeX~2.09
-style files did. The outline of a class or package file is:
+The outline of a class or package file is:
\begin{description}
\item[Identification] The file says that it is a \LaTeXe{} package or
class, and gives a short description of itself.
@@ -517,7 +377,7 @@ Package files do this as follows:
For example:
\begin{verbatim}
\NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{latexsym}[1994/06/01 Standard LaTeX package]
+ \ProvidesPackage{latexsym}[1998-08-17 Standard LaTeX package]
\end{verbatim}
Class files do this as follows:
\begin{verbatim}
@@ -527,40 +387,30 @@ Class files do this as follows:
For example:
\begin{verbatim}
\NeedsTeXFormat{LaTeX2e}
- \ProvidesClass{article}[1994/06/01 Standard LaTeX class]
-\end{verbatim}
-\NEWdescription{1998/06/19}
-The \m{date} should be given in the form `\textsc{yyyy/mm/dd}' and
-must be present if the optional argument is used (this is also true
-for the |\NeedsTeXFormat| command).
-Any derivation from this syntax will result in low-level \TeX{}
-errors---the commands expect a valid syntax to speed up the daily
-usage of the package or class and make no provision for the case that
-the developer made a mistake!
-
-This date is checked whenever a user specifies a date in their
-|\documentclass| or |\usepackage| command. For example, if you wrote:
-\begin{verbatim}
- \documentclass{article}[1995/12/23]
-\end{verbatim}
-then users at a different location
-would get a warning that their copy of |article| was out of
-date.
-
-The description of a class is displayed when the class is used. The
-description of a package is put into the log file. These descriptions
-are also displayed by the |\listfiles| command. The phrase
-\texttt{Standard LaTeX} \textbf{must not} be used in the identification
-banner of any file other than those in the standard \LaTeX{}
-distribution.
+ \ProvidesClass{article}[2022-06-01 Standard LaTeX class]
+\end{verbatim}
+The \m{date} should be given in the form `\textsc{yyyy-mm-dd}' and must be
+present if the optional argument is used (this is also true for the
+|\NeedsTeXFormat| command). Any derivation from this syntax will result in
+low-level \TeX{} errors---the commands expect a valid syntax to speed up the
+daily usage of the package or class and make no provision for the case that the
+developer made a mistake!
+This date is checked whenever a user specifies a date in their |\documentclass|
+or |\usepackage| command. For example, if you wrote:
+\begin{verbatim}
+ \documentclass{article}[2022-06-01]
+\end{verbatim}
+then users at a different location would get a warning that their copy of
+|article| was out of date.
-\subsection{Using classes and packages}
+The description of a class is displayed when the class is used. The description
+of a package is put into the log file. These descriptions are also displayed by
+the |\listfiles| command. The phrase \texttt{Standard LaTeX} \textbf{must not}
+be used in the identification banner of any file other than those in the
+standard \LaTeX{} distribution.
-The first major difference between \LaTeX~2.09 style files and
-\LaTeXe{} packages and classes is that \LaTeXe{} supports
-\emph{modularity}, in the sense of building files from small
-building-blocks rather than using large single files.
+\subsection{Using classes and packages}
A \LaTeX{} package or class can load a package as follows:
\begin{verbatim}
@@ -568,13 +418,12 @@ A \LaTeX{} package or class can load a package as follows:
\end{verbatim}
For example:
\begin{verbatim}
- \RequirePackage{ifthen}[1994/06/01]
+ \RequirePackage{ifthen}[2022-06-01]
\end{verbatim}
-This command has the same syntax as the author command |\usepackage|.
-It allows packages or classes to use features provided by other
-packages. For example, by loading the |ifthen| package, a package
-writer can use the `if\dots then\dots else\dots' commands provided
-by that package.
+This command has the same syntax as the author command |\usepackage|. It allows
+packages or classes to use features provided by other packages. For example, by
+loading the |ifthen| package, a package writer can use the `if\dots then\dots
+else\dots' commands provided by that package.
A \LaTeX{} class can load one other class as follows:
\begin{verbatim}
@@ -584,13 +433,12 @@ For example:
\begin{verbatim}
\LoadClass[twocolumn]{article}
\end{verbatim}
-This command has the same syntax as the author command |\documentclass|.
-It allows classes to be based on the syntax and appearance of another
-class. For example, by loading the |article| class, a class writer
-only has to change the bits of |article| they don't like, rather than
-writing a new class from scratch.
+This command has the same syntax as the author command |\documentclass|. It
+allows classes to be based on the syntax and appearance of another class. For
+example, by loading the |article| class, a class writer only has to change the
+bits of |article| they don't like, rather than writing a new class from
+scratch.
-\NEWfeature{1995/12/01}
The following commands can be used in the common case that you want to
simply load a class or package file with exactly those options that
are being used by the current class.
@@ -606,14 +454,20 @@ For example:
\subsection{Declaring options}
-\NEWdescription{1998/12/01}
-The other major difference between \LaTeX~2.09 styles and \LaTeXe{}
-packages and classes is in option handling. Packages and classes can
-now declare options and these can be specified by authors; for
-example, the |twocolumn| option is declared by the |article| class.
-Note that the name of an option should contain only those characters
-allowed in a `\LaTeX{} name'; in particular it must not contain any
-control sequences.
+Packages and classes can declare options and these can be specified by authors;
+for example, the |twocolumn| option is declared by the |article| class. Note
+that the name of an option should contain only those characters allowed in a
+`\LaTeX{} name'; in particular it must not contain any control sequences.
+
+\LaTeX{} supports two methods for creating options: a key--value system and a
+`simple text' approach. The key--value system is recommended for new classes
+and packages, and is more flexible in handling of option classes than the
+simple text approach. Both option methods use the same basic structure within
+the \LaTeX{} source: declaration of options first then processing options in a
+second step. Both also allow options to be passed on to other packages or an
+underlying class. As the `classical' simple text approach is conceptually more
+straight-forward to illustrate, it is used here to show the general structure:
+see Section~\ref{Sec:opt:keyval} for full details of the key--value approach.
An option is declared as follows:
\begin{verbatim}
@@ -624,63 +478,58 @@ to the |graphics| package is implemented as:
\begin{verbatim}
\DeclareOption{dvips}{\input{dvips.def}}
\end{verbatim}
-This means that when an author writes |\usepackage[dvips]{graphics}|,
-the file |dvips.def| is loaded. As another example, the |a4paper|
-option is declared in the |article| class to set the |\paperheight|
-and |\paperwidth| lengths:
+This means that when an author writes |\usepackage[dvips]{graphics}|, the file
+|dvips.def| is loaded. As another example, the |a4paper| option is declared in
+the |article| class to set the |\paperheight| and |\paperwidth| lengths:
\begin{verbatim}
\DeclareOption{a4paper}{%
\setlength{\paperheight}{297mm}%
\setlength{\paperwidth}{210mm}%
}
\end{verbatim}
-Sometimes a user will request an option which the class
-or package has not explicitly declared. By default this will produce
-a warning (for classes) or error (for packages); this behaviour
-can be altered as follows:
+Sometimes a user will request an option which the class or package has not
+explicitly declared. By default this will produce a warning (for classes) or
+error (for packages); this behaviour can be altered as follows:
\begin{verbatim}
\DeclareOption*{<code>}
\end{verbatim}
-For example, to make the package |fred| produce a warning rather than
-an error for unknown options, you could specify:
+For example, to make the package |fred| produce a warning rather than an error
+for unknown options, you could specify:
\begin{verbatim}
\DeclareOption*{%
\PackageWarning{fred}{Unknown option `\CurrentOption'}%
}
\end{verbatim}
-Then, if an author writes |\usepackage[foo]{fred}|, they will get a
-warning \texttt{Package fred Warning: Unknown option `foo'.} As
-another example, the |fontenc| package tries to load a file
-|<ENC>enc.def| whenever the \m{ENC} option is used. This
-can be done by writing:
+Then, if an author writes |\usepackage[foo]{fred}|, they will get a warning
+\texttt{Package fred Warning: Unknown option `foo'.} As another example, the
+|fontenc| package tries to load a file |<ENC>enc.def| whenever the \m{ENC}
+option is used. This can be done by writing:
\begin{verbatim}
\DeclareOption*{%
\input{\CurrentOption enc.def}%
}
\end{verbatim}
-\NEWdescription{1998/12/01}
-It is possible to pass options on to another package or class, using
-the command |\PassOptionsToPackage| or |\PassOptionsToClass| (note
-that this is a specialised operation that works only for option
-names). For example, to pass every unknown option on to the |article|
-class, you can use:
+
+It is possible to pass options on to another package or class, using the
+command |\PassOptionsToPackage| or |\PassOptionsToClass| (note that this is a
+specialised operation that works only for option names): see
+Section~\ref{Sec:opmove}. For example, to pass every unknown option on to the
+|article| class, you can use:
\begin{verbatim}
\DeclareOption*{%
\PassOptionsToClass{\CurrentOption}{article}%
}
\end{verbatim}
-If you do this then you should make sure you load the class at some
-later point, otherwise the options will never be processed!
+If you do this then you should make sure you load the class at some later
+point, otherwise the options will never be processed!
-So far, we have explained only how to declare options, not how to
-execute them. To process the options with which the file was called,
-you should use:
+So far, we have explained only how to declare options, not how to execute them.
+To process the options with which the file was called, you should use:
\begin{verbatim}
\ProcessOptions\relax
\end{verbatim}
-This executes the \m{code} for each option that was both specified and
-declared (see Section~\ref{Sec:commands.options} for details of how
-this is done).
+This executes the \m{code} for each option that was both specified and declared
+(see Section~\ref{Sec:commands.options} for details of how this is done).
For example, if the |jane| package file contains:
\begin{verbatim}
@@ -689,8 +538,8 @@ For example, if the |jane| package file contains:
\DeclareOption*{\typeout{What's \CurrentOption?}}
\ProcessOptions\relax
\end{verbatim}
-and an author writes |\usepackage[foo,bar]{jane}|, then they will see
-the messages \texttt{Saw foo.} and \texttt{What's bar?}
+and an author writes |\usepackage[foo,bar]{jane}|, then they will see the
+messages \texttt{Saw foo.} and \texttt{What's bar?}
\subsection{A minimal class file}
@@ -698,9 +547,6 @@ Most of the work of a class or package is in defining new commands, or
changing the appearance of documents. This is done in the body of the
package, using commands such as |\newcommand| or |\setlength|.
-\LaTeXe{} provides several new commands to help class and package
-writers; these are described in detail in Section~\ref{Sec:commands}.
-
There are four things that every class file \emph{must} contain: these
are a definition of |\normalsize|, values for |\textwidth| and
|\textheight| and a specification for page-numbering. So a minimal
@@ -708,7 +554,7 @@ document class file\footnote {This class is now in the standard
distribution, as \texttt{minimal.cls}.} looks like this:
\begin{verbatim}
\NeedsTeXFormat{LaTeX2e}
- \ProvidesClass{minimal}[1995/10/30 Standard LaTeX minimal class]
+ \ProvidesClass{minimal}[2022-06-01 Standard LaTeX minimal class]
\renewcommand{\normalsize}{\fontsize{10pt}{12pt}\selectfont}
\setlength{\textwidth}{6.5in}
\setlength{\textheight}{8in}
@@ -728,18 +574,17 @@ class, although a real class would need more structure.
The class begins by announcing itself as |neplet.cls|.
\begin{verbatim}
\NeedsTeXFormat{LaTeX2e}
- \ProvidesClass{neplet}[1995/04/01 NonExistent Press letter class]
+ \ProvidesClass{neplet}[2022-06-01 NonExistent Press letter class]
\end{verbatim}
-Then this next bit passes any options on to the |letter| class, which
-is loaded with the |a4paper| option.
+Then this next bit passes any options on to the |letter| class, which is loaded
+with the |a4paper| option.
\begin{verbatim}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{letter}}
\ProcessOptions\relax
\LoadClass[a4paper]{letter}
\end{verbatim}
-In order to use the company letter head, it redefines the
-|firstpage| page style: this is the page style that is used on
-the first page of letters.
+In order to use the company letter head, it redefines the |firstpage| page
+style: this is the page style that is used on the first page of letters.
\begin{verbatim}
\renewcommand{\ps@firstpage}{%
\renewcommand{\@oddhead}{<letterhead goes here>}%
@@ -751,17 +596,16 @@ And that's it!
\subsection{Example: a newsletter class}
A simple newsletter can be typeset with \LaTeX{}, using a variant of the
-|article| class.
-The class begins by announcing itself as |smplnews.cls|.
+|article| class. The class begins by announcing itself as |smplnews.cls|.
\begin{verbatim}
\NeedsTeXFormat{LaTeX2e}
- \ProvidesClass{smplnews}[1995/04/01 The Simple News newsletter class]
+ \ProvidesClass{smplnews}[2022-06-01 The Simple News newsletter class]
\newcommand{\headlinecolor}{\normalcolor}
\end{verbatim}
-It passes most specified options on to the |article| class: apart from
-the |onecolumn| option, which is switched off, and the |green| option,
-which sets the headline in green.
+It passes most specified options on to the |article| class: apart from the
+|onecolumn| option, which is switched off, and the |green| option, which sets
+the headline in green.
\begin{verbatim}
\DeclareOption{onecolumn}{\OptionNotUsed}
\DeclareOption{green}{\renewcommand{\headlinecolor}{\color{green}}}
@@ -774,14 +618,14 @@ It then loads the class |article| with the option |twocolumn|.
\begin{verbatim}
\LoadClass[twocolumn]{article}
\end{verbatim}
-Since the newsletter is to be printed in colour, it now loads the
-|color| package. The class does not specify a device driver option
-since this should be specified by the user of the |smplnews| class.
+Since the newsletter is to be printed in colour, it now loads the |color|
+package. The class does not specify a device driver option since this should be
+specified by the user of the |smplnews| class.
\begin{verbatim}
\RequirePackage{color}
\end{verbatim}
-The class then redefines |\maketitle| to produce the title in 72pt
-Helvetica bold oblique, in the appropriate colour.
+The class then redefines |\maketitle| to produce the title in 72\,pt Helvetica
+bold oblique, in the appropriate colour.
\begin{verbatim}
\renewcommand{\maketitle}{%
\twocolumn[%
@@ -807,90 +651,91 @@ It also sets the three essential things.
\setlength{\textwidth}{17.5cm}
\setlength{\textheight}{25cm}
\end{verbatim}
-In practice, a class would need more than this: it would provide
-commands for issue numbers, authors of articles, page styles and so
-on; but this skeleton gives a start. The |ltnews| class file is not
-much more complex than this one.
+In practice, a class would need more than this: it would provide commands for
+issue numbers, authors of articles, page styles and so on; but this skeleton
+gives a start. The |ltnews| class file is not much more complex than this one.
\section{Commands for class and package writers}
\label{Sec:commands}
-This section describes briefly each of the new commands for class and
-package writers. To find out about other aspects of the new system,
+This section describes briefly each of the commands for class and package
+writers. To find out about other aspects of the system,
you should also read \emph{\LaTeXbook}, \emph{\LaTeXcomp} and
\emph{\usrguide}.
\subsection{Identification}
-The first group of commands discussed here are those used
-to identify your class or package file.
+The first group of commands discussed here are those used to identify your
+class or package file.
\begin{decl}
|\NeedsTeXFormat| \arg{format-name} \oarg{release-date}
\end{decl}
-This command tells \TeX{} that this file should be processed using a
-format with name \m{format-name}. You can use the optional argument
-\m{release-date} to further specify the earliest release date of the
-format that is needed. When the release date of the format is older
-than the one specified a warning will be generated. The standard
-\m{format-name} is \texttt{LaTeX2e}. The date, if present, must be in
-the form \textsc{yyyy/mm/dd}.
+This command tells \TeX{} that this file should be processed using a format
+with name \m{format-name}. You can use the optional argument \m{release-date}
+to further specify the earliest release date of the format that is needed. When
+the release date of the format is older than the one specified a warning will
+be generated. The standard \m{format-name} is \texttt{LaTeX2e}. The date, if
+present, must be in the form \textsc{yyyy-mm-dd}.
Example:
\begin{verbatim}
- \NeedsTeXFormat{LaTeX2e}[1994/06/01]
+ \NeedsTeXFormat{LaTeX2e}[2022-06-01]
\end{verbatim}
+People often don't know what date to put here. For the kernel, you can find out
+the right one by consulting |changes.txt| and select the release date of a new
+feature you are interested in. This is slightly different for packages as they
+are released throughout the year: you will need to consult their change
+history.
\begin{decl}
|\ProvidesClass| \arg{class-name} \oarg{release-info} \\
|\ProvidesPackage| \arg{package-name} \oarg{release-info}
\end{decl}
-This declares that the current file contains the definitions for the
-document class \m{class-name} or package \m{package-name}.
+This declares that the current file contains the definitions for the document
+class \m{class-name} or package \m{package-name}.
The optional \m{release-info}, if used, must contain:
\begin{itemize}
- \item the release date of
- this version of the file, in the form \textsc{yyyy/mm/dd};
+ \item the release date of this version of the file, in the form
+ \textsc{yyyy-mm-dd};
\item optionally followed by a space and a short description, possibly
including a version number.
\end{itemize}
-The above syntax must be followed exactly so that this information
-can be used by |\LoadClass| or |\documentclass| (for classes) or
-|\RequirePackage| or |\usepackage| (for packages) to test that the
-release is not too old.
+The above syntax must be followed exactly so that this information can be used
+by |\LoadClass| or |\documentclass| (for classes) or |\RequirePackage| or
+|\usepackage| (for packages) to test that the release is not too old.
-The whole of this \m{release-info} information is displayed by
-|\listfiles| and should therefore not be too long.
+The whole of this \m{release-info} information is displayed by |\listfiles| and
+should therefore not be too long.
Example:
\begin{verbatim}
- \ProvidesClass{article}[1994/06/01 v1.0 Standard LaTeX class]
- \ProvidesPackage{ifthen}[1994/06/01 v1.0 Standard LaTeX package]
+ \ProvidesClass{article}[2022-06-01 v1.0 Standard LaTeX class]
+ \ProvidesPackage{ifthen}[2022-06-01 v1.0 Standard LaTeX package]
\end{verbatim}
\begin{decl}
|\ProvidesFile| \arg{file-name} \oarg{release-info}
\end{decl}
This is similar to the two previous commands except that here the full
-filename, including the extension, must be given. It is used for
-declaring any files other than main class and package files.
+filename, including the extension, must be given. It is used for declaring any
+files other than main class and package files.
Example:
\begin{verbatim}
- \ProvidesFile{T1enc.def}[1994/06/01 v1.0 Standard LaTeX file]
+ \ProvidesFile{T1enc.def}[2022-06-01 v1.0 Standard LaTeX file]
\end{verbatim}
-Note that the phrase \texttt{Standard LaTeX} \textbf{must not} be used
-in the identification banner of any file other than those in the
-standard \LaTeX{} distribution.
+Note that the phrase \texttt{Standard LaTeX} \textbf{must not} be used in the
+identification banner of any file other than those in the standard \LaTeX{}
+distribution.
\subsection{Loading files}
\label{Sec:loadf}
-\NEWfeature{1995/12/01}
-This group of commands can be used to create your own document class or
-package by building on existing classes or packages.
+This group of commands can be used to create your own document class or package
+by building on existing classes or packages.
\begin{decl}
|\RequirePackage| \oarg{options-list} \arg{package-name}
\oarg{release-info}\\
@@ -899,13 +744,11 @@ package by building on existing classes or packages.
\end{decl}
Packages and classes should use these commands to load other packages.
-The use of |\RequirePackage| is the same as the author command
-|\usepackage|.
-
+The use of |\RequirePackage| is the same as the author command |\usepackage|.
Examples:
\begin{verbatim}
- \RequirePackage{ifthen}[1994/06/01]
- \RequirePackageWithOptions{graphics}[1995/12/01]
+ \RequirePackage{ifthen}[2022-06-01]
+ \RequirePackageWithOptions{graphics}[2022-06-01]
\end{verbatim}
\begin{decl}
@@ -914,107 +757,153 @@ Examples:
|\LoadClassWithOptions| \arg{class-name}
\oarg{release-info}
\end{decl}
-\NEWfeature{1995/12/01}
-These commands are for use \emph{only} in class files, they cannot be
-used in packages files;
-they can be used at most once within a class file.
+These commands are for use \emph{only} in class files, they cannot be used in
+packages files; they can be used at most once within a class file.
-The use of |\LoadClass| is the same as
-the use of |\documentclass| to load a class file.
+The use of |\LoadClass| is the same as the use of |\documentclass| to load a
+class file.
Examples:
\begin{verbatim}
- \LoadClass{article}[1994/06/01]
- \LoadClassWithOptions{article}[1995/12/01]
+ \LoadClass{article}[2022-06-01]
+ \LoadClassWithOptions{article}[2022-06-01]
\end{verbatim}
-\NEWfeature{1995/12/01}
-The two |WithOptions| versions simply load the class (or package) file
-with exactly those options that are being used by the current file
-(class or package). See below, in \ref{Sec:opmove}, for further
-discussion of their use.
-
+The two |WithOptions| versions simply load the class (or package) file with
+exactly those options that are being used by the current file (class or
+package). See below, in \ref{Sec:opmove}, for further discussion of their use.
-\subsection{Option declaration}
-\label{Sec:commands.options.dec}
+\subsection{Delaying code}
+\label{Sec:delays}
-\NEWdescription{1998/12/01}
-The following commands deal with the declaration and handling of
-options to document classes and packages. Every option name must be a
-`\LaTeX{} name'.
+As noted earlier, a sophisticated hook system is available and described in
+\texttt{lthooks}. Here, we document a small set of convenient short names for
+common hooks.
-There are some commands designed especially for use within the
-\m{code} argument of these commands (see below).
+These first two commands are also intended primarily for use within the
+\m{code} argument of |\DeclareOption| or |\DeclareOption*|.
\begin{decl}
- |\DeclareOption| \arg{option-name} \arg{code}
+ |\AtEndOfClass| \arg{code}\\
+ |\AtEndOfPackage| \arg{code}
\end{decl}
-This makes \m{option-name} a `declared option' of the class or package
-in which it is put.
-
-The \m{code} argument contains the code to be executed if that option
-is specified for the class or package; it can contain any valid
-\LaTeXe{} construct.
+These commands declare \m{code} that is saved away internally and then executed
+after processing the whole of the current class or package file.
-Example:
-\begin{verbatim}
- \DeclareOption{twoside}{\@twosidetrue}
-\end{verbatim}
+Repeated use of these commands is permitted: the code in the arguments is
+stored (and later executed) in the order of their declarations.
\begin{decl}
- |\DeclareOption*| \arg{code}
+ |\AtBeginDocument| \arg{code}\\
+ |\AtEndDocument| \arg{code}
\end{decl}
-This declares the \m{code} to be executed for every option which is
-specified for, but otherwise not explicitly declared by, the class or
-package; this code is called the `default option code' and it can
-contain any valid \LaTeXe{} construct.
+These commands declare \m{code} to be saved internally and executed while
+\LaTeX{} is executing |\begin{document}| or |\end{document}|.
-If a class file contains no |\DeclareOption*| then, by default, all
-specified but undeclared options for that class will be silently
-passed to all packages (as will the specified and declared options for
-that class).
+The \m{code} specified in the argument to |\AtBeginDocument| is executed near
+the end of the |\begin{document}| code, \emph{after} the font selection tables
+have been set up. It is therefore a useful place to put code which needs to be
+executed after everything has been prepared for typesetting and when the normal
+font for the document is the current font.
-If a package file contains no |\DeclareOption*| then, by default, each
-specified but undeclared option for that package will produce an error.
+The |\AtBeginDocument| hook should not be used for code that does any
+typesetting since the typeset result would be unpredictable.
+The \m{code} specified in the argument to |\AtEndDocument| is executed at the
+beginning of the |\end{document}| code, \emph{before} the final page is
+finished and before any leftover floating environments are processed. If some
+of the \m{code} is to be executed after these two processes, you should include
+a |\clearpage| at the appropriate point in \m{code}.
-\subsection{Commands within option code}
-\label{Sec:within.code}
+Repeated use of these commands is permitted: the code in the arguments is
+stored (and later executed) in the order of their declarations.
+
+\subsection{Creating and using keyval options}
+\label{Sec:opt:keyval}
-These two commands can be used only within the \m{code} argument of
-either |\DeclareOption| or |\DeclareOption*|. Other commands commonly
-used within these arguments can be found in the next few subsections.
+As with any key--value input, using key--value pairs as package or class
+options has two parts: creating the key options and setting (using) them.
+Options created in this way \emph{may} be used after package loading as general
+key--value settings: this will depend on the nature of the underlying code.
\begin{decl}
- |\CurrentOption|
+ |\DeclareKeys| \oarg{family} \arg{declarations}
\end{decl}
-This expands to the name of the current option.
+This command creates a series of options from a comma-separated
+\m{declarations} list. Each entry in this list is a key--value pair, with the
+\m{key} having one or more \m{properties}. A small number of `basic'
+\m{properties} are described below. The full range of properties, provided by
+\texttt{l3keys}, can also be used for more powerful processing. See
+\texttt{interface3} for the full details.
+
+The basic properties provided here are
+\begin{itemize}
+ \item \texttt{.code} --- execute arbitrary code
+ \item \texttt{.if} --- sets a \TeX{} |\if...| switch
+ \item \texttt{.ifnot} --- sets an inverted \TeX{} |\if...| switch
+ \item \texttt{.store} --- stores a value in a macro
+ \item \texttt{.usage} -- defines whether the option can be given only
+ when loading (\texttt{load}), in the preamble (\texttt{preamble}) or
+ has no limitation on scope (\texttt{general})
+\end{itemize}
+The part of the \meta{key} before the \m{property} is the \m{name}, with the
+\m{value} working with the \m{property} to define the behaviour of the option.
+
+For example, with
+\begin{verbatim}
+\DeclareKeys[mypkg]
+ {
+ draft.if = @mypkg@draft ,
+ draft.usage = preamble ,
+ name.store = \@mypkg@name ,
+ name.usage = load ,
+ second-name.store = \@mypkg@other@name
+ }
+\end{verbatim}
+three options would be created. The option \texttt{draft} can be given anywhere
+in the preamble, and will set a switch called |\if@mypkg@draft|. The option
+\texttt{name} can only be given during package loading, and will save whatever
+value it is given in |\@mypkg@name|. Finally, the option \texttt{second-name}
+can be given anywhere, and will save its value in |\@mypkg@other@name|.
+
+Keys created \emph{before} the use of |\ProcessKeyOptions| act as package
+options.
\begin{decl}
- |\OptionNotUsed|
+ |\DeclareUnknownKeyHandler| \oarg{family} \arg{code}
\end{decl}
-This causes the current option to
-be added to the list of `unused options'.
+The command |\DeclareUnknownKeyHandler| may be used to define the behavior when
+an undefined key is encountered. The \m{code} will receive the unknown key name
+as |#1| and the value as |#2|. These can then be processed as appropriate,
+e.g.~by forwarding to another package.
-\NEWfeature{1995/06/01}
- You can now include hash marks (\texttt{\#}) within these \m{code}
- arguments without special treatment (formerly, it had been
- necessary to double them).
+\begin{decl}
+ |\ProcessKeyOptions| \oarg{family}
+\end{decl}
+The |\ProcessKeyOptions| function is used to check the current option list
+against the keys defined for \m{family}. Global (class) options and local
+(package) options are checked when this function is called in a package.
-\subsection{Moving options around}
+\begin{decl}
+ |\SetKeys| \oarg{family} \arg{keyvals}
+\end{decl}
+Sets (applies) the explicit list of \m{keyvals} for the \m{family}: if the
+latter is not given, the value of |\@currname| is used. This command may be used
+within a package to set options before or after using |\ProcessKeyOptions|.
+
+\subsection{Passing options around}
\label{Sec:opmove}
-These two commands are also very useful within the \m{code} argument
-of |\DeclareOption| or |\DeclareOption*|:
+These two commands are also very useful within the \m{code} argument of
+options.
\begin{decl}
|\PassOptionsToPackage| \arg{options-list} \arg{package-name}\\
|\PassOptionsToClass| \arg{options-list} \arg{class-name}
\end{decl}
-The command |\PassOptionsToPackage| passes the option names in
-\m{options-list} to package \m{package-name}.
-This means that it adds the \m{option-list} to the
-list of options used by any future |\RequirePackage| or |\usepackage|
-command for package \m{package-name}.
+The command |\PassOptionsToPackage| passes the option names in \m{options-list}
+to package \m{package-name}. This means that it adds the \m{option-list} to the
+list of options used by any future |\RequirePackage| or |\usepackage| command
+for package \m{package-name}.
Example:
\begin{verbatim}
@@ -1026,24 +915,22 @@ is the same as:
\RequirePackage[foo,bar,baz]{fred}
\end{verbatim}
-Similarly, |\PassOptionsToClass| may be used in a class file to pass
-options to another class to be loaded with |\LoadClass|.
+Similarly, |\PassOptionsToClass| may be used in a class file to pass options to
+another class to be loaded with |\LoadClass|.
-\NEWdescription{1995/12/01}
-The effects and use of these two commands should be contrasted with
-those of the following two (documented above, in \ref{Sec:loadf}):
+The effects and use of these two commands should be contrasted with those of
+the following two (documented above, in \ref{Sec:loadf}):
\begin{verbatim}
\LoadClassWithOptions
\RequirePackageWithOptions
\end{verbatim}
-The command |\RequirePackageWithOptions| is similar to
-|\RequirePackage|, but it always loads the required package with
-exactly the same option list as that being used by the current class
-or package, rather than with any option explicitly supplied or passed
-on by |\PassOptionsToPackage|.
+The command |\RequirePackageWithOptions| is similar to |\RequirePackage|, but
+it always loads the required package with exactly the same option list as that
+being used by the current class or package, rather than with any option
+explicitly supplied or passed on by |\PassOptionsToPackage|.
-The main purpose of |\LoadClassWithOptions| is to allow one class to
-simply build on another, for example:
+The main purpose of |\LoadClassWithOptions| is to allow one class to simply
+build on another, for example:
\begin{verbatim}
\LoadClassWithOptions{article}
\end{verbatim}
@@ -1053,12 +940,11 @@ This should be compared with the slightly different construction
\ProcessOptions\relax
\LoadClass{article}
\end{verbatim}
-As used above, the effects are more or less the same, but the first is
-a lot less to type; also the |\LoadClassWithOptions| method runs
-slightly quicker.
+As used above, the effects are more or less the same, but the first is a lot
+less to type; also the |\LoadClassWithOptions| method runs slightly quicker.
-If, however, the class declares options of its own then
-the two constructions are different. Compare, for example:
+If, however, the class declares options of its own then the two constructions
+are different. Compare, for example:
\begin{verbatim}
\DeclareOption{landscape}{\@landscapetrue}
\ProcessOptions\relax
@@ -1071,255 +957,56 @@ with:
\ProcessOptions\relax
\LoadClass{article}
\end{verbatim}
-In the first example, the \textsf{article} class will be loaded with
-option |landscape| precisely when the current class is called with
-this option. By contrast, in the second example it will never be
-called with option \texttt{landscape} as in that case \textsf{article}
-is passed options only by the default option handler, but this handler
-is not used for |landscape| because that option is explicitly
-declared.
-
-\subsection{Delaying code}
-\label{Sec:delays}
-
-These first two commands are also intended primarily for use within
-the \m{code} argument of |\DeclareOption| or |\DeclareOption*|.
-
-\begin{decl}
- |\AtEndOfClass| \arg{code}\\
- |\AtEndOfPackage| \arg{code}
-\end{decl}
-These commands declare \m{code} that is saved away internally and then
-executed after processing the whole of the current class or package
-file.
-
-Repeated use of these commands is permitted: the code in the
-arguments is stored (and later executed) in the order of their
-declarations.
-
-\begin{decl}
- |\AtBeginDocument| \arg{code}\\
- |\AtEndDocument| \arg{code}
-\end{decl}
-These commands declare \m{code} to be saved internally and executed
-while \LaTeX{} is executing |\begin{document}| or |\end{document}|.
-
-The \m{code} specified in the argument to |\AtBeginDocument| is
-executed near the end of the |\begin{document}| code, \emph{after} the
-font selection tables have been set up. It is therefore a useful
-place to put code which needs to be executed after everything has been
-prepared for typesetting and when the normal font for the document is
-the current font.
-
-\NEWdescription{1995/12/01}
-The |\AtBeginDocument| hook should not be used for code that does any
-typesetting since the typeset result would be unpredictable.
-
-The \m{code} specified in the argument to |\AtEndDocument| is
-executed at the beginning of the |\end{document}| code,
-\emph{before} the final page is finished and before any leftover
-floating environments are processed. If some of the \m{code} is to be
-executed after these two processes, you should include a |\clearpage|
-at the appropriate point in \m{code}.
-
-Repeated use of these commands is permitted: the code in the
-arguments is stored (and later executed) in the order of their
-declarations.
-
-\begin{decl}[1994/12/01]
- |\AtBeginDvi| \arg{specials}
-\end{decl}
-These commands save in a box register things which are written to the
-|.dvi| file at the beginning of the `shipout' of the first page of the
-document.
-
-This should not be used for anything that will add any typeset
-material to the |.dvi| file.
-
-Repeated use of this command is permitted.
-
-
-\subsection{Option processing}
-\label{Sec:commands.options}
-
-\begin{decl}
- |\ProcessOptions|
-\end{decl}
-This command executes the \m{code} for each selected option.
-
-We shall first describe how |\ProcessOptions| works in a package file,
-and then how this differs in a class file.
-
-To understand in detail what |\ProcessOptions| does in a package file,
-you have to know the difference between \emph{local} and \emph{global}
-options.
-\begin{itemize}
-\item \textbf{Local options} are those which have been explicitly
- specified for this particular package in the \m{options} argument of
- any of these:
-\begin{quote}
- |\PassOptionsToPackage{<options>}| \ |\usepackage[<options>]|\\
- |\RequirePackage[<options>]|
-\end{quote}
-\item \textbf{Global options} are any other options that are specified
- by the author in the \m{options} argument of
- |\documentclass[<options>]|.
-\end{itemize}
-For example, suppose that a document begins:
-\begin{verbatim}
- \documentclass[german,twocolumn]{article}
- \usepackage{gerhardt}
-\end{verbatim}
-whilst package |gerhardt| calls package |fred| with:
-\begin{verbatim}
- \PassOptionsToPackage{german,dvips,a4paper}{fred}
- \RequirePackage[errorshow]{fred}
-\end{verbatim}
-then:
-\begin{itemize}
-\item |fred|'s local options are |german|, |dvips|, |a4paper|
- and |errorshow|;
-\item |fred|'s only global option is |twocolumn|.
-\end{itemize}
-
-When |\ProcessOptions| is called, the following happen.
-\begin{itemize}
-\item \emph{First}, for each option so far declared in |fred.sty|
- by |\DeclareOption|, it looks to see if that option is either a
- global or a local option for |fred|: if it is then the corresponding
- code is executed.
-
- This is done in the order in which these options
- were declared in |fred.sty|.
-\item \emph{Then}, for each remaining \emph{local} option, the command
- |\ds@<option>| is executed if it has been defined somewhere (other
- than by a |\DeclareOption|); otherwise, the `default option code' is
- executed. If no default option code has been declared then an error
- message is produced.
-
- This is done in the order in which these
- options were specified.
-\end{itemize}
-Throughout this process, the system ensures that the code declared for
-an option is executed at most once.
-
-Returning to the example, if |fred.sty| contains:
-\begin{verbatim}
- \DeclareOption{dvips}{\typeout{DVIPS}}
- \DeclareOption{german}{\typeout{GERMAN}}
- \DeclareOption{french}{\typeout{FRENCH}}
- \DeclareOption*{\PackageWarning{fred}{Unknown `\CurrentOption'}}
- \ProcessOptions\relax
-\end{verbatim}
-then the result of processing this document will be:
-\begin{verbatim}
- DVIPS
- GERMAN
- Package fred Warning: Unknown `a4paper'.
- Package fred Warning: Unknown `errorshow'.
-\end{verbatim}
-Note the following:
-
-\begin{itemize}
-\item the code for the |dvips| option is executed before that for the
- |german| option, because that is the order in which they are declared
- in |fred.sty|;
-\item the code for the |german| option is executed only once, when the
- declared options are being processed;
-\item the |a4paper| and |errorshow| options produce the warning from
- the code declared by |\DeclareOption*| (in the order in which they
- were specified), whilst the |twocolumn| option does not: this is
- because |twocolumn| is a global option.
-\end{itemize}
-
-In a class file, |\ProcessOptions| works in the same way, except
-that: \emph{all} options are local; and the default value for
-|\DeclareOption*| is |\OptionNotUsed| rather than an error.
-
-\NEWdescription{1995/12/01}
-Note that, because |\ProcessOptions| has a |*|-form, it is wise to
-follow the non-star form with |\relax|, as in the previous examples,
-since this prevents unnecessary look ahead and possibly misleading
-error messages being issued.
-
-\begin{decl}
- |\ProcessOptions*| \\
- |\@options|
-\end{decl}
-This is like |\ProcessOptions| but it executes the options in the
-order specified in the calling commands, rather than in the order of
-declaration in the class or package. For a package this means that the
-global options are processed first.
-
-The |\@options| command from \LaTeX~2.09 has been made equivalent to
-this in order to ease the task of updating old document styles to
-\LaTeXe{} class files.
-
-\begin{decl}
- |\ExecuteOptions| \arg{options-list}
-\end{decl}
-
-For each option in the \m{options-list}, in order,
-this command simply executes the command
-|\ds@<option>| (if this command is not defined, then that option is
-silently ignored).
-
-It can be used to provide a `default option list' just before
-|\ProcessOptions|. For example, suppose that in a class file you want
-to set up the default design to be: two-sided printing; 11pt fonts;
-in two columns. Then it could specify:
-\begin{verbatim}
- \ExecuteOptions{11pt,twoside,twocolumn}
-\end{verbatim}
-
+In the first example, the \textsf{article} class will be loaded with option
+|landscape| precisely when the current class is called with this option. By
+contrast, in the second example it will never be called with option |landscape|
+as in that case \textsf{article} is passed options only by the default option
+handler, but this handler is not used for |landscape| because that option is
+explicitly declared.
\subsection{Safe file commands}
-These commands deal with file input; they ensure that the non-existence
-of a requested file can be handled in a user-friendly way.
+These commands deal with file input; they ensure that the non-existence of a
+requested file can be handled in a user-friendly way.
\begin{decl}
|\IfFileExists| \arg{file-name} \arg{true} \arg{false}
\end{decl}
-If the file exists then the code specified in \m{true} is
-executed.
+If the file exists then the code specified in \m{true} is executed.
-If the file does not exist then the code specified in \m{false} is
-executed.
+If the file does not exist then the code specified in \m{false} is executed.
This command does \emph{not} input the file.
\begin{decl}
|\InputIfFileExists| \arg{file-name} \arg{true} \arg{false}
\end{decl}
-This inputs the file \m{file-name} if it exists and, immediately
-before the input, the code specified in \m{true} is executed.
+This inputs the file \m{file-name} if it exists and, immediately before the
+input, the code specified in \m{true} is executed.
-If the file does not exist then the code specified in \m{false} is
-executed.
+If the file does not exist then the code specified in \m{false} is executed.
It is implemented using |\IfFileExists|.
-
\subsection{Reporting errors, etc}
-These commands should be used by third party classes and packages to
-report errors, or to provide information to authors.
+These commands should be used by third party classes and packages to report
+errors, or to provide information to authors.
\begin{decl}
|\ClassError| \arg{class-name} \arg{error-text} \arg{help-text}\\
|\PackageError| \arg{package-name} \arg{error-text} \arg{help-text}
\end{decl}
-These produce an error message. The \m{error-text} is displayed and the
-|?| error prompt is shown. If the user types |h|, they will be shown
-the \m{help-text}.
+These produce an error message. The \m{error-text} is displayed and the |?|
+error prompt is shown. If the user types |h|, they will be shown the
+\m{help-text}.
-Within the \m{error-text} and \m{help-text}: |\protect| can be used to
-stop a command from expanding; |\MessageBreak| causes a line-break;
-and |\space| prints a space.
+Within the \m{error-text} and \m{help-text}: |\protect| can be used to stop a
+command from expanding; |\MessageBreak| causes a line-break; and |\space|
+prints a space.
-Note that the \m{error-text} will have a full stop added to it, so do
-not put one into the argument.
+Note that the \m{error-text} will have a full stop added to it, so do not put
+one into the argument.
For example:
\begin{verbatim}
@@ -1354,96 +1041,22 @@ If the user types |h|, this will be shown:
|\ClassInfo| \arg{class-name} \arg{info-text}\\
|\PackageInfo| \arg{package-name} \arg{info-text}
\end{decl}
-The four |Warning| commands are similar to the error commands, except
-that they produce only a warning on the screen, with no error prompt.
+The four |Warning| commands are similar to the error commands, except that they
+produce only a warning on the screen, with no error prompt.
-The first two, |Warning| versions, also show the line number where the
-warning occurred, whilst the second two, |WarningNoLine| versions, do
-not.
+The first two, |Warning| versions, also show the line number where the warning
+occurred, whilst the second two, |WarningNoLine| versions, do not.
-The two |Info| commands are similar except that they log the
-information only in the transcript file, including the line number.
-There are no |NoLine| versions of these two.
+The two |Info| commands are similar except that they log the information only
+in the transcript file, including the line number. There are no |NoLine|
+versions of these two.
-Within the \m{warning-text} and \m{info-text}: |\protect| can be used to
-stop a command from expanding; |\MessageBreak| causes a line-break;
-and |\space| prints a space.
-Also, these should not end with a full stop as one is
+Within the \m{warning-text} and \m{info-text}: |\protect| can be used to stop a
+command from expanding; |\MessageBreak| causes a line-break; and |\space|
+prints a space. Also, these should not end with a full stop as one is
automatically added.
-
-\subsection{Defining commands}
-\label{Sec:commands.define}
-
-\LaTeXe{} provides some extra methods of (re)defining commands that are
-intended for use in class and package files.
-
-\NEWfeature{1994/12/01}
-The \texttt{*}-forms of these commands should be used to define
-commands that are not, in \TeX{} terms, long. This can be useful for
-error-trapping with commands whose arguments are not intended to
-contain whole paragraphs of text.
-
-\begin{decl}
- |\DeclareRobustCommand| \arg{cmd} \oarg{num} \oarg{default}
- \arg{definition}\\
- |\DeclareRobustCommand*| \arg{cmd} \oarg{num} \oarg{default}
- \arg{definition}
-\end{decl}
-This command takes the same arguments as |\newcommand| but it declares
-a robust command, even if some code within the \m{definition} is
-fragile. You can use this command to define new robust commands, or
-to redefine existing commands and make them robust. A log is put into
-the transcript file if a command is redefined.
-
-For example, if |\seq| is defined as follows:
-\begin{verbatim}
- \DeclareRobustCommand{\seq}[2][n]{%
- \ifmmode
- #1_{1}\ldots#1_{#2}%
- \else
- \PackageWarning{fred}{You can't use \protect\seq\space in text}%
- \fi
- }
-\end{verbatim}
-Then the command |\seq| can be used in moving arguments, even though
-|\ifmmode| cannot, for example:
-\begin{verbatim}
- \section{Stuff about sequences $\seq{x}$}
-\end{verbatim}
-
-Note also that there is no need to put a |\relax| before the
-|\ifmmode| at the beginning of the definition; this is because the
-protection given by this |\relax| against expansion at the wrong time
-will be provided internally.
-
-\begin{decl}
- |\CheckCommand| \arg{cmd} \oarg{num} \oarg{default}
- \arg{definition}\\
- |\CheckCommand*| \arg{cmd} \oarg{num} \oarg{default}
- \arg{definition}
-\end{decl}
-This takes the same arguments as |\newcommand| but, rather than define
-\m{cmd}, it just checks that the current definition of \m{cmd} is
-exactly as given by \m{definition}. An error is raised if these
-definitions differ.
-
-This command is useful for checking the state of the system before
-your package starts altering the definitions of commands. It allows
-you to check, in particular, that no other package has redefined the
-same command.
-
-\subsection{Moving arguments}
-
-\NEWdescription{1994/12/01}
-The setting of protect whilst processing (i.e.~moving) moving arguments
-has been reimplemented, as has the method of writing information from
-the |.aux| file to other files such as the |.toc| file. Details can
-be found in the file |ltdefns.dtx|.
-
-We hope that these changes will not affect many packages.
-
-\section{Miscellaneous commands, etc}
+\section{Miscellaneous commands, etc.}
\label{Sec:commands.misc}
\subsection{Layout parameters}
@@ -1452,78 +1065,25 @@ We hope that these changes will not affect many packages.
|\paperheight|\\
|\paperwidth|
\end{decl}
-These two parameters are usually set by the class to be the size of
-the paper being used. This should be actual paper size, unlike
-|\textwidth| and |\textheight| which are the size of the main text
-body within the margins.
-
+These two parameters are usually set by the class to be the size of the paper
+being used. This should be actual paper size, unlike |\textwidth| and
+|\textheight| which are the size of the main text body within the margins.
\subsection{Case changing}
\label{sec:case}
\begin{decl}
|\MakeUppercase| \arg{text} \\
- |\MakeLowercase| \arg{text}
+ |\MakeLowercase| \arg{text} \\
+ |\MakeTitlecase| \arg{text}
\end{decl}
-\NEWfeature{1995/06/01}
-\TeX{} provides two primitives |\uppercase| and |\lowercase| for
-changing the case of text. These are sometimes used in document
-classes, for example to set information in running heads in all
-capitals.
-
-Unfortunately, these \TeX{} primitives do not change the case of
-characters accessed by commands like |\ae| or |\aa|. To overcome this
-problem, \LaTeX{} provides two new commands |\MakeUppercase| and
-|\MakeLowercase| to do this.
-
-For example:
-\begin{quotation}
-\begin{tabular}{rl}
- |\uppercase{aBcD\ae\AA\ss\OE}| & \uppercase{aBcD\ae\AA\ss\OE}\\
- |\lowercase{aBcD\ae\AA\ss\OE}| & \lowercase{aBcD\ae\AA\ss\OE}\\
- |\MakeUppercase{aBcD\ae\AA\ss\OE}| &
- \MakeUppercase{aBcD\ae\AA\ss\OE}\\
- |\MakeLowercase{aBcD\ae\AA\ss\OE}| & \MakeLowercase{aBcD\ae\AA\ss\OE}
-\end{tabular}
-\end{quotation}
-
-The commands |\MakeUppercase| and |\MakeLowercase| themselves are
-robust, but they have moving arguments.
-
-The commands use the \TeX{} primitives |\uppercase| and |\lowercase|,
-and so have a number of unexpected `features'. In particular, they
-change the case of everything (except characters in the names of
-control-sequences) in their text argument: this includes mathematics,
-environment names, and label names.
-
-For example:
-\begin{verbatim}
- \MakeUppercase{$x+y$ in \ref{foo}}
-\end{verbatim}
-produces $X+Y$ and the warning:
-\begin{verbatim}
- LaTeX Warning: Reference `FOO' on page ... undefined on ...
-\end{verbatim}
-In the long run, we would like to use all-caps fonts rather than any
-command like |\MakeUppercase| but this is not possible at the moment
-because such fonts do not exist.
-
-\NEWdescription{1995/12/01}
-In order that upper/lower-casing will work reasonably well, and in
-order to provide any correct hyphenation, \LaTeXe{} \emph{must} use,
-throughout a document, the same fixed table for changing case.
-The table used is designed for the font encoding |T1|; this works well
-with the standard \TeX{} fonts for all Latin alphabets but will cause
-problems when using other alphabets.
-
-\subsection{The `openany' option in the `book' class}
-
-\NEWdescription{1996/06/01}
-The |openany| option allows chapter and similar openings to
-occur on left hand pages. Previously this option affected only
-|\chapter| and |\backmatter|. It now also affects
-|\part|, |\frontmatter| and |\mainmatter|.
+As described in \texttt{usrguide}, case changing for text should be carried out
+using the commands |\MakeUppercase|, |\MakeLowercase| and
+|\MakeTitlecase|. If you need to change the case of programmatic material, the
+team strongly suggest using the L3 programming layer commands in the
+\texttt{str} module. If you do not wish to do this, you should use the \TeX{}
+|\uppercase| and |\lowercase| primitives \emph{in this situation only}.
\subsection{Better user-defined math display environments}
@@ -1531,11 +1091,8 @@ occur on left hand pages. Previously this option affected only
|\ignorespacesafterend|
\end{decl}
-\NEWfeature{1996/12/01}
-\NEWdescription{2003/12/01}
-Suppose that you want to define an environment for displaying text
-that is numbered as an equation. A straightforward way to do this is
-as follows:
+Suppose that you want to define an environment for displaying text that is
+numbered as an equation. A straightforward way to do this is as follows:
\begin{verbatim}
\newenvironment{texteqn}
{\begin{equation}
@@ -1543,13 +1100,13 @@ as follows:
{\end{minipage}
\end{equation}}
\end{verbatim}
-However, if you have tried this then you will probably have noticed
-that it does not work perfectly when used in the middle of a paragraph
-because an inter-word space appears at the beginning of the first
-line after the environment.
+However, if you have tried this then you will probably have noticed that it
+does not work perfectly when used in the middle of a paragraph because an
+inter-word space appears at the beginning of the first line after the
+environment.
-There is now an extra command (with a very long name) available that
-you can use to avoid this problem; it should be inserted as shown here:
+You can avoid this problem using |\ignorespacesafterend|; it should be
+inserted as shown here:
\begin{verbatim}
\newenvironment{texteqn}
{\begin{equation}
@@ -1567,312 +1124,298 @@ This command may also have other uses.
|\normalsfcodes|
\end{decl}
-\NEWfeature{1997/06/01}
This command should be used to restore the normal settings of the
parameters that affect spacing between words, sentences, etc.
-An important use of this feature is to correct a problem, reported by
-Donald Arseneau, that punctuation in page headers has always (in all
-known \TeX{} formats) been potentially wrong whenever a page break
-happens while a local setting of the space codes is in effect. These
-space codes are changed by, for example, the command
-\verb|\frenchspacing|) and the \textsf{verbatim} environment.
-
-It is normally given the correct definition automatically in
-|\begin{document}| and so need not be explicitly set; however, if it
-is explicitly made nonempty in a class file then automatic
-default setting will be over-ridden.
-
-
-\section{Upgrading \LaTeX~2.09 classes and packages}
-\label{Sec:upgrade}
-
-This section describes the changes you may need to make when you
-upgrade an existing \LaTeX{} style to a package or class but we shall
-start in optimistic mode.
-
-Many existing style files will run with \LaTeXe{} without any
-modification to the file itself. When everything is running OK,
-please put a note in the newly created package or class file to record
-that it runs with the new standard \LaTeX{}; then distribute it to
-your users.
-
-\subsection{Try it first!}
-\label{Sec:try-it}
-
-The first thing you should do is to test your style in `compatibility
-mode'. The only change you need to make in order to do this is,
-possibly, to change the extension of the file to |.cls|: you should
-make this change only if your file was used as a main document style.
-Now, without any other modifications, run \LaTeXe{} on a document that
-uses your file. This assumes that you have a suitable collection of
-files that tests all the functionality provided by your style file.
-(If you haven't, now is the time to make one!)
-
-You now need to change the test document files so that they are
-\LaTeXe{} documents: see \emph{\usrguide} for details of how to do
-this and then try them again. You have now tried the test documents
-in both \LaTeXe{} native mode and \LaTeX~2.09 compatibility mode.
-
-\subsection{Troubleshooting}
-\label{Sec:trouble}
-
-If your file does not work with \LaTeXe{}, there are two likely
-reasons.
+An important use of this feature is to correct a problem, reported by Donald
+Arseneau, that punctuation in page headers has always (in all known \TeX{}
+formats) been potentially wrong whenever a page break happens while a local
+setting of the space codes is in effect. These space codes are changed by, for
+example, the command \verb|\frenchspacing|) and the \textsf{verbatim}
+environment.
+
+It is normally given the correct definition automatically in |\begin{document}|
+and so need not be explicitly set; however, if it is explicitly made non-empty
+in a class file then automatic default setting will be over-ridden.
+
+\subsection{Querying localisation}
+
+Localisation information is needed to customise a range of outputs. The
+\LaTeX{} kernel does not itself manage localisation, which is well-served by
+the bundles \pkg{babel} and \pkg{polyglossia}. To allow the kernel and other
+packages to access the current localisation information provided by \pkg{babel}
+or \pkg{polyglossia}, the command \cs{BCPdata} is defined by the kernel. The
+initial kernel definition expands to tag parts for \texttt{en-US}, as the
+kernel does not track localisation but does start out with a broadly US~English
+setup. However, if \pkg{babel} or \pkg{polyglossia} are loaded, it is redefined
+expand to the BCP-47 information from the appropriate package. The supported
+arguments are the BCP-47 tag breakdowns:
\begin{itemize}
-\item \LaTeX{} now has a robust, well-defined designer's interface for
- selecting fonts, which is very different from the \LaTeX~2.09
- internals.
-\item Your style file may have used some \LaTeX~2.09 internal commands
- which have changed, or which have been removed.
+ \item \texttt{tag} The full BCP-47 tag (e.g.~\texttt{en-US})
+ \item \texttt{language} (e.g.,~\texttt{de})
+ \item \texttt{region} (e.g.,~\texttt{AT})
+ \item \texttt{script} (e.g.,~\texttt{Latn})
+ \item \texttt{variant} (e.g.,~\texttt{1901})
+ \item \texttt{extension.t} (transformation, e.g.,~\texttt{en-t-ja})
+ \item \texttt{extension.u} (additional locale
+ information, e.g.,~\texttt{ar-u-nu-latn})
+ \item \texttt{extension.x} (private use area, e.g.,~\texttt{la-x-classic})
\end{itemize}
+The information for the \emph{main} language for a document is be provided
+if these are prefixed by \texttt{main.}, e.g.~\texttt{main.language} will
+expand to the main language even if another language is currently active.
-When you are debugging your file, you will probably need more
-information than is normally displayed by \LaTeXe. This is achieved
-by resetting the counter |errorcontextlines| from its default value of
-$-1$ to a much higher value, e.g.~999.
-
-\subsection{Accommodating compatibility mode}
-
-Sometimes an existing collection of \LaTeX~2.09 documents makes it
-inconvenient or impossible to abandon the old commands entirely.
-If this is the case, then it is possible to accommodate both conventions
-by making special provision for documents processed in compatibility
-mode.
+In addition to the tag breakdown, the following semantic arguments are
+supported
+\begin{itemize}
+ \item \texttt{casing} The tag for case changing, e.g.~\texttt{el-x-iota}
+ could be selected rather than \texttt{el} to select a capital adscript
+ iota on uppercasing an \emph{ypogegrammeni}
+\end{itemize}
-\begin{decl}
-|\if@compatibility|
-\end{decl}
-This switch is set when a document begins with |\documentstyle| rather
-than |\documentclass|. Appropriate code can be supplied for either
-condition, as follows:
+For example, the case changing command \cs{MakeUppercase} is (conceptually)
+defined as
\begin{verbatim}
- \if@compatibility
- <code emulating LaTeX 2.09 behavior>
- \else
- <code suitable for LaTeX2e>
- \fi
+\ExpandArgs{e}\MakeUppercaseAux{\BCPdata{casing}}{#1}
\end{verbatim}
+where |#1| is the user input and the first argument to
+\cs{MakeUppercaseAux} takes two arguments, the locale and input text.
+
+\section{Commands superseded for new material}
+A small number of commands were introduced as part of \LaTeXe{} in the
+mid-1990s, are widely used but have been superseded by more modern methods.
+These are covered here as they are likely to be encountered routinely in
+existing classes and packages.
-\subsection{Font commands}
+\subsection{Defining commands}
-Some font and size commands are now defined by the document class
-rather than by the \LaTeX{} kernel. If you are upgrading a
-\LaTeX~2.09 document style to a class that does not load one of the
-standard classes, then you will probably need to add definitions for
-these commands.
+The \texttt{*}-forms of these commands should be used to define
+commands that are not, in \TeX{} terms, long. This can be useful for
+error-trapping with commands whose arguments are not intended to
+contain whole paragraphs of text.
\begin{decl}
- |\rm| |\sf| |\tt| |\bf| |\it| |\sl| |\sc|
+ |\DeclareRobustCommand| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}\\
+ |\DeclareRobustCommand*| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}
\end{decl}
-None of these short-form font selection commands are defined in the
-\LaTeXe{} kernel. They are defined by all the standard class files.
-
-If you want to define them in your class file, there are several
-reasonable ways to do this.
-
-One possible definition is:
-\begin{verbatim}
- \newcommand{\rm}{\rmfamily}
- ...
- \newcommand{\sc}{\scshape}
-\end{verbatim}
-This would make the font commands orthogonal; for example
-|{\bf\it text}| would produce bold italic, thus: \textbf{\textit{text}}.
-It will also make them produce an error if used in math mode.
+This command takes the same arguments as |\newcommand| but it declares a robust
+command, even if some code within the \m{definition} is fragile. You can use
+this command to define new robust commands, or to redefine existing commands
+and make them robust. A log is put into the transcript file if a command is
+redefined.
-Another possible definition is:
+For example, if |\seq| is defined as follows:
\begin{verbatim}
- \DeclareOldFontCommand{\rm}{\rmfamily}{\mathrm}
- ...
- \DeclareOldFontCommand{\sc}{\scshape}{\mathsc}
+ \DeclareRobustCommand{\seq}[2][n]{%
+ \ifmmode
+ #1_{1}\ldots#1_{#2}%
+ \else
+ \PackageWarning{fred}{You can't use \protect\seq\space in text}%
+ \fi
+ }
\end{verbatim}
-This will make |\rm| act like |\rmfamily| in text mode (see above) and
-it will make |\rm| select the |\mathrm| math alphabet in math mode.
-
-Thus |${\rm math} = X + 1$| will produce `${\rm math} = X + 1$'.
-
-If you do not want font selection to be orthogonal then you can
-follow the standard classes and define:
+Then the command |\seq| can be used in moving arguments, even though
+|\ifmmode| cannot, for example:
\begin{verbatim}
- \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
- ...
- \DeclareOldFontCommand{\sc}{\normalfont\scshape}{\mathsc}
+ \section{Stuff about sequences $\seq{x}$}
\end{verbatim}
-This means, for example, that |{\bf\it text}| will produce medium
-weight (rather than bold) italic, thus: \textit{text}.
-\begin{decl}
- |\normalsize| \\
- |\@normalsize|
-\end{decl}
-The command |\@normalsize| is retained for compatibility with
-\LaTeX~2.09 packages which may have used its value; but redefining it
-in a class file will have no effect since it is always reset to have
-the same meaning as |\normalsize|.
-
-This means that classes \emph{must} now redefine |\normalsize| rather
-than redefining |\@normalsize|; for example (a rather incomplete one):
-\begin{verbatim}
- \renewcommand{\normalsize}{\fontsize{10}{12}\selectfont}
-\end{verbatim}
-Note that |\normalsize| is defined by the \LaTeX{} kernel to be an
-error message.
+Note also that there is no need to put a |\relax| before the |\ifmmode| at the
+beginning of the definition; this is because the protection given by this
+|\relax| against expansion at the wrong time will be provided internally.
\begin{decl}
- |\tiny| |\footnotesize| |\small| |\large|\\
- |\Large| |\LARGE| |\huge| |\Huge|
+ |\CheckCommand| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}\\
+ |\CheckCommand*| \arg{cmd} \oarg{num} \oarg{default}
+ \arg{definition}
\end{decl}
-None of these other `standard' size-changing commands are defined in
-the kernel: each needs to be defined in a class file if you need it.
-They are all defined by the standard classes.
-
-This means you should use |\renewcommand| for |\normalsize| and
-|\newcommand| for the other size-changing commands.
-
+This takes the same arguments as |\newcommand| but, rather than define \m{cmd},
+it just checks that the current definition of \m{cmd} is exactly as given by
+\m{definition}. An error is raised if these definitions differ.
-\subsection{Obsolete commands}
+This command is useful for checking the state of the system before your package
+starts altering the definitions of commands. It allows you to check, in
+particular, that no other package has redefined the same command.
-Some packages will not work with \LaTeXe{}, normally because they relied
-on an internal \LaTeX{} command which was never supported and has now
-changed, or been removed.
-
-In many cases there will now be a robust, high-level means of
-achieving what previously required low-level commands. Please consult
-Section~\ref{Sec:commands} to see if you can now use the \LaTeXe{}
-class and package writers commands.
-
-Also, of course, if your package or class redefined any of the kernel
-commands (i.e.~those defined in the files |latex.tex|, |slitex.tex|,
-|lfonts.tex|, |sfonts.tex|) then you will need to check it very
-carefully against the new kernel in case the implementation has
-changed or the command no longer exists in the \LaTeX2e{} kernel.
+\subsection{Option declaration}
+\label{Sec:commands.options.dec}
-Too many of the internal commands of \LaTeX~2.09 have been
-re-implemented or removed to be able to list them all here. You must
-check any that you have used or changed.
+The following commands deal with the declaration and handling of options to
+document classes and packages using a classical `simple text' approach. Every
+option name must be a `\LaTeX{} name'.
-We shall, however, list some of the more important commands which are
-no longer supported.
+There are some commands designed especially for use within the \m{code}
+argument of these commands (see below).
\begin{decl}
- |\tenrm| |\elvrm| |\twlrm| \dots\\
- |\tenbf| |\elvbf| |\twlbf| \dots\\
- |\tensf| |\elvsf| |\twlsf| \dots\\
- \qquad$\vdots$
+ |\DeclareOption| \arg{option-name} \arg{code}
\end{decl}
-The (approximately) seventy internal commands of this form are no longer
-defined. If your class or package uses them then \emph{please}
-replace them with new font commands described in \emph{\fntguide}.
+This makes \m{option-name} a `declared option' of the class or package in which
+it is put.
+
+The \m{code} argument contains the code to be executed if that option is
+specified for the class or package; it can contain any valid \LaTeXe{}
+construct.
-For example, the command |\twlsf| should be replaced by:
+Example:
\begin{verbatim}
- \fontsize{12}{14}\normalfont\sffamily\selectfont
+ \DeclareOption{twoside}{\@twosidetrue}
\end{verbatim}
-Another possibility is to use the |rawfonts| package, described in
-\emph{\usrguide}.
-
-Also, remember that many of the fonts preloaded by \LaTeX~2.09
-are no longer preloaded.
-
\begin{decl}
- |\vpt| |\vipt| |\viipt| \dots
+ |\DeclareOption*| \arg{code}
\end{decl}
-These were the internal size-selecting commands in \LaTeX~2.09.
-(They can still be used in \LaTeX~2.09 compatibility mode.)
-Please use the command |\fontsize| instead: see \emph{\fntguide} for
-details.
+This declares the \m{code} to be executed for every option which is specified
+for, but otherwise not explicitly declared by, the class or package; this code
+is called the `default option code' and it can contain any valid \LaTeXe{}
+construct.
-For example, |\vpt| should be replaced by:
-\begin{verbatim}
- \fontsize{5}{6}\normalfont\selectfont
-\end{verbatim}
+If a class file contains no |\DeclareOption*| then, by default, all specified
+but undeclared options for that class will be silently passed to all packages
+(as will the specified and declared options for that class).
+
+If a package file contains no |\DeclareOption*| then, by default, each
+specified but undeclared option for that package will produce an error.
+
+\subsection{Commands within option code}
+\label{Sec:within.code}
+
+These two commands can be used only within the \m{code} argument of either
+|\DeclareOption| or |\DeclareOption*|. Other commands commonly used within
+these arguments can be found in the next few subsections.
\begin{decl}
- |\prm|, |\pbf|, |\ppounds|, |\pLaTeX| \dots
+ |\CurrentOption|
\end{decl}
-\LaTeX~2.09 used several commands beginning with |\p| in order to
-provide `protected' commands. For example, |\LaTeX| was defined to be
-|\protect\pLaTeX|, and |\pLaTeX| was defined to produce the \LaTeX{}
-logo. This made |\LaTeX| robust, even though |\pLaTeX| was not.
-
-These commands have now been reimplemented using
-|\DeclareRobustCommand|
-(described in Section~\ref{Sec:commands.define}).
-If your package redefined one of the |\p|-commands then you must
-remove the redefinition and use |\DeclareRobustCommand| to redefine the
-non-|\p| command.
+This expands to the name of the current option.
\begin{decl}
-|\footheight|\\
-|\@maxsep|\\
-|\@dblmaxsep|
+ |\OptionNotUsed|
\end{decl}
-These parameters are not used by \LaTeXe{} so they have been removed,
-except in \LaTeX~2.09 compatibility mode. Classes should no longer
-set them.
-
-\begin{thebibliography}{1}
+This causes the current option to be added to the list of `unused options'.
-\bibitem{A-W:DEK91}
-Donald~E. Knuth.
-\newblock {\em The \TeX book}.
-\newblock Addison-Wesley, Reading, Massachusetts, 1986.
-\newblock Revised to cover \TeX3, 1991.
-
-\bibitem{A-W:LLa94}
-Leslie Lamport.
-\newblock {\em {\LaTeX:} A Document Preparation System}.
-\newblock Addison-Wesley, Reading, Massachusetts, second edition, 1994.
+\subsection{Option processing}
+\label{Sec:commands.options}
-\bibitem{A-W:MG2004}
-Frank Mittelbach and Michel Goossens.
-\newblock {\em The {\LaTeX} Companion second edition}.
-\newblock With Johannes Braams, David Carlisle, and Chris Rowley.
-\newblock Addison-Wesley, Reading, Massachusetts, 2004.
+\begin{decl}
+ |\ProcessOptions|
+\end{decl}
+This command executes the \m{code} for each selected option.
-\end{thebibliography}
+We shall first describe how |\ProcessOptions| works in a package file, and then
+how this differs in a class file.
-\newpage
-\thispagestyle{empty}
+To understand in detail what |\ProcessOptions| does in a package file, you have
+to know the difference between \emph{local} and \emph{global} options.
+\begin{itemize}
+\item \textbf{Local options} are those which have been explicitly
+ specified for this particular package in the \m{options} argument of
+ any of these:
+\begin{quote}
+ |\PassOptionsToPackage{<options>}| \ |\usepackage[<options>]|\\
+ |\RequirePackage[<options>]|
+\end{quote}
+\item \textbf{Global options} are any other options that are specified
+ by the author in the \m{options} argument of
+ |\documentclass[<options>]|.
+\end{itemize}
+For example, suppose that a document begins:
+\begin{verbatim}
+ \documentclass[german,twocolumn]{article}
+ \usepackage{gerhardt}
+\end{verbatim}
+whilst package |gerhardt| calls package |fred| with:
+\begin{verbatim}
+ \PassOptionsToPackage{german,dvips,a4paper}{fred}
+ \RequirePackage[errorshow]{fred}
+\end{verbatim}
+then:
+\begin{itemize}
+\item |fred|'s local options are |german|, |dvips|, |a4paper|
+ and |errorshow|;
+\item |fred|'s only global option is |twocolumn|.
+\end{itemize}
-\section*{\LaTeXe{} Summary sheet: updating old styles}
+When |\ProcessOptions| is called, the following happen.
+\begin{itemize}
+\item \emph{First}, for each option so far declared in |fred.sty|
+ by |\DeclareOption|, it looks to see if that option is either a
+ global or a local option for |fred|: if it is then the corresponding
+ code is executed.
-Section references below are to \emph{\clsguide}.
+ This is done in the order in which these options
+ were declared in |fred.sty|.
+\item \emph{Then}, for each remaining \emph{local} option, the command
+ |\ds@<option>| is executed if it has been defined somewhere (other
+ than by a |\DeclareOption|); otherwise, the `default option code' is
+ executed. If no default option code has been declared then an error
+ message is produced.
-\begin{enumerate}
+ This is done in the order in which these
+ options were specified.
+\end{itemize}
+Throughout this process, the system ensures that the code declared for
+an option is executed at most once.
-\item Should it become a class or a package?
- See Section~\ref{Sec:classorpkg} for how to answer this question.
+Returning to the example, if |fred.sty| contains:
+\begin{verbatim}
+ \DeclareOption{dvips}{\typeout{DVIPS}}
+ \DeclareOption{german}{\typeout{GERMAN}}
+ \DeclareOption{french}{\typeout{FRENCH}}
+ \DeclareOption*{\PackageWarning{fred}{Unknown `\CurrentOption'}}
+ \ProcessOptions\relax
+\end{verbatim}
+then the result of processing this document will be:
+\begin{verbatim}
+ DVIPS
+ GERMAN
+ Package fred Warning: Unknown `a4paper'.
+ Package fred Warning: Unknown `errorshow'.
+\end{verbatim}
+Note the following:
-\item If it uses another style file, then you will need to obtain an
- updated version of this other file. Look at Section~\ref{Sec:loading}
- for information on how to load other class and package files.
+\begin{itemize}
+\item the code for the |dvips| option is executed before that for the
+ |german| option, because that is the order in which they are declared
+ in |fred.sty|;
+\item the code for the |german| option is executed only once, when the
+ declared options are being processed;
+\item the |a4paper| and |errorshow| options produce the warning from
+ the code declared by |\DeclareOption*| (in the order in which they
+ were specified), whilst the |twocolumn| option does not: this is
+ because |twocolumn| is a global option.
+\end{itemize}
-\item Try it: see Section~\ref{Sec:try-it}.
+In a class file, |\ProcessOptions| works in the same way, except that:
+\emph{all} options are local; and the default value for |\DeclareOption*| is
+|\OptionNotUsed| rather than an error.
-\item It worked? Excellent, but there are probably still some things
- you should change in order to make your file into a well-structured
- \LaTeXe{} file that is both robust and portable. So you should now
- read Section~\ref{Sec:writing}, especially~\ref{Sec:general}. You
- will also find some useful examples in Section~\ref{Sec:structure}.
+Note that, because |\ProcessOptions| has a |*|-form, it is wise to follow the
+non-star form with |\relax|, as in the previous examples, since this prevents
+unnecessary look ahead and possibly misleading error messages being issued.
- If your file sets up new fonts, font-changing commands or symbols,
- you should also read \emph{\fntguide}.
+\begin{decl}
+ |\ProcessOptions*|
+\end{decl}
+This is like |\ProcessOptions| but it executes the options in the order
+specified in the calling commands, rather than in the order of declaration in
+the class or package. For a package this means that the global options are
+processed first.
-\item It did not work? There are three possibilities here:
- \begin{itemize}
- \item error messages are produced whilst reading your file;
- \item error messages are produced whilst processing test documents;
- \item there are no errors but the output is not as it should be.
- \end{itemize}
- Don't forget to check carefully for this last possibility.
+\begin{decl}
+ |\ExecuteOptions| \arg{options-list}
+\end{decl}
- If you have got to this stage then you will need to read
- Section~\ref{Sec:upgrade} to find the solutions that will make your
- file work.
-\end{enumerate}
+It can be used to provide a `default option list' just before
+|\ProcessOptions|. For example, suppose that in a class file you want to set up
+the default design to be: two-sided printing; 11pt fonts; in two columns. Then
+it could specify:
+\begin{verbatim}
+ \ExecuteOptions{11pt,twoside,twocolumn}
+\end{verbatim}
\end{document}
diff --git a/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf b/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
index 6274984a6d1..82de575e6d9 100644
--- a/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf b/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
index 1b614ae4152..1aa77ffdf51 100644
--- a/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf b/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf
index 93037436a6b..4181da43289 100644
--- a/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/doc.pdf b/Master/texmf-dist/doc/latex-dev/base/doc.pdf
index 796e6319f2f..c0a027ae5d2 100644
--- a/Master/texmf-dist/doc/latex-dev/base/doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf b/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
index a489d9b28a8..88ef1e13700 100644
--- a/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/encguide.pdf b/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
index 0c2ed52b023..7f961d91483 100644
--- a/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/encguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/exscale.pdf b/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
index 8dd6ce4286f..11825176132 100644
--- a/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/exscale.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf b/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
index f3eb0961397..762b79017fd 100644
--- a/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf b/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
index d92d3d71bb5..034fe97db8a 100644
--- a/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/fntguide.tex b/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
index 33bbed3ba3b..619cc907b26 100644
--- a/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/fntguide.tex
@@ -42,7 +42,7 @@
\title{\LaTeXe{} font selection}
-\author{\copyright~Copyright 1995--2022, \LaTeX\ Project
+\author{\copyright~Copyright 1995--2023, \LaTeX\ Project
Team.\thanks{Thanks to Arash Esbati for documenting the
newer NFSS features of 2020}\\
All rights reserved.%
@@ -52,7 +52,7 @@
\texttt{fntguide.tex} for full details.}%
}
-\date{August 2022}
+\date{May 2023}
\begin{document}
@@ -299,8 +299,6 @@ e.g., ``demi-bold'' is normally just another name for ``semi-bold'', so
should get |sb| assigned, etc.
-\newpage
-
\NEWdescription{2020/02/02}
The most common values for the font shape are:
\begin{center}
@@ -325,7 +323,7 @@ A less common value for font shape is:
\end{minipage}
\end{center}
and there is also |ui| for upright italic, i.e., an italic shape but
-artifically turned upright. This is sometimes useful and available in
+artificially turned upright. This is sometimes useful and available in
some fonts.
@@ -404,8 +402,6 @@ turned into \TeX{} font names. This is described in
Section~\ref{Sec:install}.
-\newpage
-
\subsection{Selection commands}
@@ -955,7 +951,6 @@ Example:
\DeclareMathSymbol{\alphld}{\mathalpha}{AMSb}{"0C}
\end{verbatim}
-\newpage
\begin{decl}
|\DeclareMathDelimiter| \arg{cmd} \arg{type}
@@ -1382,7 +1377,7 @@ the `cmr' family).
from this subsection.
\NEWdescription{2019/07/10}
-As an exception it may also contain a |\DeclareFontsubstitution|
+As an exception it may also contain a |\DeclareFontSubstitution|
declaration (described in \ref{sec:encoding-defaults}) to specify how
font substitution for this encoding should be handled. In that case it
is important that the values used point to a font that is guaranteed to
@@ -1431,6 +1426,8 @@ executed whenever a math alphabet with this encoding is called.
It also saves the value of \m{encoding} in the macro
|\LastDeclaredEncoding|.
+\newpage
+
Example:
\begin{verbatim}
\DeclareFontEncoding{OT1}{}{}
@@ -1496,6 +1493,8 @@ For example, the definition of |\ss| in the |OT1| encoding is:
It does not produce an error if the command has already
been defined but logs the redefinition in the transcript file.
+\newpage
+
\begin{decl}
|\DeclareTextAccent| \arg{cmd} \arg{encoding} \arg{slot}
\end{decl}
@@ -1611,6 +1610,8 @@ defined with |\DeclareTextSymbol|.
For more examples of these definitions, see |ltoutenc.dtx|.
+\newpage
+
\begin{decl}[1994/12/01]
|\ProvideTextCommandDefault| \arg{cmd} \arg{definition}
\end{decl}
@@ -2440,8 +2441,6 @@ become unavailable in the different sub-encodings. Again, the numbers
are the slots in the |TS1| encoding, |acc| indicates a `constructed'
accent.
-\newpage
-
\begin{table}[!tbp]
diff --git a/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf b/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
index c5d07452ce1..734a7e60e70 100644
--- a/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf b/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
index d09c30cace0..a5b90c87820 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf b/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
index 4c305b8bc1c..ddd7928f373 100644
--- a/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf b/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf
index 14ffd31d476..fb9e0e0a25c 100644
--- a/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf b/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
index ce0a066012a..3b4124e9d04 100644
--- a/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf b/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
index 2b3650506a9..dab8955e1c9 100644
--- a/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/lb2.pdf b/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
index d5d94cd6d8b..4c35d7053ea 100644
--- a/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/lb2.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/letter.pdf b/Master/texmf-dist/doc/latex-dev/base/letter.pdf
index fb5d1b851e1..139eb554c73 100644
--- a/Master/texmf-dist/doc/latex-dev/base/letter.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/letter.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf b/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
index 161aa935035..b1af720e502 100644
--- a/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/lppl.pdf b/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
index 4b4c6fa3269..c3b3b75bc7d 100644
--- a/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/lppl.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf
index 0dc121d2ce9..49e283c6d61 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf
index c67f46be255..94caa644c46 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
index c0f1ed5dbeb..f8d5cc6817b 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
index c24b2321a9b..f1006dec781 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf b/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
index d2bd8ee0a1a..eb59fc8bbc5 100644
--- a/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
index e9954e43f73..4c07148e48a 100644
--- a/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf b/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
index 855095c6ef4..a2c7bdc1dc6 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf
index 54c2703531d..22470e78141 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf
index cf70d21caeb..b3a84ca9f74 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
index bc1b2d7b36f..20e9915fb02 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
index 618176aa569..a7f03416324 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
index 423dd7db37c..35984fad286 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
index a43f3c2ffc8..447d1674df2 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
index 95683443c7b..cc15094d782 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
index 91ba9c3669e..0e70b1e807c 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
index 57c9abe6a95..59abf02bd76 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
index a587a13ac7b..82a2540ab11 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
index c57077ac146..f32fb2cad02 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
index 7dff0aaeb56..4ca9012f177 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
index 9911e7cc2e0..5fca7346e95 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
index 9d35abb5eae..6627ca370af 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
index 71aa27bcfc0..8bd9137660e 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
index 19406899686..dd8b6c663e0 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
index 66821fc4d0b..83c326971d2 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
index 0dfe862498a..5f4eae06f92 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
index 0c8934029d8..5e7ee0cd0b7 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
index 2d5500ff62c..637d049e402 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
index b88c8a5401f..badbfac892b 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
index b6a132732e7..5f857220a2d 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
index 3c79e0d9be4..2cd03fc389c 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews20.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews20.tex
index aeab3fae60b..b233f92dc4a 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews20.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews20.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 1993--2019
+% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
index c6528cfbea9..fbf13d47b87 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews21.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews21.tex
index 7b363447d93..a48cd0b199c 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews21.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews21.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
index 625a3af16ef..f107f51d4dd 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
index 2d591ff4243..0b1a540118b 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
index bea89f1051c..e7ee535ed46 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
index aa027c430c9..735abd907e4 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
index fe7d100e0d6..d62efe0af41 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
index 29da354bf39..487ee60ee41 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
index ee61704ae66..23876fc9d98 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
index 807dc2f7c26..19b4de4a576 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
index 0e1203352ae..b8f36728426 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews30.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews30.tex
index 74d7659512c..8183f7eabbf 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews30.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews30.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
index 878583bfb26..d46eff87c9e 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews31.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews31.tex
index 1dff72986cc..44bf4941426 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews31.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews31.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019-2020
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
index 35069ceab55..76a4a10cbe3 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews32.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews32.tex
index 28f3bf88b43..c64cd97958d 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews32.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews32.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019-2020
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
index e42df53c300..f255b9d1ef0 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex
index 39af4f1b72e..0b98a707ba8 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews33.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019-2021
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf
index 0707a1e9a2f..5523ac2cd6d 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews34.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews34.tex
index 517856834ae..d3a9202b56f 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews34.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews34.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2019-2021
+% Copyright (C) 2019-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf
index bef895d0981..a68acbd83f4 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews35.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews35.tex
index 0230ef6e58f..8d49bf19843 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews35.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews35.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2021-2022
+% Copyright (C) 2021-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -322,7 +322,6 @@ has been refined, such that
\ProcessKeyOptions
\end{verbatim}
will now automatically pick up the package name as the key \emph{family},
-%unless explicitly given as an optional argument.
unless explicitly given as an optional argument:
\begin{verbatim}
\ProcessKeyOptions[family]
@@ -378,9 +377,7 @@ syntax are described in \file{usrguide3.pdf}. The command \cs{fpeval}
offers a rich syntax allowing for extensive calculations, whereas the
other three commands are essentially thin wrappers for \cs{numexpr},
\cs{dimexpr}, and \cs{glueexpr} \Dash therefore inheriting some syntax
-%peculiars and limitations in expressiveness.
peculiarities and limitations in expressiveness.
-% \newcommand\calulateheight[1]{%
\begin{verbatim}
\newcommand\calculateheight[1]{%
\setlength\textheight{\dimeval{\topskip
@@ -698,7 +695,7 @@ Source files containing \textlangle\ or \textrangle\ directly written
as Unicode codepoints U+2329 and U+232A no longer break when the
source file gets normalized under Unicode normalization rules.
%
-\githubissue{gh/714}
+\githubissue{714}
@@ -907,7 +904,6 @@ For details and further examples, see \file{mathcolor.pdf}.
\subsection{Fix locating files with \cs{graphicspath}}
-%
If a call to \cs{includegraphics} asked for a file (say, \file{image})
without extension, and if both \file{A/image.pdf} and \file{B/image.tex}
@@ -953,22 +949,10 @@ internal syntax errors due to premature expansion.
\emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
\url{https://latex-project.org/publications/indexbyyear/2020/}
-%\bibitem{35:source2e}
-% \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
-% \url{https://latex-project.org/help/documentation/}
-
-%\bibitem{35:ltnews31} \LaTeX{} Project Team:
-% \emph{\LaTeXe{} news 31}.\\
-% \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}
-
\bibitem{35:ltnews32} \LaTeX{} Project Team:
\emph{\LaTeXe{} news 32}.\\
\url{https://latex-project.org/news/latex2e-news/ltnews32.pdf}
-%\bibitem{35:ltnews33} \LaTeX{} Project Team:
-% \emph{\LaTeXe{} news 33}.\\
-% \url{https://latex-project.org/news/latex2e-news/ltnews33.pdf}
-
\bibitem{35:ltnews34} \LaTeX{} Project Team:
\emph{\LaTeXe{} news 34}.\\
\url{https://latex-project.org/news/latex2e-news/ltnews34.pdf}
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf
index acd22fa6319..13802736fda 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex
index b3f66564cb1..5dee9587479 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2021-2022
+% Copyright (C) 2021-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf
index 3b13c3e6196..781a244469d 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews37.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex
index a1197e10528..5b2a55dda33 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/ltnews37.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2021-2023
+% Copyright (C) 2021-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -124,7 +124,8 @@
% \publicationday{01} % change this if it's not released on 1st of a month
\publicationmonth{June}
-\publicationyear{2023 --- DRAFT version for upcoming release}
+%\publicationyear{2023 --- DRAFT version for upcoming release}
+\publicationyear{2023}
\publicationissue{37}
@@ -142,7 +143,8 @@
\medskip
-\section{Introduction}
+%\section{Introduction}
+
\section{New functionality offered as part of the
@@ -150,7 +152,8 @@
We have now enabled new automatic tagging functionality for additional
\LaTeX{} elements, among them most display environments, standard
-sectioning commands and content, figure and table listings. This can
+sectioning commands, content, figure and table listings, floats and graphics and
+bibliographies. This can
be activated through
\begin{verbatim}
\DocumentMetadata{testphase=phase-III}
@@ -168,9 +171,9 @@ alter internals of \LaTeX{}.
Also note that there are still several environments and commands
described in the \LaTeX{} manual that do not have tagging support yet,
-notably tabulars, floats, \texttt{tabbing} and the various math
-environment. They will get this support as part of \texttt{phase-III}
-between now and the June release.
+notably tabulars, \texttt{tabbing}, the various math environment and a
+few others. They will get this support as part of \texttt{phase-III},
+but some of them will be delayed until after the June release.
A prototype for math tagging (including support for the \pkg{amsmath}
environments) is already available, but it is mainly intended for
@@ -194,60 +197,84 @@ be accessed with \verb|texdoc -l latex-lab|.
Feedback is welcome!
Please use \url{https://github.com/latex3/latex2e/discussions/1010}.
-\section{Documentation improvements}
-
-
-\subsection{Displaying the exact release dates for \LaTeX{}}
-
-In some situations it is necessary to find out the exact release dates
-for older version of the \LaTeX{} format, for example, when you need
-to use different code in a package depending on the availablilty of a
-certain feature and you therefore want to use
-\cs{IfFormatAtLeastTF}\texttt\{\meta{date}\texttt\} or the
-rather horrible construction \verb/\@ifl@t@r\fmtversion{/\meta{date}\texttt\},
-if you
-want to cater for formats that are older than 2020.
-
-Or you know that your package is definitely not going to work with a
-format before a certain \meta{date}, in which case you could use
-\verb/\NeedsTeXFormat{LaTeX2e}[/\meta{date}\texttt] to ensure that any
- user is alerted if their format is too old.
-
-The big problem is to know the exact \meta{date} to put into such
-commands and in the past that was not that easy to find. You could have
-looked in the the file \file{changes.txt}, but that is hidden somewhere
-in your installation and if you try
-\verb*/texdoc -l changes.txt/ you get more than thirty results and the
-right file is by no means the first.
-
-Yukai Chou (\textsf{@muzimuzhi}) kindly provided a patch for this, so that we now have
-the exact dates for each \LaTeX{} format listed in an easy to remember
-place: in \file{ltnews.pdf} and that file conveniently also contains all major
-features and changes to \LaTeX{} over the years\Dash one of which is
-most likely the reason you need the \meta{date} date in the first
-place.
-
-It is given in parentheses in the newsletter title, thus this
-newsletter tells you that on
-%
-\makeatletter
-\mbox{\expandafter\@gobblenonyear\@year\@nil
- -\@julianmonthtonum\@month-\two@digits\@day}
-\makeatother
-%
-the command
-\cs{NewEnvironmentCopy}, a new \texttt{shipout} hook, etc.\ was made
-available. And looking into \file{ltnews.pdf} you can now easily find
-out that the \LaTeX3 programming layer was added on 2020-02-02
-(because the date was so nice) and not on the first of the month.
-%
-\githubissue{982}
-
\section{New or improved commands}
+\subsection{Extending hooks to take arguments}
+
+Hooks have always been containers for code whose outcome was entirely
+dependent on the contents of the hook alone. If any type of contextual
+information had to be passed to the hook, it had to be done by setting
+some variable before the hook so that the code in the hook could use
+that. But this is somewhat hard to keep track of, clumsy to implement,
+and it required the programmer to have some kind of \enquote{hook before
+the hook} to do that setup.
+
+To make things a bit easier, \pkg{lthooks} was enhanced to support hooks
+with arguments. Hooks can now be declared and used with arguments, then
+the code added to these hooks can reference the hook's arguments using
+\verb|#1|, \verb|#2|, etc., so now hooks can behave more like macros
+than like \emph{token lists} (using \pkg{expl3} terminology). Regular
+argument-less hooks continue to work exactly like they did before: this
+extension is completely compatible with older documents and packages.
+
+\AddToHook{cmd/verbatim@font/after}[hack]{\small}
+To declare a hook with arguments, use
+\begin{verbatim}
+\NewHookWithArguments {<hook>} {<num args>}
+\end{verbatim}
+then, similarly, to use the code in the hook (supposing a hook declared
+with 2 arguments), write
+\begin{verbatim}
+\UseHookWithArguments {<hook>} {2} {<arg 1>} {<arg 2>}
+\end{verbatim}
+
+Or, if you want to add some code to a hook that takes arguments, write
+\begin{verbatim}
+\AddToHookWithArguments {<hook>} [<label>] {<code>}
+\end{verbatim}
+exactly like you would for regular hooks, except that the \meta{code}
+can use the arguments by referencing \verb|#1|, \verb|#2|, etc. In this
+case, if you want to add an actual parameter token (\verb|#|) to the
+\meta{code}, you have to double it, as usual.
+\RemoveFromHook{cmd/verbatim@font/after}[hack]
+
+Additionally, if you want to add \enquote{regular} code to a hook with
+arguments, you can still use \cs{AddToHook} --- in that case \verb|#|
+tokens are \emph{not} doubled. This means that a package author can
+decide to add arguments to an existing hook without worrying about
+compatibility: \cs{AddToHook} will do the right thing and will not
+mistakenly reference the newly added arguments.
+
+The commands \cs{NewReversedHookWithArguments}, \cs
+{NewMirroredHookPairWithArguments}, \cs
+{AddToHookNextWithArguments}, \cs{UseOneTimeHookWithArguments}, and
+the \pkg{expl3} conterparts of the commands discussed in this section
+were also added. The complete documentation can be found in the
+\pkg{lthooks} documentation \cite{37:lthooks-doc}.
+
+\subsubsection{Generic \texttt{cmd} hooks with arguments}
+
+Along with the possibility to pass arguments to a regular hook as
+discussed above, generic \hook{cmd} hooks now can access the arguments
+of the command they are patched into using the interface described in
+the previous section.
+
+For example, if you were to add some code to the \cs{title} command
+using hooks, you could access the actual title given in the argument.
+For example, to write the title of the document in the terminal you
+could use:
+\begin{verbatim}
+ \AddToHookWithArguments{cmd/title/before}
+ {\typeout{Document title: #1}}
+\end{verbatim}
+As with regular hooks, code added to a \hook{cmd} hook using
+\cs{AddToHook} will not be able to access the command's arguments. This
+means that, as with regular hooks, this change is completely backwards
+compatible, so previous usages of \hook{cmd} hooks will work exactly as
+they did before.
\subsection{Providing copy and show functions for environments}
@@ -279,31 +306,124 @@ following output:
%
\githubissue{963}
+\subsection{\cs{IfFileAtLeastTF}}
+The 2020-10-01 \LaTeX{} release introduced the CamelCase tests
+\cs{IfClassAtLeastTF} and \cs{IfPackageAtLeastTF} for checking class
+and package dates. We have now added \cs{IfFileAtLeastTF} to allow the
+same to happen for generic files which contain a \cs{ProvidesFile}
+line.
+%
+\githubissue{1015}
+
+\subsection{\cs{DeclareLowercaseMapping}, \cs{DeclareTitlecaseMapping}
+ and \cs{DeclareUppercaseMapping}}
+
+The move from a case-changing approach using \cs{lccode} and \cs{uccode} data
+to one where information is stored by a kernel-managed structure left a gap in
+the ability of the user to \emph{tune} the case changing outcomes. This has now
+been addressed by the addition of three commands
+\begin{itemize}
+ \item \cs{DeclareLowercaseMapping}
+ \item \cs{DeclareTitlecaseMapping}
+ \item \cs{DeclareUppercaseMapping}
+\end{itemize}
+which can be used to customise the outcome for codepoints. This can be applied
+generally or to a specific locale (see also the next section). A small number
+of pre-defined customisations have been set up in the kernel where the outcomes
+for \pdfTeX{} should be different for those from Unicode engines. For
+example
+\begin{verbatim}
+ \DeclareUppercaseMapping{"01F0}{\v{J}}
+\end{verbatim}
+allows \v{J} to be produced in 8-bit engines: without this customisation,
+an error would occur as there is no pre-composed \v{J} in Unicode. More detail
+is given in \texttt{usrguide}.
+%
+\githubissue{1033}
+
+\subsection{\cs{BCPdata}}
+
+Improvements in the Unicode handling for case changing have highlighted that
+the kernel has not to-date been locale-aware. The packages \pkg{babel} and
+\pkg{polyglossia} provide comprehensive locale support, but did not have
+an agreed unified interface to pass that information back to other code.
+Following discussion with the maintainers of those two bundles, the kernel
+now defines \cs{BCPdata} as a stub (so it is always defined), and \pkg{babel}
+and \pkg{polyglossia} will redefine it to provide the locale data. An agreed
+set of keywords mean that \cs{BCPdata} can be queried in a structured way
+by both the kernel and any other \enquote{consumer} packages.
+%
+\githubissue{1035}
+
+\subsection{Improve \cs{samepage}}
+
+The \cs{samepage} declaration sets various parameters to
+\texttt{10000} to prevent undesired page breaks. The
+\cs{predisplaypenalty} parameter has already by default a value of
+\texttt{10000} and to save space back in the days it was therefore not
+explicitly set. However, there are a few classes that change the
+parameter and as result the user might experience a page break in
+front of a display formula within the scope of \cs{samepage} when
+using such classes. This has now been corrected and
+\cs{predisplaypenalty} is also explicitly set to \texttt{10000}.
+%
+\githubissue{1022}
+\subsection{Groups in \cs{MakeUppercase}}
+%
+Prior to 2022, \cs{MakeUppercase} and \cs{MakeLowercase} used a brace
+group around their argument so providing a scope for any declarations
+within the argument. This grouping has been restored (also
+for \cs{MakeTitlecase}), although the underlying L3 text case commands do
+not use grouping.
+%
+\githubissue{1021}
+
+\subsection{Extension of the \cs{label} command}
+
+Previously, in standard \LaTeX{}, the \cs{label} command wrote a \cs{newlabel} declaration into
+the \texttt{.aux} file and stored two values in
+second argument of this \cs{newlabel} command:
+\cs{@currentlabel}, which normally contains the state of the current
+counter and \cs{thepage} for the current page number.
+
+The packages \pkg{hyperref} and
+\pkg{nameref} then patched the \cs{label} command to store five values instead.
+In addition to the above they saved \cs{@currentlabelname}, which normally contains the
+current title text and can be retrieved with \cs{nameref}, and
+\cs{@currentHref}, which is the name of the destination needed to create an
+active link. The fifth argument was only used if external
+references were loaded with the \pkg{xr-hyper} package.
+
+Starting with this release, the number of values stored in \cs{newlabel} have been unified.
+\cs{label} now writes a
+\cs{newlabel} command that always contains five values in the second argument (each in a brace group):
+\cs{@currentlabel}, \cs{thepage}, \cs{@currentlabelname},
+\cs{@currentHref}, and \cs{@kernel@reserved@label@data} (which is reserved for the kernel).
+
+Additionally, a hook with the name \texttt{label} has been
+added. It takes one argument: the label string.
+Code added to the hook can refer to this argument with \verb+#1+.
+The hook is executed directly before the \cs{label} command writes to the \texttt{.aux} file
+but \emph{after} the \cs{@bsphack} command has done its spacing magic and it is located \emph{inside} a group, thus its code only affects the write operation.
\section{Code improvements}
-\subsection{\pkg{doc}: Index \texttt{\textbackslash\textvisiblespace} correctly}
-
-\emph{to write}
-%
-\githubissue{943}
+\subsection{Performance in checking file existence}
+The addition of hooks, etc., to file operations had a side-effect in that
+multiple checks were made that the file existed. In larger documents using
+lots of files, these file system operations caused non-trivial performance
+impact. We now cache the existence of files, such that these repeated filesystem
+calls are avoided.
-\subsection{Default definition for \cs{do}}
+\subsection{\pkg{doc}: Handle \texttt{\textbackslash\textvisiblespace} correctly in the index}
-The command \cs{do} with its nice public name is in reality an
-internal command inherited from plain \TeX{} for list
-processing. However, it only got a definition when
-\verb=\begin{document}= was executed, with a result that a user
-definition in the preamble was unconditionally overwritten at this
-point. To properly alert the user that this command is not freely
-available we now already provide a definition in the format so that
-\cs{newcommand} and friends produce a proper error message instead of
-providing a definition that doesn't last.
+Due to some problems in the code it wasn't possible to prevent
+\verb*=\ = from showing up in the index\Dash \verb=\DoNotIndex{\ }=, etc.\ had no effect. This has now been corrected.
%
-\githubissue{975}
+\githubissue{943}
\subsection{\pkg{doc}: Support the \pkg{upquote} package}
@@ -341,6 +461,23 @@ desired effect.
\githubissue{953}
+\subsection{Default definition for \cs{do}}
+
+The command \cs{do} with its nice public name is in reality an
+internal command inherited from plain \TeX{} for list
+processing. However, it only got a definition when
+\verb=\begin{document}= was executed, with a result that a user
+definition in the preamble was unconditionally overwritten at this
+point. To properly alert the user that this command is not freely
+available we now already provide a definition in the format so that
+\cs{newcommand} and friends produce a proper error message instead of
+providing a definition that doesn't last.
+%
+\githubissue{975}
+
+
+
+
\subsection{New key for \env{filecontents}}
The \env{filecontents} environment warns on the terminal if a file
@@ -350,14 +487,13 @@ the warning less noisy in this case we added a new \texttt{nowarn} key
that redirects the overwriting warning to the transcript file. We
think that some record of the action is still required to help with
debugging, thus it is not completely silenced. The warning that
-nothing gets written, because the file aready exists (and the
+nothing gets written, because the file already exists (and the
\texttt{force} key was not used), is not altered and still shows up on
the terminal.
%
\githubissue{958}
-
\subsection{A further hook for shipping out pages}
Since October 2020 the shipout process offers a number of hooks to
@@ -429,10 +565,21 @@ group (i.e., any local changes would immediately be revoked, breaking,
for example, \pkg{wrapfig} in that special situation).
%
This got fixed with the 2022-11 PL1 hotfix, so was already corrected in
-the previous release, but only now documented in a newletter.
+the previous release, but only now documented in the newsletter.
%
\githubissue{967}
+\subsection{Ensure that \cs{cs} is defined in \cls{ltxdoc}}
+
+The class \cls{ltxdoc} defined the command \cs{cs} to typeset a
+command name with a backslash in front. This definition was moved to
+the \pkg{doc} package itself. This meant that it was suddenly missing
+when reverting to the old \pkg{doc} package implementation via the
+class option \texttt{doc2}. This has now been corrected.
+%
+\githubissue{981}
+
+
\subsection{Improve spacing at top of \env{minipages}}
@@ -453,15 +600,180 @@ correct.
\githubissue{989}
+\subsection{A fix for \cs{NewCommandCopy} and \cs{ShowCommand}}
+
+When copying and showing definitions of (non-expandable) document commands
+(aka commands defined by \cs{NewDocumentCommand} and friends) containing empty
+or only \texttt{m}-type arguments, these commands were wrongly recognized as
+expandable ones.
+This is fixed in the present \LaTeX{} release.
+%
+\githubissue{1009}
+
+\subsection{Corrections for switching math version}
+Some internal code improvements improve support for switching math version
+when nested within an outer math expression.
+This will improve \cs{boldsymbol} and \cs{bm} and similar commands.
+%
+\githubissue{1028}
+
+\subsection{Allow par as a filename}
+\verb|\input{par}| or \verb|\includegraphics{par}| could give spurious
+errors. This has been fixed by making an internal command \cs{long}.
+%
+\githubissue{942}
+
+\subsection{Correct setting of \cs{endlinechar} in \texttt{+v} arguments}
+In the particular case of a document command with a \texttt{+v}-type
+argument used inside \cs{ExplSyntaxOn}\texttt{/Off}, newlines would be
+misinterpreted as spaces because the value of \cs{endlinechar} was
+set too late. This has been fixed, and now newlines are correctly
+translated to ``\verb|the character ^^M|''.
+%
+\githubissue{876}
+
+\subsection{Correct handling of hooks with only `next' code}
+When \cs{AddToHookNext} was used on a not-yet-declared hook, that hook
+would be incorrectly identified as empty by \cs{ShowHook}. Also, if
+that hook was later declared, that `next' code would not be executed.
+This has been fixed by correctly initializing the hook structure when
+\cs{AddToHookNext} is used.
+%
+\githubissue{1052}
+
+\subsection{Ignoring space after \texttt{\$\$}}
+Space is normally ignored after a closing \texttt{\$\$},
+but internal \LaTeX{} font handling code could interfere if
+\cs{eqno} was used. \cs{eqno} and \cs{leqno} have been redefined
+to add \cs{ignorespaces} after the math group.
+%
+\githubissue{1059}
+
+\section{Documentation improvements}
+
+\subsection{Updates to the guides}
+
+When \LaTeXe{} was released, the team provided documentation for both document
+authors and package/class developers in the two files \texttt{usrguide} and
+\texttt{clsguide}. Over time, the team have augmented these documents as new
+methods have been added to the kernel. However, they retained there structure
+as starting from familiarity with \LaTeX{}~2.09. This meant that for new users,
+there was material which is no longer relevant, and less clarity than desirable
+in what approaches are recommended today.
+
+The two files have now been (partially) re-written, with the versions available
+previously now frozen as \texttt{usrguide-historic} and \texttt{clsguide-historic}.
+More material has been carried forward in the class/package guide than in the
+user guide, but both are worth a re-read by experienced \LaTeX{} users.
+
+
+
+\subsection{Displaying the exact release dates for \LaTeX{}}
-\section{Changes to packages in the \pkg{amsmath} category}
+In some situations it is necessary to find out the exact release dates
+for older version of the \LaTeX{} format, for example, when you need
+to use different code in a package depending on the availability of a
+certain feature and you therefore want to use
+\cs{IfFormatAtLeastTF}\texttt\{\meta{date}\texttt\} or the
+rather horrible construction \verb/\@ifl@t@r\fmtversion{/\meta{date}\texttt\},
+if you
+want to cater for formats that are older than 2020.
-\section{Changes to packages in the \pkg{graphics} category}
+Or you know that your package is definitely not going to work with a
+format before a certain \meta{date}, in which case you could use
+\verb/\NeedsTeXFormat{LaTeX2e}[/\meta{date}\texttt] to ensure that any
+ user is alerted if their format is too old.
+
+The big problem is to know the exact \meta{date} to put into such
+commands and in the past that was not that easy to find. You could have
+looked in the the file \file{changes.txt}, but that is hidden somewhere
+in your installation and if you try
+\verb*/texdoc -l changes.txt/ you get more than thirty results and the %*
+right file is by no means the first.
+
+Yukai Chou (\textsf{@muzimuzhi}) kindly provided a patch for this, so that we now have
+the exact dates for each \LaTeX{} format listed in an easy to remember
+place: in \file{ltnews.pdf} and that file conveniently also contains all major
+features and changes to \LaTeX{} over the years\Dash one of which is
+most likely the reason you need the \meta{date} date in the first
+place.
+
+It is given in parentheses in the newsletter title, thus this
+newsletter tells you that on
+%
+\makeatletter
+\mbox{\expandafter\@gobblenonyear\@year\@nil
+ -\@julianmonthtonum\@month-\two@digits\@day}
+\makeatother
+%
+the command
+\cs{NewEnvironmentCopy}, a new \texttt{shipout} hook, etc.\ was made
+available. And looking into \file{ltnews.pdf} you can now easily find
+out that the \LaTeX3 programming layer was added on 2020-02-02
+(because the date was so nice) and not on the first of the month.
+%
+\githubissue{982}
+
+\subsection{Fresh from the press: \enquote{The \LaTeX{} Companion, third edition} is now in print}
+
+The third edition of \emph{The \LaTeX{} Companion} is now
+available. This is the end of five years of careful work and we hope
+that it will provide our readers with all the information they need to
+successfully navigate the \LaTeX{} ecosystem and efficiently produce
+beautiful documents.
+
+Since the publication of the last edition (2004) a lot has happened in
+the \LaTeX{} world and thus a complete rewrite was necessary. All
+chapters have been thoroughly revised and in many cases largely
+extended to describe new important functionality and features. More
+than 5,000 add-on packages have been analyzed in detail, out of which
+roughly 10\% have been chosen for inclusion in \emph{The \LaTeX{}
+Companion}. All important aspects of these packages are described to
+provide the user once again with a satisfying one-stop–shop experience
+for the decade to come.
+
+To cover what we thought worth describing today, the book nearly
+doubled in size. The print edition is therefore produced as a
+two-volume set and sold as a bundle. Both volumes come as hard-cover
+with ribbons to easily mark pages in the book.
+
+To give you an idea of what is covered in the third edition you can
+find some excerpts at
+\begin{quote}
+\url{https://www.latex-project.org/news/2023/03/17/TLC3}
+\end{quote}
+
+The edition is also available as an eBook (Parts I and II combined)
+consisting of PDF and ePub format without DRM. Finally, the publisher
+offers the combination of the printed books and the digital versions at
+a very attractive price not available anywhere else.
+
+
+%\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}
-\subsection{Fix handling of nested \env{multicols}}
+\subsection{\pkg{multicol}: Better support for CJK languages}
+
+The default minimum depth of each column in a \env{multicols}
+corresponds to the depth of a \enquote{p} in the current font. This
+helps to get some uniformity if rules are used between the columns and
+makes sense for Latin-based languages. Until now it was hard-wired,
+but for CJK (Chinese/Japanese/Korean) languages it is better to use a zero depth, because there
+all characters have the same height and depth. And even with
+Latin-based languages one might want to use the depth of a \cs{strut}
+or that of a parenthesis. So we now offer a way to adjust this while
+maintaining backward compatibility. Just redefine
+\cs{multicolmindepthstring} to hold whatever you want to get measured
+for its depth (the width is not relevant).
+%
+\githubissue{698}
+
+
+\subsection{\pkg{multicol}: Fix handling of nested environments}
If \env{multicols} environments have been nested into each other (the
inner one boxed) it could fail if the boxed environment appeared near a
@@ -484,6 +796,10 @@ page. This has now been fixed.
\emph{The \texttt{\upshape ltshipout} documentation}.\\
Run \texttt{texdoc} \texttt{ltshipout-doc} to view.
+\bibitem{37:lthooks-doc} Frank Mittelbach, Phelype Oleinik, \LaTeX{}~Project~Team:
+ \emph{\LaTeX's hook management}.\\
+ Run \texttt{texdoc} \texttt{lthooks-doc} to view.
+
%\bibitem{37:blueprint} Frank Mittelbach and Chris Rowley:
% \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
% \url{https://latex-project.org/publications/indexbyyear/2020/}
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf
index 7813560129c..9085a887da3 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf
index fec25ce9426..cd675c22bfa 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf b/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
index 79b27f49844..c9209dbbb0f 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
index 131c5251a0c..b05bab812ea 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf b/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
index ccdd69abd96..b69198d99fa 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
index 188d833aebf..b820c58deb2 100644
--- a/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf b/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
index 8d714a1cf1f..39caa9b4cbf 100644
--- a/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/manifest.txt b/Master/texmf-dist/doc/latex-dev/base/manifest.txt
index d63945fa0e3..22791a24949 100644
--- a/Master/texmf-dist/doc/latex-dev/base/manifest.txt
+++ b/Master/texmf-dist/doc/latex-dev/base/manifest.txt
@@ -27,7 +27,8 @@
% sample2e.tex -- Sample LaTeX input file.
% small2e.tex -- Small sample LaTeX input file.
%
-% clsguide.tex -- How to write class files.
+% clsguide.tex -- How to write class files.
+% clsguide-historic.tex -- How to write class files with a focus on moving from 2.09.
% cfgguide.tex -- Guide to using `.cfg' files to configure LaTeX.
% cyrguide.tex -- Guide to using cyrillic languages in LaTeX.
% encguide.tex -- Guide to font encodings.
@@ -71,12 +72,15 @@
% ltnews33.tex -- What was new in the release dated 2021/06.
% ltnews34.tex -- What was new in the release dated 2021/11.
% ltnews35.tex -- What was new in the release dated 2022/06.
+% ltnews36.tex -- What was new in the release dated 2022/11.
+% ltnews37.tex -- What was new in the release dated 2023/06.
%
% ltx3info.tex -- Information about the LaTeX3 project.
%
% lamport-manual.err -- Errata for the LaTeX Manual book, second edition.
% tlc2.err -- Errata for the LaTeX Companion, second edition.
+% tlc3.err -- Errata for the LaTeX Companion, third edition.
% lb2.err -- Errata for the LaTeX-Begleiter, 2te erw. Auflage (German).
% lgc2.err -- Errata for the LaTeX Graphics Companion, second edition.
% webcomp.err -- Errata for the LaTeX Web Companion.
diff --git a/Master/texmf-dist/doc/latex-dev/base/modguide.pdf b/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
index d484bf783bb..6c5e0ef3e5f 100644
--- a/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/modguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf b/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
index cb2d37b3c3a..a6455d33ada 100644
--- a/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/proc.pdf b/Master/texmf-dist/doc/latex-dev/base/proc.pdf
index dc5c8e3a677..3e75484000b 100644
--- a/Master/texmf-dist/doc/latex-dev/base/proc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/proc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/slides.pdf b/Master/texmf-dist/doc/latex-dev/base/slides.pdf
index 49a2fbf7be2..0b7fbe33b6a 100644
--- a/Master/texmf-dist/doc/latex-dev/base/slides.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/slides.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf b/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
index 4707b8a2195..411d29444c9 100644
--- a/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/source2e.pdf b/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
index f84a84ea72a..153a3709810 100644
--- a/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/source2e.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf b/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
index 24da1cf4608..bafd0048375 100644
--- a/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf b/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
index e21a6fb1040..af4dda256a1 100644
--- a/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc3.err b/Master/texmf-dist/doc/latex-dev/base/tlc3.err
new file mode 100644
index 00000000000..f790c6d791b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex-dev/base/tlc3.err
@@ -0,0 +1,829 @@
+\newcommand\erratafiledate{2023-05-16}
+
+\def\comando#1{\texttt{\string#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% To produce a printed version of this errata file run this file through
+% LaTeX. It will unpack a small class file (if not already present) and
+% a configuration file with the extension .cfg. You might want to modify
+% the setting in this configuration file to print only a partial errata
+% suitable for your printed revision of this book, see details in the
+% .cfg file.
+%
+% The current version of this file can be found at:
+%
+% https://www.latex-project.org/help/books/
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\begin{filecontents}{ttcterrata.cls}
+%%
+%% Copyright (C) 1997-2021 Frank Mittelbach
+%% This class file is licenced under LPPL latest version;
+%% see https://www.latex-project.org/lppl
+%
+%
+% It sets up a few commands used to format the errata entries for books in the
+% Addison-Wesley Series:
+%
+% Tools and Techniques for Computer Typesetting
+%
+% hence the name. However, anybody who likes to use it is free to apply it for
+% errata files of other books.
+%
+% Changes:
+%
+% v1.0a - changed name from errata.cls to ttcterrata.cls
+% v1.0b - added \arraybackslash
+% v1.0c - and took it out again and used \tabularnewline instead
+
+\ProvidesClass{ttcterrata}
+ [2021/08/03 v1.0c Mini class for errata files; subject to change (FMi)]
+
+\LoadClass{article}
+
+\setcounter{secnumdepth}{-1}
+\addtolength\textwidth{5cm}
+\addtolength\oddsidemargin{-3cm}
+
+\addtolength\textheight{36pt}
+
+\RequirePackage{shortvrb}
+\MakeShortVerb{\|}
+
+\RequirePackage{array,longtable}
+\RequirePackage{multicol}
+
+
+\newcommand\erratagetnumber{}
+\def\erratagetnumber#1/#2/#3\erratagetnumber{#1#2#3}
+
+
+\newcommand\gobbleerrata{%
+ \setbox\@tempboxa\vbox\bgroup
+ \let\endgobble\egroup
+ \let\hideamp\relax
+ \let\\\relax
+ \let\tabularnewline\relax
+ \let\par\@@par}
+
+\newcommand*\hideamp{&}
+
+\let\endgobble\relax
+
+
+\newcommand\erratastartdate{}
+\newcommand\myprinting{1}
+
+
+\newcommand\doweprint[2]{%
+ \ifnum \myprinting < \if!#2!1000 \else \ifx s#2 1000\else#2 \fi\fi
+ \ifnum \expandafter\erratagetnumber\erratastartdate\erratagetnumber <
+ \erratagetnumber#1\erratagetnumber \relax
+ \@tempswatrue
+ \else
+ \@tempswafalse
+ \fi
+ \else
+ \@tempswafalse
+ \fi
+}
+
+
+
+\newcommand\includedentries{entries after = \erratastartdate}
+\newcommand\printedentries{between \erratastartdate\space and}
+
+\newcommand\showallerrors{%
+ \renewcommand\includedentries{all errata entries}%
+ \renewcommand\printedentries{up to}
+ \renewcommand\doweprint[2]{\@tempswatrue}}
+
+
+\newcommand\displayrevisionfix[2]{%
+ \if!#2!\textbf{#1}\else\textit{#1}\rlap{\textsuperscript{#2}}\fi}
+
+\newcommand\norevisionnumbers{%
+ \renewcommand\displayrevisionfix[2]{\textbf{##1}}}
+
+\IfFileExists{\jobname.cfg}
+ {
+ \input{\jobname.cfg}
+ \typeout{***************************************************}
+ \typeout{*}
+ \typeout{* Configuration file for \jobname.err found }
+ \typeout{*}
+ \typeout{***************************************************}
+ \AtEndDocument{
+ \typeout{***************************************************}
+ \typeout{*}
+ \typeout{* If you wish to generate an errata listing}
+ \typeout{* containing only errors found after a certain revision}
+ \typeout{* and/or only errors found after a certain date}
+ \typeout{* modify the information stored in \jobname.cfg}
+ \typeout{*}
+ \typeout{* Current settings are:}
+ \typeout{*}
+ \typeout{* \@spaces printing of your book = \myprinting}
+ \typeout{* \@spaces include \includedentries}
+ \typeout{*}
+ \typeout{***************************************************}
+ }}
+ {}
+
+%% \erroronpage <page> <line info> <contributor> <date> <fixed in revision>
+
+\newcommand\erroronpage[5]{%
+ \endgobble
+ \doweprint{#4}{#5}%
+ \if@tempswa
+ \typeout{Typesetting entry #1 #2 #3 #4}%
+ \else
+ \typeout{Ignoring entry #1 #2 #3 #4}%
+ \expandafter\gobbleerrata
+ \fi
+ \hideamp \tabularnewline
+ \displayrevisionfix{#1}{#5}
+ \hideamp #2 \hideamp (\textsf{#3}) \hideamp
+}
+
+\newcommand\seriouserroronpage[5]{%
+ \endgobble
+ \doweprint{#4}{#5}%
+ \if@tempswa
+ \typeout{Typesetting entry #1 #2 #3 #4}%
+ \else
+ \typeout{Ignoring entry #1 #2 #3 #4}%
+ \expandafter\gobbleerrata
+ \fi
+ \hideamp \tabularnewline
+ \fbox{\bfseries !!}\hfill
+ \displayrevisionfix{#1}{#5}
+ \hideamp #2 \hideamp (\textsf{#3}) \hideamp
+}
+
+\newcommand\CHAPTER[1]{\endgobble
+ &\tabularnewline[4pt]%
+ \multicolumn{4}{l}{\framebox[10cm][l]{\textbf{\normalsize\strut#1}}} \tabularnewline}
+
+\newenvironment{erratalist}
+ {\begin{longtable}{r>{\raggedright}p{2cm}l>{\raggedright}p{10cm}l}}
+ {\endgobble\end{longtable}}
+
+\newcommand\erratatitle[2]
+ {\begin{center}\LARGE\bfseries
+ Errata list for #1\\[5pt](\myprinting.\ printing)\\[10pt]
+ \small Includes all entries found \printedentries\space #2\\
+ (For other periods/print runs reprocess this document
+ with different config settings)
+ \end{center}%
+ \markright{Errata for #1 (\printedentries\space #2)}%
+ \thispagestyle{plain}%
+ \vspace{20pt}}
+
+\pagestyle{myheadings}
+
+\AtBeginDocument{\small}
+
+\setlength\parindent{0pt}
+\setlength\parskip{2pt}
+
+\newcommand\contributor[2]{\makebox[1cm][l]{\sffamily#1} #2\par}
+
+% some special shortcuts overwriting existing commands:
+
+\let\u\underline
+\renewcommand\>{$\to$}
+
+%%% some code suggested by Thorsten Hansen to count the number of
+%%% contributions by individuals (will work only if we do not get
+%%% too many :-)
+
+\def\count@contributors#1/#2/#3\@nil{
+ \@ifundefined{c@#1}{\newcounter{#1}}{}\stepcounter{#1}%
+%%% also count secondary:
+%%% \@ifundefined{c@#2}{\newcounter{#2}}{}\stepcounter{#2}%
+}
+
+\renewcommand\erroronpage[5]{%
+ \count@contributors#3/secondary/\@nil
+ \endgobble
+ \doweprint{#4}{#5}%
+ \if@tempswa
+ \typeout{Typesetting entry #1 #2 #3 #4}%
+ \else
+ \typeout{Ignoring entry #1 #2 #3 #4}%
+ \expandafter\gobbleerrata
+ \fi
+ \hideamp \tabularnewline
+ \displayrevisionfix{#1}{#5}
+ \hideamp #2 \hideamp (\textsf{#3}) \hideamp
+}
+
+\renewcommand\seriouserroronpage[5]{%
+ \count@contributors#3/secondary/\@nil
+ \endgobble
+ \doweprint{#4}{#5}%
+ \if@tempswa
+ \typeout{Typesetting entry #1 #2 #3 #4}%
+ \else
+ \typeout{Ignoring entry #1 #2 #3 #4}%
+ \expandafter\gobbleerrata
+ \fi
+ \hideamp \tabularnewline
+ \fbox{\bfseries !!}\hfill
+ \displayrevisionfix{#1}{#5}
+ \hideamp #2 \hideamp (\textsf{#3}) \hideamp
+}
+
+\renewcommand\contributor[2]{\makebox[1cm][l]{%
+ \sffamily#1} #2\@ifundefined{c@#1}{}{ (\arabic{#1})}\par}
+
+\end{filecontents}
+
+
+\begin{filecontents}{\jobname.cfg}
+%
+%
+% Configuration file for the errata listing of
+%
+% The LaTeX Companion, Third Edition, Parts I & II
+%
+%
+% \erratastartdate
+%
+% Specifies the date from which on errata entries should be listed.
+%
+% The format is YYYY/MM/DD.
+%
+% The default below ensures that all entries for a particular
+% printing are typeset.
+%
+
+\renewcommand\erratastartdate{2023/04/01}
+
+
+%
+% \myprinting
+%
+% Specifies which (revised) printing you own. For example, if you
+% have the second printing set this to 2 so that errors already
+% corrected in that printing will not appear in your errata
+% listing.
+%
+% The default below ensures that all entries relevant to the x-th
+% printing are typeset.
+%
+%
+
+\renewcommand\myprinting{1}
+
+%
+% \norevisionnumbers
+%
+% Specifies that all page numbers in the errata are shown in the same
+% format (bold face) irregardless of whether or not they are fixed
+% in some revision. The default is to print corrected errors in
+% italic and add the revision number as a superscript.
+
+%
+% \showallerrors
+%
+% With this command you tell the program that all errata entries are
+% supposed to be generated. This makes \myprinting and
+% \erratastartdate basically obsolete so this isn't turned on by
+% default.
+%
+%
+\endinput
+\end{filecontents}
+
+
+\documentclass{ttcterrata}[2005/11/10] % we want new class
+
+\usepackage[T1]{fontenc}
+\let\u\underline % shortcut for this file
+\newcommand\meta[1]{$\langle$\textit{#1\/}$\rangle$}
+
+\usepackage{textcomp}
+
+\usepackage{url}
+
+\begin{document}
+
+\erratatitle{The \LaTeX{} Companion, Third Edition, Parts I \& II}{\erratafiledate}
+
+
+\begin{verbatim}
+@book(A-W:MF:2023,
+ author = {Frank Mittelbach and Ulrike Fischer},
+ title = {The {\LaTeX} Companion},
+ edition = 3,
+ note = {With contributions by Javier Bezos, Johannes Braams, and Joseph Wright},
+ series = {Tools and Techniques for Computer Typesetting},
+ publisher = {Addison-Wesley},
+ address = {Boston, Massachusetts},
+ year = 2023,
+ pagenums = {976 (Part I) and 1008 (Part II)},
+ bibliography = {yes},
+ index = {yes},
+ isbn = {978-0-13-816648-9},
+)
+\end{verbatim}
+
+
+\begin{list}{}{\setlength\leftmargin{0cm}\setlength\rightmargin{3cm}}
+\item[]
+
+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}
+where you will also find extracts of the book.
+
+The first column in the table shows the page number of the errata
+entry. Superscript numbers in the first column refer to the printed
+revision in which this entry was corrected (\textit{s} indicates a
+correction in the sources only). The second
+column gives the precise location (negative line or paragraph numbers
+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
+you own by changing the configuration in the file \texttt{\jobname.cfg}.
+
+\begin{center}
+ \Large \bfseries To Err is Human --- Bug Contest
+\end{center}
+
+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.
+
+Each prize is a free choice of any single computing book found on the
+Addison-Wesley/Pearson web site:
+\texttt{https://www.informit.com} (that
+is, no boxed sets or multiple volume offers).
+
+
+As usual, the authors and publisher reserve the right to make various
+decisions such as whether a reported feature is an error for
+competitive purposes or whether similar features count as a single or
+multiple errors. ---
+Good luck!
+
+\begin{center}
+\begin{tabular}{clr}
+Contest period ends & Winner \\[4pt]
+2023/?? & & ??? suggestions\\
+\end{tabular}
+\end{center}
+
+
+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
+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
+all versions, but to a few only to the digital and others only to the
+printed version. Thus, we end up with three separate lists.
+
+
+\end{list}
+
+%\newpage
+
+
+%<--------------------------
+
+\newcommand\BibTeX{\textsc{Bib}\TeX}
+\newcommand\cs[1]{\texttt{\textbackslash #1}}
+\newcommand\env[1]{\texttt{#1}}
+\newcommand\pkg[1]{\textsf{#1}}
+
+\section*{Errata for the print version (not applicable to the digital version)}
+
+The printed books differ from the digital version in that the
+biligraphy 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
+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{Front matter (Part I)}
+
+\erroronpage{I-ix\ldots I-xvi}{}{FMi}{2023/04/04}{s}
+Dot leaders have been changed on all sections.
+
+\erroronpage{I-xvii}{chapter head}{FMi}{2023/04/04}{s}
+formulas \> \u{F}ormulas
+
+\erroronpage{I-xvii}{chapter head}{FMi}{2023/04/04}{s}
+documents \> \u{D}ocuments
+
+\erroronpage{I-xvii}{chapter head}{FMi}{2023/04/04}{s}
+beyond \> \u{B}yond
+
+\erroronpage{I-xx\ldots I-xxi}{}{FMi}{2023/04/04}{s}
+Dot leaders have been changed on all sections.
+
+\CHAPTER{Bibliography (Part I)}
+
+\erroronpage{I-783}{[55], l.-2}{FMi}{2023/04/04}{s}
+all \> \u{them} all
+
+\erroronpage{I-785}{[73], l.-2}{kb/bb}{2023/04/04}{s}
+the go-forward way for \LaTeX-coding \> \\
+the way for \LaTeX{} coding going forward
+
+\erroronpage{I-786}{[87], l.2}{kb/bb}{2023/04/04}{s}
+p. \> pp.
+
+\erroronpage{I-786}{[88], l.2}{kb/bb}{2023/04/04}{s}
+p. \> pp.
+
+\erroronpage{I-787}{[92], l.2}{kb/bb}{2023/04/04}{s}
+Add: Vancouver, 1999
+
+\erroronpage{I-788}{[100], l.3}{kb/bb}{2023/04/04}{s}
+Publishing \> Publishing\u{,}
+
+\erroronpage{I-790}{[122], l.1}{kb/bb}{2023/04/04}{s}
+In \u{ACM editor} ``Proceedings \> In ``PODC'01: Proceedings
+
+\erroronpage{I-790}{[122], l.1}{kb/bb}{2023/04/04}{s}
+In \u{Unicode Consortium, editor} \> In
+
+
+\CHAPTER{Front matter (Part II)}
+
+\erroronpage{II-x\ldots II-xxviii}{}{FMi}{2023/04/04}{s}
+Dot leaders have been changed on all sections.
+
+\erroronpage{II-xiv}{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}}
+
+\erroronpage{II-xv}{chapter head}{FMi}{2023/04/04}{s}
+formulas \> \u{F}ormulas
+
+\erroronpage{II-xvi}{chapter head}{FMi}{2023/04/04}{s}
+documents \> \u{D}ocuments
+
+\erroronpage{II-xxi}{chapter head}{FMi}{2023/04/04}{s}
+beyond \> \u{B}yond
+
+
+
+\CHAPTER{Bibliography (Part II)}
+
+\erroronpage{II-799}{[43], l.-2}{FMi}{2023/04/04}{s}
+all \> \u{them} all
+
+\erroronpage{II-801}{[62], l.-2}{kb/bb}{2023/04/04}{s}
+the go-forward way for \LaTeX-coding \>\\
+the way for \LaTeX{} coding going forward
+
+\erroronpage{II-802}{[71], l.2}{kb/bb}{2023/04/04}{s}
+p. \> pp.
+
+\erroronpage{II-802}{[72], l.2}{kb/bb}{2023/04/04}{s}
+p. \> pp.
+
+\erroronpage{II-803}{[80], l.3}{kb/bb}{2023/04/04}{s}
+Publishing \> Publishing\u{,}
+
+
+
+
+\end{erratalist}
+
+
+%<--------------------------
+
+\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.
+
+%\begin{erratalist}
+%
+%\CHAPTER{General}
+%
+%\CHAPTER{Front matter}
+%
+%\end{erratalist}
+
+
+%<--------------------------
+
+
+\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
+section.
+
+\begin{erratalist}
+
+
+\CHAPTER{General}
+
+\erroronpage{}{}{FMi}{2023/04/04}{s}
+Some corrections result in index changes. These are not tracked here;
+the index is always fully regenerated for new printings.
+
+\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.
+
+
+\CHAPTER{Chapter 3 --- Basic Formatting Tools -- Paragraph \ldots}
+
+
+\CHAPTER{Chapter 4 --- Basic Formatting Tools -- Larger \ldots}
+
+
+\CHAPTER{Chapter 5 --- The Layout of the Page}
+
+
+\CHAPTER{Chapter 6 --- Tabular Material}
+
+
+\CHAPTER{Chapter 7 --- Mastering Floats}
+
+
+\CHAPTER{Chapter 8 --- Graphics Generation and Manipulation}
+
+
+\CHAPTER{Chapter 9 --- Font Selection and Encodings}
+
+\erroronpage{I-669}{exa 9-3-11}{FMi}{2023/04/04}{s}
+Changed line breaks in example.
+
+\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.
+
+
+\CHAPTER{Chapter 10 --- Text and Symbol Fonts}
+
+\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.
+
+
+
+\CHAPTER{Chapter 11 --- Higher Mathematics}
+
+\erroronpage{II-127}{para 1, l.5}{bb/FMi}{2023/04/04}{s}
+\u{The} American Mathematical Society (AMS) \u{provides} a major
+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-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:
+
+Sometimes it is more convenient to explicitly specify all the
+horizontal spacing yourself within the formula. For this you can use
+an \env{alignat} environment. It differs from \env{align} in two ways: you have to
+specify the number of \texttt{rl} pairs as an argument to the environment and
+it does not add any spaces between the pairs, e.g.,
+\begin{verbatim}
+\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}
+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.
+
+\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 added moved over from page 144.
+\\ 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:
+
+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.
+
+
+\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.
+
+
+\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.
+
+
+\CHAPTER{Chapter 14 --- Index Generation}
+
+
+\CHAPTER{Chapter 15 --- Bibliography Generation}
+
+
+\CHAPTER{Chapter 16 --- Managing Citations}
+
+
+\CHAPTER{Chapter 17 --- \LaTeX{} Package Documentation Tools}
+
+
+\CHAPTER{Appendix A --- \LaTeX{} Overview for Preamble, \ldots}
+
+
+\CHAPTER{Appendix B --- Tracing and Resolving Problems}
+
+
+\CHAPTER{Appendix C --- Going Beyond}
+
+\erroronpage{II-297}{heading}{FMi}{2023/04/04}{s}
+Appendix title not properly capitalized.
+\\ Already corrected in the digital version.
+
+\CHAPTER{Biographies}
+
+\CHAPTER{Production Notes}
+
+\end{erratalist}
+
+
+
+
+
+\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{FMi}{Frank Mittelbach}
+\contributor{kb}{Karl Berry}
+\end{multicols}
+
+
+Other people have sent us corrections for errors already found.
+Thanks to all of you!
+
+If you find further errors please report them to one of the authors, e.g.,
+\begin{quote}\ttfamily
+ frank.mittelbach@latex-project.org
+\end{quote}
+preferably in a form usable directly in this file, i.e.,
+\begin{flushleft}
+|\erroronpage{|\textit{page-number}|}{|\textit{line-identification}|}{|%
+ \textit{your-initials}|}{|\textit{date}|}{}| \\
+ \hspace*{2em}\textit{description of the erratum}
+\end{flushleft}
+Here is an example:
+\begin{verbatim}
+\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 \>.
+\end{document}
+
+
+
+
+\seriouserroronpage{general}{}{FMi}{2004/06/12}{}
+
+ To help you in assessing this errata document we have placed
+ exclamation marks in front of each entry that we consider essential
+ for correctly understanding the book contents.
+
+\erroronpage{general}{}{FMi}{2004/05/14}{}
+
+ Due to the printing process there may be small alignment problems
+ between blue and black text on some pages. These can vary from book
+ to book depending on how the paper was handled between print
+ runs---such is the analog nature of printing on a press.
+
diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf b/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf
new file mode 100644
index 00000000000..df716ea46f1
--- /dev/null
+++ b/Master/texmf-dist/doc/latex-dev/base/tlc3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/tulm.pdf b/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
index d2c4ec94d05..3084afc1ab3 100644
--- a/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/tulm.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf b/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf
index 3149112b435..b160cc0774c 100644
--- a/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf b/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
index c4953d7e333..4f4a8b4e28b 100644
--- a/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide.tex b/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
index f06850afaa5..b1039a3595f 100644
--- a/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
+++ b/Master/texmf-dist/doc/latex-dev/base/usrguide.tex
@@ -32,9 +32,10 @@
\usepackage[T1]{fontenc} % needed for \textbackslash in tt
\usepackage{csquotes}
+\usepackage{url}
\title{\LaTeX\ for authors --- current version}
-\author{\copyright~Copyright 2020-2022, \LaTeX\ Project Team.\\
+\author{\copyright~Copyright 2020-2023, \LaTeX\ Project Team.\\
All rights reserved.%
\footnote{This file may be distributed and/or modified under the
conditions of the \LaTeX{} Project Public License, either version 1.3c
@@ -42,7 +43,7 @@
\texttt{usrguide.tex} for full details.}%
}
-\date{2022-07-05}
+\date{2023-05-23}
\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
\NewDocumentCommand\marg{m}{\arg{#1}}
@@ -340,6 +341,12 @@ in \pkg{amsmath} environments, which in the terms here would be defined as
\NewDocumentCommand\\{!s !o}{ ... }
\end{verbatim}
+Also notable when using optional arguments in the last position is that \TeX{}
+will necessarily look ahead for the argument opening token. This means that
+the value of |\inputlineno| will be `out by one' if such a trailing optional
+argument is \emph{not} present and the command ends a line; it will be one
+greater than the line number containing the last mandatory argument.
+
\subsection{`Embellishments'}
\label{sec:cmd:embellishment}
@@ -636,7 +643,19 @@ processed argument can be further processed using a mapping function
If only a single character \meta{token} is used for the split, any
category code $13$ (active) character matching the \meta{token} will
be replaced before the split takes place.
-Spaces are trimmed at each end of each item parsed.
+Spaces are trimmed at each end of each item parsed. Exactly one set
+of braces will be stripped if an entire item is surrounded by them,
+i.e.~the following inputs and outputs result (each separte item as
+a brace group).
+\begin{verbatim}
+a ==> {a}
+{a} ==> {a}
+{a}b ==> {{a}b}
+a,b ==> {a}{b}
+{a},b ==> {a}{b}
+a,{b} ==> {a}{b}
+a,{b}c ==> {a}{{b}c}
+\end{verbatim}
\begin{decl}
|\ProcessList| \arg{list} \arg{function}
@@ -716,7 +735,7 @@ put that code at the end of the \meta{start code}. Nevertheless this
Environments that use this feature can be nested.
-\subsection{Fully-expandable document commands}
+\subsection{Fully-expandable document commands\label{sec:ltcmd:expandable}}
Document commands created using \cs{NewDocumentCommand}, etc.\@, are normally
created so that they do not expand unexpectedly. This is done using engine
@@ -724,7 +743,7 @@ features, so is more powerful than \LaTeXe{}'s \cs{protect} mechanism. There
are \emph{very rare} occasion when it may be useful to create functions using a
expansion-only grabber. This imposes a number of restrictions on the
nature of the arguments accepted by a function, and the code it implements.
-This facility should only be used when \emph{absolutely necessary}.
+This facility should only be used when \emph{necessary}.
\begin{decl}
|\NewExpandableDocumentCommand| \arg{cmd} \arg{arg spec} \arg{code} \\
@@ -755,6 +774,25 @@ available:
in the standard version.
\end{itemize}
+\subsection{Commands at the start of tabular cells}
+
+Creating commands that are used at the start of tabular cells imposes
+some restrictions on the underlying implementation. The standard \LaTeX{}
+tabular environments (\texttt{tabular}, etc.) use a mechanism which requires
+that any command wrapping \cs{multicolumn} or similar must be
+`expandable'. This is \emph{not} the case for commands created using
+\cs{NewDocumentCommand}, etc., which as detailed in
+Section~\ref{sec:ltcmd:expandable} use an engine feature which prevents
+such `expansion'. Therefore, to create such wrappers for use at the start
+of tabular cells, you must use \cs{NewExpandableDocumentCommand}, for example
+\begin{verbatim}
+\NewExpandableDocumentCommand\MyMultiCol{m}{\multicolumn{3}{c}{#1}}
+\begin{tabular}{lcr}
+a & b & c \\
+\MyMultiCol{stuff} \\
+\end{tabular}
+\end{verbatim}
+
\subsection{Details about argument delimiters}
In normal (non-expandable) commands, the delimited types look for the
@@ -844,23 +882,23 @@ The argument specifications for document commands and environments are
available for examination and use.
\begin{decl}
- |\GetDocumentCommandArgSpec| \arg{function} \\
+ |\GetDocumentCommandArgSpec| \arg{cmd} \\
|\GetDocumentEnvironmentArgSpec| \arg{environment}
\end{decl}
These functions transfer the current argument specification for the
-requested \meta{function} or \meta{environment} into the token list
-variable \cs{ArgumentSpecification}. If the \meta{function} or
+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{function} \\
+ |\ShowDocumentCommandArgSpec| \arg{cmd} \\
|\ShowDocumentEnvironmentArgSpec| \arg{environment}
\end{decl}
These functions show the current argument specification for the
-requested \meta{function} or \meta{environment} at the terminal. If
-the \meta{function} or \meta{environment} has no known argument
+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.
@@ -1149,11 +1187,11 @@ therefore shows the same syntax peculiars as discussed
above. Nevertheless, in practice they are usually sufficient. For
example
\begin{verbatim}
-\newcommand\calulateheight[1]{%
+\newcommand\calculateheight[1]{%
\setlength\textheight{\dimeval{\topskip+\baselineskip*\inteval{#1-1}}}}
\end{verbatim}
sets the \cs{textheight} to the appropriate value if a page should
-hold a specific number of text lines. Thus after |\calulateheight{40}|
+hold a specific number of text lines. Thus after |\calculateheight{40}|
it is set to \dimeval{\topskip+\baselineskip*\inteval{40-1}}, given
the values \cs{topskip} (\dimeval{\topskip}) and \cs{baselineskip}
(\dimeval{\baselineskip}) in the current document.
@@ -1216,8 +1254,35 @@ cases
\item Lowercasing
\item Titlecasing (only applies for the start of the input)
\end{itemize}
+
The command \cs{DeclareCaseChangeEquivalent} provides a way to substitute a
command by an alternative version when it is found inside a case changing
-situation.
+situation. There are three commands for customising the case changing of
+codepoints
+\begin{decl}
+ |\DeclareLowercaseMapping| \oarg{locale} \arg{codepoint} \arg{output} \\
+ |\DeclareTitlecaseMapping| \oarg{locale} \arg{codepoint} \arg{output} \\
+ |\DeclareUppercaseMapping| \oarg{locale} \arg{codepoint} \arg{output}
+\end{decl}
+All three take a \meta{codepoint} (as an integer expression) and will
+result in the \meta{output} being produced under the appropriate case changing
+operation. The optional \meta{locale} can be given if the mapping should only
+apply to a specific one: this is given in BCP-47 format
+(\url{https://en.wikipedia.org/wiki/IETF_language_tag}). For example,
+the kernel customises the mapping for U+01F0 (\v{j}) when uppercasing in
+8-bit engines:
+\begin{quotation}
+ |\DeclareUppercaseMapping{"01F0}{\v{J}}|
+\end{quotation}
+as there is no pre-composed \v{J} character, and this is problematic if
+the engine does not support Unicode natively. Similarly, to set a locale
+\texttt{xx} to behave in the same way as Turkish and retain the difference
+between dotted- and dotless-i, one could use for example
+\begin{quotation}
+ |\DeclareLowercaseMapping{xx}{"0049}{\i}|\\
+ |\DeclareLowercaseMapping{xx}{"0130}{i}|\\
+ |\DeclareUppercaseMapping{xx}{"0069}{\.{I}}|\\
+ |\DeclareUppercaseMapping{xx}{"0131}{I}|
+\end{quotation}
\end{document}
diff --git a/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf b/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
index d211ec2de1c..d8b84af1b4e 100644
--- a/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf b/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
index a7e1a07aecf..86adc3d75f8 100644
--- a/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
+++ b/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/README.md b/Master/texmf-dist/doc/latex-dev/tools/README.md
index a7e8675cb8f..41e6036b98a 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/README.md
+++ b/Master/texmf-dist/doc/latex-dev/tools/README.md
@@ -1,7 +1,7 @@
The LaTeX `tools` bundle
========================
-Release 2023-05-01 pre-release 0
+Release 2023-06-01 pre-release 3
Overview
--------
diff --git a/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf b/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf
index 1b117523cd1..6efc9c6d4c1 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/array.pdf b/Master/texmf-dist/doc/latex-dev/tools/array.pdf
index 5a62c4c93d1..1526176b44d 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/array.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/array.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/bm.pdf b/Master/texmf-dist/doc/latex-dev/tools/bm.pdf
index 52ab388d9de..df46ae81bb4 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/bm.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/bm.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/calc.pdf b/Master/texmf-dist/doc/latex-dev/tools/calc.pdf
index 21bc2383891..e536d9581e9 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/calc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/calc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/changes.txt b/Master/texmf-dist/doc/latex-dev/tools/changes.txt
index 7b3e63dca5a..fc1a9fc08bd 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/changes.txt
+++ b/Master/texmf-dist/doc/latex-dev/tools/changes.txt
@@ -4,6 +4,25 @@ 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-05-11 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * showkeys.dtx: Use label hook if format new enough.
+
+2023-04-15 David Carlisle <David.Carlisle@latex-project.org>
+
+ * shellesc.dtx: Normalise use of "." in messages. github/1008
+
+2023-03-30 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * multicol.dtx (subsection{The output routines}]):
+ Make column min depth customizable through the command
+ \multicolmindepthstring defaulting to 'p' (gh/698)
+
+2023-02-25 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * multicol.dtx:
+ Delay returning boxed multicols so that all parameters get restored first
+ in case the boxed multicols is used into another multicols (gh/1002)
================================================================================
All changes above are only part of the development branch for the next release.
diff --git a/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf b/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf
index 9b5782c333c..d1bbbd45765 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf b/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf
index a2405903fa7..7505f08b431 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf b/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf
index 5a2cb393b37..26b0872cbed 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf b/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf
index e9000aee21a..3d7e0a8d157 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf b/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf
index 09a27818c79..c3f711a28f8 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf b/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf
index 22a7ad4e828..846ae64125f 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf b/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf
index a3912de4896..c9068dd180b 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf b/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf
index c2e66c96c89..cf168f80934 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/layout.pdf b/Master/texmf-dist/doc/latex-dev/tools/layout.pdf
index b82b65bb144..0dbc2cc2576 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/layout.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/layout.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf b/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf
index 8444910b915..23f0d9eaf5c 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf b/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf
index 6aabc7f6a2b..2363775dda9 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf b/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf
index 57454b23c16..ddbc6bce62e 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf b/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf
index 9c2ed782fc8..8237a0b24ec 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf b/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf
index f017f5fd3be..c155beabae6 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf b/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf
index 6072dca3c79..e5e16f87014 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf b/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf
index 9dc24cdabf3..f237e57663d 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf b/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf
index 8d403092c01..d5e952583fe 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf b/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf
index a0d541c7962..8db0f5233fe 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/tools-overview.tex b/Master/texmf-dist/doc/latex-dev/tools/tools-overview.tex
index 882a2ae77fd..3bc325d67ce 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/tools-overview.tex
+++ b/Master/texmf-dist/doc/latex-dev/tools/tools-overview.tex
@@ -1,7 +1,7 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{tools-overview.tex}[2015/03/31 v1.0 Tools overview]
-% Copyright (C) 2006-2022
+% Copyright (C) 2006-2023
%
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
diff --git a/Master/texmf-dist/doc/latex-dev/tools/trace.pdf b/Master/texmf-dist/doc/latex-dev/tools/trace.pdf
index 1f2fe7f2ca9..9fe9d8fff36 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/trace.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/trace.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf b/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf
index faa84a53739..7541e2214d0 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf b/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf
index f4e13657075..fd4b0a264e7 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/xr.pdf b/Master/texmf-dist/doc/latex-dev/tools/xr.pdf
index 293437b3ab3..3607da5d483 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/xr.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/xr.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf b/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf
index 0d8075103d1..656970c6c3e 100644
--- a/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf
+++ b/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf
Binary files differ