From 3f1026bdc52825d68d83555c8d4cdc31a41f7687 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 2 Nov 2022 22:00:49 +0000 Subject: latex-dev 2022-11 (2nov22) git-svn-id: svn://tug.org/texlive/trunk@64899 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex-dev/amsmath/README.md | 2 +- Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf | Bin 174944 -> 174944 bytes Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf | Bin 179945 -> 179945 bytes Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf | Bin 178187 -> 178187 bytes .../texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf | Bin 508210 -> 508210 bytes .../texmf-dist/doc/latex-dev/amsmath/amsmath.pdf | Bin 419913 -> 419913 bytes Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf | Bin 140095 -> 140095 bytes .../texmf-dist/doc/latex-dev/amsmath/amstext.pdf | Bin 217498 -> 217498 bytes .../texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf | Bin 113561 -> 113561 bytes Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf | Bin 109731 -> 109731 bytes .../texmf-dist/doc/latex-dev/amsmath/technote.pdf | Bin 147462 -> 147462 bytes .../texmf-dist/doc/latex-dev/amsmath/testmath.pdf | Bin 454511 -> 454511 bytes Master/texmf-dist/doc/latex-dev/base/README.md | 2 +- Master/texmf-dist/doc/latex-dev/base/alltt.pdf | Bin 223831 -> 223831 bytes Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf | Bin 264112 -> 264112 bytes Master/texmf-dist/doc/latex-dev/base/changes.txt | 44 +- Master/texmf-dist/doc/latex-dev/base/classes.pdf | Bin 560611 -> 560611 bytes Master/texmf-dist/doc/latex-dev/base/clsguide.pdf | Bin 414419 -> 414419 bytes Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf | Bin 292160 -> 292160 bytes Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf | Bin 257314 -> 257314 bytes Master/texmf-dist/doc/latex-dev/base/doc-code.pdf | Bin 1077609 -> 1077527 bytes Master/texmf-dist/doc/latex-dev/base/doc.pdf | Bin 755152 -> 755064 bytes Master/texmf-dist/doc/latex-dev/base/docstrip.pdf | Bin 504627 -> 504553 bytes Master/texmf-dist/doc/latex-dev/base/encguide.pdf | Bin 1318126 -> 1318126 bytes Master/texmf-dist/doc/latex-dev/base/exscale.pdf | Bin 204711 -> 204711 bytes Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf | Bin 287733 -> 287733 bytes Master/texmf-dist/doc/latex-dev/base/fntguide.pdf | Bin 517838 -> 517838 bytes Master/texmf-dist/doc/latex-dev/base/graphpap.pdf | Bin 161713 -> 161713 bytes Master/texmf-dist/doc/latex-dev/base/ifthen.pdf | Bin 221211 -> 221211 bytes Master/texmf-dist/doc/latex-dev/base/inputenc.pdf | Bin 318204 -> 318204 bytes .../doc/latex-dev/base/lamport-manual.pdf | Bin 170878 -> 170878 bytes .../texmf-dist/doc/latex-dev/base/latexrelease.pdf | Bin 281906 -> 281906 bytes Master/texmf-dist/doc/latex-dev/base/latexsym.pdf | Bin 200760 -> 200760 bytes Master/texmf-dist/doc/latex-dev/base/lb2.pdf | Bin 252140 -> 252140 bytes Master/texmf-dist/doc/latex-dev/base/letter.pdf | Bin 337294 -> 337630 bytes Master/texmf-dist/doc/latex-dev/base/lgc2.pdf | Bin 215684 -> 215684 bytes Master/texmf-dist/doc/latex-dev/base/lppl.pdf | Bin 132382 -> 132382 bytes .../doc/latex-dev/base/ltcmdhooks-code.pdf | Bin 719285 -> 719104 bytes .../doc/latex-dev/base/ltcmdhooks-doc.pdf | Bin 478781 -> 478606 bytes .../doc/latex-dev/base/ltfilehook-code.pdf | Bin 803118 -> 803024 bytes .../doc/latex-dev/base/ltfilehook-doc.pdf | Bin 547986 -> 547895 bytes .../texmf-dist/doc/latex-dev/base/lthooks-code.pdf | Bin 1091718 -> 1091409 bytes .../texmf-dist/doc/latex-dev/base/lthooks-doc.pdf | Bin 701768 -> 701468 bytes Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf | Bin 318919 -> 325457 bytes .../texmf-dist/doc/latex-dev/base/ltmarks-code.pdf | Bin 715934 -> 715524 bytes .../texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf | Bin 586305 -> 585896 bytes Master/texmf-dist/doc/latex-dev/base/ltnews.pdf | Bin 1225147 -> 1243036 bytes Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf | Bin 161519 -> 161518 bytes Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf | Bin 159802 -> 159792 bytes Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf | Bin 159347 -> 159332 bytes Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf | Bin 152526 -> 152525 bytes Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf | Bin 174493 -> 174494 bytes Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf | Bin 142861 -> 142849 bytes Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf | Bin 137791 -> 137811 bytes Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf | Bin 155050 -> 155053 bytes Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf | Bin 129572 -> 129570 bytes Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf | Bin 169425 -> 169416 bytes Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf | Bin 111974 -> 111948 bytes Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf | Bin 156556 -> 156551 bytes Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf | Bin 182252 -> 182225 bytes Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf | Bin 170452 -> 170473 bytes Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf | Bin 130324 -> 130309 bytes Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf | Bin 138082 -> 138073 bytes Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf | Bin 166226 -> 166228 bytes Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf | Bin 38028 -> 38033 bytes Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf | Bin 230031 -> 230028 bytes Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf | Bin 318587 -> 318548 bytes Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf | Bin 244885 -> 244867 bytes Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf | Bin 317795 -> 317773 bytes Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf | Bin 286598 -> 286591 bytes Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf | Bin 265290 -> 265279 bytes Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf | Bin 204955 -> 204935 bytes Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf | Bin 379476 -> 379462 bytes Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf | Bin 250597 -> 250592 bytes Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf | Bin 376643 -> 376643 bytes Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf | Bin 455126 -> 455107 bytes Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf | Bin 511917 -> 511909 bytes Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf | Bin 526372 -> 526323 bytes Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf | Bin 546153 -> 546160 bytes Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf | Bin 522387 -> 522412 bytes Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf | Bin 508096 -> 508044 bytes Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf | Bin 563132 -> 563089 bytes Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf | Bin 495767 -> 517577 bytes Master/texmf-dist/doc/latex-dev/base/ltnews36.tex | 223 ++++-- .../texmf-dist/doc/latex-dev/base/ltpara-code.pdf | Bin 667444 -> 667097 bytes .../texmf-dist/doc/latex-dev/base/ltpara-doc.pdf | Bin 560308 -> 559976 bytes .../doc/latex-dev/base/ltshipout-code.pdf | Bin 818922 -> 818741 bytes .../doc/latex-dev/base/ltshipout-doc.pdf | Bin 563691 -> 563518 bytes Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf | Bin 219349 -> 219349 bytes Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf | Bin 242645 -> 242645 bytes Master/texmf-dist/doc/latex-dev/base/makeindx.pdf | Bin 165821 -> 165821 bytes Master/texmf-dist/doc/latex-dev/base/modguide.pdf | Bin 257804 -> 257804 bytes Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf | Bin 211180 -> 211180 bytes Master/texmf-dist/doc/latex-dev/base/proc.pdf | Bin 227059 -> 227059 bytes Master/texmf-dist/doc/latex-dev/base/slides.pdf | Bin 375518 -> 375518 bytes Master/texmf-dist/doc/latex-dev/base/slifonts.pdf | Bin 234191 -> 234191 bytes Master/texmf-dist/doc/latex-dev/base/source2e.pdf | Bin 5750608 -> 5769593 bytes Master/texmf-dist/doc/latex-dev/base/syntonly.pdf | Bin 189680 -> 189704 bytes Master/texmf-dist/doc/latex-dev/base/tlc2.pdf | Bin 290615 -> 290615 bytes Master/texmf-dist/doc/latex-dev/base/tulm.pdf | Bin 162772 -> 162772 bytes .../doc/latex-dev/base/usrguide-historic.pdf | Bin 438515 -> 438515 bytes Master/texmf-dist/doc/latex-dev/base/usrguide.pdf | Bin 473895 -> 473980 bytes Master/texmf-dist/doc/latex-dev/base/usrguide.tex | 11 +- Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf | Bin 353663 -> 353237 bytes Master/texmf-dist/doc/latex-dev/base/webcomp.pdf | Bin 146198 -> 146198 bytes .../texmf-dist/doc/latex-dev/firstaid/changes.txt | 16 + .../latex2e-first-aid-for-external-files.pdf | Bin 268421 -> 268310 bytes Master/texmf-dist/doc/latex-dev/graphics/README.md | 2 +- .../texmf-dist/doc/latex-dev/graphics/changes.txt | 10 + Master/texmf-dist/doc/latex-dev/graphics/color.pdf | Bin 212223 -> 212223 bytes .../texmf-dist/doc/latex-dev/graphics/drivers.pdf | Bin 286459 -> 286459 bytes .../texmf-dist/doc/latex-dev/graphics/epsfig.pdf | Bin 159997 -> 159997 bytes .../texmf-dist/doc/latex-dev/graphics/graphics.pdf | Bin 303464 -> 303464 bytes .../texmf-dist/doc/latex-dev/graphics/graphicx.pdf | Bin 240623 -> 240623 bytes .../texmf-dist/doc/latex-dev/graphics/grfguide.pdf | Bin 330978 -> 330978 bytes .../texmf-dist/doc/latex-dev/graphics/keyval.pdf | Bin 239589 -> 239589 bytes .../texmf-dist/doc/latex-dev/graphics/lscape.pdf | Bin 155986 -> 155986 bytes .../doc/latex-dev/graphics/mathcolor.pdf | Bin 476153 -> 474666 bytes .../texmf-dist/doc/latex-dev/graphics/rotating.pdf | Bin 278408 -> 278331 bytes Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf | Bin 172228 -> 172277 bytes Master/texmf-dist/doc/latex-dev/graphics/trig.pdf | Bin 199266 -> 199266 bytes .../texmf-dist/doc/latex-dev/latex-lab/README.md | 2 +- .../texmf-dist/doc/latex-dev/latex-lab/changes.txt | 10 + .../latex-lab/documentmetadata-support-code.pdf | Bin 512096 -> 512028 bytes .../latex-lab/documentmetadata-support-doc.pdf | Bin 375986 -> 375913 bytes .../latex-dev/latex-lab/latex-lab-footnotes.pdf | Bin 614687 -> 614913 bytes .../doc/latex-dev/latex-lab/latex-lab-new-or.pdf | Bin 529176 -> 529122 bytes .../latex-dev/latex-lab/latex-lab-prototype.pdf | Bin 525128 -> 0 bytes .../latex-dev/latex-lab/latex-lab-testphase.pdf | Bin 291178 -> 290841 bytes Master/texmf-dist/doc/latex-dev/tools/README.md | 2 +- .../texmf-dist/doc/latex-dev/tools/afterpage.pdf | Bin 197738 -> 197738 bytes Master/texmf-dist/doc/latex-dev/tools/array.pdf | Bin 517102 -> 516836 bytes Master/texmf-dist/doc/latex-dev/tools/bm.pdf | Bin 323432 -> 323432 bytes Master/texmf-dist/doc/latex-dev/tools/calc.pdf | Bin 370657 -> 370657 bytes Master/texmf-dist/doc/latex-dev/tools/changes.txt | 12 +- Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf | Bin 220834 -> 220834 bytes Master/texmf-dist/doc/latex-dev/tools/delarray.pdf | Bin 191064 -> 191064 bytes .../texmf-dist/doc/latex-dev/tools/enumerate.pdf | Bin 215498 -> 215498 bytes Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf | Bin 187982 -> 187725 bytes Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf | Bin 146446 -> 146446 bytes Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf | Bin 387505 -> 387231 bytes Master/texmf-dist/doc/latex-dev/tools/hhline.pdf | Bin 189679 -> 189679 bytes .../texmf-dist/doc/latex-dev/tools/indentfirst.pdf | Bin 157954 -> 157954 bytes Master/texmf-dist/doc/latex-dev/tools/layout.pdf | Bin 259969 -> 259969 bytes .../texmf-dist/doc/latex-dev/tools/longtable.pdf | Bin 391313 -> 391313 bytes Master/texmf-dist/doc/latex-dev/tools/multicol.pdf | Bin 521328 -> 521367 bytes Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf | Bin 138963 -> 138963 bytes Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf | Bin 175929 -> 175929 bytes Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf | Bin 251782 -> 251782 bytes Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf | Bin 167572 -> 167572 bytes Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf | Bin 287073 -> 287073 bytes Master/texmf-dist/doc/latex-dev/tools/theorem.pdf | Bin 351963 -> 351702 bytes .../doc/latex-dev/tools/tools-overview.pdf | Bin 73672 -> 73672 bytes Master/texmf-dist/doc/latex-dev/tools/trace.pdf | Bin 222076 -> 222076 bytes Master/texmf-dist/doc/latex-dev/tools/varioref.pdf | Bin 398798 -> 398798 bytes Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf | Bin 330746 -> 330746 bytes Master/texmf-dist/doc/latex-dev/tools/xr.pdf | Bin 169986 -> 169986 bytes Master/texmf-dist/doc/latex-dev/tools/xspace.pdf | Bin 257018 -> 257018 bytes .../texmf-dist/source/latex-dev/base/ltclass.dtx | 39 +- .../texmf-dist/source/latex-dev/base/ltdefns.dtx | 17 +- .../texmf-dist/source/latex-dev/base/ltfinal.dtx | 60 +- Master/texmf-dist/source/latex-dev/base/ltkeys.dtx | 26 +- .../texmf-dist/source/latex-dev/base/ltluatex.dtx | 224 +++++- Master/texmf-dist/source/latex-dev/base/ltvers.dtx | 4 +- .../texmf-dist/source/latex-dev/base/utf8ienc.dtx | 4 +- .../latex2e-first-aid-for-external-files.dtx | 12 +- .../source/latex-dev/graphics/mathcolor.dtx | 231 +++--- .../latex-dev/latex-lab/latex-lab-footnotes.dtx | 8 +- .../latex-dev/latex-lab/latex-lab-prototype.dtx | 827 --------------------- .../source/latex-dev/latex-lab/latex-lab.ins | 5 - Master/texmf-dist/tex/latex-dev/base/latex.ltx | 98 ++- .../texmf-dist/tex/latex-dev/base/latexrelease.sty | 30 +- Master/texmf-dist/tex/latex-dev/base/ltluatex.lua | 167 ++++- Master/texmf-dist/tex/latex-dev/base/ltluatex.tex | 2 +- .../latex2e-first-aid-for-external-files.ltx | 5 +- .../tex/latex-dev/graphics/mathcolor.ltx | 124 ++- .../latex-dev/latex-lab/latex-lab-footnotes.ltx | 6 +- .../latex-dev/latex-lab/latex-lab-prototype.sty | 301 -------- .../latex-lab/prototype-latex-lab-testphase.ltx | 301 -------- 179 files changed, 1015 insertions(+), 1812 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf delete mode 100644 Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx delete mode 100644 Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty delete mode 100644 Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/README.md b/Master/texmf-dist/doc/latex-dev/amsmath/README.md index 5a644bab14a..059ebb7f300 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 2022-11-01 pre-release 0 +Release 2023-05-01 pre-release 0 Overview -------- diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf index 50e11c347b0..fef1eb8058e 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amsbsy.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf index 9417f9282ec..54650bb11da 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amscd.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf index 6d5c36c5f70..487f9c57dd9 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amsgen.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf index 3db939e1e32..75882027b2f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amsldoc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf index bb4d123df45..3f4832c1d9a 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amsmath.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf index df9a5db17c7..03ebc9dcc87 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amsopn.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf index 994546c360e..7478fd056fd 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amstext.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf index 216bd51ed0f..1c089bcc8b4 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/amsxtra.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf index 1b34fc0f9f7..396c9f26eab 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/subeqn.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf index 8bfa7864b8c..ae2549ac2a9 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/technote.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf index a62480992dc..a18992e79c2 100644 Binary files a/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf and b/Master/texmf-dist/doc/latex-dev/amsmath/testmath.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/README.md b/Master/texmf-dist/doc/latex-dev/base/README.md index f3b01200a8c..8fb5e8e894b 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 2022-11-01 pre-release 2 +Release 2023-05-01 pre-release 0 Overview -------- diff --git a/Master/texmf-dist/doc/latex-dev/base/alltt.pdf b/Master/texmf-dist/doc/latex-dev/base/alltt.pdf index 637fe1ad6b3..35b709a5632 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/alltt.pdf and b/Master/texmf-dist/doc/latex-dev/base/alltt.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf b/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf index e2b3128fa4e..3a048a4bfcb 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/cfgguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/changes.txt b/Master/texmf-dist/doc/latex-dev/base/changes.txt index 874426197d5..0ae9b55c038 100644 --- a/Master/texmf-dist/doc/latex-dev/base/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/base/changes.txt @@ -6,6 +6,46 @@ completeness or accuracy and it contains some references to files that are not part of the distribution. ================================================================================ +================================================================================ +All changes above are only part of the development branch for the next release. +================================================================================ + +######################### +# 2022-11-01 Release +######################### + +2022-10-26 Joseph Wright + + * ltfinal.dtx: + Introduce optional argument for case-changing commands + Make case changing commands language-aware + Auto-detect babel locale for case changing + +2022-10-22 David Carlisle + + * ltclass.dtx, ltdefns.dtx: Further \protect guards for gh/932 + + * utf8ienc.dtx: Correct the description of UTF-8 octets. + +2022-10-22 Joseph Wright + + * ltkeys.dtx: Correct handling of unknown option list + +2022-10-20 Joseph Wright + + * ltclass.dtx, ltkeys.dtx: + Correct an argument for a message + Define key option handler in ltkeys + +2022-10-10 David Carlisle + + * ltclass.dtx: use \protected@edef rather than \edef when expanding option lists + +2022-10-03 Marcel Krüger + + * ltluatex.dtx: + Add ordering rules for callback handlers + 2022-09-20 Frank Mittelbach * ltfssdcl.dtx (section{Interface Commands}): @@ -92,10 +132,6 @@ are not part of the distribution. * cmfonts.fdd Add font definitions for slanted small caps (gh/782) -================================================================================ -All changes above are only part of the development branch for the next release. -================================================================================ - ######################### # 2022-06-01 PL5 Release ######################### diff --git a/Master/texmf-dist/doc/latex-dev/base/classes.pdf b/Master/texmf-dist/doc/latex-dev/base/classes.pdf index 7a69e40f0d7..0f3e7a5cce7 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/classes.pdf and b/Master/texmf-dist/doc/latex-dev/base/classes.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf b/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf index 0385ff7c864..f164e9b482d 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/clsguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf b/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf index 928b09bd483..9293df614a3 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf and b/Master/texmf-dist/doc/latex-dev/base/cmfonts.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf b/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf index 7157148a526..ad43e0b7f1f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/cyrguide.pdf 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 7fd9fd58aa7..5da305cde98 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/doc-code.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/doc.pdf b/Master/texmf-dist/doc/latex-dev/base/doc.pdf index d6977bd5566..ba56cfe561b 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/doc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf b/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf index 9ec37ba5f98..f3ef8b3fc3a 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf and b/Master/texmf-dist/doc/latex-dev/base/docstrip.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/encguide.pdf b/Master/texmf-dist/doc/latex-dev/base/encguide.pdf index 98832bbcfca..255563550b1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/encguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/encguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/exscale.pdf b/Master/texmf-dist/doc/latex-dev/base/exscale.pdf index f4ce14e8d92..38a778e1b61 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/exscale.pdf and b/Master/texmf-dist/doc/latex-dev/base/exscale.pdf 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 0337544f01e..90892c6caaf 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf and b/Master/texmf-dist/doc/latex-dev/base/fix-cm.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf b/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf index 784debd6288..d0644e82798 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/fntguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf b/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf index d737597a7f0..bc70a0cf142 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf and b/Master/texmf-dist/doc/latex-dev/base/graphpap.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf b/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf index d01f901ebdc..35f52dca6e8 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf and b/Master/texmf-dist/doc/latex-dev/base/ifthen.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf b/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf index 2810415e32d..90f5aac0cbb 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf and b/Master/texmf-dist/doc/latex-dev/base/inputenc.pdf 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 9d43e51ca68..f18b52c99e4 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf and b/Master/texmf-dist/doc/latex-dev/base/lamport-manual.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf b/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf index 48609a519fb..35b28758618 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf and b/Master/texmf-dist/doc/latex-dev/base/latexrelease.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf b/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf index d224c50148c..0abf36f12f4 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf and b/Master/texmf-dist/doc/latex-dev/base/latexsym.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/lb2.pdf b/Master/texmf-dist/doc/latex-dev/base/lb2.pdf index fb1cdf8ab3e..394252b2065 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/lb2.pdf and b/Master/texmf-dist/doc/latex-dev/base/lb2.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/letter.pdf b/Master/texmf-dist/doc/latex-dev/base/letter.pdf index 91f4b7da0b6..08b5b52d86f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/letter.pdf and b/Master/texmf-dist/doc/latex-dev/base/letter.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf b/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf index 060cbdec9f9..bc13c55acbb 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf and b/Master/texmf-dist/doc/latex-dev/base/lgc2.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/lppl.pdf b/Master/texmf-dist/doc/latex-dev/base/lppl.pdf index 7e069bfc09f..1240d11e784 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/lppl.pdf and b/Master/texmf-dist/doc/latex-dev/base/lppl.pdf 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 a01a26c272e..654c4f6a2dc 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-code.pdf 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 87d2d0245b5..a036d2e7488 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltcmdhooks-doc.pdf 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 2956089442a..24cc0545ece 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-code.pdf 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 804b62bd6b2..65e8fade02c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltfilehook-doc.pdf 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 88c2bc642e6..9a8066d7e5e 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/lthooks-code.pdf 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 151c4c286bb..0fd3ab67ac5 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/lthooks-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf b/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf index 6c5f3e375b9..19a32677672 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltluatex.pdf 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 77dcb07b258..4e28cba0f76 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltmarks-code.pdf 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 e57a5bbc75e..9ee6c429162 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltmarks-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf index 2a94513721e..70742811501 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf index 8dcc6765774..8f5c23193e7 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews01.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf index 06ec6288488..332a568c994 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews02.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf index d79869c1076..10dcd6dabb3 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews03.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf index 408e9fe9427..140ae9bfc07 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews04.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf index 85dd03bbe35..b533e823d3c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews05.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf index 56b64f624de..ab0e8e6b0a6 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews06.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf index 4b964b32daf..b572c2afbb0 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews07.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf index 75c6b0f9ca2..cfe3a2e383c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews08.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf index 4de2a8541e2..e0d106d0f6f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews09.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf index 45d74b33a09..4c9e88504a9 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews10.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf index 8a23382d32a..8f61d02d4d8 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews11.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf index dc2e7713dfa..10deb7706e9 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews12.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf index 0601a775a7f..098589bd93d 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews13.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf index b5757c7fab8..9c3dc54f14f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews14.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf index 72b9e5858ae..7678526dbc5 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews15.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf index 86df687d2f7..e81dd332d63 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews16.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf index 71afff14a15..a3bf39bcf2c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews17.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf index 18036c2afcb..e754202b756 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews18.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf index 46f8a55e17a..3288407f59d 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews19.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf index a6ad55fa8df..dd66d032cd0 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews20.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf index b571a975604..18b01c53e18 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews21.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf index 17704aab46a..fa05f6a59f8 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews22.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf index 301b414a82e..fa67d7822e8 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews23.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf index 7f75b085a9e..a991678ddd6 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews24.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf index 105f3193735..52aef54c0c7 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews25.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf index 25924bd89e1..09e49e79ae1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews26.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf index 3e55d0ca17b..fa8a5fcf111 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews27.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf index 7c89f1b6d5a..ac868bf0ed5 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews28.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf index 86e54645660..80a19569bf6 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews29.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf index cd2a1f7dd4e..68d5d8afb1e 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews30.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf index 40458d59482..54e5e2a830b 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews31.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf index 8ad63d92ca5..17264132fc1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews32.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf index ac27d498833..d91676a1c05 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews33.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf index ceef597c19a..9074b398508 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews34.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf index 1226f431cbf..bffff429ce0 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews35.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf b/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf index 24a0b791fe7..bd3fd8be101 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltnews36.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex b/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex index 55de98628cf..d6df801db2a 100644 --- a/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex +++ b/Master/texmf-dist/doc/latex-dev/base/ltnews36.tex @@ -123,7 +123,7 @@ \tubcommand{\input{tubltmac}} \publicationmonth{November} -\publicationyear{2022 --- DRAFT version for upcoming release} +\publicationyear{2022} % --- DRAFT version for upcoming release} \publicationissue{36} @@ -143,16 +143,30 @@ \section{Introduction} -\emph{to be written} +The 2022-11 release of \LaTeX{} is largely a consolidation release +where we made a number of minor improvements to fix some bugs or +improve one or the other interface. +The only really important functionality that was added is described in +the next section: the ability to easily define document-level commands +and environments that accept a key/value list in one of its (usually +optional) arguments, including the ability to determine if the argument +does in fact contain such a key/value list or just a single +\enquote{classical} value. -\subsection{Auto-detecting key--value arguments} +For the \enquote{Tagged \LaTeX{} Project} this functionality is very +important because many document-level commands will need to accept +such key/value lists, for example, to specify alternative text or +overwrite default tagging if that becomes necessary in a document. + + +\section{Auto-detecting key/value arguments} To allow extension of the core \LaTeX{} syntax, \pkg{ltcmd} now supports -a \texttt{={...}} modifier when grabbing arguments. This modifier instructs +a \texttt{={...}}\ modifier when grabbing arguments. This modifier instructs \LaTeX{} that the argument should be passed to the underlying code as -a set of keyvals. If the argument does not \enquote{look like} a set -of keyvals, it will be converted into a single key--value pair, with +a set of key/values. If the argument does not \enquote{look like} a set +of key/values, it will be converted into a single key/value pair, with the argument to \texttt{=} specifying the name of that key. For example, the \cs{caption} command could be defined as \begin{verbatim} @@ -161,26 +175,29 @@ example, the \cs{caption} command could be defined as {...} \end{verbatim} which would mean that if the optional argument does \emph{not} -contain keyval data, it will be converted to a single keyval +contain key/value data, it will be converted to a single key/value pair with the key name \texttt{short-text}. Arguments which begin with \texttt{=,} are always interpreted as -keyvals even if they do not contain further \texttt{=} signs. +key/values even if they do not contain further \texttt{=} signs. Any \texttt{=} signs enclosed within \verb|$...$| or \verb|\(...\)|, i.e.~in inline math mode, are ignored, meaning that only \texttt{=} outside of math mode will generally cause -interpretation as keyval material. +interpretation as key/value material. In case the argument contains a \enquote{textual} \texttt{=} sign that -is mistaken as key/value indicator you can hide it using a brace +is mistaken as a key/value indicator you can hide it using a brace group as you would do in other places, e.g., \begin{verbatim} \caption[{Use of = signs}] {Use of = signs in optional arguments} \end{verbatim} -However, because a \texttt{=} sign in math mode are already ignored, this +However, because \texttt{=} signs in math mode are already ignored, this should seldom be necessary. + +\section{A note for font package developers} + \subsection{Encoding subsets for \texttt{TS1} encoded fonts} The text companion encoding \texttt{TS1} is unfortunately not very @@ -204,29 +221,51 @@ glyphs that are actually available in the font.\footnote{The \LaTeX{} % \githubissue{905} - - \section{New or improved commands} +\subsection{Better language handling for case-changing commands} + +The commands \cs{MakeUppercase}, \cs{MakeLowercase} and \cs{MakeTitlecase} now +automatically detect the locale currently in use when \pkg{babel} is loaded. +This allows automatic adjustment of letter mappings where appropriate. They +also accept a leading optional argument. This accepts a key--value list of +control settings. At present, there is one key available: \texttt{locale}, +which can also be accessed via the alias \texttt{lang}. This is intended to +allow local setting of the language, which can be done using a BCP-47 +descriptor. For example, this could be used to force Turkish case changing in +otherwise English input +\begin{verbatim} +\MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem} +\end{verbatim} +yields + \MakeUppercase[lang = tr]{Ragıp Hulûsi Özdem}. +% RAGIP HULÛS\.I ÖZDEM. %TUB \section{Code improvements} -\subsection{Support for slanted small caps in the EC-fonts } -Since some time \LaTeX{} supports the combination of the shapes -small caps and italic/slanted. The EC-fonts contain slanted small caps fonts +\subsection{Support for slanted small caps in the EC fonts} +For some time \LaTeX{} has supported the combination of the shapes +small caps and italic/slanted. The EC fonts contain slanted small caps fonts but using them required the loading of an external package. Suitable font definitions have now been added to \pkg{t1cmd.fd} and so from now on \begin{verbatim} - \textsc{\textsl{slanted small}} - \textsc{\textit{italic small caps}} +\usepackage[T1]{fontenc} +... + \textsc{\textsl{Slanted Small Caps}}; + \textsc{\textit{Italic Small Caps}}; \bfseries - \textsc{\textsl{bold slanted small caps}} - \textsc{\textit{bold italic small caps}} + \textsc{\textsl{Bold Slanted Small Caps}}; + \textsc{\textit{Bold Italic Small Caps}}. \end{verbatim} will give the expected result: {\fontfamily{cmr} -\textsc{\textsl{slanted small}} \textsc{\textit{italic small caps}} +\textsc{\textsl{Slanted Small Caps}}; \textsc{\textit{Italic Small Caps}}; \bfseries -\textsc{\textsl{bold slanted small caps}} \textsc{\textit{bold italic small caps}}} +\textsc{\textsl{Bold Slanted Small Caps}}; \textsc{\textit{Bold Italic Small Caps}}}. + +Given that the Computer Modern fonts in \texttt{T1} do not have real italic small caps but only +slanted small caps, the latter is substituted for the former, which is +why above both work but you see no difference between the two (and in the log you get a +substitution warning for the \cs{textit}\cs{textsc} shape combination). % \githubissue{782} @@ -242,28 +281,56 @@ font instead. \githubissue{879} + +\subsection{Improve font series handling with incorrect \texttt{.fd} files} + +By convention, the font series value is supposed to contain no +\texttt{m}, unless you refer to the \enquote{medium} series (which is +represented by a single \texttt{m}). For example, one should write +\texttt{c} for \enquote{medium weight, condensed width} and not +\texttt{mc}. This was one of the many space-conserving methods +necessary in the early days of \LaTeXe. + +Some older \texttt{.fd} files +do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in +their declarations. As a result, some font selection scheme +functionality was not working when confronted with such \texttt{.fd} +files. We have therefore augmented \cs{DeclareSymbolFont} and +\cs{SetSymbolFont} to strip any surplus \texttt{m} from their series argument +so that they do not unnecessarily trigger font +substitutions. Regardless of this support such +\texttt{.fd} files should get fixed by their maintainers. +% +\githubissue{918} + + + + \subsection{Detect nested \texttt{minipage} environments} Nesting of \texttt{minipage} environments is only partially supported in \LaTeX{} and can lead to incorrect output, such as overfull boxes or footnotes appearing in the wrong place; see~\cite[p.~106]{36:Lamport}. However, until now there was no warning -if that happpened. This has been changed and the environment now +if that happened. This has been changed and the environment now warns if you nest it in another \texttt{minipage} environment that already contains footnotes. % \githubissue{168} - -\subsection{\LuaTeX\ callback efficiency improvement} - -The mechanism for providing the -\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has -been improved to make it more reusable and to avoid overhead if these -callbacks are not used. +\subsection{Robust commands in package options} +With the standard key-based option handler added in the last release, +or with contributed packages offering similar features, users may +expect to be able to use a package option such as +\verb|[font=\bfseries]|. +Previously this failed with internal errors as the option list was +expanded via \verb|\edef|. This has now been changed to use the +existing command \verb|\protected@edef| so that any \LaTeX\ robust +command should be safe to pass to a key value option. % -\githubissue{830} +\githubissue{932} + @@ -282,35 +349,56 @@ approach. -\subsection{Improve font series handling with incorrect \texttt{.fd} files} - -By convention, the font series value is supposed to contain no -\texttt{m}, unless you refer to the \enquote{medium} series (which is -represented by a single \texttt{m}). For example, one should write -\texttt{c} for \enquote{medium weight, condensed width} and not -\texttt{mc}. This was one of the many space-conserving methods -necessary in the early days of \LaTeXe. +\subsection{\LuaTeX\ callback efficiency improvement} -Some older \texttt{.fd} files -do not obey that convention but use \texttt{mc}, \texttt{bm}, etc., in -their declarations. As a result, some font selection scheme -functionality was not working when confronted with such \texttt{.fd} -files. We have therefore augmented \cs{DeclareSymbolFont} and -\cs{SetSymbolFont} to strip their series argument from any surplus -\texttt{m} so that they do not unnecessarily trigger font -substitutions. Regardless of this support such -\texttt{.fd} files should get fixed by their maintainers. +The mechanism for providing the +\texttt{pre/post\_mlist\_to\_hlist\_filter} callbacks in \LuaTeX\ has +been improved to make it more reusable and to avoid overhead if these +callbacks are not used. % -\githubissue{918} +\githubissue{830} + + +\subsection{Rule-based ordering for \LuaTeX\ callback handlers} + +In \hologo{LuaLaTeX} the callback handlers used to be called in the order +in which they were registered in, but this was often rather fragile. +It depends a lot on the load order and any attempts to enforce a +different order required unregistering and reregistering the handlers to +be reordered. Additionally, even if some ordering constraints where +enforced that way, another package loaded later could accidentally +overwrite it. + +To improve this, we now order the callback handlers based on ordering +rules similar to the hook rules. + +When registering a callback which should run before or after another +callback, \verb+luatexbase.declare_callback_rule+ can now be used to +record this ordering constraint. +For example +\begin{verbatim} +luatexbase.add_to_callback + ('pre_shaping_filter', my_handler, 'my_name') +luatexbase.declare_callback_rule + ('pre_shaping_filter', + 'my_name', 'before', 'other_name') +\end{verbatim} +will ensure that \verb+my_handler+ will always be called before the +handler registered as \verb+other_name+. + +This also means that the order in which callbacks are registered no +longer implicitly defines an order. +Code which relied on this implicit order should now define the order +rules explicitly. \section{Bug fixes} -\subsection{Prevent \TeX{} from loosing a \cs{smash}} +\subsection{Prevent \TeX{} from losing a \cs{smash}} When \TeX{} is typesetting a fraction, it will rebox the material in -either numerator or the denumerator depending on which is wider. If +either the numerator or denominator, depending on which is wider. If the repackaged part consists of a single box, that box gets new dimensions and if it was built using a \cs{smash} that effect vanishes (because a smash is nothing other than zeroing some box dimension, @@ -321,28 +409,36 @@ which now got undone). For example, in the line \end{verbatim} the $2$ in the denominators was not always at the same vertical position, because the second \cs{smash} was ignored due to reboxing: +\vspace{-1.2\baselineskip} \[ \makeatletter \def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} % old definition \makeatother \newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }} +\qquad \frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq \frac{100}{\smash{2^X}} +\pagebreak % not TUB \] -The differences are subtle but noticeable. This is now corrected and the \cs{smash} is always +The differences are subtle but noticeable. +This is now corrected and the \cs{smash} is always honored. Thus now you get this output: +\vspace{-1.2\baselineskip} \[ \newcommand*\drawbaseline{\rlap{\vrule width 60pt height 0.1pt depth 0pt }} +\qquad \frac{1}{\drawbaseline2} = \frac{1}{\smash{2^X}} \neq \frac{100}{\smash{2^X}} \] +\par +\vspace{-1.5\baselineskip} % \githubissue{517} \subsection{Resolve an issue with \cs{mathchoice} and \texttt{localalphabets}} -The code for keeping a number of math alphabetcs local (introduced in +The code for keeping a number of math alphabets local (introduced in 2021; see~\cite{36:ltnews34}) used \cs{aftergroup} to do some cleanup actions after a formula had finished. Unfortunately, \cs{aftergroup} can't be used inside the arguments of the \cs{mathchoice} primitive and as a result one @@ -352,19 +448,28 @@ approach altogether. % \githubissue{921} +\subsection{Reporting of unused global options when using key/value processing} + +Using the new key/value option processor did not properly report any unused +global options when it was used in handling class options. This has now been +corrected. +% +\githubissue{938} -\section{Changes to packages in the \pkg{amsmath} category} +%\section{Changes to packages in the \pkg{amsmath} category} +%\newpage TUB? + \section{Changes to packages in the \pkg{graphics} category} \subsection{Fix a \cs{mathcolor} bug} -The \cs{mathcolor} command intorduced in \cite{36:ltnews35} needs to -scan for following sub and superscripts, but if it did so at the end +The \cs{mathcolor} command introduced in \cite{36:ltnews35} needs to +scan for following sub- and superscripts, but if it did so at the end of an alignment cell, e.g., in a \texttt{array} environment, the -\texttt{\&} was evaluated too early causing some internal errors. This +\texttt{\&} was evaluated too early, causing some internal errors. This is now properly guarded for. % \githubissue{901} @@ -375,7 +480,7 @@ is now properly guarded for. \subsection{\pkg{array}: Correctly identify single-line m-cells} -Cells in m-columns that only contain a single line are supposed to +Cells in m-columns that contain only a single line are supposed to behave like single-line p-cells and align at the same baseline. To test for the condition, \pkg{array} used to compare the height of the cell to the height of the strut used for the table rows. However, the height of that @@ -388,7 +493,7 @@ tall, in which case aligning is pointless anyway). \githubissue{766} -\medskip +%\medskip \begin{thebibliography}{9} 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 4fa9f79b830..0fbaccad7ab 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltpara-code.pdf 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 d55cb690192..847135c79c3 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltpara-doc.pdf 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 1e7c9968842..b05e3da93de 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltshipout-code.pdf 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 b9cfbf5e678..61d3c87b9fa 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltshipout-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf b/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf index b09d2b874ec..fd0ac95b4cb 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltx3info.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf b/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf index c094004aeab..aff4835ebb7 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf and b/Master/texmf-dist/doc/latex-dev/base/ltxdoc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf b/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf index 79d65d507b6..07c7f3aa061 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf and b/Master/texmf-dist/doc/latex-dev/base/makeindx.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/modguide.pdf b/Master/texmf-dist/doc/latex-dev/base/modguide.pdf index ab7f6c6c685..f818b299ac7 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/modguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/modguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf b/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf index 57f0853abec..fd2dcfb5cc3 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf and b/Master/texmf-dist/doc/latex-dev/base/nfssfont.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/proc.pdf b/Master/texmf-dist/doc/latex-dev/base/proc.pdf index e29b28e895c..2005fa583b1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/proc.pdf and b/Master/texmf-dist/doc/latex-dev/base/proc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/slides.pdf b/Master/texmf-dist/doc/latex-dev/base/slides.pdf index a3efc155d2d..002f38d7072 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/slides.pdf and b/Master/texmf-dist/doc/latex-dev/base/slides.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf b/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf index c8992d40240..b73bb5a036d 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf and b/Master/texmf-dist/doc/latex-dev/base/slifonts.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/source2e.pdf b/Master/texmf-dist/doc/latex-dev/base/source2e.pdf index 4006bc5fd97..42f74b42cdc 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/source2e.pdf and b/Master/texmf-dist/doc/latex-dev/base/source2e.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf b/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf index 140e61e512a..fd876bf8029 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf and b/Master/texmf-dist/doc/latex-dev/base/syntonly.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf b/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf index acc7b86da5f..2d3d123d1f2 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf and b/Master/texmf-dist/doc/latex-dev/base/tlc2.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/tulm.pdf b/Master/texmf-dist/doc/latex-dev/base/tulm.pdf index 41383d94a5f..d57694c1d08 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/tulm.pdf and b/Master/texmf-dist/doc/latex-dev/base/tulm.pdf 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 9b2ee642c7b..325eac0a87b 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf and b/Master/texmf-dist/doc/latex-dev/base/usrguide-historic.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf b/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf index 2f2069018a2..52c0370645a 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf and b/Master/texmf-dist/doc/latex-dev/base/usrguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/usrguide.tex b/Master/texmf-dist/doc/latex-dev/base/usrguide.tex index 80694036651..32e12a13977 100644 --- a/Master/texmf-dist/doc/latex-dev/base/usrguide.tex +++ b/Master/texmf-dist/doc/latex-dev/base/usrguide.tex @@ -39,7 +39,7 @@ \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{usrguide3.tex} for full details.}% + \texttt{usrguide.tex} for full details.}% } \date{2022-07-05} @@ -75,7 +75,7 @@ \section{Introduction} \LaTeXe{} was released in 1994 and added a number of then-new concepts to -\LaTeX{}. These are described in \texttt{usrguide-old}, which has largely remained +\LaTeX{}. These are described in \texttt{usrguide-historic}, which has largely remained unchanged. Since then, the \LaTeX{} team have worked on a number of ideas, firstly a programming language for \LaTeX{} (\pkg{expl3}) and then a range of tools for document authors which build on that language. Here, we describe @@ -1166,6 +1166,13 @@ engines match those available in standard input encodings (|T1|, |T2|, |LGR|). \end{tabular} \end{quotation} +The case-changing commands take an optional argument which can be used to +tailor the output. This optional argument accepts the key \texttt{locale}, +also available under the alias \texttt{lang}, +which can be used to give a language identifier in BCP-47 +format. This is then applied to select language-specific features during +case-changing. + The input given to these commands is `expanded' before case changing is applied. This means that any commands within the input that convert to pure text will be case changed. Mathematical content is automatically excluded, as diff --git a/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf b/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf index 1633aff3531..5bbc4da5f05 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf and b/Master/texmf-dist/doc/latex-dev/base/utf8ienc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf b/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf index db1a1e9ebaa..45d2350e678 100644 Binary files a/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf and b/Master/texmf-dist/doc/latex-dev/base/webcomp.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt b/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt index a3626f83a49..3c6cb992c89 100644 --- a/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/firstaid/changes.txt @@ -1,3 +1,19 @@ +2022-10-27 Joseph Wright + + * latex2e-first-aid-for-external-files.dtx: + Much easier babel patch + +2022-10-27 Joseph Wright + + * latex2e-first-aid-for-external-files.dtx: + Add first aid for babel to undo a no-longer required patch + +2022-10-03 Joseph Wright + + * latex2e-first-aid-for-external-files.dtx: + Add first aid for memoir to support kernel-provided + \stock... dimens + 2022-02-20 Frank Mittelbach * latex2e-first-aid-for-external-files.dtx: diff --git a/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf b/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf index 04325d3fe5a..9e850e52643 100644 Binary files a/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf and b/Master/texmf-dist/doc/latex-dev/firstaid/latex2e-first-aid-for-external-files.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/README.md b/Master/texmf-dist/doc/latex-dev/graphics/README.md index c30c8d390b5..0705aac3162 100644 --- a/Master/texmf-dist/doc/latex-dev/graphics/README.md +++ b/Master/texmf-dist/doc/latex-dev/graphics/README.md @@ -1,7 +1,7 @@ The LaTeX `graphics` bundle =========================== -Release 2022-11-01 pre-release 0 +Release 2023-05-01 pre-release 0 Overview -------- diff --git a/Master/texmf-dist/doc/latex-dev/graphics/changes.txt b/Master/texmf-dist/doc/latex-dev/graphics/changes.txt index 616f56230f0..55dde0358f2 100644 --- a/Master/texmf-dist/doc/latex-dev/graphics/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/graphics/changes.txt @@ -8,6 +8,16 @@ are not part of the distribution. All changes above are only part of the development branch for the next release. ================================================================================ +######################### +# 2022-11-01 Release +######################### + +2022-07-25 Frank Mittelbach + + * mathcolor.dtx (section{The Implementation}): + Avoid ending an alignment cell prematurely when hitting an + & during scanning (gh/901) + ######################### # 2022-06-01 Release ######################### diff --git a/Master/texmf-dist/doc/latex-dev/graphics/color.pdf b/Master/texmf-dist/doc/latex-dev/graphics/color.pdf index de87111c772..60ff965219f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/color.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/color.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/drivers.pdf b/Master/texmf-dist/doc/latex-dev/graphics/drivers.pdf index 1c82349c40a..2ff5ce85cb5 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/drivers.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/drivers.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/epsfig.pdf b/Master/texmf-dist/doc/latex-dev/graphics/epsfig.pdf index d650f59d51c..c7c77e4fc7f 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/epsfig.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/epsfig.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/graphics.pdf b/Master/texmf-dist/doc/latex-dev/graphics/graphics.pdf index 612c27318a7..ff41a912d3c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/graphics.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/graphics.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/graphicx.pdf b/Master/texmf-dist/doc/latex-dev/graphics/graphicx.pdf index 87e42ec86cd..733330d5377 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/graphicx.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/graphicx.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/grfguide.pdf b/Master/texmf-dist/doc/latex-dev/graphics/grfguide.pdf index f487177b508..80e906d3065 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/grfguide.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/grfguide.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/keyval.pdf b/Master/texmf-dist/doc/latex-dev/graphics/keyval.pdf index 5628e90294e..7bfca3934f0 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/keyval.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/keyval.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/lscape.pdf b/Master/texmf-dist/doc/latex-dev/graphics/lscape.pdf index f65e3667700..3d8b3d5394c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/lscape.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/lscape.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/mathcolor.pdf b/Master/texmf-dist/doc/latex-dev/graphics/mathcolor.pdf index 64d2f933345..43e44ed1862 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/mathcolor.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/mathcolor.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/rotating.pdf b/Master/texmf-dist/doc/latex-dev/graphics/rotating.pdf index aad5f49c953..ab77c4b4671 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/rotating.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/rotating.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf b/Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf index 4dce5855b65..b6fe701a67b 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/rotex.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/graphics/trig.pdf b/Master/texmf-dist/doc/latex-dev/graphics/trig.pdf index 8a079345fc1..e1df6687724 100644 Binary files a/Master/texmf-dist/doc/latex-dev/graphics/trig.pdf and b/Master/texmf-dist/doc/latex-dev/graphics/trig.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/README.md b/Master/texmf-dist/doc/latex-dev/latex-lab/README.md index 410292cda50..54e693484ba 100644 --- a/Master/texmf-dist/doc/latex-dev/latex-lab/README.md +++ b/Master/texmf-dist/doc/latex-dev/latex-lab/README.md @@ -1,6 +1,6 @@ # LaTeX laboratory -Release 2022-06-01 pre-release 4 +Release 2023-05-01 pre-release 0 ## Overview diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt b/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt index 912a45343d5..b4b4df98113 100644 --- a/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/latex-lab/changes.txt @@ -1,3 +1,13 @@ +2022-07-22 Frank Mittelbach + + * latex-lab-footnotes.dtx (subsection{Document-level commands}): + Make mandatory arguments of \footnote and \footnotetext long (gh863) + +2022-05-28 Joseph Wright + + * latex-lab-prototype.dtx + Removed + 2022-14-04 Ulrike Fischer * documentmeta-support.dtx: diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf b/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf index 63b7f66e427..7d3e1d002f2 100644 Binary files a/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf and b/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-code.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf b/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf index e62ba6d7f79..cfe8aee9a06 100644 Binary files a/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf and b/Master/texmf-dist/doc/latex-dev/latex-lab/documentmetadata-support-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf index 23d39d4d504..45ac1cce92c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf and b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-footnotes.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf index 86df8067433..d12adaf15cd 100644 Binary files a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf and b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-new-or.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf deleted file mode 100644 index f3a07f31c0c..00000000000 Binary files a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-prototype.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf index a90d2c5a505..88a563d2c9c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf and b/Master/texmf-dist/doc/latex-dev/latex-lab/latex-lab-testphase.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/README.md b/Master/texmf-dist/doc/latex-dev/tools/README.md index 23e3aca34f6..a7e8675cb8f 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 2022-11-01 pre-release 2 +Release 2023-05-01 pre-release 0 Overview -------- diff --git a/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf b/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf index a63eabaf5d0..1b117523cd1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf and b/Master/texmf-dist/doc/latex-dev/tools/afterpage.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/array.pdf b/Master/texmf-dist/doc/latex-dev/tools/array.pdf index f03d3b6fa0f..5a62c4c93d1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/array.pdf and b/Master/texmf-dist/doc/latex-dev/tools/array.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/bm.pdf b/Master/texmf-dist/doc/latex-dev/tools/bm.pdf index 140051caa5e..52ab388d9de 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/bm.pdf and b/Master/texmf-dist/doc/latex-dev/tools/bm.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/calc.pdf b/Master/texmf-dist/doc/latex-dev/tools/calc.pdf index 0c0e726e1c7..21bc2383891 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/calc.pdf and b/Master/texmf-dist/doc/latex-dev/tools/calc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/changes.txt b/Master/texmf-dist/doc/latex-dev/tools/changes.txt index a92d26ad570..7b3e63dca5a 100644 --- a/Master/texmf-dist/doc/latex-dev/tools/changes.txt +++ b/Master/texmf-dist/doc/latex-dev/tools/changes.txt @@ -5,16 +5,20 @@ completeness or accuracy and it contains some references to files that are not part of the distribution. ======================================================================= +================================================================================ +All changes above are only part of the development branch for the next release. +================================================================================ + +######################### +# 2022-11-01 Release +######################### + 2022-09-04 Frank Mittelbach * array.dtx (section{The macros \texttt{\textbackslash @classz}): Test against \strutbox height to determine if an m-cell contains only a single line (gh/766) -================================================================================ -All changes above are only part of the development branch for the next release. -================================================================================ - ######################### # 2022-06-01 Release ######################### diff --git a/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf b/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf index 20cb899562c..9b5782c333c 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf and b/Master/texmf-dist/doc/latex-dev/tools/dcolumn.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf b/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf index 8347fda51a8..a2405903fa7 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf and b/Master/texmf-dist/doc/latex-dev/tools/delarray.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf b/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf index 098e198f694..5a2cb393b37 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf and b/Master/texmf-dist/doc/latex-dev/tools/enumerate.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf b/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf index 67dc3197c5f..e9000aee21a 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf and b/Master/texmf-dist/doc/latex-dev/tools/fileerr.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf b/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf index 5b22dcc9dcf..09a27818c79 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf and b/Master/texmf-dist/doc/latex-dev/tools/fontsmpl.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf b/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf index 52e9e53045f..22a7ad4e828 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf and b/Master/texmf-dist/doc/latex-dev/tools/ftnright.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf b/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf index c0541d83a69..a3912de4896 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf and b/Master/texmf-dist/doc/latex-dev/tools/hhline.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf b/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf index ab9291157be..c2e66c96c89 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf and b/Master/texmf-dist/doc/latex-dev/tools/indentfirst.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/layout.pdf b/Master/texmf-dist/doc/latex-dev/tools/layout.pdf index 28f5e757882..b82b65bb144 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/layout.pdf and b/Master/texmf-dist/doc/latex-dev/tools/layout.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf b/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf index 6f275587ff4..8444910b915 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf and b/Master/texmf-dist/doc/latex-dev/tools/longtable.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf b/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf index 5cdc010fcbe..6aabc7f6a2b 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf and b/Master/texmf-dist/doc/latex-dev/tools/multicol.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf b/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf index 5edf06fc20a..57454b23c16 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf and b/Master/texmf-dist/doc/latex-dev/tools/rawfonts.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf b/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf index d909a2c873c..9c2ed782fc8 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf and b/Master/texmf-dist/doc/latex-dev/tools/shellesc.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf b/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf index 0bc1d1e48c3..f017f5fd3be 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf and b/Master/texmf-dist/doc/latex-dev/tools/showkeys.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf b/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf index c319cd39063..6072dca3c79 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf and b/Master/texmf-dist/doc/latex-dev/tools/somedefs.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf b/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf index 489a309c1d0..9dc24cdabf3 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf and b/Master/texmf-dist/doc/latex-dev/tools/tabularx.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf b/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf index f85c46d0bde..8d403092c01 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf and b/Master/texmf-dist/doc/latex-dev/tools/theorem.pdf 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 e6e8279f8e4..a0d541c7962 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf and b/Master/texmf-dist/doc/latex-dev/tools/tools-overview.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/trace.pdf b/Master/texmf-dist/doc/latex-dev/tools/trace.pdf index ea431061df2..1f2fe7f2ca9 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/trace.pdf and b/Master/texmf-dist/doc/latex-dev/tools/trace.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf b/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf index a2ff23e702b..faa84a53739 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf and b/Master/texmf-dist/doc/latex-dev/tools/varioref.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf b/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf index f535d681d78..f4e13657075 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf and b/Master/texmf-dist/doc/latex-dev/tools/verbatim.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/xr.pdf b/Master/texmf-dist/doc/latex-dev/tools/xr.pdf index d1041fb8021..293437b3ab3 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/xr.pdf and b/Master/texmf-dist/doc/latex-dev/tools/xr.pdf differ diff --git a/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf b/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf index 6df01e873a4..0d8075103d1 100644 Binary files a/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf and b/Master/texmf-dist/doc/latex-dev/tools/xspace.pdf differ diff --git a/Master/texmf-dist/source/latex-dev/base/ltclass.dtx b/Master/texmf-dist/source/latex-dev/base/ltclass.dtx index 35c4251fcea..a525b6f573e 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltclass.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltclass.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltclass.dtx} - [2022/06/20 v1.5c LaTeX Kernel (Class & Package Interface)] + [2022/10/22 v1.5e LaTeX Kernel (Class & Package Interface)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltclass.dtx} @@ -1302,7 +1302,10 @@ {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% \reserved@a\reserved@b \@expl@@@filehook@clear@replacement@flag@@ - \expandafter\xdef\csname opt@\reserved@a\endcsname{% +% \end{macrocode} +% \changes{v1.5d}{2022/10/10}{Use \cs{protected@xdef}.} +% \begin{macrocode} + \expandafter\protected@xdef\csname opt@\reserved@a\endcsname{% \@ifundefined{opt@\reserved@a}\@empty {\csname opt@\reserved@a\endcsname,}% \zap@space#2 \@empty}% @@ -1476,10 +1479,12 @@ % {Star form added.} % \changes{v0.2c}{1993/11/17} % {restoring \cs{@fileswith@pti@ns} added.} +% \changes{v1.5d}{2022/10/10} +% {Use \cs{protected@edef}.} % \begin{macrocode} \def\ProcessOptions{% \let\ds@\@empty - \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}% \@ifstar\@xprocess@ptions\@process@ptions} \@onlypreamble\ProcessOptions % \end{macrocode} @@ -1505,6 +1510,7 @@ % \changes{v0.2y}{1994/02/07} % {Add extra ,s so `two' is not matched with `twocolumn'} % \changes{v1.3z}{2021/03/05}{modify so braces to not give errors (gh/513)} +% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}} % \begin{macrocode} % %\IncludeInRelease{2021/06/01}% @@ -1515,7 +1521,7 @@ \ifx\@classoptionslist\relax\else \@for\CurrentOption:=\@classoptionslist\do{% \ifx\CurrentOption\@empty\else - \@ifundefined{ds@\CurrentOption}{}{% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{% \@use@ption \expandafter\let\csname ds@\CurrentOption\endcsname\@empty }% @@ -1552,6 +1558,7 @@ % \end{macrocode} % % The common part of |\ProcessOptions| and |\ProcessOptions*|. +% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}} % \begin{macrocode} % %<*2ekernel|latexrelease> @@ -1559,7 +1566,7 @@ % {\@process@pti@ns}{Unused options issue}% \def\@process@pti@ns{% \@for\CurrentOption:=\@curroptions\do{% - \@ifundefined{ds@\CurrentOption}% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}% {\@use@ption \default@ds}% % \end{macrocode} @@ -1627,6 +1634,7 @@ % \changes{v1.0e}{1994/05/17} % {Execute option after removing from list, not before} % \changes{v1.3x}{2021/02/18}{filter out =value from unused option list (gh/85)} +% \changes{v1.5e}{2022/10/22}{Use \cs{detokenize}} % \begin{macrocode} % %\IncludeInRelease{2021/06/01}% @@ -1636,7 +1644,7 @@ \@expandtwoargs\@removeelement {\expandafter\@remove@eq@value\CurrentOption=\@nil}% \@unusedoptionlist\@unusedoptionlist - \csname ds@\CurrentOption\endcsname} + \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname} % %\EndIncludeInRelease %\IncludeInRelease{0000/00/00}% @@ -1988,6 +1996,7 @@ % \changes{v2.1b}{2016/11/09} % {Improve \cs{ifx} tests PR/4497} % \changes{v1.3x}{2021/02/18}{save raw class option list (gh/85)} +% \changes{v1.5e}{2022/10/22}{Use \cs{protected@xdef}.} % \begin{macrocode} % %\IncludeInRelease{2020/10/01}% @@ -1996,7 +2005,7 @@ \def\@fileswith@pti@ns#1[#2]#3[#4]{% \ifx#1\@clsextension \ifx\@classoptionslist\relax - \xdef\@classoptionslist{\zap@space#2 \@empty}% + \protected@xdef\@classoptionslist{\zap@space#2 \@empty}% % \end{macrocode} % Save raw class list. % \begin{macrocode} @@ -2177,21 +2186,24 @@ % \end{macrocode} % \changes{v1.5b}{2022/03/18}{Switch to \cs{ProcessKeyOptions}} % \changes{v1.5c}{2022/06/20}{Pass raw options to \cs{ProcessKeyOptions}} +% \changes{v1.5e}{2022/10/20} +% {Define key option handler in \pkg{ltkeys}} % In the current preferred approach, a key family name will exist for % processing using \pkg{ltkeys}. In that case, we replace the previous % package options with the new ones, then call the key handler. % Otherwise, we use the more classical clash handler. % \begin{macrocode} {% - \@ifundefined{opt@fam@\@currname.\@currext} + \@ifundefined{opt@handler@\@currname.\@currext} {\@onefilewithoptions@clashchk{#2}} {% - \expandafter\edef\csname opt@\@currname.\@currext\endcsname +% \end{macrocode} +% \changes{v1.5d}{2022/10/10}{Use \cs{protected@edef}.} +% \begin{macrocode} + \expandafter\protected@edef\csname opt@\@currname.\@currext\endcsname {\zap@space#2 \@empty}% \@namedef{@raw@opt@\@currname.\@currext}{#2}% - \expandafter\expandafter\expandafter\ProcessKeyOptions - \expandafter\expandafter\expandafter - [\csname opt@fam@\@currname.\@currext\endcsname]% + \@nameuse{opt@handler@\@currname.\@currext}% }% }% {\makeatletter @@ -2693,10 +2705,11 @@ % \changes{v0.2v}{1994/01/29} % {Macro added.} % \changes{v1.0t}{1995/11/14}{Allow empty option} +% \changes{v1.5d}{2022/10/10}{Use \cs{protected@edef}.} % \begin{macrocode} \def\@@unprocessedoptions{% \ifx\@currext\@pkgextension - \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}% \@for\CurrentOption:=\@curroptions\do{% \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}% \fi} diff --git a/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx b/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx index 9e1fa43fadc..bd820e7cf21 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltdefns.dtx @@ -32,7 +32,7 @@ %<*driver> % \fi \ProvidesFile{ltdefns.dtx} - [2022/05/13 v1.5q LaTeX Kernel (definition commands)] + [2022/05/22 v1.5r LaTeX Kernel (definition commands)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltdefns.dtx} @@ -966,9 +966,22 @@ % % \begin{macro}{\@expandtwoargs} % A macro to totally expand two arguments to another macro +% \changes{v1.5r}{2022/10/22}{Use \cs{protected@edef}.} % \begin{macrocode} +% +%\IncludeInRelease{2022/11/01}% +% {\@expandtwoargs}{protected edef}% +%<*2ekernel|latexrelease> \def\@expandtwoargs#1#2#3{% -\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +\protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +% +%\EndIncludeInRelease +%\IncludeInRelease{00/00/00}% +% {\@expandtwoargs}{protected edef}% +%\def\@expandtwoargs#1#2#3{% +%\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +%\EndIncludeInRelease +%<*2ekernel> % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx b/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx index 69ea7bc942a..7f4bef3bcc1 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltfinal.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltfinal.dtx} - [2022/08/29 v2.2w LaTeX Kernel (Final Settings)] + [2022/10/26 v2.2x LaTeX Kernel (Final Settings)] % \iffalse \documentclass{ltxdoc} \GetFileInfo{ltfinal.dtx} @@ -1085,6 +1085,9 @@ % \changes{v2.2t}{2022/04/21}{Support \cs{noexpand} in argument of \cs{@expl@text@uppercase@@n}} % \changes{v2.2v}{2022/06/30}{Just use \cs{text_lowercase:n} without \cs{protectd@edf} gh/881x}% % \changes{v2.2w}{2022/07/04}{Introduced \cs{CaseSwitch}, \cs{DeclareCaseChangeEquivalent} and \cs{MakeTitlecase} to support hooking into case changing gh/889}% +% \changes{v2.2x}{2022/10/26}{Introduce optional argument for case-changing commands} +% \changes{v2.2x}{2022/10/26}{Make case changing commands language-aware} +% \changes{v2.2x}{2022/10/26}{Auto-detect \pkg{babel} locale} % Wrappers around the L3 case changing functions. % |\protected| to make them mostly safe as replacements for |uppercase| % and |\lowercase|. @@ -1109,12 +1112,55 @@ % functions. % \begin{macrocode} \ExplSyntaxOn -\cs_new_protected_nopar:cpn{MakeUppercase~}{\text_uppercase:n} -\cs_set_nopar:Npx\MakeUppercase#1{\use:c{MakeUppercase~}{#1}} -\cs_new_protected_nopar:cpn{MakeLowercase~}{\text_lowercase:n} -\cs_set_nopar:Npx\MakeLowercase#1{\use:c{MakeLowercase~}{#1}} -\cs_new_protected_nopar:cpn{MakeTitlecase~}{\text_titlecase:n} -\cs_set_nopar:Npx\MakeTitlecase#1{\use:c{MakeTitlecase~}{#1}} +\keys_define:nn { __kernel } + { + lang .str_set:N = \reserved@a , + locale .str_set:N = \reserved@a + } +\cs_new_protected:Npn \@@text@case@aux #1#2#3 + { + \cs_set_nopar:Npn \reserved@a { } + \tl_if_blank:nTF {#2} + { \@@text@case@aux@ } + { \keys_set:nn { __kernel } {#2} } + \use:c { text_ #1 case:Vn } \reserved@a {#3} + } +\cs_new_protected:Npn \@@text@case@aux@ { } +\tl_gput_right:Nn \@kernel@after@begindocument + { + \@ifpackageloaded { babel } + { + \@ifpackagelater { babel } { 2020-01-15 } + { + \cs_gset_protected:Npn \@@text@case@aux@ + { + \str_set:Nx \reserved@a + { \localeinfo* { tag.bcp47 } } + } + } + { } + } + { } + } +\exp_args_generate:n { cnx } +% \end{macrocode} +% The odd use of \emph{three} spaces here is needed as \pkg{ltcmd} uses the +% name with one and two spaces to give a `friendly' error message for a runaway +% argument: that means we can't use it here. +% \begin{macrocode} +\cs_set_protected:Npn \reserved@a #1 + { + \cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V } + \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2 + { \exp_not:N \@@text@case@aux { \str_lowercase:n {#1} } {##1} {##2} } + \ExpandArgs { cnx } \NewExpandableDocumentCommand + { Make#1case } + { O{} +m } + { \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} } + } +\reserved@a { Upper } +\reserved@a { Lower } +\reserved@a { Title } % \end{macrocode} % % \changes{v2.2u}{2022/06/02}{Add \cs{NoCaseChange}} diff --git a/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx b/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx index 88f9315f8a3..edf12f7cb25 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltkeys.dtx @@ -33,7 +33,7 @@ %<*driver> % \fi \ProvidesFile{ltkeys.dtx} - [2022/08/21 v1.0k LaTeX Kernel (Keyval options)] + [2022/10/22 v1.0l LaTeX Kernel (Keyval options)] % \iffalse \documentclass{l3doc} \GetFileInfo{ltkeys.dtx} @@ -209,6 +209,8 @@ % \begin{macro}{\@@_options_aux:n} % \changes{v1.0b}{2022/01/15} % {Clear option list in end-of-package hook} +% \changes{v1.0l}{2022/10/20} +% {Define key option handler in \pkg{ltkeys}} % \changes{v1.0i}{2022/07/05}{Support \cs{CurrentOption}} % \begin{macro}{\@@_options_end:} % The main function calls functions to collect up the global and local @@ -225,7 +227,8 @@ { \@@_options_expand_module:Nn \@@_options_aux:n {#1} } \cs_new_protected:Npn \@@_options_aux:n #1 { - \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#1} + \cs_gset_protected:cpn { opt@handler@\@currname.\@currext } + { \ProcessKeyOptions [ #1 ] } \cs_set_protected:Npn \@@_option_end: { } \clist_clear:N \l_@@_options_clist \@@_options_global:n {#1} @@ -294,6 +297,7 @@ % \begin{macro}{\@@_options_class:nnn} % \changes{v1.0h}{2022/06/20}{New function} % \changes{v1.0i}{2022/07/05}{Correct naming of raw class options storage} +% \changes{v1.0l}{2022/10/22}{Correct handling of unused option list} % For classes, each option (stripped of any content after |=|) % is checked for existence as a key. If found, the option is added to % the combined list for processing. On the other hand, unused options @@ -323,11 +327,12 @@ \cs_new_protected:Npn \@@_options_class:nnn #1#2#3 { \keys_if_exist:nnTF {#3} {#1} - { \clist_put_right:Nn \l_@@_options_clist {#2} } { - \str_if_eq:eeF - { \exp_not:v { @raw@opt@ \@currname . \@currext } } - { \exp_not:V \@raw@classoptionslist } + \clist_put_right:Nn \l_@@_options_clist {#2} + \clist_remove_all:Nn \@unusedoptionlist {#1} + } + { + \clist_if_in:NnF \@unusedoptionlist {#1} { \clist_put_right:Nn \@unusedoptionlist {#1} } } } @@ -475,6 +480,7 @@ % % \begin{macro}{\@@_options_loaded:n} % \begin{macro}{\@@_options_loaded:nn} +% \changes{v1.0l}{2022/10/20}{Correct an argument for a message} % Indicates that the load-time options for a package have been processed: % once this has happened, make them unavailable either with a warning or % an error. @@ -496,11 +502,9 @@ \cs_new_protected:Npn \@@_options_loaded:nn #1#2 { \bool_if:NTF \l_@@_options_loading_bool - { - \msg_warning:nnxx { keys } { load-option-ignored } - { \use:c { opt@fam@\@currname.\@currext } } {#2} - } - { \msg_error:nnnn { keys } { load-only } {#1} {#2} } + { \msg_warning:nnnn { keys } { load-option-ignored } } + { \msg_error:nnnn { keys } { load-only } } + {#1} {#2} } % \end{macrocode} % \changes{v1.0j}{2022/07/23} diff --git a/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx b/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx index ab81c3620ae..6c66a96be0e 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltluatex.dtx @@ -28,7 +28,7 @@ \ProvidesFile{ltluatex.dtx} % %<*tex> -[2022/08/13 v1.1y +[2022/10/03 v1.2a % % LuaTeX support for plain TeX (core) %<*tex> @@ -380,7 +380,7 @@ % % \noindent % \DescribeMacro{create_callback} -% |luatexbase.create_callback(|\meta{name},meta{type},\meta{default}|)| +% |luatexbase.create_callback(|\meta{name},\meta{type},\meta{default}|)| % Defines a user defined callback. The last argument is a default % function or |false|. % @@ -389,6 +389,34 @@ % |luatexbase.call_callback(|\meta{name},\ldots|)| % Calls a user defined callback with the supplied arguments. % +% \noindent +% \DescribeMacro{declare_callback_rule} +% |luatexbase.declare_callback_rule(|\meta{name}, \meta{first}, \meta{relation}, \meta{second}|)| +% Adds an ordering constraint between two callback functions for callback \meta{name}. +% +% The kind of constraint added depends on \meta{relation}: +% \begin{description} +% \item[before] The callback function with description \meta{first} will be +% executed before the function with description \meta{second}. +% \item[after] The callback function with description \meta{first} will be +% executed after the function with description \meta{second}. +% \item[incompatible-warning] When both a callback function with description \meta{first} +% and with description \meta{second} is registered, then a warning is printed when +% the callback is executed. +% \item[incompatible-error] When both a callback function with description \meta{first} +% and with description \meta{second} is registered, then an error is printed when +% the callback is executed. +% \item[unrelated] Any previously declared callback rule between \meta{first} +% and \meta{second} gets disabled. +% \end{description} +% Every call to \texttt{declare_callback_rule} with a specific callback \meta{name} +% and descriptions \meta{first} and \meta{second} overwrites all previous calls with +% same callback and descriptions. +% +% The callback functions do not have to be registered yet when the functions is called. +% Ony the constraints for which both callback descriptions refer to callbacks +% registered at the time the callback is called will have an effect. +% % \endgroup % % \MaybeStop{} @@ -1288,8 +1316,120 @@ luatexbase.new_luafunction = new_luafunction % actual function as |func| and the identifying description as |description|. % Only callbacks with a non-empty list of functions have an entry in this % list. -% \begin{macrocode} -local callbacklist = callbacklist or { } +% +% Actually there are two tables: |realcallbacklist| directly contains the entries +% as described above while |callbacklist| only directly contains the already sorted +% entries. Other entries can be queried through |callbacklist| too which triggers a +% resort. +% +% Additionally |callbackrules| describes the ordering constraints: It contains two +% element tables with the descriptions of the constrained callback implementations. +% It can additionally contain a |type| entry indicating the kind of rule. A missing +% value indicates a normal ordering contraint. +% +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} +% \begin{macrocode} +local realcallbacklist = {} +local callbackrules = {} +local callbacklist = setmetatable({}, { + __index = function(t, name) + local list = realcallbacklist[name] + local rules = callbackrules[name] + if list and rules then + local meta = {} + for i, entry in ipairs(list) do + local t = {value = entry, count = 0, pos = i} + meta[entry.description], list[i] = t, t + end + local count = #list + local pos = count + for i, rule in ipairs(rules) do + local rule = rules[i] + local pre, post = meta[rule[1]], meta[rule[2]] + if pre and post then + if rule.type then + if not rule.hidden then + assert(rule.type == 'incompatible-warning' and luatexbase_warning + or rule.type == 'incompatible-error' and luatexbase_error)( + "Incompatible functions \"" .. rule[1] .. "\" and \"" .. rule[2] + .. "\" specified for callback \"" .. name .. "\".") + rule.hidden = true + end + else + local post_count = post.count + post.count = post_count+1 + if post_count == 0 then + local post_pos = post.pos + if post_pos ~= pos then + local new_post_pos = list[pos] + new_post_pos.pos = post_pos + list[post_pos] = new_post_pos + end + list[pos] = nil + pos = pos - 1 + end + pre[#pre+1] = post + end + end + end + for i=1, count do -- The actual sort begins + local current = list[i] + if current then + meta[current.value.description] = nil + for j, cur in ipairs(current) do + local count = cur.count + if count == 1 then + pos = pos + 1 + list[pos] = cur + else + cur.count = count - 1 + end + end + list[i] = current.value + else + -- Cycle occured. TODO: Show cycle for debugging + -- list[i] = ... + local remaining = {} + for name, entry in next, meta do + local value = entry.value + list[#list + 1] = entry.value + remaining[#remaining + 1] = name + end + table.sort(remaining) + local first_name = remaining[1] + for j, name in ipairs(remaining) do + local entry = meta[name] + list[i + j - 1] = entry.value + for _, post_entry in ipairs(entry) do + local post_name = post_entry.value.description + if not remaining[post_name] then + remaining[post_name] = name + end + end + end + local cycle = {first_name} + local index = 1 + local last_name = first_name + repeat + cycle[last_name] = index + last_name = remaining[last_name] + index = index + 1 + cycle[index] = last_name + until cycle[last_name] + local length = index - cycle[last_name] + 1 + table.move(cycle, cycle[last_name], index, 1) + for i=2, length//2 do + cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i] + end + error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length)) + end + end + end + realcallbacklist[name] = list + t[name] = list + return list + end +}) % \end{macrocode} % % Numerical codes for callback types, and name-to-value association (the @@ -1731,6 +1871,7 @@ luatexbase.call_callback=call_callback % \changes{v1.0a}{2015/09/24}{Function added} % Add a function to a callback. First check arguments. % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)} +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} % \begin{macrocode} local function add_to_callback(name, func, description) if not name or name == "" then @@ -1751,10 +1892,10 @@ local function add_to_callback(name, func, description) % Then test if this callback is already in use. If not, initialise its list % and register the proper handler. % \begin{macrocode} - local l = callbacklist[name] + local l = realcallbacklist[name] if l == nil then l = { } - callbacklist[name] = l + realcallbacklist[name] = l % \end{macrocode} % \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks} % Handle count for shared engine callbacks. @@ -1773,6 +1914,7 @@ local function add_to_callback(name, func, description) end end % \end{macrocode} +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} % Actually register the function and give an error if more than one % |exclusive| one is registered. % \begin{macrocode} @@ -1780,7 +1922,6 @@ local function add_to_callback(name, func, description) func = func, description = description, } - local priority = #l + 1 if callbacktypes[name] == exclusive then if #l == 1 then luatexbase_error( @@ -1788,25 +1929,76 @@ local function add_to_callback(name, func, description) name .. "'") end end - table.insert(l, priority, f) + table.insert(l, f) + callbacklist[name] = nil % \end{macrocode} % Keep user informed. % \begin{macrocode} luatexbase_log( - "Inserting `" .. description .. "' at position " - .. priority .. " in `" .. name .. "'." + "Inserting `" .. description .. "' in `" .. name .. "'." ) end luatexbase.add_to_callback = add_to_callback % \end{macrocode} % \end{macro} % +% \begin{macro}{declare_callback_rule} +% \changes{v1.2a}{2022/10/03}{Add function} +% Add an ordering constraint between two callback implementations +% \begin{macrocode} +local function declare_callback_rule(name, desc1, relation, desc2) + if not callbacktypes[name] or + not desc1 or not desc2 or + desc1 == "" or desc2 == "" then + luatexbase_error( + "Unable to create ordering constraint. " + .. "Correct usage:\n" + .. "declare_callback_rule(, , )" + ) + end + if relation == 'before' then + relation = nil + elseif relation == 'after' then + desc2, desc1 = desc1, desc2 + relation = nil + elseif relation == 'incompatible-warning' or relation == 'incompatible-error' then + elseif relation == 'unrelated' then + else + luatexbase_error( + "Unknown relation type in declare_callback_rule" + ) + end + callbacklist[name] = nil + local rules = callbackrules[name] + if rules then + for i, rule in ipairs(rules) do + if rule[1] == desc1 and rule[2] == desc2 or rule[1] == desc2 and rule[2] == desc1 then + if relation == 'unrelated' then + table.remove(rules, i) + else + rule[1], rule[2], rule.type = desc1, desc2, relation + end + return + end + end + if relation ~= 'unrelated' then + rules[#rules + 1] = {desc1, desc2, type = relation} + end + elseif relation ~= 'unrelated' then + callbackrules[name] = {{desc1, desc2, type = relation}} + end +end +luatexbase.declare_callback_rule = declare_callback_rule +% \end{macrocode} +% \end{macro} +% % \begin{macro}{remove_from_callback} % \changes{v1.0a}{2015/09/24}{Function added} % \changes{v1.0k}{2015/12/02}{adjust initialization of cb local (PHG)} % \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)} % \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks} % \changes{v1.1y}{2022/08/13}{Adapted code for shared\_callbacks} +% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering} % Remove a function from a callback. First check arguments. % \begin{macrocode} local function remove_from_callback(name, description) @@ -1823,7 +2015,7 @@ local function remove_from_callback(name, description) .. "remove_from_callback(, )" ) end - local l = callbacklist[name] + local l = realcallbacklist[name] if not l then luatexbase_error( "No callback list for `" .. name .. "'\n") @@ -1851,6 +2043,7 @@ local function remove_from_callback(name, description) "Removing `" .. description .. "' from `" .. name .. "'." ) if #l == 0 then + realcallbacklist[name] = nil callbacklist[name] = nil local shared = shared_callbacks[name] if shared then @@ -1876,12 +2069,12 @@ luatexbase.remove_from_callback = remove_from_callback local function in_callback(name, description) if not name or name == "" - or not callbacklist[name] + or not realcallbacklist[name] or not callbacktypes[name] or not description then return false end - for _, i in pairs(callbacklist[name]) do + for _, i in pairs(realcallbacklist[name]) do if i.description == description then return true end @@ -1898,7 +2091,7 @@ luatexbase.in_callback = in_callback % this functionality. % \begin{macrocode} local function disable_callback(name) - if(callbacklist[name] == nil) then + if(realcallbacklist[name] == nil) then callback_register(name, false) else luatexbase_error("Callback list for " .. name .. " not empty") @@ -1912,12 +2105,13 @@ luatexbase.disable_callback = disable_callback % \changes{v1.0a}{2015/09/24}{Function added} % \changes{v1.0h}{2015/11/27}{Match test in in-callback latex/4445} % List the descriptions of functions registered for the given callback. +% This will sort the list if necessary. % \begin{macrocode} local function callback_descriptions (name) local d = {} if not name or name == "" - or not callbacklist[name] + or not realcallbacklist[name] or not callbacktypes[name] then return d diff --git a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx index 429ee4d8d1a..a170ce98e10 100644 --- a/Master/texmf-dist/source/latex-dev/base/ltvers.dtx +++ b/Master/texmf-dist/source/latex-dev/base/ltvers.dtx @@ -112,10 +112,10 @@ % %\edef\latexreleaseversion %<*2ekernel|latexrelease> - {2022-11-01} + {2023-05-01} % %<*2ekernel> -\def\patch@level{-2} +\def\patch@level{-0} % \end{macrocode} % % \begin{macro}{\development@branch@name} diff --git a/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx b/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx index 363998a8538..a2b25fd3ab5 100644 --- a/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx +++ b/Master/texmf-dist/source/latex-dev/base/utf8ienc.dtx @@ -152,9 +152,9 @@ % from \texttt{"C2} to \texttt{"DF} are defined to parse for a % second octet following, the characters from \texttt{"E0} to % \texttt{"EF} are defined to parse for two more octets and finally -% the characters from \texttt{"F0} to \texttt{"F3} are defined to +% the characters from \texttt{"F0} to \texttt{"F4} are defined to % parse for three additional octets. These additional octets are -% always in the range \texttt{"80} to \texttt{"B9}. +% always in the range \texttt{"80} to \texttt{"BF}. % % Thus, when such a character is encountered in the document (so % long as expansion is not prohibited) a defined number of diff --git a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx index 2a1e2a8d5eb..9bc4969b2c9 100644 --- a/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx +++ b/Master/texmf-dist/source/latex-dev/firstaid/latex2e-first-aid-for-external-files.dtx @@ -111,8 +111,8 @@ % \end{macrocode} % % \begin{macrocode} -\def\LaTeXFirstAidDate{2022/06/23} -\def\LaTeXFirstAidVersion{v1.0s} +\def\LaTeXFirstAidDate{2022/10/29} +\def\LaTeXFirstAidVersion{v1.0u} % \end{macrocode} % % \begin{macrocode} @@ -340,8 +340,6 @@ % }% %} % \end{macrocode} -% -% % % \subsection{The \pkg{dinbrief} class first aid} % @@ -406,6 +404,12 @@ \ExplSyntaxOff % \end{macrocode} % +% \subsection{The \pkg{babel} package} +% +% Turn off the \pkg{babel} hack. +% \begin{macrocode} +\AddToHook{file/babel.sty/before}[firstaid]{\def\BabelCaseHack{}} +% \end{macrocode} % % \begin{macrocode} % diff --git a/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx b/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx index 2341e71e284..5dc482e38e3 100644 --- a/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx +++ b/Master/texmf-dist/source/latex-dev/graphics/mathcolor.dtx @@ -14,8 +14,8 @@ %%% From File: mathcolor.dtx % % \begin{macrocode} -\def\mathcolorversion{v1.0b} -\def\mathcolordate{2022/01/28} +\def\mathcolorversion{v1.0c} +\def\mathcolordate{2022/07/25} % \end{macrocode} %<*driver> \documentclass{l3doc} @@ -39,9 +39,6 @@ % % % \fi - - - % % \title{Providing color in math\thanks{This file has version % \mathcolorversion\ dated \mathcolordate, \copyright\ \LaTeX\ @@ -124,7 +121,6 @@ % and achieve the same effect: % \[ \mathcolor{red}{\int}\limits_0^1 \textrm{ or } % \mathcolor{red}{\int\limits}_0^1 \] - % % % \MaybeStop{\setlength\IndexMin{200pt} \PrintIndex } @@ -163,7 +159,8 @@ % second argument (like \cs{textcolor}, but without spacing % problems in math). % \begin{macrocode} -\DeclareDocumentCommand \mathcolor { o m m } { +\DeclareDocumentCommand \mathcolor { o m m } + { % \end{macrocode} % The \cs{mathcolor} is only supported in math mode because in text % mode it has problems scanning away a space after it, for example. @@ -173,13 +170,13 @@ % math alphabets, but the message it gives is fine. % \changes{v1.0b}{2022/01/28}{Restrict command to math mode} % \begin{macrocode} - \mode_if_math:F { \non@alpherr {\mathcolor\space} } + \mode_if_math:F { \non@alpherr {\mathcolor\space} } % \end{macrocode} % First real action is to save the current color value on a stack % (needed if the command is nested or contains some further color % changes with \cs{color} inside). % \begin{macrocode} - \seq_gpush:No \g_@@_seq \current@color + \seq_gpush:No \g_@@_seq \current@color % \end{macrocode} % Then we switch to the new color, but we do not want to reset the % color after the group (which is done by \cs{color} using @@ -189,7 +186,7 @@ % \cs{use_none:n} which gobbles the \cs{reset@color} added by % \cs{color} with \cs{aftergroup}. % \begin{macrocode} - \group_insert_after:N \use_none:n + \group_insert_after:N \use_none:n % \end{macrocode} % Switching the color is also slightly suboptimal, because % depending on whether or not we have a \meta{model} argument, we @@ -197,11 +194,11 @@ % going low-level here is not an option as we need to support % different color packages and their internals are not identical. % \begin{macrocode} - \IfValueTF{#1} { \color[#1]{#2} }{ \color{#2} } + \IfValueTF {#1} { \color[#1]{#2} } { \color{#2} } % \end{macrocode} % Then comes the math material we want to see colored: % \begin{macrocode} - #3 + #3 % \end{macrocode} % After that we need to reset the color ourselves (without a group % that does it for us), i.e., popping the saved color from our @@ -209,8 +206,8 @@ % separate command (which in fact needs to be called several times, % so inlining the code wouldn't be possible. % \begin{macrocode} - \@@_scan_for_scripts:w -} + \@@_scan_for_scripts:w + } % \end{macrocode} % \end{macro} % @@ -223,29 +220,57 @@ % \cs{mathop} in which case the sub and superscripts may be % attached as \cs{limits} instead of after the material. All cases % need separate treatment. +% And we need to watch out for an upcoming \verb=&= and avoid +% prematurely triggering the end of an alignment cell. +% \changes{v1.0c}{2022/07/25}{Avoid ending an alignment cell +% prematurely when hitting an \texttt{\&} during +% scanning (gh/901)} % \begin{macrocode} -\cs_new_protected:Npn \@@_scan_for_scripts:w { +\cs_new_protected:Npn \@@_scan_for_scripts:w + { % \end{macrocode} -% We therefore first parse for a \cs{c_math_subscript_token} -% ignoring (dropping) any spaces and \cs{relax} as \TeX{} would -% do. We do this with expansion so that hidden sub or superscripts +% We need to look at what follows \cs{mathcolor}, and we need to do +% that ignoring (and dropping) any spaces and \cs{relax} as \TeX{} +% would do in normal math processing (for example before a subscript +% token). We do this with expansion so that hidden sub or superscripts % in macros are still found as long as the macros are expandable. % \begin{macrocode} - \@@_peek_catcode_ignore_filler_expand:NTF \c_math_subscript_token -% \end{macrocode} -% If we found that character we call a function that handles sub or -% superscripts. -% \begin{macrocode} - { \@@_handle_scripts:Nw } -% \end{macrocode} -% Otherwise check if this token we peeked at (which is now stored -% in \cs{l_peek_token} is a superscript token. -% \begin{macrocode} - { \token_if_math_superscript:NTF \l_peek_token -% \end{macrocode} -% If found we call the sub/superscript handler. -% \begin{macrocode} - { \@@_handle_scripts:Nw } + \peek_remove_filler:n + { +% \end{macrocode} +% To avoid problems hitting on \verb=&= we start with a +% \cs{group_align_safe_begin:}. That has to be ended with +% \cs{group_align_safe_end:} when the +% danger (aka scanning) is over, which, due to the branching below, happens at +% four different points, i.e., when the \cs{mathcolor} is +% \begin{enumerate} +% \item +% followed by a \enquote{normal} token; +% \item +% followed by a braced sub/superscript; +% \item +% followed by an unbraced sub/superscript; +% \item +% followed by one of the \cs{limits} primitives. +% \end{enumerate} +% In each case we have to end the align safe group and we mark the +% points below in the code for easy reference. +% \begin{macrocode} + \group_align_safe_begin: +% \end{macrocode} +% We first parse for \cs{c_math_subscript_token} or +% \cs{c_math_superscript_token}. +% After \cs{peek_remove_filler:n} is done, it sets \cs{l_peek_token} +% equal to the next non-filler token, so we can avoid unnecessary +% work and just compare that. If either of the tokens is found, call +% \cs{@@_handle_scripts:Nw}: +% \begin{macrocode} + \token_case_catcode:NnTF \l_peek_token + { + \c_math_subscript_token { } + \c_math_superscript_token { } + } + { \@@_handle_scripts:Nw } % \end{macrocode} % Otherwise we check if it was any of the limit operation % primitives. If that is the case, e.g., if we have a situation @@ -256,45 +281,59 @@ % we have to move it directly after the \cs{int} to ensure there % is no color reset between the operator and the \cs{limits} command. % \begin{macrocode} - { \token_case_meaning:NnTF \l_peek_token { - \limits { \limits } - \nolimits { \nolimits } - \displaylimits { \displaylimits } - } + \token_case_meaning:NnTF \l_peek_token + { + \limits { \limits } + \nolimits { \nolimits } + \displaylimits { \displaylimits } + } % \end{macrocode} % Once that is done, we have to get rid of the token we peeked at % and then restart scanning for sub or superscripts. Given that % \cs{@@_scan_for_scripts:w} expands while scanning the simplest -% solution is to add \cs{use_none:n} in front of the peeked at token. +% solution is to add \cs{use_none:n} in front of the peeked at +% token. +% +% Here we end the align safe group and +% \cs{@@_scan_for_scripts:w} will start a new one. % \begin{macrocode} - { \@@_scan_for_scripts:w \use_none:n } + { + \group_align_safe_end: % case 4 + \@@_scan_for_scripts:w \use_none:n + } % \end{macrocode} -% If it was one of these we look for a \texttt{'} and if found remove it and +% If it was not one of these we look for a \texttt{'} and if found remove it and % replace it by its expansion. The reason we have to do this (and % not rely on the earlier peeking to expand for us is the fact % that \texttt{'} is only ``math active'' and that doesn't expand % under \cs{expanded} or \cs{expandafter}. % \begin{macrocode} - { \peek_meaning_remove:NTF ' - { \@@_handle_scripts:Nw ^\c_group_begin_token \prim@s } + { + \token_if_eq_meaning:NNTF \l_peek_token ' + { + \@@_handle_scripts:Nw ^ + \c_group_begin_token + \exp_after:wN \prim@s \use_none:n + } % \end{macrocode} % If it is anything else we finish off which means we reset the % color (because we prevented that before to happen automatically % after the next group) and pop the color stack setting \cs{current@color}. % \begin{macrocode} - { \reset@color - \seq_gpop:NN \g_@@_seq \current@color - } + { + \group_align_safe_end: % case 1 + \reset@color + \seq_gpop:NN \g_@@_seq \current@color + } + } } } - } -} + } % \end{macrocode} % \end{macro} - - - +% +% % \begin{macro}{\@@_handle_scripts:Nw} % The tricky part of handling sub and superscripts is that we have % to reset color to the one that is on the stack but reset it back @@ -306,7 +345,8 @@ % sign, and superscript. So technically the superscript comes first % and the \cs{sum} that should get colored red is the middle. % \begin{macrocode} -\cs_new_protected:Npn \@@_handle_scripts:Nw #1 { +\cs_new_protected:Npn \@@_handle_scripts:Nw #1 + { % \end{macrocode} % The argument is either \verb=^= or \verb=_=, so we execute it and % explicitly open two \verb={= groups. We need two because color @@ -329,7 +369,7 @@ %\begin{verbatim} % \reset@color } \@@_scan_for_scripts:w %\end{verbatim} -% The \cs{_@@_scan_for_scripts:w} then retakes control and initiates +% The \cs{@@_scan_for_scripts:w} then retakes control and initiates % parsing for another sub or superscript. % \begin{macrocode} \group_insert_after:N \c_group_end_token @@ -341,76 +381,28 @@ % already supplied the outer one already. In that case we drop % it. Otherwise we have an unbraced single token sub or superscript % which means we are missing a closing \verb=}= at the end and need -% to account for that: this is done in \cs{_@@_handle_unbraced_script:N}. -% \begin{macrocode} - \@@_peek_catcode_ignore_filler_expand:NTF \c_group_begin_token - { \peek_catcode_remove:NT \c_group_begin_token { } } - { \@@_handle_unbraced_script:N } - }% \end{macrocode} -% \end{macro} - - -% \begin{macro}{\@@_handle_unbraced_script:N} -% All we have to do here is to add the final closing brace. -% \begin{macrocode} -\cs_new_protected:Npn \@@_handle_unbraced_script:N #1 { - #1 \c_group_end_token } -% \end{macrocode} -% \end{macro} -% -% -% -% \subsection{Utility function for the peek module} -% -% This peek is expanding and ignores spaces and \cs{relax} (even -% though the name doesn't say so) -% but \cs{relax} is usually allowed in such places where we so it -% may not be bad to have it in this way in general --- maybe this -% should move to expl3 peek functions (or otherwise the naming -% should perhaps be adjusted). -% -% -% \begin{macrocode} -\tl_new:N \l_@@_peek_tmp_tl -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_peek_catcode_ignore_filler_expand:NTF #1#2#3 - { - \tl_set:Nn \l_@@_peek_tmp_tl - { \token_if_eq_catcode:NNTF \l_peek_token #1 {#2} {#3} } - \@@_peek_expand:w - } -% \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_peek_expand:w - { - \exp_after:wN \peek_catcode_remove:NTF - \exp_after:wN \c_space_token - \exp_after:wN \@@_peek_test_expand:w - \exp_after:wN \@@_peek_test_relax:w - \exp:w \exp_end_continue_f:w - } -% \end{macrocode} +% to account for that: this is done in false branch by +% \cs{use_ii_i:nn}. % +% After scanning for a brace all scanning is done, so here are the +% other two points where we have to end the align safe group (in +% the true and false case). % \begin{macrocode} -\cs_new_protected:Npn \@@_peek_test_expand:w - { - \token_if_expandable:NTF \l_peek_token - { \@@_peek_expand:w } - { \l_@@_peek_tmp_tl } + \peek_remove_filler:n + { + \token_if_eq_meaning:NNTF \l_peek_token \c_group_begin_token + { + \group_align_safe_end: % case 2 + \peek_catcode_remove:NT \c_group_begin_token { } + } + { + \exp_after:wN \group_align_safe_end: % case 3 + \use_ii_i:nn \c_group_end_token + } + } } % \end{macrocode} -% -% \begin{macrocode} -\cs_new_protected:Npn \@@_peek_test_relax:w - { - \peek_meaning_remove:NTF \scan_stop: - { \@@_peek_expand:w } - { \@@_peek_test_expand:w } - } -% \end{macrocode} +% \end{macro} % % \begin{macrocode} %<@@=> @@ -424,7 +416,6 @@ % \Finale % % - %%%%%%%%%%%%%%%% \endinput %%%%%%%%%%%%%%%% diff --git a/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx b/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx index 330ae7b0cc8..6fe7ff6955a 100644 --- a/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx +++ b/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-footnotes.dtx @@ -403,7 +403,7 @@ % \subsection{File declaration} % \begin{macrocode} \ProvidesFile{latex-lab-footnotes.ltx} - [2022-03-10 v0.6a changes to the footnote interfaces] + [2022-07-22 v0.6b changes to the footnote interfaces] % \end{macrocode} % % \begin{macrocode} @@ -903,9 +903,11 @@ % % \subsection{Document-level commands} % +% \changes{v0.6b}{2022/07/22}{Make mandatory arguments of \cs{footnote} +% and \cs{footnotetext} long (gh863)} % \begin{macrocode} -\DeclareDocumentCommand\footnotetext {om} { +\DeclareDocumentCommand\footnotetext {o+m} { \fnote_set_fnmark:nn {#1} \@mpfn \@footnotetext {#2} } @@ -914,7 +916,7 @@ %------------------------------------- -\DeclareDocumentCommand\footnote {om} { +\DeclareDocumentCommand\footnote {o+m} { \fnote_step_fnmark:nn {#1} \@mpfn \cs_set_eq:NN \@@_footnotemark_finish: \prg_do_nothing: \@footnotemark diff --git a/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx b/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx deleted file mode 100644 index 090e6c91a4f..00000000000 --- a/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab-prototype.dtx +++ /dev/null @@ -1,827 +0,0 @@ -% \iffalse meta-comment -% -%% File: latex-lab-prototype.dtx -% -% Copyright (C) 1999 Frank Mittelbach, Chris Rowley, David Carlisle -% (C) 2004-2010 Frank Mittelbach, The LaTeX Project -% (C) 2011-2022 The LaTeX Project -% -% It may be distributed and/or modified under the conditions of the -% LaTeX Project Public License (LPPL), either version 1.3c of this -% license or (at your option) any later version. The latest version -% of this license is in the file -% -% https://www.latex-project.org/lppl.txt -% -% This file is part of the "latex-lab bundle" (The Work in LPPL) -% and all files in that bundle must be distributed together. -% -% ----------------------------------------------------------------------- -% -% The development version of the bundle can be found at -% -% https://github.com/latex3/latex2e -% -% for those people who are interested. -% -%<*driver> -\documentclass[full]{l3doc} -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -% -% \fi -% -% \title{^^A -% The \textsf{latex-lab-prototype} package\\ Prototype document functions^^A -% } -% -% \author{^^A -% The \LaTeX{} Project\thanks -% {^^A -% E-mail: -% \href{mailto:latex-team@latex-project.org} -% {latex-team@latex-project.org}^^A -% }^^A -% } -% -% \date{Released 2022-03-09} -% -% \maketitle -% -% \tableofcontents -% -% \bigskip -% -% \begin{documentation} -% -% There are three broad \enquote{layers} between putting down ideas into -% a source file and ending up with a typeset document. These layers of -% document writing are -% \begin{enumerate} -% \item authoring of the text with mark-up; -% \item document layout design; -% \item implementation (with \TeX{} programming) of the design. -% \end{enumerate} -% We write the text as an author, and we see the visual output of the design -% after the document is generated; the \TeX{} implementation in the middle is -% the glue between the two. -% -% \LaTeX{}'s greatest success has been to standardise a system of mark-up that -% balances the trade-off between ease of reading and ease of writing to suit -% almost all forms of technical writing. It's -% other original strength was a good background in typographical design; while -% the standard \LaTeXe{} classes look somewhat dated now in terms of their -% visual design, their typography is generally sound. (Barring the occasional -% minor faults.) -% -% However, \LaTeXe{} has always lacked a standard approach to customising -% the visual design of a document. Changing the looks of the standard classes -% involved either: -% \begin{itemize} -% \item Creating a new version of the implementation code of the class and -% editing it. -% \item Loading one of the many packages to customise certain elements of -% the standard classes. -% \item Loading a completely different document class, such as -% \textsf{KOMA-Script} or \textsf{memoir}, that allows easy customisation. -% \end{itemize} -% All three of these approaches have their drawbacks and learning curves. -% -% The idea behind this module is to cleanly separate the three layers -% introduced at the beginning of this section, so that document authors who -% are not programmers can easily change the design of their documents. -% The approach here also makes it easier for \LaTeX{} programmers to provide -% their own customisations on top of a pre-existing class. -% -% \section{What is a document?} -% -% Besides the textual content of the words themselves, the source file -% of a document contains mark-up elements that add structure to the -% document. These elements include sectional divisions, figure/table -% captions, lists of various sorts, theorems/proofs, and so on. -% The list will be different for every document that can be written. -% -% Each element can be represented logically without worrying about the -% formatting, with mark-up such as \cs{section}, \cs{caption}, -% |\begin{enumerate}| and so on. The output of each one of these -% document elements will be a typeset representation of the information -% marked up, and the visual arrangement and design of these elements -% can vary widely in producing a variety of desired outcomes. -% -% For each type of document element, there may be design variations that -% contain the same sort of information but present it in slightly -% different ways. For example, the difference between a numbered and an -% unnumbered section, \cs{section} and |\section*|, or the difference -% between an itemised list or an enumerated list. -% -% There are three distinct layers in the definition of -% \enquote{a document} at this level -% \begin{enumerate} -% \item semantic elements such as the ideas of sections and lists; -% \item a set of design solutions for representing these elements -% visually; -% \item specific variations for these designs that represent the -% elements in the document. -% \end{enumerate} -% In the parlance of the template system, these are called object types, -% templates, and instances, and they are discussed below in sections -% \ref{sec:objects}, \ref{sec:templates}, and~\ref{sec:instances}, -% respectively. -% -% By formally declaring documents to be composed of mark-up elements -% grouped into objects, which are interpreted and typeset with a set of -% templates, each of which has one or more instances with which to -% compose each and every semantic unit of the text, we can cleanly -% separate the components of document construction. -% -% \section{Object types} -% \label{sec:objects} -% -% An \emph{object type} (sometimes just \enquote{object}) is an -% abstract idea of a document element that takes a fixed number of -% arguments corresponding to the information from the document author -% that it is representing. A sectioning object, for example, might take -% three inputs: \enquote{title}, \enquote{short title}, and -% \enquote{label}. -% -% Any given document class will define which object types are to be -% used in the document, and any template of a given object type can be -% used to generate an instance for the object. (Of course, different -% templates will produce different typeset representations, but the -% underlying content will be the same.) -% -% \begin{function}{\prototype_declare_object:nn} -% \begin{syntax} -% \cs{prototype_declare_object:nn} \Arg{object type} \Arg{no.~of args} -% \end{syntax} -% This function defines an \meta{object type} taking -% \meta{no.~of arguments}, where the \meta{object type} is an -% abstraction as discussed above. For example, -% \begin{verbatim} -% \prototype_declare_object:nn { sectioning } { 3 } -% \end{verbatim} -% creates an object type \enquote{sectioning}, where each use of that -% object type will need three arguments. -% -% While not formally verified the semantics of all arguments are part -% of the object declaration and need to be carefully documented in -% order to make the use of different templates for the same object -% type meaningful. -% \end{function} -% -% \section{Templates} -% \label{sec:templates} -% -% A \emph{template} is a generalised design solution for representing -% the information of a specified object type. Templates that do the same -% thing, but in different ways, are grouped together by their object type -% and given separate names. There are two important parts to a template: -% \begin{itemize} -% \item the parameters it takes to vary the design it is producing; -% \item the implementation of the design. -% \end{itemize} -% -% \begin{function}{\prototype_declare_template:nnnn} -% \begin{syntax} -% \cs{prototype_declare_template:nnnn} -% ~~\Arg{object type} \Arg{template} -% ~~\Arg{key definitions} \Arg{code} -% \end{syntax} -% A \meta{template} interface is declared for a particular -% \meta{object type}. The interface itself is -% defined by the \meta{key definitions}, which is itself a key--value list -% using the same interface as \cs{keys_define:nn}. (The keys created -% here \emph{are} managed \pkg{l3keys} in the tree -% \texttt{prototype/\meta{object}/\meta{template}}). As described below, -% the keys should be defined such that they can be set multiple times: -% first to a default value, then to a specific value for an instance -% and finally to a per-use override. -% -% The \meta{code} argument of \cs{template_declare_template:nnnn} is used -% as the replacement text for the template when it is used, either -% directly or as an instance. This may therefore accept arguments -% |#1|, |#2|, \emph{etc}.~as detailed by the \meta{number of arguments} -% taken by the object type. The template and instance key values (see -% below) are assigned before the \meta{code} is inserted. -% \end{function} -% -% \begin{function}{\prototype_declare_defaults:nnn} -% \begin{syntax} -% \cs{prototype_declare_template:nnnn} -% ~~\Arg{object type} \Arg{template} \Arg{defaults} -% \end{syntax} -% Sets the default values for each \meta{key} in a \meta{template}. When -% a template is used, these values are applied first \emph{before} those -% set by \cs{prototype_use_template:nnn} or -% \cs{prototype_declare_instance:nnnn}. If not default is given, the -% prevailing state when the template is used will apply. -% \end{function} -% -% \section{Instances} -% \label{sec:instances} -% -% After a template is defined it still needs to be put to use. The -% parameters that it expects need to be defined before it can be used in -% a document. Every time a template has parameters given to it, an -% \emph{instance} is created, and this is the code that ends up in the -% document to perform the typesetting of whatever pieces of information -% are input into it. -% -% For example, a template might say \enquote{here is a section with or -% without a number that might be centred or left aligned and print its -% contents in a certain font of a certain size, with a bit of a gap -% before and after it} whereas an instance declares \enquote{this is a -% section with a number, which is centred and set in $12\,\text{pt}$ -% italic with a $10\,\text{pt}$ skip before and a -% $12\,\text{pt}$ skip after it}. Therefore, an instance is just a -% frozen version of a template with specific settings as chosen by the -% designer. -% -% \begin{function}{\prototype_declare_instance:nnnn} -% \begin{syntax} -% \cs{prototype_declare_instance:nnnn} -% ~~\Arg{object type} \Arg{template} \Arg{instance} \Arg{parameters} -% \end{syntax} -% This function uses a \meta{template} for an \meta{object type} -% to create an \meta{instance}. The \meta{instance} will be set -% up using the \meta{parameters}, which will set some of the -% \meta{keys} in the \meta{template}. -% -% As a practical example, consider an object type for document sections -% (which might include chapters, parts, sections, \emph{etc}.), which -% is called \texttt{sectioning}. One possible template for this -% object type might be called \texttt{basic}, and one instance of this -% template would be a numbered section. The instance declaration might -% read: -% \begin{verbatim} -% \prototype_declare_instance:nnnn { sectioning } { basic } { section-num } -% { -% numbered = true , -% justification = center , -% font = \normalsize\itshape , -% before-skip = 10pt , -% after-skip = 12pt , -% } -% \end{verbatim} -% Of course, the key names here are entirely imaginary, but illustrate -% the general idea of fixing some settings. -% \end{function} -% -% \section{Document interface} -% -% After the instances have been chosen, document commands must be -% declared to use those instances in the document. -% \cs{prototype_use_instance:nn} -% calls instances directly, and this command should be used internally -% in document-level mark-up. -% -% \begin{function}{\prototype_use_instance:nn, \prototype_use_instance:nnn} -% \begin{syntax} -% \cs{prototype_use_instance:nn} -% ~~\Arg{object type} \Arg{instance} \meta{arguments} -% \cs{prototype_use_instance:nn}n -% ~~\Arg{object type} \Arg{instance} \Arg{overrides} \meta{arguments} -% \end{syntax} -% Uses an \meta{instance} of the \meta{object type}, which will require -% \meta{arguments} as determined by the number specified for the -% \meta{object type}. The \meta{instance} must have been declared -% before it can be used, otherwise an error is raised. The \texttt{nnn} -% version allows for local overrides of the instance settings using the -% additional keyval argument. -% \end{function} -% -% \begin{function}{\prototype_use_template:nnnn} -% \begin{syntax} -% \cs{prototype_use_template:nnnn} \Arg{object type} \Arg{template} -% ~~\Arg{settings} \meta{arguments} -% \end{syntax} -% Uses the \meta{template} of the specified \meta{object type}, -% applying the \meta{settings} and absorbing \meta{arguments} as -% detailed by the \meta{object type} declaration. This in effect -% is the same as creating an instance using -% \cs{template_declare_instance:nnnn} and immediately using it with -% \cs{template_use_instance:nnn}, but without the instance having any -% further existence. It is therefore useful where a template needs to -% be used once. -% \end{function} -% -% \section{Showing template information} -% -% \begin{function} -% { -% \prototype_show_template_code:nn , -% \prototype_show_template_defaults:nn , -% \prototype_show_instance_values:nn -% } -% \begin{syntax} -% \cs{prototype_show_template_code:nn} \Arg{object type} \Arg{template} -% \cs{prototype_show_template_defaults:nn} \Arg{object type} \Arg{template} -% \cs{prototype_show_instance_values:nn} \Arg{object type} \Arg{instance} -% \end{syntax} -% Show information about a declare template or instance for -% debugging purposes. -% \end{function} -% -% \section{Open questions and comparison with \pkg{xtemplate}} -% -% The approach here is modelled on that from \pkg{xtemplate}, but since it uses -% \pkg{l3keys} rather than dedicated key handling, there are some differences. -% There is also a simplification in that collections are not supported -% (because we now think that they provided the wrong kind of abstraction). -% -% The various open questions, including those linked to \pkg{xtemplate} -% concepts, are collected here. -% -% \subsection{Module name} -% -% This is currently open for ideas: traditionally \texttt{template} has -% been used. This may link to the need for both templates and instances -% (\emph{vide infra}). -% -% \subsection{Design-level names} -% -% These are currently not provided. That allows both this code and -% \pkg{xtemplate} to be loaded in the same document. We will likely want -% to decide on these names: they could for example include -% \texttt{Prototype} or \texttt{Design}, or could use the existing -% \pkg{xtemplate} if a compatibility approach can be designed. -% -% \subsection{Objects} -% -% Is this name clear? A possible alternative is `element'. -% -% \subsection{Efficiency and repetition of key setting} -% -% In the \pkg{xtemplate} implementation, keys values are stored in property -% lists before being applied. This means that when creating an instance, the -% template defaults can be replaced entirely by any instance values. In -% contrast, the approach here simply precompiles all of the template defaults, -% then appends the precompiled list from the instance. Some variables are -% therefore set twice. More importantly, this means that arbitrary code -% could be executed twice: authors need to be aware of this. -% -% \subsection{Key ordering} -% -% Linked to the previous idea, in \pkg{xtemplate} keys are set in the -% order they are declared in the setup. In contrast, using \pkg{l3keys} -% they are set in the order the keys are given in the input. Is this OK? -% -% \subsection{Setting defaults} -% -% The current approach requires setting the defaults separately from -% the key creation. That means listing keys twice. However, it also -% avoids further overloading of the keyval setup. Is this reasonable? -% -% \subsection{The need for templates and instances} -% -% In \pkg{xtemplate}, storing keys in a \texttt{prop} means that there -% is a real efficiency when creating an instance. In contrast, using -% precompiled keys here, creating a template and creating an instance -% are almost identical. Could we drop the distinction? That would then -% work well if we allowed instances to be derived from others: effectively -% the same as instances from templates, but with a `flatter' approach. -% -% \subsection{Assignment of key values} -% -% The \pkg{xtemplate} approach uses \cs{AssignTemplateKeys} to -% specify when keys are assigned. In contrast, here key assignment is -% automatic. If you look over \TeX{} Live, the only places that -% \cs{AssignTemplateKeys} is not the first thing in the code are in limited -% use cases in \pkg{enotez} and \pkg{xgalley}. In both packages, that's because -% they want to limit the scope of assignment. In \pkg{enotez} the key setting -% is placed inside a group, whereas in \pkg{xgalley} there is a -% save-and-restore approach as a group is not possible. Both of those use-cases -% could be covered in other ways: it's a question of setting up the template -% keys so they assign to an intermediate variable, then assigning those as -% necessary to the live ones for these cases. -% -% The main reason for not using \cs{AssignTemplateKeys} is that the common -% case doesn't need it. We could of course stick to an explicit-assignment -% approach, or have two variants or template-creation, etc., where assignment -% is manual in one of them. -% -% \subsection{Values from other keys} -% -% The \pkg{xtemplate} approach offers \cs{KeyValue} to pass the value of -% one key as the default for another. That relies on the fact that key -% setting is ordered (\emph{vide supra}). It also means that there is -% some code to check for this as part of key setting: it's non-trivial -% to support. The current \pkg{l3keys}-based code doesn't offer this. -% Instead one could use for example meta keys. That is a different -% interface and might occasionally be awkward. We can add some -% \texttt{.store-value:n} property to allow a \cs{keys_value:nn} approach, -% but without key ordering it might still not work in the same way. -% -% \subsection{The nature of debugging data} -% -% Due to the differences in data storage, the \pkg{xtemplate} method offers -% a richer ability to debug template internals than the one here. We can look -% at \emph{e.g.}\ tracking all keys for a template to make this easier. -% It is worth noting that much of this data is really something that -% should be part of the documentation anyway. Also, it would be trivial -% to save the raw defaults and do the `hard' processing only if asked -% to show the values (\emph{i.e.}\ using code similar to that in -% \pkg{xtemplate}). -% -% \subsection{Collections} -% -% These are not implemented at all: we likely want a new approach to -% contexts. -% -% \end{documentation} -% -% \begin{implementation} -% -% \section{\pkg{latex-lab-prototype} Implementation} -% -% \subsection{File declaration} -% \begin{macrocode} -%<*package> -\ProvidesFile{latex-lab-prototype.sty} - [2022-03-09 v0.1b Experimental prototype document functions] -% -% \end{macrocode} -% -% \begin{macrocode} -%<*2ekernel> -% \end{macrocode} -% -% \begin{macrocode} -\ExplSyntaxOn -% \end{macrocode} -% -% \subsection{\cs{keys_precompile:nnN}} -% -% \begin{macrocode} -%<@@=keys> -% \end{macrocode} -% -% This may not yet be available in \pkg{expl3} so we ensure it is set up -% here: all temporary. We just redefine those internals that need it. -% \begin{macrocode} -\tl_if_exist:NF \l_@@_precompile_tl - { - \bool_new:N \l_@@_precompile_bool - \tl_new:N \l_@@_precompile_tl - } -\cs_gset_protected:Npn \@@_precompile:n #1 - { - \bool_if:NTF \l_@@_precompile_bool - { \tl_put_right:Nn \l_@@_precompile_tl } - { \use:n } - {#1} - } -\cs_gset_protected:Npn \@@_bool_set:Nnnn #1#2#3#4 - { - \bool_if_exist:NF #1 { \bool_new:N #1 } - \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_str / true } - { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 } - \@@_cmd_set:nx { \l_keys_path_str / false } - { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 } - \@@_cmd_set_direct:nn { \l_keys_path_str / unknown } - { - \msg_error:nnx { keys } { boolean-values-only } - \l_keys_key_str - } - \@@_default_set:n { true } - } -\cs_gset_protected:Npn \@@_choice_make_aux:N #1 - { - \cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str } - { choice } - \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} } - \@@_cmd_set_direct:nn { \l_keys_path_str / unknown } - { - \msg_error:nnxx { keys } { choice-unknown } - \l_keys_path_str {##1} - } - } -\cs_gset_protected:Npn \@@_cmd_set:nn #1#2 - { \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } } -\cs_gset_protected:Npn \@@_cmd_set_direct:nn #1#2 - { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} } -\cs_gset_protected:Npn \@@_cs_set:NNpn #1#2#3# - { - \cs_set_protected:cpx { \c_@@_code_root_str \l_keys_path_str } ##1 - { - \@@_precompile:n - { #1 \exp_not:N #2 \exp_not:n {#3} {##1} } - } - \use_none:n - } -\cs_gset_protected:Npn \@@_meta_make:n #1 - { - \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str - { - \exp_after:wN \keys_set:nn \exp_after:wN - { \l_@@_module_str } {#1} - } - } -\cs_gset_protected:Npn \@@_meta_make:nn #1#2 - { - \exp_args:NV \@@_cmd_set_direct:nn - \l_keys_path_str { \keys_set:nn {#1} {#2} } - } -\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3 - { - \bool_set_true:N \l_@@_precompile_bool - \tl_clear:N \l_@@_precompile_tl - \keys_set:nn {#1} {#2} - \bool_set_false:N \l_@@_precompile_bool - \tl_set_eq:NN #3 \l_@@_precompile_tl - } -\cs_gset_protected:Npn \@@_show:Nnn #1#2#3 - { - #1 { keys } { show-key } - { \@@_trim_spaces:n { #2 / #3 } } - { - \keys_if_exist:nnT {#2} {#3} - { - \exp_args:Nnf \msg_show_item_unbraced:nn { code } - { - \exp_args:Ne \@@_show:n - { - \exp_args:Nc \cs_replacement_spec:N - { - \c_@@_code_root_str - \@@_trim_spaces:n { #2 / #3 } - } - } - } - } - } - { } { } - } -\cs_gset:Npx \@@_show:n #1 - { - \exp_not:N \@@_show:w - #1 - \tl_to_str:n { \@@_precompile:n } - #1 - \tl_to_str:n { \@@_precompile:n } - \exp_not:N \s_@@_stop - } -\use:x - { - \cs_gset:Npn \exp_not:N \@@_show:w - ##1 \tl_to_str:n { \@@_precompile:n } - ##2 \tl_to_str:n { \@@_precompile:n } - ##3 \exp_not:N \s_@@_stop - } - { - \tl_if_blank:nTF {#2} - {#1} - { \@@_show:Nw #2 \s_@@_stop } - } -\use:x - { - \cs_gset:Npn \exp_not:N \@@_show:Nw ##1##2 - \c_right_brace_str \exp_not:N \s_@@_stop - } - {#2} -% \end{macrocode} -% -% \subsection{Setup} -% -% \begin{macrocode} -%<@@=prototype> -% \end{macrocode} -% -% \begin{variable}{\l_@@_tmp_tl} -% \begin{macrocode} -\tl_new:N \l_@@_tmp_tl -% \end{macrocode} -% \end{variable} -% -% \subsection{Data structures} -% -% \begin{variable}{\l_@@_object_prop} -% \begin{macrocode} -\prop_new:N \l_@@_object_prop -% \end{macrocode} -% \end{variable} -% -% \subsection{Creating objects} -% -% \begin{macro}{\prototype_declare_object:nn, \@@_declare_object:nn} -% Although the object type is the \enquote{top level} of the template -% system, it is actually very easy to implement. All that happens is that -% the number of arguments required is recorded, indexed by the name of the -% object type. -% \begin{macrocode} -\cs_new_protected:Npn \prototype_declare_object:nn #1#2 - { - \exp_args:Nx \@@_declare_object:nn { \int_eval:n {#2} } {#1} - } -\cs_new_protected:Npn \@@_declare_object:nn #1#2 - { - \int_compare:nTF { 0 <= #1 <= 9 } - { - \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1} - \prop_put:Nnn \l_@@_object_prop {#2} {#1} - } - { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} } - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Templates and instances} -% -% \begin{variable}{\l_@@_assignments_tl} -% Used to insert the set keys. -% \begin{macrocode} -\tl_new:N \l_@@_assignments_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro}{\prototype_declare_template:nnnn} -% \begin{macro}{\prototype_declare_defaults:nnn} -% Creating a template means defining the keys, storing the defaults and -% creating the function. The defaults are done separately from the other -% parts as that fits the \pkg{l3keys} pattern but also makes it easy to -% alter that aspect without changing the core implementation. -% \begin{macrocode} -\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4 - { - \prop_get:NnNTF \l_@@_object_prop {#1} \l_@@_tmp_tl - { - \keys_define:nn { prototype / #1 / #2 } {#3} - \tl_clear_new:c { l_@@_defaults_ #1 _ #2 _tl } - \cs_generate_from_arg_count:cNnn - { @@_template_ #1 _ #2 :w } - \cs_set_protected:Npn - { \l_@@_tmp_tl } - { - \tl_use:N \l_@@_assignments_tl - #4 - } - } - { \msg_error:nnn { prototype } { unknown-object-type } {#1} } - } -\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3 - { - \cs_if_exist:cTF { @@_template_ #1 _ #2 :w } - { \tl_set:cn { l_@@_defaults_ #1 _ #2 _tl } {#3} } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -\cs_generate_variant:Nn \keys_precompile:nnN { v , nv } -% \end{macrocode} -% -% \begin{macro}{\prototype_use_template:nnn} -% \begin{macro}{\prototype_declare_instance:nnnn} -% \begin{macro}{\@@_declare_aux:nnnn} -% Using a template and creating an instance are the same thing other -% than the final step: using the template or storing the key settings. -% We do not attempt to maximise efficiency in setting, rather we have -% a clear approach in which the final assignments may have multiple -% entries. -% \begin{macrocode} -\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3 - { - \@@_declare_aux:nnnn {#1} {#2} {#3} - { \use:c { @@_template_ #1 _ #2 :w } } - } -\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4 - { - \@@_declare_aux:nnnn {#1} {#2} {#4} - { - \tl_clear_new:c { l_@@_instance_ #1 _ #3 _pars_tl } - \tl_set_eq:cN { l_@@_instance_ #1 _ #3 _pars_tl } - \l_@@_assignments_tl - \tl_clear_new:c { l_@@_instance_ #1 _ #3 _template_tl } - \tl_set:cn { l_@@_instance_ #1 _ #3 _template_tl } {#2} - } - } -\cs_new_protected:Npn \@@_declare_aux:nnnn #1#2#3#4 - { - \cs_if_exist:cTF { @@_template_ #1 _ #2 :w } - { - \keys_precompile:nvN - { prototype / #1 / #2 } - { l_@@_defaults_ #1 _ #2 _tl } - \l_@@_assignments_tl - \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l_@@_tmp_tl - \tl_put_right:NV \l_@@_assignments_tl \l_@@_tmp_tl - #4 - } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\prototype_use_instance:nn} -% \begin{macro}{\prototype_use_instance:nnn} -% Recover the values and insert the code. -% \begin{macrocode} -\cs_new_protected:Npn \prototype_use_instance:nn #1#2 - { \prototype_use_instance:nnn {#1} {#2} { } } -\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3 - { - \tl_if_exist:cTF { l_@@_instance_ #1 _ #2 _template_tl } - { - \tl_set_eq:Nc \l_@@_assignments_tl - { l_@@_instance_ #1 _ #2 _pars_tl } - \tl_if_blank:nF {#3} - { - \keys_precompile:vnN - { - prototype / #1 / - \tl_use:c { l_@@_instance_ #1 _ #2 _template_tl } - } - {#3} - \l_@@_tmp_tl - \tl_put_right:NV \l_@@_assignments_tl - \l_@@_tmp_tl - } - \use:c - { - @@_template_ #1 _ - \tl_use:c { l_@@_instance_ #1 _ #2 _template_tl } - :w - } - } - { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{Showing information} -% -% \begin{macro} -% { -% \prototype_show_template_code:nn , -% \prototype_show_template_defaults:nn , -% \prototype_show_instance_values:nn -% } -% \begin{macrocode} -\cs_new_protected:Npn \prototype_show_template_code:nn #1#2 - { - \prop_if_in:NnTF \l_@@_object_prop {#1} - { \cs_show:c { @@_template_ #1 _ #2 :w } } - { \msg_error:nnn { prototype } { unknown-object-type } {#1} } - } -\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2 - { - \cs_if_exist:cTF { @@_template_ #1 _ #2 :w } - { \tl_show:c { l_@@_defaults_ #1 _ #2 _tl } } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2 - { - \tl_if_exist:cTF { l_@@_instance_ #1 _ #2 _template_tl } - { \tl_show:c { l_@@_instance_ #1 _ #2 _pars_tl } } - { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} } - } -% \end{macrocode} -% \end{macro} -% -% \subsection{Messages} -% -% \begin{macrocode} -\msg_new:nnnn { prototype } { bad-number-of-arguments } - { Bad~number~of~arguments~for~object~type~'#1'. } - { - An~object~may~accept~between~0~and~9~arguments.\\ - You~asked~to~use~#2~arguments:~this~is~not~supported. - } -\msg_new:nnnn { prototype } { unknown-instance } - { The~instance~'#2'~of~type~'#1'~is~unknown. } - { - You~have~asked~to~use~an~instance~'#2',~ - but~this~has~not~been~created. - } -\msg_new:nnnn { prototype } { unknown-object-type } - { The~object~type~'#1'~is~unknown. } - { An~object~type~needs~to~be~declared~prior~to~using~it. } -\msg_new:nnnn { prototype } { unknown-template } - { The~template~'#2'~of~type~'#1'~is~unknown. } - { - No~interface~has~been~declared~for~a~template~ - '#2'~of~object~type~'#1'. - } -% \end{macrocode} -% -% \begin{macrocode} -\msg_new:nnn { prototype } { declare-object-type } - { Declaring~object~type~'#1'~taking~#2~argument(s). } -% \end{macrocode} -% -% \begin{macrocode} -\ExplSyntaxOff -% \end{macrocode} -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \end{implementation} diff --git a/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins b/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins index eb0b066af0e..bc668a71e1d 100644 --- a/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins +++ b/Master/texmf-dist/source/latex-dev/latex-lab/latex-lab.ins @@ -78,10 +78,5 @@ where one can also log issues in case there are any. \generate{\file{latex-lab-footmisc.ltx}{\from{latex-lab-footnotes.dtx}{footmisc}}} \generate{\file{latex-lab-footnotes.ltx}{\from{latex-lab-footnotes.dtx}{kernel}}} -% for \DocumentMetadata trials -\generate{\file{prototype-latex-lab-testphase.ltx}{\from{latex-lab-prototype.dtx}{2ekernel}}} - -% for standalone trials -\generate{\file{latex-lab-prototype.sty}{\from{latex-lab-prototype.dtx}{2ekernel}}} \endbatchfile diff --git a/Master/texmf-dist/tex/latex-dev/base/latex.ltx b/Master/texmf-dist/tex/latex-dev/base/latex.ltx index fb37f7bfdb1..b8a4e3a4c36 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latex.ltx +++ b/Master/texmf-dist/tex/latex-dev/base/latex.ltx @@ -705,8 +705,8 @@ %%% From File: ltvers.dtx \def\fmtname{LaTeX2e} \edef\fmtversion - {2022-11-01} -\def\patch@level{-2} + {2023-05-01} +\def\patch@level{-0} \edef\development@branch@name{develop \the\year-\the\month-\the\day} \iffalse \def\reserved@a#1/#2/#3\@nil{% @@ -1367,7 +1367,7 @@ \let\@iden\@firstofone \long\def\@thirdofthree#1#2#3{#3} \def\@expandtwoargs#1#2#3{% -\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +\protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} \edef\@backslashchar{\expandafter\@gobble\string\\} \def\@unexpandable@protect{\noexpand\protect\noexpand} \def\DeclareRobustCommand{\@star@or@long\declare@robustcommand} @@ -14257,7 +14257,7 @@ Type H for immediate help.}% {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% \reserved@a\reserved@b \@expl@@@filehook@clear@replacement@flag@@ - \expandafter\xdef\csname opt@\reserved@a\endcsname{% + \expandafter\protected@xdef\csname opt@\reserved@a\endcsname{% \@ifundefined{opt@\reserved@a}\@empty {\csname opt@\reserved@a\endcsname,}% \zap@space#2 \@empty}% @@ -14298,7 +14298,7 @@ Type H for immediate help.}% \@onlypreamble\OptionNotUsed \def\ProcessOptions{% \let\ds@\@empty - \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}% \@ifstar\@xprocess@ptions\@process@ptions} \@onlypreamble\ProcessOptions \def\@process@ptions{% @@ -14319,7 +14319,7 @@ Type H for immediate help.}% \ifx\@classoptionslist\relax\else \@for\CurrentOption:=\@classoptionslist\do{% \ifx\CurrentOption\@empty\else - \@ifundefined{ds@\CurrentOption}{}{% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{% \@use@ption \expandafter\let\csname ds@\CurrentOption\endcsname\@empty }% @@ -14330,7 +14330,7 @@ Type H for immediate help.}% \@onlypreamble\@xprocess@ptions \def\@process@pti@ns{% \@for\CurrentOption:=\@curroptions\do{% - \@ifundefined{ds@\CurrentOption}% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}% {\@use@ption \default@ds}% \@use@ption}% @@ -14348,7 +14348,7 @@ Type H for immediate help.}% \@expandtwoargs\@removeelement {\expandafter\@remove@eq@value\CurrentOption=\@nil}% \@unusedoptionlist\@unusedoptionlist - \csname ds@\CurrentOption\endcsname} + \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname} \@onlypreamble\@use@ption \def\ExecuteOptions#1{% \edef\@fortmp{\zap@space#1 \@empty}% @@ -14445,7 +14445,7 @@ Type H for immediate help.}% \def\@fileswith@pti@ns#1[#2]#3[#4]{% \ifx#1\@clsextension \ifx\@classoptionslist\relax - \xdef\@classoptionslist{\zap@space#2 \@empty}% + \protected@xdef\@classoptionslist{\zap@space#2 \@empty}% \gdef\@raw@classoptionslist{#2}% \def\reserved@a{% \@onefilewithoptions#3[{#2}][{#4}]#1% @@ -14480,15 +14480,13 @@ Type H for immediate help.}% \global\let\@currext#4% \@ifl@aded\@currext\@currname {% - \@ifundefined{opt@fam@\@currname.\@currext} + \@ifundefined{opt@handler@\@currname.\@currext} {\@onefilewithoptions@clashchk{#2}} {% - \expandafter\edef\csname opt@\@currname.\@currext\endcsname + \expandafter\protected@edef\csname opt@\@currname.\@currext\endcsname {\zap@space#2 \@empty}% \@namedef{@raw@opt@\@currname.\@currext}{#2}% - \expandafter\expandafter\expandafter\ProcessKeyOptions - \expandafter\expandafter\expandafter - [\csname opt@fam@\@currname.\@currext\endcsname]% + \@nameuse{opt@handler@\@currname.\@currext}% }% }% {\makeatletter @@ -14649,7 +14647,7 @@ Type H for immediate help.}% \@onlypreamble\@unknownoptionerror \def\@@unprocessedoptions{% \ifx\@currext\@pkgextension - \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \protected@edef\@curroptions{\@ptionlist{\@currname.\@currext}}% \@for\CurrentOption:=\@curroptions\do{% \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}% \fi} @@ -15031,7 +15029,8 @@ Type H for immediate help.}% { \__keys_options_expand_module:Nn \__keys_options_aux:n {#1} } \cs_new_protected:Npn \__keys_options_aux:n #1 { - \cs_gset_nopar:cpn { opt@fam@\@currname.\@currext } {#1} + \cs_gset_protected:cpn { opt@handler@\@currname.\@currext } + { \ProcessKeyOptions [ #1 ] } \cs_set_protected:Npn \__keys_option_end: { } \clist_clear:N \l__keys_options_clist \__keys_options_global:n {#1} @@ -15094,11 +15093,12 @@ Type H for immediate help.}% \cs_new_protected:Npn \__keys_options_class:nnn #1#2#3 { \keys_if_exist:nnTF {#3} {#1} - { \clist_put_right:Nn \l__keys_options_clist {#2} } { - \str_if_eq:eeF - { \exp_not:v { @raw@opt@ \@currname . \@currext } } - { \exp_not:V \@raw@classoptionslist } + \clist_put_right:Nn \l__keys_options_clist {#2} + \clist_remove_all:Nn \@unusedoptionlist {#1} + } + { + \clist_if_in:NnF \@unusedoptionlist {#1} { \clist_put_right:Nn \@unusedoptionlist {#1} } } } @@ -15173,11 +15173,9 @@ Type H for immediate help.}% \cs_new_protected:Npn \__keys_options_loaded:nn #1#2 { \bool_if:NTF \l__keys_options_loading_bool - { - \msg_warning:nnxx { keys } { load-option-ignored } - { \use:c { opt@fam@\@currname.\@currext } } {#2} - } - { \msg_error:nnnn { keys } { load-only } {#1} {#2} } + { \msg_warning:nnnn { keys } { load-option-ignored } } + { \msg_error:nnnn { keys } { load-only } } + {#1} {#2} } \msg_new:nnn { keys } { load-option-ignored } { @@ -17351,12 +17349,50 @@ Type H for immediate help.}% \lccode`\^^[=`\^^[ % oe in OT1 \fi % End of reset block for 8-bit engines \ExplSyntaxOn -\cs_new_protected_nopar:cpn{MakeUppercase~}{\text_uppercase:n} -\cs_set_nopar:Npx\MakeUppercase#1{\use:c{MakeUppercase~}{#1}} -\cs_new_protected_nopar:cpn{MakeLowercase~}{\text_lowercase:n} -\cs_set_nopar:Npx\MakeLowercase#1{\use:c{MakeLowercase~}{#1}} -\cs_new_protected_nopar:cpn{MakeTitlecase~}{\text_titlecase:n} -\cs_set_nopar:Npx\MakeTitlecase#1{\use:c{MakeTitlecase~}{#1}} +\keys_define:nn { __kernel } + { + lang .str_set:N = \reserved@a , + locale .str_set:N = \reserved@a + } +\cs_new_protected:Npn \@@text@case@aux #1#2#3 + { + \cs_set_nopar:Npn \reserved@a { } + \tl_if_blank:nTF {#2} + { \@@text@case@aux@ } + { \keys_set:nn { __kernel } {#2} } + \use:c { text_ #1 case:Vn } \reserved@a {#3} + } +\cs_new_protected:Npn \@@text@case@aux@ { } +\tl_gput_right:Nn \@kernel@after@begindocument + { + \@ifpackageloaded { babel } + { + \@ifpackagelater { babel } { 2020-01-15 } + { + \cs_gset_protected:Npn \@@text@case@aux@ + { + \str_set:Nx \reserved@a + { \localeinfo* { tag.bcp47 } } + } + } + { } + } + { } + } +\exp_args_generate:n { cnx } +\cs_set_protected:Npn \reserved@a #1 + { + \cs_generate_variant:cn { text_ \str_lowercase:n {#1} case:nn } { V } + \cs_new_protected:cpx { Make#1case \c_space_tl \c_space_tl \c_space_tl } [##1] ##2 + { \exp_not:N \@@text@case@aux { \str_lowercase:n {#1} } {##1} {##2} } + \ExpandArgs { cnx } \NewExpandableDocumentCommand + { Make#1case } + { O{} +m } + { \exp_not:c { Make#1case \c_space_tl \c_space_tl \c_space_tl } [####1] {####2} } + } +\reserved@a { Upper } +\reserved@a { Lower } +\reserved@a { Title } \cs_new_protected_nopar:Npn\AddToNoCaseChangeList {\tl_put_right:Nn \l_text_case_exclude_arg_tl} \AddToNoCaseChangeList{ \NoCaseChange } diff --git a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty index d573c3f6cca..61da7ccb865 100644 --- a/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty +++ b/Master/texmf-dist/tex/latex-dev/base/latexrelease.sty @@ -290,7 +290,7 @@ } %%% From File: ltvers.dtx \edef\latexreleaseversion - {2022-11-01} + {2023-05-01} \newif\if@includeinrelease \@includeinreleasefalse \def\IncludeInRelease#1{% @@ -1430,6 +1430,16 @@ of this package available from CTAN} \IncludeInRelease{0000/00/00}{\@carcube}{Undo: Make \@carcube long}% \def\@carcube#1#2#3#4\@nil{#1#2#3} \EndIncludeInRelease +\IncludeInRelease{2022/11/01}% + {\@expandtwoargs}{protected edef}% +\def\@expandtwoargs#1#2#3{% +\protected@edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +\EndIncludeInRelease +\IncludeInRelease{00/00/00}% + {\@expandtwoargs}{protected edef}% +\def\@expandtwoargs#1#2#3{% +\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +\EndIncludeInRelease \IncludeInRelease{2020/10/01}{\MakeRobust}{\MakeRobust}% \def\MakeRobust#1{% \count@=\escapechar @@ -14027,7 +14037,7 @@ of this package available from CTAN} {\@expl@@@filehook@resolve@file@subst@@w #3.#1\@nil}% \reserved@a\reserved@b \@expl@@@filehook@clear@replacement@flag@@ - \expandafter\xdef\csname opt@\reserved@a\endcsname{% + \expandafter\protected@xdef\csname opt@\reserved@a\endcsname{% \@ifundefined{opt@\reserved@a}\@empty {\csname opt@\reserved@a\endcsname,}% \zap@space#2 \@empty}% @@ -14093,7 +14103,7 @@ of this package available from CTAN} \ifx\@classoptionslist\relax\else \@for\CurrentOption:=\@classoptionslist\do{% \ifx\CurrentOption\@empty\else - \@ifundefined{ds@\CurrentOption}{}{% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}{}{% \@use@ption \expandafter\let\csname ds@\CurrentOption\endcsname\@empty }% @@ -14122,7 +14132,7 @@ of this package available from CTAN} {\@process@pti@ns}{Unused options issue}% \def\@process@pti@ns{% \@for\CurrentOption:=\@curroptions\do{% - \@ifundefined{ds@\CurrentOption}% + \@ifundefined{ds@\detokenize\expandafter{\CurrentOption}}% {\@use@ption \default@ds}% \@use@ption}% @@ -14156,7 +14166,7 @@ of this package available from CTAN} \@expandtwoargs\@removeelement {\expandafter\@remove@eq@value\CurrentOption=\@nil}% \@unusedoptionlist\@unusedoptionlist - \csname ds@\CurrentOption\endcsname} + \csname ds@\detokenize\expandafter{\CurrentOption}\endcsname} \EndIncludeInRelease \IncludeInRelease{0000/00/00}% {\@use@ption}{filter unused option list}% @@ -14221,7 +14231,7 @@ of this package available from CTAN} \def\@fileswith@pti@ns#1[#2]#3[#4]{% \ifx#1\@clsextension \ifx\@classoptionslist\relax - \xdef\@classoptionslist{\zap@space#2 \@empty}% + \protected@xdef\@classoptionslist{\zap@space#2 \@empty}% \gdef\@raw@classoptionslist{#2}% \def\reserved@a{% \@onefilewithoptions#3[{#2}][{#4}]#1% @@ -14313,15 +14323,13 @@ of this package available from CTAN} \global\let\@currext#4% \@ifl@aded\@currext\@currname {% - \@ifundefined{opt@fam@\@currname.\@currext} + \@ifundefined{opt@handler@\@currname.\@currext} {\@onefilewithoptions@clashchk{#2}} {% - \expandafter\edef\csname opt@\@currname.\@currext\endcsname + \expandafter\protected@edef\csname opt@\@currname.\@currext\endcsname {\zap@space#2 \@empty}% \@namedef{@raw@opt@\@currname.\@currext}{#2}% - \expandafter\expandafter\expandafter\ProcessKeyOptions - \expandafter\expandafter\expandafter - [\csname opt@fam@\@currname.\@currext\endcsname]% + \@nameuse{opt@handler@\@currname.\@currext}% }% }% {\makeatletter diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua index b59cc1484bd..1565ae7d19d 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.lua @@ -240,7 +240,107 @@ local function new_luafunction(name) return tex_count[luafunction_count_name] end luatexbase.new_luafunction = new_luafunction -local callbacklist = callbacklist or { } +local realcallbacklist = {} +local callbackrules = {} +local callbacklist = setmetatable({}, { + __index = function(t, name) + local list = realcallbacklist[name] + local rules = callbackrules[name] + if list and rules then + local meta = {} + for i, entry in ipairs(list) do + local t = {value = entry, count = 0, pos = i} + meta[entry.description], list[i] = t, t + end + local count = #list + local pos = count + for i, rule in ipairs(rules) do + local rule = rules[i] + local pre, post = meta[rule[1]], meta[rule[2]] + if pre and post then + if rule.type then + if not rule.hidden then + assert(rule.type == 'incompatible-warning' and luatexbase_warning + or rule.type == 'incompatible-error' and luatexbase_error)( + "Incompatible functions \"" .. rule[1] .. "\" and \"" .. rule[2] + .. "\" specified for callback \"" .. name .. "\".") + rule.hidden = true + end + else + local post_count = post.count + post.count = post_count+1 + if post_count == 0 then + local post_pos = post.pos + if post_pos ~= pos then + local new_post_pos = list[pos] + new_post_pos.pos = post_pos + list[post_pos] = new_post_pos + end + list[pos] = nil + pos = pos - 1 + end + pre[#pre+1] = post + end + end + end + for i=1, count do -- The actual sort begins + local current = list[i] + if current then + meta[current.value.description] = nil + for j, cur in ipairs(current) do + local count = cur.count + if count == 1 then + pos = pos + 1 + list[pos] = cur + else + cur.count = count - 1 + end + end + list[i] = current.value + else + -- Cycle occured. TODO: Show cycle for debugging + -- list[i] = ... + local remaining = {} + for name, entry in next, meta do + local value = entry.value + list[#list + 1] = entry.value + remaining[#remaining + 1] = name + end + table.sort(remaining) + local first_name = remaining[1] + for j, name in ipairs(remaining) do + local entry = meta[name] + list[i + j - 1] = entry.value + for _, post_entry in ipairs(entry) do + local post_name = post_entry.value.description + if not remaining[post_name] then + remaining[post_name] = name + end + end + end + local cycle = {first_name} + local index = 1 + local last_name = first_name + repeat + cycle[last_name] = index + last_name = remaining[last_name] + index = index + 1 + cycle[index] = last_name + until cycle[last_name] + local length = index - cycle[last_name] + 1 + table.move(cycle, cycle[last_name], index, 1) + for i=2, length//2 do + cycle[i], cycle[length + 1 - i] = cycle[length + 1 - i], cycle[i] + end + error('Cycle occured at ' .. table.concat(cycle, ' -> ', 1, length)) + end + end + end + realcallbacklist[name] = list + t[name] = list + return list + end +}) local list, data, exclusive, simple, reverselist = 1, 2, 3, 4, 5 local types = { list = list, @@ -481,10 +581,10 @@ local function add_to_callback(name, func, description) .. "add_to_callback(, , )" ) end - local l = callbacklist[name] + local l = realcallbacklist[name] if l == nil then l = { } - callbacklist[name] = l + realcallbacklist[name] = l local shared = shared_callbacks[name] if shared then shared.count = shared.count + 1 @@ -499,7 +599,6 @@ local function add_to_callback(name, func, description) func = func, description = description, } - local priority = #l + 1 if callbacktypes[name] == exclusive then if #l == 1 then luatexbase_error( @@ -507,13 +606,56 @@ local function add_to_callback(name, func, description) name .. "'") end end - table.insert(l, priority, f) + table.insert(l, f) + callbacklist[name] = nil luatexbase_log( - "Inserting `" .. description .. "' at position " - .. priority .. " in `" .. name .. "'." + "Inserting `" .. description .. "' in `" .. name .. "'." ) end luatexbase.add_to_callback = add_to_callback +local function declare_callback_rule(name, desc1, relation, desc2) + if not callbacktypes[name] or + not desc1 or not desc2 or + desc1 == "" or desc2 == "" then + luatexbase_error( + "Unable to create ordering constraint. " + .. "Correct usage:\n" + .. "declare_callback_rule(, , )" + ) + end + if relation == 'before' then + relation = nil + elseif relation == 'after' then + desc2, desc1 = desc1, desc2 + relation = nil + elseif relation == 'incompatible-warning' or relation == 'incompatible-error' then + elseif relation == 'unrelated' then + else + luatexbase_error( + "Unknown relation type in declare_callback_rule" + ) + end + callbacklist[name] = nil + local rules = callbackrules[name] + if rules then + for i, rule in ipairs(rules) do + if rule[1] == desc1 and rule[2] == desc2 or rule[1] == desc2 and rule[2] == desc1 then + if relation == 'unrelated' then + table.remove(rules, i) + else + rule[1], rule[2], rule.type = desc1, desc2, relation + end + return + end + end + if relation ~= 'unrelated' then + rules[#rules + 1] = {desc1, desc2, type = relation} + end + elseif relation ~= 'unrelated' then + callbackrules[name] = {{desc1, desc2, type = relation}} + end +end +luatexbase.declare_callback_rule = declare_callback_rule local function remove_from_callback(name, description) if not name or name == "" then luatexbase_error("Unable to remove function from callback:\n" .. @@ -528,7 +670,7 @@ local function remove_from_callback(name, description) .. "remove_from_callback(, )" ) end - local l = callbacklist[name] + local l = realcallbacklist[name] if not l then luatexbase_error( "No callback list for `" .. name .. "'\n") @@ -551,6 +693,7 @@ local function remove_from_callback(name, description) "Removing `" .. description .. "' from `" .. name .. "'." ) if #l == 0 then + realcallbacklist[name] = nil callbacklist[name] = nil local shared = shared_callbacks[name] if shared then @@ -568,12 +711,12 @@ luatexbase.remove_from_callback = remove_from_callback local function in_callback(name, description) if not name or name == "" - or not callbacklist[name] + or not realcallbacklist[name] or not callbacktypes[name] or not description then return false end - for _, i in pairs(callbacklist[name]) do + for _, i in pairs(realcallbacklist[name]) do if i.description == description then return true end @@ -582,7 +725,7 @@ local function in_callback(name, description) end luatexbase.in_callback = in_callback local function disable_callback(name) - if(callbacklist[name] == nil) then + if(realcallbacklist[name] == nil) then callback_register(name, false) else luatexbase_error("Callback list for " .. name .. " not empty") @@ -593,7 +736,7 @@ local function callback_descriptions (name) local d = {} if not name or name == "" - or not callbacklist[name] + or not realcallbacklist[name] or not callbacktypes[name] then return d diff --git a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex index f676d94a416..dc356201b06 100644 --- a/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex +++ b/Master/texmf-dist/tex/latex-dev/base/ltluatex.tex @@ -47,7 +47,7 @@ #1#2[#3]{\endgroup\immediate\write-1{File: #1 #3}} \fi \ProvidesFile{ltluatex.tex}% -[2022/08/13 v1.1y +[2022/10/03 v1.2a LuaTeX support for plain TeX (core) ] \edef\etatcatcode{\the\catcode`\@} diff --git a/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx b/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx index 6d89029bf83..ebdf7f5f99c 100644 --- a/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx +++ b/Master/texmf-dist/tex/latex-dev/firstaid/latex2e-first-aid-for-external-files.ltx @@ -34,8 +34,8 @@ %% %% The LaTeX Project and any individual authors listed elsewhere %% in this file. -\def\LaTeXFirstAidDate{2022/06/23} -\def\LaTeXFirstAidVersion{v1.0s} +\def\LaTeXFirstAidDate{2022/10/29} +\def\LaTeXFirstAidVersion{v1.0u} \ProvidesFile{latex2e-first-aid-for-external-files.ltx} [\LaTeXFirstAidDate\space \LaTeXFirstAidVersion\space LaTeX kernel fixes to external files and packages] @@ -71,6 +71,7 @@ } } \ExplSyntaxOff +\AddToHook{file/babel.sty/before}[firstaid]{\def\BabelCaseHack{}} \AddToHook{file/bigfoot.sty/after}{% \ifnum\count10<\insc@unt \global\count10=\insc@unt diff --git a/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx b/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx index c7588a3e195..6e9c12551ce 100644 --- a/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx +++ b/Master/texmf-dist/tex/latex-dev/graphics/mathcolor.ltx @@ -13,85 +13,79 @@ %% %% File: mathcolor.dtx (C) Copyright 2021-2022 %%% From File: mathcolor.dtx -\def\mathcolorversion{v1.0b} -\def\mathcolordate{2022/01/28} - - +\def\mathcolorversion{v1.0c} +\def\mathcolordate{2022/07/25} \ifcsname mathcolor\endcsname \endinput \fi \ExplSyntaxOn \seq_new:N \g__mathcolor_seq -\DeclareDocumentCommand \mathcolor { o m m } { - \mode_if_math:F { \non@alpherr {\mathcolor\space} } - \seq_gpush:No \g__mathcolor_seq \current@color - \group_insert_after:N \use_none:n - \IfValueTF{#1} { \color[#1]{#2} }{ \color{#2} } - #3 - \__mathcolor_scan_for_scripts:w -} -\cs_new_protected:Npn \__mathcolor_scan_for_scripts:w { - \__mathcolor_peek_catcode_ignore_filler_expand:NTF \c_math_subscript_token - { \__mathcolor_handle_scripts:Nw } - { \token_if_math_superscript:NTF \l_peek_token - { \__mathcolor_handle_scripts:Nw } - { \token_case_meaning:NnTF \l_peek_token +\DeclareDocumentCommand \mathcolor { o m m } + { + \mode_if_math:F { \non@alpherr {\mathcolor\space} } + \seq_gpush:No \g__mathcolor_seq \current@color + \group_insert_after:N \use_none:n + \IfValueTF {#1} { \color[#1]{#2} } { \color{#2} } + #3 + \__mathcolor_scan_for_scripts:w + } +\cs_new_protected:Npn \__mathcolor_scan_for_scripts:w + { + \peek_remove_filler:n + { + \group_align_safe_begin: + \token_case_catcode:NnTF \l_peek_token { - \limits { \limits } - \nolimits { \nolimits } - \displaylimits { \displaylimits } + \c_math_subscript_token { } + \c_math_superscript_token { } } - { \__mathcolor_scan_for_scripts:w \use_none:n } - { \peek_meaning_remove:NTF ' - { \__mathcolor_handle_scripts:Nw ^\c_group_begin_token \prim@s } - { \reset@color - \seq_gpop:NN \g__mathcolor_seq \current@color - } + { \__mathcolor_handle_scripts:Nw } + { + \token_case_meaning:NnTF \l_peek_token + { + \limits { \limits } + \nolimits { \nolimits } + \displaylimits { \displaylimits } + } + { + \group_align_safe_end: % case 4 + \__mathcolor_scan_for_scripts:w \use_none:n + } + { + \token_if_eq_meaning:NNTF \l_peek_token ' + { + \__mathcolor_handle_scripts:Nw ^ + \c_group_begin_token + \exp_after:wN \prim@s \use_none:n + } + { + \group_align_safe_end: % case 1 + \reset@color + \seq_gpop:NN \g__mathcolor_seq \current@color + } + } } } - } -} - -\cs_new_protected:Npn \__mathcolor_handle_scripts:Nw #1 { + } +\cs_new_protected:Npn \__mathcolor_handle_scripts:Nw #1 + { #1 \c_group_begin_token \c_group_begin_token \seq_get:NN \g__mathcolor_seq \current@color \set@color \group_insert_after:N \c_group_end_token \group_insert_after:N \__mathcolor_scan_for_scripts:w - \__mathcolor_peek_catcode_ignore_filler_expand:NTF \c_group_begin_token - { \peek_catcode_remove:NT \c_group_begin_token { } } - { \__mathcolor_handle_unbraced_script:N } - }% \end{macrocode} - -\cs_new_protected:Npn \__mathcolor_handle_unbraced_script:N #1 { - #1 \c_group_end_token } -\tl_new:N \l__mathcolor_peek_tmp_tl -\cs_new_protected:Npn \__mathcolor_peek_catcode_ignore_filler_expand:NTF #1#2#3 - { - \tl_set:Nn \l__mathcolor_peek_tmp_tl - { \token_if_eq_catcode:NNTF \l_peek_token #1 {#2} {#3} } - \__mathcolor_peek_expand:w - } -\cs_new_protected:Npn \__mathcolor_peek_expand:w - { - \exp_after:wN \peek_catcode_remove:NTF - \exp_after:wN \c_space_token - \exp_after:wN \__mathcolor_peek_test_expand:w - \exp_after:wN \__mathcolor_peek_test_relax:w - \exp:w \exp_end_continue_f:w - } -\cs_new_protected:Npn \__mathcolor_peek_test_expand:w - { - \token_if_expandable:NTF \l_peek_token - { \__mathcolor_peek_expand:w } - { \l__mathcolor_peek_tmp_tl } + \peek_remove_filler:n + { + \token_if_eq_meaning:NNTF \l_peek_token \c_group_begin_token + { + \group_align_safe_end: % case 2 + \peek_catcode_remove:NT \c_group_begin_token { } + } + { + \exp_after:wN \group_align_safe_end: % case 3 + \use_ii_i:nn \c_group_end_token + } + } } -\cs_new_protected:Npn \__mathcolor_peek_test_relax:w - { - \peek_meaning_remove:NTF \scan_stop: - { \__mathcolor_peek_expand:w } - { \__mathcolor_peek_test_expand:w } - } \ExplSyntaxOff - %%%%%%%%%%%%%%%% \endinput %% diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx index 560c1b98bae..66c25fc3e89 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-footnotes.ltx @@ -34,7 +34,7 @@ %% %% File: latex-lab-footnotes.dtx \ProvidesFile{latex-lab-footnotes.ltx} - [2022-03-10 v0.6a changes to the footnote interfaces] + [2022-07-22 v0.6b changes to the footnote interfaces] % not looked at yet @@ -300,13 +300,13 @@ } -\DeclareDocumentCommand\footnotetext {om} { +\DeclareDocumentCommand\footnotetext {o+m} { \fnote_set_fnmark:nn {#1} \@mpfn \@footnotetext {#2} } -\DeclareDocumentCommand\footnote {om} { +\DeclareDocumentCommand\footnote {o+m} { \fnote_step_fnmark:nn {#1} \@mpfn \cs_set_eq:NN \__fnote_footnotemark_finish: \prg_do_nothing: \@footnotemark diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty deleted file mode 100644 index cedf3ad4d1b..00000000000 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-prototype.sty +++ /dev/null @@ -1,301 +0,0 @@ -%% -%% This is file `latex-lab-prototype.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% latex-lab-prototype.dtx (with options: `2ekernel') -%% -%% This is a generated file. -%% -%% Copyright 2021,2022 LaTeX Project -%% -%% This file was generated from file(s) of the `LaTeX-lab Bundle'. -%% ------------------------------------------------------------------------------------ -%% -%% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3c -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% 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 may only be distributed together with a copy of the LaTeX -%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle' -%% without such generated files. -%% -%% The newest sources can be found below -%% -%% https://github.com/latex3/latex2e/required/latex-lab -%% -%% where one can also log issues in case there are any. -%% -%% -%% File: latex-lab-prototype.dtx -\ExplSyntaxOn -\tl_if_exist:NF \l__keys_precompile_tl - { - \bool_new:N \l__keys_precompile_bool - \tl_new:N \l__keys_precompile_tl - } -\cs_gset_protected:Npn \__keys_precompile:n #1 - { - \bool_if:NTF \l__keys_precompile_bool - { \tl_put_right:Nn \l__keys_precompile_tl } - { \use:n } - {#1} - } -\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4 - { - \bool_if_exist:NF #1 { \bool_new:N #1 } - \__keys_choice_make: - \__keys_cmd_set:nx { \l_keys_path_str / true } - { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 } - \__keys_cmd_set:nx { \l_keys_path_str / false } - { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 } - \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown } - { - \msg_error:nnx { keys } { boolean-values-only } - \l_keys_key_str - } - \__keys_default_set:n { true } - } -\cs_gset_protected:Npn \__keys_choice_make_aux:N #1 - { - \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str } - { choice } - \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} } - \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown } - { - \msg_error:nnxx { keys } { choice-unknown } - \l_keys_path_str {##1} - } - } -\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2 - { \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } } -\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2 - { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} } -\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3# - { - \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1 - { - \__keys_precompile:n - { #1 \exp_not:N #2 \exp_not:n {#3} {##1} } - } - \use_none:n - } -\cs_gset_protected:Npn \__keys_meta_make:n #1 - { - \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str - { - \exp_after:wN \keys_set:nn \exp_after:wN - { \l__keys_module_str } {#1} - } - } -\cs_gset_protected:Npn \__keys_meta_make:nn #1#2 - { - \exp_args:NV \__keys_cmd_set_direct:nn - \l_keys_path_str { \keys_set:nn {#1} {#2} } - } -\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3 - { - \bool_set_true:N \l__keys_precompile_bool - \tl_clear:N \l__keys_precompile_tl - \keys_set:nn {#1} {#2} - \bool_set_false:N \l__keys_precompile_bool - \tl_set_eq:NN #3 \l__keys_precompile_tl - } -\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3 - { - #1 { keys } { show-key } - { \__keys_trim_spaces:n { #2 / #3 } } - { - \keys_if_exist:nnT {#2} {#3} - { - \exp_args:Nnf \msg_show_item_unbraced:nn { code } - { - \exp_args:Ne \__keys_show:n - { - \exp_args:Nc \cs_replacement_spec:N - { - \c__keys_code_root_str - \__keys_trim_spaces:n { #2 / #3 } - } - } - } - } - } - { } { } - } -\cs_gset:Npx \__keys_show:n #1 - { - \exp_not:N \__keys_show:w - #1 - \tl_to_str:n { \__keys_precompile:n } - #1 - \tl_to_str:n { \__keys_precompile:n } - \exp_not:N \s__keys_stop - } -\use:x - { - \cs_gset:Npn \exp_not:N \__keys_show:w - ##1 \tl_to_str:n { \__keys_precompile:n } - ##2 \tl_to_str:n { \__keys_precompile:n } - ##3 \exp_not:N \s__keys_stop - } - { - \tl_if_blank:nTF {#2} - {#1} - { \__keys_show:Nw #2 \s__keys_stop } - } -\use:x - { - \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2 - \c_right_brace_str \exp_not:N \s__keys_stop - } - {#2} -\tl_new:N \l__prototype_tmp_tl -\prop_new:N \l__prototype_object_prop -\cs_new_protected:Npn \prototype_declare_object:nn #1#2 - { - \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1} - } -\cs_new_protected:Npn \__prototype_declare_object:nn #1#2 - { - \int_compare:nTF { 0 <= #1 <= 9 } - { - \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1} - \prop_put:Nnn \l__prototype_object_prop {#2} {#1} - } - { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} } - } -\tl_new:N \l__prototype_assignments_tl -\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4 - { - \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl - { - \keys_define:nn { prototype / #1 / #2 } {#3} - \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl } - \cs_generate_from_arg_count:cNnn - { __prototype_template_ #1 _ #2 :w } - \cs_set_protected:Npn - { \l__prototype_tmp_tl } - { - \tl_use:N \l__prototype_assignments_tl - #4 - } - } - { \msg_error:nnn { prototype } { unknown-object-type } {#1} } - } -\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3 - { - \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w } - { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_generate_variant:Nn \keys_precompile:nnN { v , nv } -\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3 - { - \__prototype_declare_aux:nnnn {#1} {#2} {#3} - { \use:c { __prototype_template_ #1 _ #2 :w } } - } -\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4 - { - \__prototype_declare_aux:nnnn {#1} {#2} {#4} - { - \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl } - \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl } - \l__prototype_assignments_tl - \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl } - \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2} - } - } -\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4 - { - \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w } - { - \keys_precompile:nvN - { prototype / #1 / #2 } - { l__prototype_defaults_ #1 _ #2 _tl } - \l__prototype_assignments_tl - \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl - \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl - #4 - } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_use_instance:nn #1#2 - { \prototype_use_instance:nnn {#1} {#2} { } } -\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3 - { - \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl } - { - \tl_set_eq:Nc \l__prototype_assignments_tl - { l__prototype_instance_ #1 _ #2 _pars_tl } - \tl_if_blank:nF {#3} - { - \keys_precompile:vnN - { - prototype / #1 / - \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl } - } - {#3} - \l__prototype_tmp_tl - \tl_put_right:NV \l__prototype_assignments_tl - \l__prototype_tmp_tl - } - \use:c - { - __prototype_template_ #1 _ - \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl } - :w - } - } - { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_show_template_code:nn #1#2 - { - \prop_if_in:NnTF \l__prototype_object_prop {#1} - { \cs_show:c { __prototype_template_ #1 _ #2 :w } } - { \msg_error:nnn { prototype } { unknown-object-type } {#1} } - } -\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2 - { - \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w } - { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2 - { - \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl } - { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } } - { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} } - } -\msg_new:nnnn { prototype } { bad-number-of-arguments } - { Bad~number~of~arguments~for~object~type~'#1'. } - { - An~object~may~accept~between~0~and~9~arguments.\\ - You~asked~to~use~#2~arguments:~this~is~not~supported. - } -\msg_new:nnnn { prototype } { unknown-instance } - { The~instance~'#2'~of~type~'#1'~is~unknown. } - { - You~have~asked~to~use~an~instance~'#2',~ - but~this~has~not~been~created. - } -\msg_new:nnnn { prototype } { unknown-object-type } - { The~object~type~'#1'~is~unknown. } - { An~object~type~needs~to~be~declared~prior~to~using~it. } -\msg_new:nnnn { prototype } { unknown-template } - { The~template~'#2'~of~type~'#1'~is~unknown. } - { - No~interface~has~been~declared~for~a~template~ - '#2'~of~object~type~'#1'. - } -\msg_new:nnn { prototype } { declare-object-type } - { Declaring~object~type~'#1'~taking~#2~argument(s). } -\ExplSyntaxOff -\endinput -%% -%% End of file `latex-lab-prototype.sty'. diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx b/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx deleted file mode 100644 index 876039967c4..00000000000 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/prototype-latex-lab-testphase.ltx +++ /dev/null @@ -1,301 +0,0 @@ -%% -%% This is file `prototype-latex-lab-testphase.ltx', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% latex-lab-prototype.dtx (with options: `2ekernel') -%% -%% This is a generated file. -%% -%% Copyright 2021,2022 LaTeX Project -%% -%% This file was generated from file(s) of the `LaTeX-lab Bundle'. -%% ------------------------------------------------------------------------------------ -%% -%% It may be distributed and/or modified under the -%% conditions of the LaTeX Project Public License, either version 1.3c -%% of this license or (at your option) any later version. -%% The latest version of this license is in -%% 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 may only be distributed together with a copy of the LaTeX -%% `LaTeX-lab Bundle'. You may however distribute the `LaTeX-lab Bundle' -%% without such generated files. -%% -%% The newest sources can be found below -%% -%% https://github.com/latex3/latex2e/required/latex-lab -%% -%% where one can also log issues in case there are any. -%% -%% -%% File: latex-lab-prototype.dtx -\ExplSyntaxOn -\tl_if_exist:NF \l__keys_precompile_tl - { - \bool_new:N \l__keys_precompile_bool - \tl_new:N \l__keys_precompile_tl - } -\cs_gset_protected:Npn \__keys_precompile:n #1 - { - \bool_if:NTF \l__keys_precompile_bool - { \tl_put_right:Nn \l__keys_precompile_tl } - { \use:n } - {#1} - } -\cs_gset_protected:Npn \__keys_bool_set:Nnnn #1#2#3#4 - { - \bool_if_exist:NF #1 { \bool_new:N #1 } - \__keys_choice_make: - \__keys_cmd_set:nx { \l_keys_path_str / true } - { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 } - \__keys_cmd_set:nx { \l_keys_path_str / false } - { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 } - \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown } - { - \msg_error:nnx { keys } { boolean-values-only } - \l_keys_key_str - } - \__keys_default_set:n { true } - } -\cs_gset_protected:Npn \__keys_choice_make_aux:N #1 - { - \cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str } - { choice } - \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} } - \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown } - { - \msg_error:nnxx { keys } { choice-unknown } - \l_keys_path_str {##1} - } - } -\cs_gset_protected:Npn \__keys_cmd_set:nn #1#2 - { \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } } -\cs_gset_protected:Npn \__keys_cmd_set_direct:nn #1#2 - { \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} } -\cs_gset_protected:Npn \__keys_cs_set:NNpn #1#2#3# - { - \cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1 - { - \__keys_precompile:n - { #1 \exp_not:N #2 \exp_not:n {#3} {##1} } - } - \use_none:n - } -\cs_gset_protected:Npn \__keys_meta_make:n #1 - { - \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str - { - \exp_after:wN \keys_set:nn \exp_after:wN - { \l__keys_module_str } {#1} - } - } -\cs_gset_protected:Npn \__keys_meta_make:nn #1#2 - { - \exp_args:NV \__keys_cmd_set_direct:nn - \l_keys_path_str { \keys_set:nn {#1} {#2} } - } -\cs_gset_protected:Npn \keys_precompile:nnN #1#2#3 - { - \bool_set_true:N \l__keys_precompile_bool - \tl_clear:N \l__keys_precompile_tl - \keys_set:nn {#1} {#2} - \bool_set_false:N \l__keys_precompile_bool - \tl_set_eq:NN #3 \l__keys_precompile_tl - } -\cs_gset_protected:Npn \__keys_show:Nnn #1#2#3 - { - #1 { keys } { show-key } - { \__keys_trim_spaces:n { #2 / #3 } } - { - \keys_if_exist:nnT {#2} {#3} - { - \exp_args:Nnf \msg_show_item_unbraced:nn { code } - { - \exp_args:Ne \__keys_show:n - { - \exp_args:Nc \cs_replacement_spec:N - { - \c__keys_code_root_str - \__keys_trim_spaces:n { #2 / #3 } - } - } - } - } - } - { } { } - } -\cs_gset:Npx \__keys_show:n #1 - { - \exp_not:N \__keys_show:w - #1 - \tl_to_str:n { \__keys_precompile:n } - #1 - \tl_to_str:n { \__keys_precompile:n } - \exp_not:N \s__keys_stop - } -\use:x - { - \cs_gset:Npn \exp_not:N \__keys_show:w - ##1 \tl_to_str:n { \__keys_precompile:n } - ##2 \tl_to_str:n { \__keys_precompile:n } - ##3 \exp_not:N \s__keys_stop - } - { - \tl_if_blank:nTF {#2} - {#1} - { \__keys_show:Nw #2 \s__keys_stop } - } -\use:x - { - \cs_gset:Npn \exp_not:N \__keys_show:Nw ##1##2 - \c_right_brace_str \exp_not:N \s__keys_stop - } - {#2} -\tl_new:N \l__prototype_tmp_tl -\prop_new:N \l__prototype_object_prop -\cs_new_protected:Npn \prototype_declare_object:nn #1#2 - { - \exp_args:Nx \__prototype_declare_object:nn { \int_eval:n {#2} } {#1} - } -\cs_new_protected:Npn \__prototype_declare_object:nn #1#2 - { - \int_compare:nTF { 0 <= #1 <= 9 } - { - \msg_info:nnnn { prototype } { declare-object-type } {#2} {#1} - \prop_put:Nnn \l__prototype_object_prop {#2} {#1} - } - { \msg_error:nnxx { prototype } { bad-number-of-arguments } {#2} {#1} } - } -\tl_new:N \l__prototype_assignments_tl -\cs_new_protected:Npn \prototype_declare_template:nnnn #1#2#3#4 - { - \prop_get:NnNTF \l__prototype_object_prop {#1} \l__prototype_tmp_tl - { - \keys_define:nn { prototype / #1 / #2 } {#3} - \tl_clear_new:c { l__prototype_defaults_ #1 _ #2 _tl } - \cs_generate_from_arg_count:cNnn - { __prototype_template_ #1 _ #2 :w } - \cs_set_protected:Npn - { \l__prototype_tmp_tl } - { - \tl_use:N \l__prototype_assignments_tl - #4 - } - } - { \msg_error:nnn { prototype } { unknown-object-type } {#1} } - } -\cs_new_protected:Npn \prototype_declare_defaults:nnn #1#2#3 - { - \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w } - { \tl_set:cn { l__prototype_defaults_ #1 _ #2 _tl } {#3} } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_generate_variant:Nn \keys_precompile:nnN { v , nv } -\cs_new_protected:Npn \prototype_use_template:nnn #1#2#3 - { - \__prototype_declare_aux:nnnn {#1} {#2} {#3} - { \use:c { __prototype_template_ #1 _ #2 :w } } - } -\cs_new_protected:Npn \prototype_declare_instance:nnnn #1#2#3#4 - { - \__prototype_declare_aux:nnnn {#1} {#2} {#4} - { - \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _pars_tl } - \tl_set_eq:cN { l__prototype_instance_ #1 _ #3 _pars_tl } - \l__prototype_assignments_tl - \tl_clear_new:c { l__prototype_instance_ #1 _ #3 _template_tl } - \tl_set:cn { l__prototype_instance_ #1 _ #3 _template_tl } {#2} - } - } -\cs_new_protected:Npn \__prototype_declare_aux:nnnn #1#2#3#4 - { - \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w } - { - \keys_precompile:nvN - { prototype / #1 / #2 } - { l__prototype_defaults_ #1 _ #2 _tl } - \l__prototype_assignments_tl - \keys_precompile:nnN { prototype / #1 / #2 } {#3} \l__prototype_tmp_tl - \tl_put_right:NV \l__prototype_assignments_tl \l__prototype_tmp_tl - #4 - } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_use_instance:nn #1#2 - { \prototype_use_instance:nnn {#1} {#2} { } } -\cs_new_protected:Npn \prototype_use_instance:nnn #1#2#3 - { - \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl } - { - \tl_set_eq:Nc \l__prototype_assignments_tl - { l__prototype_instance_ #1 _ #2 _pars_tl } - \tl_if_blank:nF {#3} - { - \keys_precompile:vnN - { - prototype / #1 / - \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl } - } - {#3} - \l__prototype_tmp_tl - \tl_put_right:NV \l__prototype_assignments_tl - \l__prototype_tmp_tl - } - \use:c - { - __prototype_template_ #1 _ - \tl_use:c { l__prototype_instance_ #1 _ #2 _template_tl } - :w - } - } - { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_show_template_code:nn #1#2 - { - \prop_if_in:NnTF \l__prototype_object_prop {#1} - { \cs_show:c { __prototype_template_ #1 _ #2 :w } } - { \msg_error:nnn { prototype } { unknown-object-type } {#1} } - } -\cs_new_protected:Npn \prototype_show_template_defaults:nn #1#2 - { - \cs_if_exist:cTF { __prototype_template_ #1 _ #2 :w } - { \tl_show:c { l__prototype_defaults_ #1 _ #2 _tl } } - { \msg_error:nnn { prototype } { unknown-template } {#1} {#2} } - } -\cs_new_protected:Npn \prototype_show_instance_values:nn #1#2 - { - \tl_if_exist:cTF { l__prototype_instance_ #1 _ #2 _template_tl } - { \tl_show:c { l__prototype_instance_ #1 _ #2 _pars_tl } } - { \msg_error:nnn { prototype } { unknown-instance } {#1} {#2} } - } -\msg_new:nnnn { prototype } { bad-number-of-arguments } - { Bad~number~of~arguments~for~object~type~'#1'. } - { - An~object~may~accept~between~0~and~9~arguments.\\ - You~asked~to~use~#2~arguments:~this~is~not~supported. - } -\msg_new:nnnn { prototype } { unknown-instance } - { The~instance~'#2'~of~type~'#1'~is~unknown. } - { - You~have~asked~to~use~an~instance~'#2',~ - but~this~has~not~been~created. - } -\msg_new:nnnn { prototype } { unknown-object-type } - { The~object~type~'#1'~is~unknown. } - { An~object~type~needs~to~be~declared~prior~to~using~it. } -\msg_new:nnnn { prototype } { unknown-template } - { The~template~'#2'~of~type~'#1'~is~unknown. } - { - No~interface~has~been~declared~for~a~template~ - '#2'~of~object~type~'#1'. - } -\msg_new:nnn { prototype } { declare-object-type } - { Declaring~object~type~'#1'~taking~#2~argument(s). } -\ExplSyntaxOff -\endinput -%% -%% End of file `prototype-latex-lab-testphase.ltx'. -- cgit v1.2.3