summaryrefslogtreecommitdiff
path: root/macros/latex-dev
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex-dev')
-rw-r--r--macros/latex-dev/base/README.md9
-rw-r--r--macros/latex-dev/base/alltt.dtx4
-rw-r--r--macros/latex-dev/base/alltt.pdfbin223861 -> 223766 bytes
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin264168 -> 264168 bytes
-rw-r--r--macros/latex-dev/base/changes.txt222
-rw-r--r--macros/latex-dev/base/classes.dtx12
-rw-r--r--macros/latex-dev/base/classes.pdfbin560294 -> 560495 bytes
-rw-r--r--macros/latex-dev/base/clsguide-historic.pdfbin415956 -> 415956 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin490200 -> 490531 bytes
-rw-r--r--macros/latex-dev/base/clsguide.tex11
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin292600 -> 292600 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin257359 -> 257359 bytes
-rw-r--r--macros/latex-dev/base/doc-code.pdfbin1078116 -> 1079325 bytes
-rw-r--r--macros/latex-dev/base/doc.dtx59
-rw-r--r--macros/latex-dev/base/doc.pdfbin756736 -> 758260 bytes
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin506341 -> 506443 bytes
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1318576 -> 1318576 bytes
-rw-r--r--macros/latex-dev/base/exscale.pdfbin204708 -> 204708 bytes
-rw-r--r--macros/latex-dev/base/fix-cm.pdfbin287727 -> 287727 bytes
-rw-r--r--macros/latex-dev/base/fntguide.pdfbin522678 -> 522678 bytes
-rw-r--r--macros/latex-dev/base/fontdef.dtx15
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin161722 -> 161722 bytes
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin222460 -> 222460 bytes
-rw-r--r--macros/latex-dev/base/inputenc.pdfbin318372 -> 318372 bytes
-rw-r--r--macros/latex-dev/base/lamport-manual.pdfbin170876 -> 170876 bytes
-rw-r--r--macros/latex-dev/base/latexrelease.dtx4
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin282095 -> 282447 bytes
-rw-r--r--macros/latex-dev/base/latexsym.pdfbin200759 -> 200759 bytes
-rw-r--r--macros/latex-dev/base/lb2.pdfbin253116 -> 252519 bytes
-rw-r--r--macros/latex-dev/base/letter.dtx5
-rw-r--r--macros/latex-dev/base/letter.pdfbin337375 -> 337660 bytes
-rw-r--r--macros/latex-dev/base/lgc2.pdfbin217659 -> 217663 bytes
-rw-r--r--macros/latex-dev/base/lppl.pdfbin132370 -> 132370 bytes
-rw-r--r--macros/latex-dev/base/ltboxes.dtx92
-rw-r--r--macros/latex-dev/base/ltclass.dtx150
-rw-r--r--macros/latex-dev/base/ltcmd.dtx156
-rw-r--r--macros/latex-dev/base/ltcmdhooks-code.pdfbin753293 -> 753718 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks-doc.pdfbin498577 -> 499315 bytes
-rw-r--r--macros/latex-dev/base/ltcmdhooks.dtx17
-rw-r--r--macros/latex-dev/base/ltdefns.dtx13
-rw-r--r--macros/latex-dev/base/ltdirchk.dtx23
-rw-r--r--macros/latex-dev/base/ltexpl.dtx16
-rw-r--r--macros/latex-dev/base/ltfilehook-code.pdfbin806388 -> 807131 bytes
-rw-r--r--macros/latex-dev/base/ltfilehook-doc.pdfbin551737 -> 552465 bytes
-rw-r--r--macros/latex-dev/base/ltfinal.dtx4
-rw-r--r--macros/latex-dev/base/ltfloat.dtx6
-rw-r--r--macros/latex-dev/base/ltfssbas.dtx11
-rw-r--r--macros/latex-dev/base/lthooks-code.pdfbin1248786 -> 1250529 bytes
-rw-r--r--macros/latex-dev/base/lthooks-doc.pdfbin758584 -> 762282 bytes
-rw-r--r--macros/latex-dev/base/lthooks.dtx55
-rw-r--r--macros/latex-dev/base/ltkeys.dtx137
-rw-r--r--macros/latex-dev/base/ltlists.dtx133
-rw-r--r--macros/latex-dev/base/ltluatex.dtx16
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin325142 -> 325889 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-code.pdfbin711363 -> 718185 bytes
-rw-r--r--macros/latex-dev/base/ltmarks-doc.pdfbin574839 -> 576257 bytes
-rw-r--r--macros/latex-dev/base/ltmarks.dtx163
-rw-r--r--macros/latex-dev/base/ltmeta.dtx9
-rw-r--r--macros/latex-dev/base/ltmiscen.dtx252
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin1394343 -> 1421596 bytes
-rw-r--r--macros/latex-dev/base/ltnews.tex2
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin169553 -> 169553 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin151773 -> 151773 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin151324 -> 151324 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin152551 -> 152551 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin175211 -> 175211 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin142867 -> 142867 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin138214 -> 138214 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin155442 -> 155442 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin130028 -> 130028 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin169433 -> 169433 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin112208 -> 112208 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin156764 -> 156764 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin182483 -> 182483 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin170722 -> 170722 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin130328 -> 130328 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin138107 -> 138107 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin166269 -> 166269 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin39839 -> 39839 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin225936 -> 225936 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin318193 -> 318193 bytes
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin245228 -> 245228 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin318026 -> 318026 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin286824 -> 286824 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin265497 -> 265497 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin205100 -> 205100 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin379733 -> 379733 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin251283 -> 251283 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin376933 -> 376950 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.tex4
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin455437 -> 455437 bytes
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin512240 -> 512240 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin526681 -> 526681 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin546540 -> 546540 bytes
-rw-r--r--macros/latex-dev/base/ltnews33.pdfbin522757 -> 522757 bytes
-rw-r--r--macros/latex-dev/base/ltnews34.pdfbin508345 -> 508345 bytes
-rw-r--r--macros/latex-dev/base/ltnews35.pdfbin563307 -> 563305 bytes
-rw-r--r--macros/latex-dev/base/ltnews35.tex2
-rw-r--r--macros/latex-dev/base/ltnews36.pdfbin517934 -> 517934 bytes
-rw-r--r--macros/latex-dev/base/ltnews37.pdfbin456933 -> 456933 bytes
-rw-r--r--macros/latex-dev/base/ltnews38.pdfbin523675 -> 523675 bytes
-rw-r--r--macros/latex-dev/base/ltnews39.pdfbin502104 -> 541775 bytes
-rw-r--r--macros/latex-dev/base/ltnews39.tex536
-rw-r--r--macros/latex-dev/base/ltnews40.pdfbin0 -> 425243 bytes
-rw-r--r--macros/latex-dev/base/ltnews40.tex406
-rw-r--r--macros/latex-dev/base/ltpara-code.pdfbin671774 -> 673220 bytes
-rw-r--r--macros/latex-dev/base/ltpara-doc.pdfbin559700 -> 560929 bytes
-rw-r--r--macros/latex-dev/base/ltpara.dtx39
-rw-r--r--macros/latex-dev/base/ltpictur.dtx3
-rw-r--r--macros/latex-dev/base/ltproperties-code.pdfbin556519 -> 557880 bytes
-rw-r--r--macros/latex-dev/base/ltproperties-doc.pdfbin431622 -> 432407 bytes
-rw-r--r--macros/latex-dev/base/ltproperties.dtx40
-rw-r--r--macros/latex-dev/base/ltshipout-code.pdfbin821264 -> 821964 bytes
-rw-r--r--macros/latex-dev/base/ltshipout-doc.pdfbin567426 -> 568121 bytes
-rw-r--r--macros/latex-dev/base/ltsockets-code.pdfbin598619 -> 599268 bytes
-rw-r--r--macros/latex-dev/base/ltsockets-doc.pdfbin481459 -> 482115 bytes
-rw-r--r--macros/latex-dev/base/ltsockets.dtx8
-rw-r--r--macros/latex-dev/base/lttab.dtx4
-rw-r--r--macros/latex-dev/base/lttagging.dtx153
-rw-r--r--macros/latex-dev/base/lttemplates.dtx133
-rw-r--r--macros/latex-dev/base/lttextcomp.dtx15
-rw-r--r--macros/latex-dev/base/ltvers.dtx4
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin219358 -> 219358 bytes
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin244141 -> 244141 bytes
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin165816 -> 165816 bytes
-rw-r--r--macros/latex-dev/base/manifest.txt62
-rw-r--r--macros/latex-dev/base/modguide.pdfbin257825 -> 257825 bytes
-rw-r--r--macros/latex-dev/base/nfssfont.pdfbin211314 -> 211314 bytes
-rw-r--r--macros/latex-dev/base/proc.pdfbin227065 -> 227065 bytes
-rw-r--r--macros/latex-dev/base/slides.pdfbin375493 -> 375493 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin233905 -> 233905 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin6245204 -> 6484831 bytes
-rw-r--r--macros/latex-dev/base/source2e.tex4
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin189054 -> 189552 bytes
-rw-r--r--macros/latex-dev/base/tlc2.pdfbin291143 -> 290257 bytes
-rw-r--r--macros/latex-dev/base/tlc3.err150
-rw-r--r--macros/latex-dev/base/tlc3.pdfbin367886 -> 385504 bytes
-rw-r--r--macros/latex-dev/base/tulm.pdfbin162773 -> 162773 bytes
-rw-r--r--macros/latex-dev/base/usrguide-historic.pdfbin439393 -> 439393 bytes
-rw-r--r--macros/latex-dev/base/usrguide.pdfbin487820 -> 487553 bytes
-rw-r--r--macros/latex-dev/base/usrguide.tex4
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin353274 -> 353915 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin146197 -> 146205 bytes
-rw-r--r--macros/latex-dev/required/amsmath/README.md2
-rw-r--r--macros/latex-dev/required/amsmath/ams-external.txt1
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.pdfbin174946 -> 174946 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amscd.pdfbin179951 -> 179951 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.pdfbin178193 -> 178193 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsldoc.pdfbin508230 -> 508230 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty6
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.dtx11
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.pdfbin420320 -> 420765 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.pdfbin140093 -> 140093 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amstext.pdfbin217504 -> 217504 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.pdfbin113560 -> 113560 bytes
-rw-r--r--macros/latex-dev/required/amsmath/changes.txt18
-rw-r--r--macros/latex-dev/required/amsmath/subeqn.pdfbin109733 -> 109733 bytes
-rw-r--r--macros/latex-dev/required/amsmath/technote.pdfbin147459 -> 147459 bytes
-rw-r--r--macros/latex-dev/required/amsmath/testmath.pdfbin454643 -> 454643 bytes
-rw-r--r--macros/latex-dev/required/graphics/README.md4
-rw-r--r--macros/latex-dev/required/graphics/changes.txt19
-rw-r--r--macros/latex-dev/required/graphics/color.dtx41
-rw-r--r--macros/latex-dev/required/graphics/color.pdfbin212212 -> 212789 bytes
-rw-r--r--macros/latex-dev/required/graphics/drivers.dtx2
-rw-r--r--macros/latex-dev/required/graphics/drivers.pdfbin286448 -> 286458 bytes
-rw-r--r--macros/latex-dev/required/graphics/epsfig.dtx8
-rw-r--r--macros/latex-dev/required/graphics/epsfig.pdfbin159999 -> 159250 bytes
-rw-r--r--macros/latex-dev/required/graphics/graphics-2017-06-25.sty4
-rw-r--r--macros/latex-dev/required/graphics/graphics.dtx77
-rw-r--r--macros/latex-dev/required/graphics/graphics.pdfbin303448 -> 303774 bytes
-rw-r--r--macros/latex-dev/required/graphics/graphicx.dtx2
-rw-r--r--macros/latex-dev/required/graphics/graphicx.pdfbin240618 -> 240629 bytes
-rw-r--r--macros/latex-dev/required/graphics/grfguide.pdfbin330986 -> 331377 bytes
-rw-r--r--macros/latex-dev/required/graphics/grfguide.tex80
-rw-r--r--macros/latex-dev/required/graphics/keyval.dtx2
-rw-r--r--macros/latex-dev/required/graphics/keyval.pdfbin239587 -> 239600 bytes
-rw-r--r--macros/latex-dev/required/graphics/lscape.dtx2
-rw-r--r--macros/latex-dev/required/graphics/lscape.pdfbin155987 -> 156001 bytes
-rw-r--r--macros/latex-dev/required/graphics/mathcolor.pdfbin475542 -> 461396 bytes
-rw-r--r--macros/latex-dev/required/graphics/rotating.dtx2
-rw-r--r--macros/latex-dev/required/graphics/rotating.pdfbin278898 -> 278759 bytes
-rw-r--r--macros/latex-dev/required/graphics/rotex.pdfbin172272 -> 172272 bytes
-rw-r--r--macros/latex-dev/required/graphics/trig.dtx6
-rw-r--r--macros/latex-dev/required/graphics/trig.pdfbin199266 -> 199303 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/CHANGELOG.md52
-rw-r--r--macros/latex-dev/required/l3kernel/README.md2
-rw-r--r--macros/latex-dev/required/l3kernel/expl3.dtx13
-rw-r--r--macros/latex-dev/required/l3kernel/expl3.pdfbin610545 -> 610528 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/interface3.pdfbin1803277 -> 1791082 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/interface3.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3basics.dtx9
-rw-r--r--macros/latex-dev/required/l3kernel/l3bitset.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3box.dtx6
-rw-r--r--macros/latex-dev/required/l3kernel/l3cctab.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3clist.dtx18
-rw-r--r--macros/latex-dev/required/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3color.dtx32
-rw-r--r--macros/latex-dev/required/l3kernel/l3debug.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3deprecation.dtx8
-rw-r--r--macros/latex-dev/required/l3kernel/l3doc.dtx48
-rw-r--r--macros/latex-dev/required/l3kernel/l3doc.pdfbin565744 -> 565497 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3docstrip.pdfbin151414 -> 151176 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3expan.dtx6
-rw-r--r--macros/latex-dev/required/l3kernel/l3file.dtx18
-rw-r--r--macros/latex-dev/required/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-functions.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp-types.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3fp.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3int.dtx64
-rw-r--r--macros/latex-dev/required/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3keys.dtx182
-rw-r--r--macros/latex-dev/required/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3names.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3news.pdfbin396223 -> 396223 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news01.pdfbin122959 -> 122959 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news02.pdfbin150919 -> 150919 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news03.pdfbin148747 -> 148747 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news04.pdfbin114754 -> 114754 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news05.pdfbin112524 -> 112524 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news06.pdfbin151591 -> 151591 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news07.pdfbin128344 -> 128344 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news08.pdfbin163484 -> 163484 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news09.pdfbin250161 -> 250161 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news10.pdfbin150302 -> 150302 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news11.pdfbin170102 -> 170102 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3news12.pdfbin205020 -> 205020 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3pdf.dtx20
-rw-r--r--macros/latex-dev/required/l3kernel/l3prefixes.csv11
-rw-r--r--macros/latex-dev/required/l3kernel/l3prefixes.pdfbin82856 -> 83152 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3prg.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3prop.dtx42
-rw-r--r--macros/latex-dev/required/l3kernel/l3quark.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3regex.dtx4
-rw-r--r--macros/latex-dev/required/l3kernel/l3seq.dtx6
-rw-r--r--macros/latex-dev/required/l3kernel/l3skip.dtx9
-rw-r--r--macros/latex-dev/required/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3str.dtx7
-rw-r--r--macros/latex-dev/required/l3kernel/l3styleguide.pdfbin296746 -> 296515 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3syntax-changes.pdfbin231577 -> 231345 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3term-glossary.pdfbin242381 -> 242147 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text-map.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3text.dtx16
-rw-r--r--macros/latex-dev/required/l3kernel/l3tl-analysis.dtx42
-rw-r--r--macros/latex-dev/required/l3kernel/l3tl-build.dtx2
-rw-r--r--macros/latex-dev/required/l3kernel/l3tl.dtx3
-rw-r--r--macros/latex-dev/required/l3kernel/l3token.dtx15
-rw-r--r--macros/latex-dev/required/l3kernel/l3unicode.dtx17
-rw-r--r--macros/latex-dev/required/l3kernel/source3.pdfbin7620398 -> 7614217 bytes
-rw-r--r--macros/latex-dev/required/l3kernel/source3.tex2
-rw-r--r--macros/latex-dev/required/l3kernel/source3body.tex19
-rw-r--r--macros/latex-dev/required/latex-lab/README.md2
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-code.pdfbin871980 -> 875416 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/blocks-doc.pdfbin486159 -> 486033 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/changes.txt76
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdfbin533350 -> 539538 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdfbin420563 -> 421072 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/documentmetadata-support.dtx34
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx6
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdfbin382077 -> 382340 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-bib.dtx10
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-bib.pdfbin383259 -> 383673 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-block.dtx94
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-block.pdfbin871980 -> 875416 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx69
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdfbin300730 -> 367986 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-float.dtx4
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-float.pdfbin426854 -> 427005 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx28
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdfbin819323 -> 820982 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx10
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-graphic.pdfbin517900 -> 517929 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-marginpar.dtx35
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-marginpar.pdfbin389702 -> 414425 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-math.dtx588
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-math.pdfbin740466 -> 777735 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdfbin355801 -> 355928 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx4
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdfbin382077 -> 372090 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx51
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-minipage.pdfbin280811 -> 282245 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx21
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-namespace.pdfbin234649 -> 235962 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdfbin389721 -> 389721 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdfbin632196 -> 632196 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-sec.dtx8
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-sec.pdfbin527096 -> 527408 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-table.dtx474
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-table.pdfbin556861 -> 572645 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx2
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-testphase.pdfbin298048 -> 298111 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-text.pdfbin307812 -> 307812 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-title.pdfbin348117 -> 348117 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdfbin296124 -> 296124 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx91
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdfbin361081 -> 376511 bytes
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc.dtx93
-rw-r--r--macros/latex-dev/required/latex-lab/latex-lab-toc.pdfbin396814 -> 410540 bytes
-rw-r--r--macros/latex-dev/required/tools/README.md2
-rw-r--r--macros/latex-dev/required/tools/afterpage.pdfbin198100 -> 198111 bytes
-rw-r--r--macros/latex-dev/required/tools/array-2016-10-06.sty4
-rw-r--r--macros/latex-dev/required/tools/array-2020-02-10.sty9
-rw-r--r--macros/latex-dev/required/tools/array-2023-11-01.sty10
-rw-r--r--macros/latex-dev/required/tools/array.dtx67
-rw-r--r--macros/latex-dev/required/tools/array.pdfbin837637 -> 862066 bytes
-rw-r--r--macros/latex-dev/required/tools/bm.pdfbin323640 -> 323653 bytes
-rw-r--r--macros/latex-dev/required/tools/calc.pdfbin370660 -> 370673 bytes
-rw-r--r--macros/latex-dev/required/tools/changes.txt71
-rw-r--r--macros/latex-dev/required/tools/dcolumn.pdfbin221038 -> 221051 bytes
-rw-r--r--macros/latex-dev/required/tools/delarray.pdfbin191058 -> 191069 bytes
-rw-r--r--macros/latex-dev/required/tools/enumerate.pdfbin215077 -> 215089 bytes
-rw-r--r--macros/latex-dev/required/tools/fileerr.pdfbin187335 -> 188448 bytes
-rw-r--r--macros/latex-dev/required/tools/fontsmpl.pdfbin146438 -> 146451 bytes
-rw-r--r--macros/latex-dev/required/tools/ftnright.pdfbin386866 -> 387756 bytes
-rw-r--r--macros/latex-dev/required/tools/hhline.pdfbin189678 -> 189689 bytes
-rw-r--r--macros/latex-dev/required/tools/indentfirst.pdfbin157352 -> 157364 bytes
-rw-r--r--macros/latex-dev/required/tools/l3sys-query.dtx6
-rw-r--r--macros/latex-dev/required/tools/l3sys-query.pdfbin482276 -> 482631 bytes
-rw-r--r--macros/latex-dev/required/tools/layout.pdfbin260278 -> 260290 bytes
-rw-r--r--macros/latex-dev/required/tools/longtable-2020-01-07.sty4
-rw-r--r--macros/latex-dev/required/tools/longtable.dtx159
-rw-r--r--macros/latex-dev/required/tools/longtable.pdfbin400149 -> 402866 bytes
-rw-r--r--macros/latex-dev/required/tools/manifest.txt10
-rw-r--r--macros/latex-dev/required/tools/multicol-2017-04-11.sty4
-rw-r--r--macros/latex-dev/required/tools/multicol-2019-10-01.sty13
-rw-r--r--macros/latex-dev/required/tools/multicol.dtx44
-rw-r--r--macros/latex-dev/required/tools/multicol.pdfbin524217 -> 525441 bytes
-rw-r--r--macros/latex-dev/required/tools/rawfonts.pdfbin138956 -> 138969 bytes
-rw-r--r--macros/latex-dev/required/tools/shellesc.pdfbin176171 -> 176184 bytes
-rw-r--r--macros/latex-dev/required/tools/showkeys-2014-10-28.sty4
-rw-r--r--macros/latex-dev/required/tools/showkeys.dtx9
-rw-r--r--macros/latex-dev/required/tools/showkeys.pdfbin252684 -> 252936 bytes
-rw-r--r--macros/latex-dev/required/tools/somedefs.pdfbin167583 -> 167594 bytes
-rw-r--r--macros/latex-dev/required/tools/tabularx.pdfbin289601 -> 289613 bytes
-rw-r--r--macros/latex-dev/required/tools/theorem.dtx3
-rw-r--r--macros/latex-dev/required/tools/theorem.pdfbin351387 -> 352129 bytes
-rw-r--r--macros/latex-dev/required/tools/tools-overview.pdfbin73673 -> 73698 bytes
-rw-r--r--macros/latex-dev/required/tools/tools-overview.tex8
-rw-r--r--macros/latex-dev/required/tools/trace.pdfbin222074 -> 222086 bytes
-rw-r--r--macros/latex-dev/required/tools/varioref-2016-02-16.sty4
-rw-r--r--macros/latex-dev/required/tools/varioref.dtx7
-rw-r--r--macros/latex-dev/required/tools/varioref.pdfbin393655 -> 393896 bytes
-rw-r--r--macros/latex-dev/required/tools/verbatim.pdfbin331587 -> 331599 bytes
-rw-r--r--macros/latex-dev/required/tools/xr-2023-07-04.sty84
-rw-r--r--macros/latex-dev/required/tools/xr.dtx229
-rw-r--r--macros/latex-dev/required/tools/xr.pdfbin170451 -> 323888 bytes
-rw-r--r--macros/latex-dev/required/tools/xspace.pdfbin257027 -> 257038 bytes
372 files changed, 5061 insertions, 1605 deletions
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index 528675aaa8..826fbac092 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2024-06-01 pre-release 2
+Release 2024-11-01 pre-release 3
Overview
--------
@@ -29,8 +29,7 @@ Documentation
Full documentation of the LaTeX system is provided by
- _LaTeX: A Document Preparation System_; Lamport, Addison-Wesley
-- _The LaTeX Companion_, 2ed; Mittelbach and Goossens with Braams, Carlisle
- and Rowley, Addison-Wesley
+- _The LaTeX Companion_, 3ed; Mittelbach and Fischer, Addison-Wesley
- _Guide to LaTeX_, 4ed; Kopka and Daly, Addison-Wesley
The distribution is described in files ending `.txt` or `.md`; briefly,
@@ -56,7 +55,7 @@ The following files contain further information:
- `ltx3info.tex` gives you some historical information about the LaTeX3
project
- `lamport-manual.err` lists errata in _LaTeX: A Document Preparation System_ (Lamport)
-- `tlc2.err` lists errata in _The LaTeX Companion_ (Mittelbach et al.)
+- `tlc3.err` lists errata in _The LaTeX Companion, 3rd edition_ (Mittelbach and Fischer)
The files `ltnews*.tex` (part of the `doc` bundle) contain the LaTeX
newsletters, the highest number being the most recent.
@@ -87,6 +86,6 @@ version 1.3c or later.
-----
-<p>Copyright (C) 1989-2023 The LaTeX Project <br />
+<p>Copyright (C) 1989-2024 The LaTeX Project <br />
<a href="http://latex-project.org/">http://latex-project.org/</a> <br />
All rights reserved.</p>
diff --git a/macros/latex-dev/base/alltt.dtx b/macros/latex-dev/base/alltt.dtx
index 4718c004b4..8fd4ac2db3 100644
--- a/macros/latex-dev/base/alltt.dtx
+++ b/macros/latex-dev/base/alltt.dtx
@@ -40,7 +40,7 @@
%<package>\ProvidesPackage{alltt}
%<driver>\ProvidesFile{alltt.drv}
%\ProvidesFile{alltt.dtx}
- [2024/02/08 v2.0g defines alltt environment]
+ [2024/07/07 v2.0g defines alltt environment]
%
%<*driver>
\documentclass{ltxdoc}
@@ -83,7 +83,7 @@
% Here are some things you may want to do in an \Lenv{alltt}
% environment:
% \begin{itemize}
-% \item Change fonts--e.g., by typing |{\em emphasized text\/}|
+% \item Change fonts--e.g., by typing |\emph{emphasized text}|
%
% \item Insert text from a file \file{foo.tex} by typing
% |\input{foo}|. Beware that each |<return>| starts a new line, so
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index 6bee508aa6..05dc79e7d4 100644
--- a/macros/latex-dev/base/alltt.pdf
+++ b/macros/latex-dev/base/alltt.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf
index 6ade9c5f60..3f6c82bdb2 100644
--- a/macros/latex-dev/base/cfgguide.pdf
+++ b/macros/latex-dev/base/cfgguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt
index 52fbd04f08..e758eebae0 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -6,6 +6,224 @@ to completeness or accuracy and it contains some references to files that are
not part of the distribution.
================================================================================
+2024-08-12 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltluatex.dtx:
+ Allow for missing version string in Lua modules (gh/1443)
+
+2024-08-12 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * letter.dtx (subsection{The generic letter commands}):
+ Alter sample address in documentation (gh/1439)
+
+2024-08-10 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * lttagging.dtx: reset flattened level in para/restore
+
+2024-07-27 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * lttagging.dtx: (subsection{Tagging support for table/tabular packages}):
+ Two sockets added to store and restore cell data when nesting tables to keep track
+ of multirow settings.
+
+2024-07-27 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * lttagging.dtx: (subsection{Paragraph sockets}): A socket and plug to restore paragraph
+ setting added.
+
+2024-07-13 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * lttagging.dtx: (subsection{Tagging sockets}): toc-related tagging sockets added.
+
+2024-07-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * lttagging.dtx (subsection{Tagging support for table/tabular packages}):
+ Sockets for \cs{cline} leaders added (tagging/134)
+
+2024-07-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltmiscen.dtx (subsection{Environments}):
+ Drop code chunks before adding them to avoid duplication in
+ rollback (gh/1407)
+
+2024-07-06 Yukai Chou <muzimuzhi@gmail.com>
+
+ * ltcmd.dtx (subsection{User functions}):
+ Trim spaces for envname before existence check (gh/1399)
+ (subsection{Declaring commands and environments}):
+ Simplify \__cmd_declare_env:nnnn, use space-trimmed envname directly
+
+2024-06-23 Yukai Chou <muzimuzhi@gmail.com>
+
+ * ltpara.dtx
+ Append \everypar toks to \g__parar_standard_everypar_tl, rollback
+ 2023/06/01 (gh/1386)
+
+2024-06-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltlists.dtx:
+ Changes to \@doendpe, \@endpefalse, and \@endpetrue for
+ new @endpe handling. \if@endpe is now a global switch and
+ migration out of groups is handled via \aftergroup
+
+ * ltmiscen.dtx (subsection{Environments}):
+ Adjust \end<space> for new @endpe handling
+
+ * ltboxes.dtx (section{\LaTeX\ Box commands}):
+ Adjust \color@endgroup for new @endpe handling
+
+2024-06-19 David Carlisle <David.Carlisle@latex-project.org>
+
+ * fontdef.dtx:
+ preload ts1cmr.fd in Unicode engines
+
+2024-06-19 Joseph Wright <Joseph.Wright@latex-project.org>
+ * ltkeys.dtx, clsguide.tex
+ Ensure only key name is stored for option handling
+
+2024-06-19 Joseph Wright <Joseph.Wright@latex-project.org>
+ * ltkeys.dtx, clsguide.tex
+ Refactor class option code
+ Add mechanism to exclude class options from package processing
+
+2024-06-17 David Carlisle <David.Carlisle@latex-project.org>
+
+ * ltfssbas.dtx: set \tracinglostchars in \showhyphens. gh/1380
+
+2024-06-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * lthooks.dtx:
+ Clarify syntax of hook names and behavior of hook rules and default
+ hook rules (gh/1227 & gh/1237)
+
+2024-06-04 Yukai Chou <muzimuzhi@gmail.com>
+
+ * ltclass.dtx (section{Package/class rollback mechanism}):
+ Add new argument \pkgcls@ext for use in warning message which might
+ be raised before the classic \@currext can be set and used (gh/870)
+
+ * ltclass.dtx:
+ Extend \@cls@pkg to expand to "file" if \@currext is neither "cls"
+ nor "pkg"
+
+2024-06-04 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * doc.dtx (section{Integrating hypdoc}):
+ Use hooks to save and restore definitions when hypdoc gets loaded.
+ This way the user can still alter \PrintDescribeMacro, etc. in the preamble
+ (gh/1000)
+
+2024-06-04 Joseph Wright <Joseph.Wright@latex-project.org>
+
+ * ltluatex.dtx:
+ Mark "v" in provides_module() when logging version string
+
+2024-06-04 Yukai Chou <muzimuzhi@gmail.com>
+
+ * source2e.tex:
+ Add new module lttemplates to the documentation.
+
+ * lttemplates.dtx:
+ Fix markup typos.
+
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2024-06-01 PL1 Release
+#########################
+
+2024-06-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltboxes.dtx (section{\LaTeX\ Box commands}):
+ Always use a \vrule strut after all, but back up by a baseline
+ if already in vertical mode. Otherwise empty table p-cells will
+ not get the correct width (bug seen first with colortbl)
+
+2024-06-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * lttagging.dtx (subsection{Interface commands}):
+ Always issue a \crcr even if we are at the start of a
+ row to avoid problems with tabulary and similar code
+
+#########################
+# 2024-06-01 Release
+#########################
+
+2024-05-31 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltmarks.dtx (subsection{Allocating new mark classes}):
+ Initialize all marks with an id, use 0 when a new class is made (gh/1359)
+ (subsection{Placing and retrieving marks}):
+ Remove the id when returning the mark value (gh/1359)
+
+2024-05-30 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltmarks.dtx (subsection{Placing and retrieving marks}):
+ Use sequence marker to make all marks unique on nearby
+ regions (gh/1359)
+
+2024-05-30 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltmarks.dtx (subsection{Core \LaTeXe{} integration}):
+ Correct logic for first mark in page region if first column contains
+ no marks (gh/1359)
+
+2024-05-16 Yukai Chou <muzimuzhi@gmail.com>
+
+ * ltmarks.dtx, ltmeta.dtx, ltpara.dtx:
+ Drop temp fixing for footnotes in function and variable envs.
+ Supported by l3doc since l3kernel 2023-10-10 (latex3 gh/1266)
+
+2024-04-26 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * doc.dtx:
+ Do not error with "suspicious date" when rolling back to
+ early years of LaTeX2e (gh/1336)
+
+2024-04-24 Yukai Chou <muzimuzhi@gmail.com>
+
+* lttextcomp.dtx
+ Load the 2018 version when rolling back prior to 2018-08-11 (gh/1333)
+ Clean up \providecommand lines
+
+2024-04-22 Yukai Chou <muzimuzhi@gmail.com>
+
+ * lttextcomp.dtx (section{The \texttt{textcomp} package})
+ Drop default package option "info" which changes kernel info to
+ package info (gh/1333)
+
+2024-04-19 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltboxes.dtx (section{\LaTeX\ Box commands}):
+ Use a \hrule strut not a \vrule if already in vertical mode
+ (bug seen first with footmisc/14)
+
+2024-04-17 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltproperties.dtx:
+ Renamed \IfLabelExistTF to \IfLabelExistsTF
+ Renamed \IfPropertyExistTF to \IfPropertyExistsTF
+ Provided T and F variants for both conditionals (gh/1262)
+
+2024-04-17 Joseph Wright <Joseph.Wright@latex-project.org>
+ * ltexpl.dtx, ltdefns.dtx
+ Rename \@expl@cs@argument@spec@@N to \@expl@cs@parameter@spec@@N (gh/1014)
+ * ltexpl.dtx, ltcmd.dtx, ltcmdhooks.dtx
+ Use \cs_parameter_spec:N in place of \cs_argument_spec:N (gh/1014)
+
+2024-04-17 Joseph Wright <Joseph.Wright@latex-project.org>
+ * lttemplates.dtx
+ Use \IfInstanceExistsTF with an 's'
+
+2024-04-15 Joseph Wright <Joseph.Wright@latex-project.org>
+ * lttemplates.dtx
+ Re-factor internals
+
+2024-04-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltclass.dtx (section{Implementation}):
+ Provide \IfFileLoadedTF and variants (gh/1222)
+
+ Provide T and F conditionals not just TF for \IfPackageLoaded...
+ and friends (gh/1262)
2024-03-22 Yukai Chou <muzimuzhi@gmail.com>
* ltfilehook.dtx
@@ -138,10 +356,6 @@ not part of the distribution.
* ltplain.dtx (section{Plain \TeX}):
Set \tracinglostchars to 2 in \tracingnone (gh/549)
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
#########################
# 2023-11-01 PL1 Release
#########################
diff --git a/macros/latex-dev/base/classes.dtx b/macros/latex-dev/base/classes.dtx
index f7c53f0f71..ce3d902b21 100644
--- a/macros/latex-dev/base/classes.dtx
+++ b/macros/latex-dev/base/classes.dtx
@@ -53,7 +53,7 @@
%<*driver>
\ProvidesFile{classes.drv}
%</driver>
- [2024/02/08 v1.4n
+ [2024/06/29 v1.4n
%<article|report|book> Standard LaTeX document class]
%<10pt|11pt|12pt> Standard LaTeX file (size option)]
% \end{macrocode}
@@ -257,7 +257,7 @@
%
% \begin{macro}{\@ptsize}
% This control sequence is used to store the second digit of the
-% pointsize we are typesetting in. So, normally, it's value is one
+% pointsize we are typesetting in. So, normally, its value is one
% of 0, 1 or 2.
% \begin{macrocode}
%<*article|report|book>
@@ -362,7 +362,7 @@
% with other packages that use the |\@ptsize| variable to select
% special actions. It makes the declarations of size options less
% than 10pt difficult, although one can probably use \texttt{9}
-% and \texttt{8} assuming that a class wont define both
+% and \texttt{8} assuming that a class won't define both
% \Lopt{8pt} and \Lopt{18pt} options.
%
% \begin{macrocode}
@@ -3122,7 +3122,7 @@
%
% \subsubsection{Theorem}
%
-% This document class does not define it's own theorem environments,
+% This document class does not define its own theorem environments,
% the defaults, supplied by the \LaTeX{} format are available.
%
% \subsubsection{Titlepage}
@@ -3130,12 +3130,12 @@
% \begin{environment}{titlepage}
% In the normal environments, the titlepage environment does nothing
% but start and end a page, and inhibit page numbers. When \LaTeX\ is
-% in two-column mode, the environmont temporarily switches to
+% in two-column mode, the environment temporarily switches to
% one-column mode.
% In the report class, it also resets the page number to one, and
% then, in two-column mode, sets it back to one at the end.
% For the book class the environment makes sure that the title page
-% is on a recto page by issueing a \cs{cleardouplepage}-command.
+% is on a recto page by issuing a \cs{cleardoublepage}-command.
% In compatibility mode, it sets the page number to zero. This is
% incorrect since it results in using the page parameters for a
% right-hand page but it is the way it was.
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index 83b67d7f5e..36b0e0668b 100644
--- a/macros/latex-dev/base/classes.pdf
+++ b/macros/latex-dev/base/classes.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide-historic.pdf b/macros/latex-dev/base/clsguide-historic.pdf
index 60b5051e6a..2c2cb2acd2 100644
--- a/macros/latex-dev/base/clsguide-historic.pdf
+++ b/macros/latex-dev/base/clsguide-historic.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf
index 08cc5b5a17..878122bd56 100644
--- a/macros/latex-dev/base/clsguide.pdf
+++ b/macros/latex-dev/base/clsguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide.tex b/macros/latex-dev/base/clsguide.tex
index 0e1927827f..c7c2ac5e2a 100644
--- a/macros/latex-dev/base/clsguide.tex
+++ b/macros/latex-dev/base/clsguide.tex
@@ -42,7 +42,7 @@
\texttt{clsguide.tex} for full details.}%
}
-\date{2024-03-17}
+\date{2024-06-19}
\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
\NewDocumentCommand\marg{m}{\arg{#1}}
@@ -347,7 +347,7 @@ out by using hooks. As a document author, you will likely be familiar with
|\AtBeginDocument|, a wrapper around the more powerful command |\AddToHook|.
The \LaTeX{} kernel provides a large number of dedicated hooks (applying in
a pre-defined location) and generic hooks (applying to arbitrary commands):
-the interface for using these is described in \texttt{lthooks} . There are
+the interface for using these is described in \texttt{lthooks}. There are
also hooks to apply to files, described in \texttt{ltfilehooks}.
\section{The structure of a class or package}
@@ -841,6 +841,9 @@ The basic properties provided here are
\item \texttt{.code} --- execute arbitrary code
\item \texttt{.if} --- sets a \TeX{} |\if...| switch
\item \texttt{.ifnot} --- sets an inverted \TeX{} |\if...| switch
+ \item \texttt{.pass-to-packages} --- for class options, this specifies
+ whether the option should be treated \enquote{global} (read by packages
+ from the global list); for package options this property has no effect
\item \texttt{.store} --- stores a value in a macro
\item \texttt{.usage} -- defines whether the option can be given only
when loading (\texttt{load}), in the preamble (\texttt{preamble}) or
@@ -1220,7 +1223,7 @@ The arguments \meta{label} and \meta{list of properties} can contain
commands that are expanded. \meta{label} can expand to an arbitrary
string (as long as it can safely be written to the \texttt{aux}-file)
but note that the label names of \cs{label} and \cs{RecordProperties}
-share a singe namespace. This means that you get a \texttt{Label `A'
+share a single namespace. This means that you get a \texttt{Label `A'
multiply defined} warning with the following code:
\begin{verbatim}
\label{A}\RecordProperties{A}{abspage}
@@ -1272,7 +1275,7 @@ immediately when \cs{RecordProperties} is used but during the next
the standard \cs{label}/\cs{pageref}.
\item[\texttt{pagenum} (default: \texttt{0}, at shipout)] The current page as arabic number. This is
- suitable for integer operations and comparisions.
+ suitable for integer operations and comparisons.
\item[\texttt{label} (default: \texttt{??})] The content of \cs{@currentlabel}. This is the value
that you get also with the standard \cs{label}/\cs{ref}.
diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf
index 0d48147368..bbcac07ecd 100644
--- a/macros/latex-dev/base/cmfonts.pdf
+++ b/macros/latex-dev/base/cmfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf
index 33e984bd52..7ac546dd41 100644
--- a/macros/latex-dev/base/cyrguide.pdf
+++ b/macros/latex-dev/base/cyrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc-code.pdf b/macros/latex-dev/base/doc-code.pdf
index dcf4ace4b3..52404e2f73 100644
--- a/macros/latex-dev/base/doc-code.pdf
+++ b/macros/latex-dev/base/doc-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc.dtx b/macros/latex-dev/base/doc.dtx
index 82eb8dc5b8..4cb8dd6b1c 100644
--- a/macros/latex-dev/base/doc.dtx
+++ b/macros/latex-dev/base/doc.dtx
@@ -34,9 +34,9 @@
%\catcode`\<=14
%<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01]
%<+package>
-%<+package>\providecommand\DeclareRelease[3]{}
-%<+package>\providecommand\DeclareCurrentRelease[2]{}
-%<+package>
+% Any rollback request before 2016-02-15 we try to fulfill with the 2016 version:
+%<+package>\DeclareRelease{}{1994-06-01}
+%<+package> {doc-2016-02-15.sty}
%<+package>\DeclareRelease{v2.1g}{2016-02-15}
%<+package> {doc-2016-02-15.sty}
%<+package>\DeclareRelease{v2}{2021-06-01}
@@ -45,7 +45,7 @@
%<+package>
%<+package>\ProvidesPackage{doc}
%<+shortvrb>\ProvidesPackage{shortvrb}
-%<+package|shortvrb> [2024/02/08 v3.0o
+%<+package|shortvrb> [2024/06/29 v3.0q
%<+package|shortvrb> Standard LaTeX documentation package V3 (FMi)]
%\catcode`\<=12
%
@@ -836,7 +836,7 @@
%
% All three above declarations are local to the current group.
%
-% Production (or not) of the index (via the |\makeindex| commend) is
+% Production (or not) of the index (via the |\makeindex| command) is
% controlled by using or omitting the following declarations in the
% driver file preamble; if neither is used, no index is produced.
% \DescribeInterfaceMacro\PageIndex Using |\PageIndex| makes all index
@@ -5463,26 +5463,14 @@
% \end{macrocode}
% We require the package without any option so if it was already
% loaded there is no option clash.
+% \changes{v3.0q}{2024/06/04}{Use hooks to save and restore
+% definitions when hypdoc gets loaded (gh/1000)}
% \begin{macrocode}
\RequirePackage{hypdoc}
\expandafter\let\csname doc.sty-h@@k\endcsname\doc@eoph@@k
% \end{macrocode}
-% After \pkg{hypdoc} got loaded we need to undefine those macros
-% again so that later on \texttt{Macro} and \texttt{Env} \DOC items
-% appear to be undefined.
-% \begin{macrocode}
- \let\PrintDescribeMacro \@@PrintDescribeMacro
- \let\PrintDescribeEnv \@@PrintDescribeEnv
- \let\PrintMacroName \@@PrintMacroName
- \let\PrintEnvName \@@PrintEnvName
- \let\SpecialUsageIndex \@@SpecialUsageIndex
- \let\SpecialEnvIndex \@@SpecialEnvIndex
- \let\SortIndex \@@SortIndex
- \let\DescribeMacro \@@DescribeMacro
- \let\DescribeEnv \@@DescribeEnv
-% \end{macrocode}
% The package adds new definitions for \cs{special@index} into
-% \cs{CodelineIndex} and \cs{PageIndex} but since we are loading it
+% \cs{CodelineIndex} and \cs{PageIndex} but since we might be loading it
% very late we are already past them (in the preamble). So we test
% the final state and do it here, if necessary.
% \begin{macrocode}
@@ -5577,7 +5565,7 @@
% Since version 2.1g, \texttt{doc} creates a \cs{saved@indexname} command
% which in used by \cs{changes}. We now support that as well. The expansion of
% this command depends on whether the documented item is macrolike or not,
-% which we don't know here (it's only know by \cs{NewDocElement}). That's why we
+% which we don't know here (it's only known by \cs{NewDocElement}). That's why we
% need one specific command generating \cs{saved@indexname} the right way for
% every single item. These commands are
% named\cs{@Save\meta{item}IndexName};
@@ -6203,10 +6191,16 @@
%
%
% To be able to restore the definition after \pkg{hypdoc} is loaded
-% we better save them here. We only load the package at the end of
+% we better save them beforehand. We only load the package at the end of
% the preamble, but the user might do this earlier and then chaos
-% is ensured.
-% \begin{macrocode}
+% is ensured. Thus, to support this generally we save them directly
+% before the package is loaded.
+% In this way the user can still alter the definition for
+% \cs{PrintDescribeMacro} and friends in the preamble.
+% \changes{v3.0q}{2024/06/04}{Use hooks to save and restore
+% definitions when hypdoc gets loaded (gh/1000)}
+% \begin{macrocode}
+\AddToHook{package/hypdoc/before}{%
\let\@@PrintDescribeMacro \PrintDescribeMacro
\let\@@PrintDescribeEnv \PrintDescribeEnv
\let\@@PrintMacroName \PrintMacroName
@@ -6216,6 +6210,23 @@
\let\@@SortIndex \SortIndex
\let\@@DescribeMacro \DescribeMacro
\let\@@DescribeEnv \DescribeEnv
+}
+% \end{macrocode}
+% After \pkg{hypdoc} got loaded we need to reset those macros
+% again. This is done in the generic hook
+% \texttt{package/hypdoc/after}.
+% \begin{macrocode}
+\AddToHook{package/hypdoc/after}{%
+ \let\PrintDescribeMacro \@@PrintDescribeMacro
+ \let\PrintDescribeEnv \@@PrintDescribeEnv
+ \let\PrintMacroName \@@PrintMacroName
+ \let\PrintEnvName \@@PrintEnvName
+ \let\SpecialUsageIndex \@@SpecialUsageIndex
+ \let\SpecialEnvIndex \@@SpecialEnvIndex
+ \let\SortIndex \@@SortIndex
+ \let\DescribeMacro \@@DescribeMacro
+ \let\DescribeEnv \@@DescribeEnv
+}
% \end{macrocode}
%
%
diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf
index caebfcc016..614d9ee59d 100644
--- a/macros/latex-dev/base/doc.pdf
+++ b/macros/latex-dev/base/doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf
index 3a2b6c1130..7f342b3e09 100644
--- a/macros/latex-dev/base/docstrip.pdf
+++ b/macros/latex-dev/base/docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf
index c0703dda34..b931ee49a0 100644
--- a/macros/latex-dev/base/encguide.pdf
+++ b/macros/latex-dev/base/encguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf
index 3f8d43d81b..bc99993ae8 100644
--- a/macros/latex-dev/base/exscale.pdf
+++ b/macros/latex-dev/base/exscale.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf
index 94dad320aa..908531663b 100644
--- a/macros/latex-dev/base/fix-cm.pdf
+++ b/macros/latex-dev/base/fix-cm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf
index 0a6e2d8a0f..135b23ce81 100644
--- a/macros/latex-dev/base/fntguide.pdf
+++ b/macros/latex-dev/base/fntguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fontdef.dtx b/macros/latex-dev/base/fontdef.dtx
index 281add29ef..080cb289e5 100644
--- a/macros/latex-dev/base/fontdef.dtx
+++ b/macros/latex-dev/base/fontdef.dtx
@@ -40,7 +40,7 @@
%<driver, >\ProvidesFile{fontdef.drv}
% \fi
% \ProvidesFile{fontdef.dtx}
- [2024/02/09 v3.0i LaTeX Kernel
+ [2024/07/08 v3.0j LaTeX Kernel
% \iffalse
%<text, > (Text font setup)
%<math, > (Math font setup)
@@ -411,6 +411,18 @@
\endgroup
% \end{macrocode}
%
+% \changes{v3.0j}{2024/06/24}{load ts1 cmr fd file in Unicode engines}
+% Even though Unicode engines default to |lm| load |ts1cmr|
+% as this may be used for fallback for TS1 encoding.
+% \begin{macrocode}
+\ifx\Umathcode\@undefined\else
+\begingroup
+\nfss@catcodes
+\input {ts1cmr.fd}
+\endgroup
+\fi
+% \end{macrocode}
+%
% Even with all the precautions it is still possible that NFSS will
% run into problems, for example, when a |.fd| file contains
% corrupted data. To guard against such cases NFSS has a very
@@ -527,7 +539,6 @@
%<*text|latexrelease>
%<latexrelease>\IncludeInRelease{2020/02/02}%
%<latexrelease> {\updefault}{font defaults change}%
-% \begin{macrocode}
\renewcommand\updefault{up}
% \end{macrocode}
% We append \cs{@empty} to the series value so that we can detect
diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf
index cdf8b6c113..31b1914ee9 100644
--- a/macros/latex-dev/base/graphpap.pdf
+++ b/macros/latex-dev/base/graphpap.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf
index 8d9001b8e9..4db61e72f5 100644
--- a/macros/latex-dev/base/ifthen.pdf
+++ b/macros/latex-dev/base/ifthen.pdf
Binary files differ
diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf
index a873c7cfac..9301e032b3 100644
--- a/macros/latex-dev/base/inputenc.pdf
+++ b/macros/latex-dev/base/inputenc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lamport-manual.pdf b/macros/latex-dev/base/lamport-manual.pdf
index 7e4062040b..d840b4c814 100644
--- a/macros/latex-dev/base/lamport-manual.pdf
+++ b/macros/latex-dev/base/lamport-manual.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexrelease.dtx b/macros/latex-dev/base/latexrelease.dtx
index eeda0f8d55..5b5c3648a4 100644
--- a/macros/latex-dev/base/latexrelease.dtx
+++ b/macros/latex-dev/base/latexrelease.dtx
@@ -40,7 +40,7 @@
%<*latexrelease>
% \fi
% \ProvidesFile{latexrelease.dtx}
- [2022/11/14 v1.0p LaTeX release emulation and tests
+ [2024/08/11 v1.0p LaTeX release emulation and tests
(including releases up to \latexreleaseversion)]
% \iffalse
%</latexrelease>
@@ -507,7 +507,7 @@
% \end{macro}
%
% \changes{v1.0c}{2015/02/19}{Swap argument order}
-% \changes{v1.0k}{2018/05/08}{reset \cs{\requestedLaTeXdate} for current
+% \changes{v1.0k}{2018/05/08}{reset \cs{requestedLaTeXdate} for current
% and latest options, github issue 43}
% \begin{macrocode}
\DeclareOption*{%
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index ac46e18d57..2a6c694299 100644
--- a/macros/latex-dev/base/latexrelease.pdf
+++ b/macros/latex-dev/base/latexrelease.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf
index c50846584c..d99873a170 100644
--- a/macros/latex-dev/base/latexsym.pdf
+++ b/macros/latex-dev/base/latexsym.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf
index 3e49e79622..158d8b3f5f 100644
--- a/macros/latex-dev/base/lb2.pdf
+++ b/macros/latex-dev/base/lb2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/letter.dtx b/macros/latex-dev/base/letter.dtx
index 4df9e5ead6..dde59f40e4 100644
--- a/macros/latex-dev/base/letter.dtx
+++ b/macros/latex-dev/base/letter.dtx
@@ -45,7 +45,7 @@
%<*driver>
\ProvidesFile{letter.drv}
%</driver>
- [2021/12/07 v1.3c
+ [2024/08/12 v1.3c
%<+letter> Standard LaTeX document class]
% \end{macrocode}
%
@@ -838,9 +838,10 @@
% $1$, with footnotes starting from $1$ as well.
% (The first page is unnumbered.) It has a single argument, which
% is the addressee and his address, as in
+% \changes{v1.3c}{2024/08/12}{Alter sample address (gh/1439)}
%\begin{verbatim}
% \begin{letter}{Sam Jones \\
-% Institute for Retarded Study\\
+% Institute for Trivial Study\\
% Princeton, N.J.}
%\end{verbatim}
% Local declarations, such as |\address|, can follow the
diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf
index c4f2404bce..4d76be1eaa 100644
--- a/macros/latex-dev/base/letter.pdf
+++ b/macros/latex-dev/base/letter.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf
index 9febd117bb..8fac693b4f 100644
--- a/macros/latex-dev/base/lgc2.pdf
+++ b/macros/latex-dev/base/lgc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf
index 00092d1c3b..683b7915b2 100644
--- a/macros/latex-dev/base/lppl.pdf
+++ b/macros/latex-dev/base/lppl.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltboxes.dtx b/macros/latex-dev/base/ltboxes.dtx
index a041312cc5..e3620ef1ae 100644
--- a/macros/latex-dev/base/ltboxes.dtx
+++ b/macros/latex-dev/base/ltboxes.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltboxes.dtx}
- [2024/02/08 v1.4e LaTeX Kernel (Box Commands)]
+ [2024/06/23 v1.4h LaTeX Kernel (Box Commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltboxes.dtx}
@@ -456,9 +456,6 @@
% \begin{macro}{\color@begingroup}
% \changes{v1.0b}{1994/03/14}
% {macro added for color support}
-% \begin{macro}{\color@endgroup}
-% \changes{v1.0b}{1994/03/14}
-% {macro added for color support}
% \begin{macro}{\color@setgroup}
% \changes{v1.0f}{1994/05/11}
% {macro added for color support}
@@ -491,7 +488,6 @@
%<latexrelease>\IncludeInRelease{2021/06/01}%
%<latexrelease> {\color@begingroup}{color group settings}%
\let\color@begingroup\begingroup
-\def\color@endgroup{\endgraf\endgroup}
\def\color@setgroup{\color@begingroup} % changed further in color package
\let\normalcolor\relax % remains untouched; only changed in a color package
\def\color@hbox{\hbox\bgroup\color@begingroup}
@@ -506,7 +502,6 @@
%<latexrelease> {\color@begingroup}{color group settings}%
%<latexrelease>
%<latexrelease>\let\color@begingroup\relax
-%<latexrelease>\let\color@endgroup\relax
%<latexrelease>\let\color@setgroup\relax
%<latexrelease>\let\normalcolor\relax
%<latexrelease>\let\color@hbox\relax
@@ -522,7 +517,51 @@
% \end{macro}
% \end{macro}
% \end{macro}
+
+
+
+% \begin{macro}{\color@endgroup}
+% This macro is separated out because it received an update in 2024,
+% so requires its own rollback.
+% \changes{v1.0b}{1994/03/14}
+% {macro added for color support}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2024/11/01}%
+%<latexrelease> {\color@endgroup}{color group settings}%
+% \end{macrocode}
+% Beside \cs{endgraf} for handling vertical boxes we also reset
+% \cs{if@endpe} as we are leaving the context.
+% \changes{v1.4h}{2024/06/23}{Adjust for new \texttt{@endpe} handling}
+% \begin{macrocode}
+\def\color@endgroup{\endgraf\@endpefalse\endgroup}
+%<latexrelease>
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2021/06/01}%
+%<latexrelease> {\color@endgroup}{color group settings}%
+%<latexrelease>\def\color@endgroup{\endgraf\endgroup}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\color@endgroup}{color group settings}%
+%<latexrelease>
+%<latexrelease>\let\color@endgroup\relax
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
% \end{macro}
+
+
+
%
% \begin{macro}{\newsavebox}
% \changes{v0.1a}{1993/12/03}
@@ -1011,7 +1050,7 @@
% set globally to false when they are definitely true.
%
% If anyone is unhappy with this argument then both flags should be
-% treated as in |\set@nobreak|; otherwise this command will be
+% treated as in |\@setnobreak|; otherwise this command will be
% redundant.
% \changes{v1.1a}{1996/10/24}{Added local settings of flags: dangerous!!}
% \begin{macrocode}
@@ -1487,9 +1526,46 @@
%
% The |\nobreak| was added (1995/10/31) to allow hyphenation of the
% final word of the paragraph.
+%
+% In 2024 we changed the macro to account for vertical mode. In
+% that case we use a strut produced with \cs{hrule} to avoid
+% starting a new paragraph (resulting in spurious extra line) and
+% also account for the \cs{prevdepth} of the previous line.
+% \changes{v1.4f}{2024/04/18}
+% {Use a \cs{hrule} strut not a \cs{vrule} if already in
+% vertical mode (bug seen first with footmisc/14)}
+% \changes{v1.4g}{2024/06/10}
+% {Always use a \cs{vrule} strut after all, but back up by a baseline
+% if already in vertical mode. Otherwise empty table p-cells will
+% not get the correct width (bug seen first with colortbl)}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2024/06/01}%
+%<latexrelease> {\@finalstrut}{final strut correction}%
\def\@finalstrut#1{%
- \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1}
+ \unskip
+ \ifhmode \nobreak
+ \else
+% \end{macrocode}
+% If we are in vmode we now back up by a baseline.
+% \begin{macrocode}
+ \vskip-\baselineskip
+ \fi
+% \end{macrocode}
+% Finally we unconditionally use \cs{vrule}.
+% \begin{macrocode}
+ \vrule\@width\z@\@height\z@\@depth\dp#1}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@finalstrut}{final strut correction}%
+%<latexrelease>\def\@finalstrut#1{%
+%<latexrelease> \unskip\ifhmode\nobreak\fi
+%<latexrelease> \vrule\@width\z@\@height\z@\@depth\dp#1}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index 1948db2c6b..c08618b929 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltclass.dtx}
- [2024/03/22 v1.5j LaTeX Kernel (Class & Package Interface)]
+ [2024/06/04 v1.5l LaTeX Kernel (Class & Package Interface)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltclass.dtx}
@@ -1075,19 +1075,20 @@
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2021/11/15}%
-%<latexrelease> {\IfPackageLoadedtTF}{Test package loading}%
+%<latexrelease>\IncludeInRelease{2024/06/01}%
+%<latexrelease> {\IfPackageLoadedTF}{Test package loading}%
\let \IfPackageLoadedTF \@ifpackageloaded
\let \IfClassLoadedTF \@ifclassloaded
\let \IfPackageLoadedWithOptionsTF \@ifpackagewith
\let \IfClassLoadedWithOptionsTF \@ifclasswith
% \end{macrocode}
-% For rollback pretend it was available since the beginning of dawn.
+% For rollback/rollforward pretend everything was available since
+% the beginning of dawn.
% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease> {\IfPackageLoadedtTF}{Test package loading}%
+%<latexrelease> {\IfPackageLoadedTF}{Test package loading}%
%<latexrelease>
%<latexrelease>\let \IfPackageLoadedTF \@ifpackageloaded
%<latexrelease>\let \IfClassLoadedTF \@ifclassloaded
@@ -1102,6 +1103,99 @@
%
%
%
+% \begin{macro}{
+% \IfPackageLoadedT,\IfPackageLoadedF,
+% \IfPackageAtLeastT,\IfPackageAtLeastF,
+% \IfClassAtLeastT,\IfClassAtLeastF,
+% \IfFileAtLeastT,\IfFileAtLeastF,
+% \IfFormatAtLeastT,\IfFormatAtLeastF,
+% \IfPackageLoadedWithOptionsT,\IfPackageLoadedWithOptionsF,
+% \IfClassLoadedT,\IfClassLoadedF,
+% \IfClassLoadedWithOptionsF,\IfClassLoadedWithOptionTF
+% }
+% A few more conditionals for convenience
+% \changes{v1.5k}{2024/04/10}{Provide T and F conditionals not just TF
+% (gh/1262)}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2024/06/01}%
+%<latexrelease> {\IfPackageLoadedT}{More conditionals}%
+\def\IfPackageLoadedT #1#2{\IfPackageLoadedTF{#1}{#2}{}}
+\def\IfPackageLoadedF #1{\IfPackageLoadedTF{#1}{}}
+\def\IfClassLoadedT #1#2{\IfClassLoadedTF{#1}{#2}{}}
+\def\IfClassLoadedF #1{\IfClassLoadedTF{#1}{}}
+\def\IfPackageAtLeastT#1#2#3{\IfPackageAtLeastTF{#1}{#2}{#3}{}}
+\def\IfPackageAtLeastF #1#2{\IfPackageAtLeastTF{#1}{#2}{}}
+\def\IfClassAtLeastT #1#2#3{\IfClassAtLeastTF{#1}{#2}{#3}{}}
+\def\IfClassAtLeastF #1#2{\IfClassAtLeastTF{#1}{#2}{}}
+\def\IfFileAtLeastT #1#2#3{\IfFileAtLeastTF{#1}{#2}{#3}{}}
+\def\IfFileAtLeastF #1#2{\IfFileAtLeastTF{#1}{#2}{}}
+\def\IfFormatAtLeastT #1#2{\IfFormatAtLeastTF{#1}{#2}{}}
+\def\IfFormatAtLeastF #1{\IfFormatAtLeastTF{#1}{}}
+\def\IfPackageLoadedWithOptionsT #1#2#3{\IfPackageLoadedWithOptionsTF{#1}{#2}{#3}{}}
+\def\IfPackageLoadedWithOptionsF #1#2{\IfPackageLoadedWithOptionsTF{#1}{#2}{}}
+\def\IfClassLoadedWithOptionsT #1#2#3{\IfClassLoadedWithOptionsTF{#1}{#2}{#3}{}}
+\def\IfClassLoadedWithOptionsF #1#2{\IfClassLoadedWithOptionsTF{#1}{#2}{}}
+% \end{macrocode}
+%
+% \begin{macro}{\IfFileLoadedTF,\IfFileLoadedT,\IfFileLoadedF}
+% These three commands haven't been there at all in the past.
+% \changes{v1.5k}{2024/04/10}{Provide \cs{IfFileLoadedTF} and variants
+% (gh/1222)}
+% \begin{macrocode}
+\def\IfFileLoadedTF#1{%
+ \expandafter\ifx\csname ver@#1\endcsname\relax
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi}
+\def\IfFileLoadedT#1#2{\IfFileLoadedTF{#1}{#2}{}}
+\def\IfFileLoadedF #1{\IfFileLoadedTF{#1}{}}
+% \end{macrocode}
+% For rollback/rollforward pretend everything was available since
+% the beginning of dawn.
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\IfPackageLoadedT}{More conditionals}%
+%<latexrelease>
+%<latexrelease>\def\IfPackageLoadedT #1#2{\IfPackageLoadedTF{#1}{#2}{}}
+%<latexrelease>\def\IfPackageLoadedF #1{\IfPackageLoadedTF{#1}{}}
+%<latexrelease>\def\IfClassLoadedT #1#2{\IfClassLoadedTF{#1}{#2}{}}
+%<latexrelease>\def\IfClassLoadedF #1{\IfClassLoadedTF{#1}{}}
+%<latexrelease>\def\IfPackageAtLeastT#1#2#3{\IfPackageAtLeastTF{#1}{#2}{#3}{}}
+%<latexrelease>\def\IfPackageAtLeastF #1#2{\IfPackageAtLeastTF{#1}{#2}{}}
+%<latexrelease>\def\IfClassAtLeastT #1#2#3{\IfClassAtLeastTF{#1}{#2}{#3}{}}
+%<latexrelease>\def\IfClassAtLeastF #1#2{\IfClassAtLeastTF{#1}{#2}{}}
+%<latexrelease>\def\IfFileAtLeastT #1#2#3{\IfFileAtLeastTF{#1}{#2}{#3}{}}
+%<latexrelease>\def\IfFileAtLeastF #1#2{\IfFileAtLeastTF{#1}{#2}{}}
+%<latexrelease>\def\IfFormatAtLeastT #1#2{\IfFormatAtLeastTF{#1}{#2}{}}
+%<latexrelease>\def\IfFormatAtLeastF #1{\IfFormatAtLeastTF{#1}{}}
+%<latexrelease>\def\IfPackageLoadedWithOptionsT #1#2#3{\IfPackageLoadedWithOptionsTF{#1}{#2}{#3}{}}
+%<latexrelease>\def\IfPackageLoadedWithOptionsF #1#2{\IfPackageLoadedWithOptionsTF{#1}{#2}{}}
+%<latexrelease>\def\IfClassLoadedWithOptionsT #1#2#3{\IfClassLoadedWithOptionsTF{#1}{#2}{#3}{}}
+%<latexrelease>\def\IfClassLoadedWithOptionsF #1#2{\IfClassLoadedWithOptionsTF{#1}{#2}{}}
+%<latexrelease>
+%<latexrelease>\def\IfFileLoadedTF#1{%
+%<latexrelease> \expandafter\ifx\csname ver@#1\endcsname\relax
+%<latexrelease> \expandafter\@secondoftwo
+%<latexrelease> \else
+%<latexrelease> \expandafter\@firstoftwo
+%<latexrelease> \fi}
+%<latexrelease>\def\IfFileLoadedT#1#2{\IfFileLoadedTF{#1}{#2}{}}
+%<latexrelease>\def\IfFileLoadedF #1{\IfFileLoadedTF{#1}{}}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
% \begin{macro}{\ProvidesPackage}
% Checks that the current filename is correct, and defines
% |\ver@filename|.
@@ -2725,13 +2819,42 @@
% The current file type.
% \changes{v0.2i}{1993/12/03}
% {Name changed to avoid clash with output routine.}
+% \changes{v1.5l}{2024/06/04}
+% {Allow for extensions other than "cls" and "pkg"}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2024/11/01}%
+%<latexrelease> {\@cls@pkg}{Allow for more extensions}%
\def\@cls@pkg{%
\ifx\@currext\@clsextension
document class%
\else
- package%
+ \ifx\@currext\@pkgextension
+ package%
+ \else
+ file%
+ \fi
\fi}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@cls@pkg}{Allow for more extensions}%
+%<latexrelease>
+%<latexrelease>\def\@cls@pkg{%
+%<latexrelease> \ifx\@currext\@clsextension
+%<latexrelease> document class%
+%<latexrelease> \else
+%<latexrelease> package%
+%<latexrelease> \fi}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+%
+% \begin{macrocode}
\@onlypreamble\@cls@pkg
% \end{macrocode}
% \end{macro}
@@ -3475,11 +3598,20 @@
\pkgcls@debug{\@spaces 4: #4}%
%</tracerollback>
% \end{macrocode}
-% Two of the arguments are needed later on in error/warning
+% Three of the arguments are needed later on in error/warning
% messages so we save them.
+% \changes{v1.5l}{2024/06/04}
+% {New argument \cs{pkgcls@ext} (gh/870)}
% \begin{macrocode}
\def\pkgcls@name{#1}% % for info message
\def\pkgcls@arg {#3}% % for info message
+ \edef\pkgcls@ext{%
+ \ifx#4\@clsextension document class\else
+ \ifx#4\@pkgextension package\else
+ file
+ \fi
+ \fi
+ }% % for info message
% \end{macrocode}
% then we parse the final optional argument to determine if there
% is a specific rollback request for the current file. This will
@@ -3643,12 +3775,14 @@
% therefore issue a warning.
% \changes{v1.2i}{2018/05/08}
% {Make suspicious rollback a warning not error: github issue 43}
+% \changes{v1.5l}{2024/06/04}
+% {New argument \cs{pkgcls@ext} (gh/870)}
% \begin{macrocode}
\ifnum \pkgcls@targetdate > \z@
\ifnum \@parse@version0#1//00\@nil > \pkgcls@targetdate
\@latex@warning@no@line{Suspicious rollback/min-date date given\MessageBreak
A minimal date of #1 has been specified for
- \@cls@pkg\MessageBreak '\pkgcls@name'.\MessageBreak
+ \pkgcls@ext\MessageBreak '\pkgcls@name'.\MessageBreak
But this is in conflict
with a rollback request to \requestedpatchdate}
\fi
diff --git a/macros/latex-dev/base/ltcmd.dtx b/macros/latex-dev/base/ltcmd.dtx
index f57ceeedff..eccb104bb9 100644
--- a/macros/latex-dev/base/ltcmd.dtx
+++ b/macros/latex-dev/base/ltcmd.dtx
@@ -34,8 +34,8 @@
%%% From File: ltcmd.dtx
%
% \begin{macrocode}
-\def\ltcmdversion{v1.2d}
-\def\ltcmddate{2024-03-21}
+\def\ltcmdversion{v1.2f}
+\def\ltcmddate{2024-07-06}
% \end{macrocode}
%
%<*driver>
@@ -620,31 +620,51 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\@@_declare_env:nnnn}
+% \begin{macro}{\@@_declare_env:nnnn, \@@_declare_env:ennn}
+% \changes{v1.2f}{2024/07/06}{Use space-trimmed envname directly (gh/1399)}
% \begin{macro}{\@@_declare_env_internal:nnnn}
+% \begin{macro}{\@@_set_environment_end:n}
% The lead-off to creating an environment is much the same as that for
% creating a command: issue the appropriate message, store the argument
% specification then hand off to an internal function.
% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2024/11/01}{\@@_declare_env:nnnn}%
+%<latexrelease> {Use~space-trimmed~envname~directly}
\cs_new_protected:Npn \@@_declare_env:nnnn #1#2
{
- \str_set:Nx \l_@@_environment_str {#1}
- \str_set:Nx \l_@@_environment_str
- { \tl_trim_spaces:o { \l_@@_environment_str } }
- \cs_if_exist:cTF { \l_@@_environment_str }
- {
- \msg_info:nnxx { cmd } { redefine-env }
- { \l_@@_environment_str } { \tl_to_str:n {#2} }
- }
- {
- \msg_info:nnxx { cmd } { define-env }
- { \l_@@_environment_str } { \tl_to_str:n {#2} }
- }
+ \str_set:Nn \l_@@_environment_str {#1}
+ \cs_if_exist:cTF { #1 }
+ { \msg_info:nnnn { cmd } { redefine-env } { #1 } { #2 } }
+ { \msg_info:nnnn { cmd } { define-env } { #1 } { #2 } }
\bool_set_false:N \l_@@_expandable_bool
\bool_set_true:N \l_@@_environment_bool
- \exp_args:NV \@@_declare_env_internal:nnnn
- \l_@@_environment_str {#2}
+ \@@_declare_env_internal:nnnn {#1} {#2}
}
+\cs_generate_variant:Nn \@@_declare_env:nnnn { e }
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2024/06/01}{\@@_declare_env:nnnn}%
+%<latexrelease> {Use~space-trimmed~envname~directly}
+%<latexrelease>\cs_new_protected:Npn \@@_declare_env:nnnn #1#2
+%<latexrelease> {
+%<latexrelease> \str_set:Nx \l_@@_environment_str {#1}
+%<latexrelease> \str_set:Nx \l_@@_environment_str
+%<latexrelease> { \tl_trim_spaces:o { \l_@@_environment_str } }
+%<latexrelease> \cs_if_exist:cTF { \l_@@_environment_str }
+%<latexrelease> {
+%<latexrelease> \msg_info:nnxx { cmd } { redefine-env }
+%<latexrelease> { \l_@@_environment_str } { \tl_to_str:n {#2} }
+%<latexrelease> }
+%<latexrelease> {
+%<latexrelease> \msg_info:nnxx { cmd } { define-env }
+%<latexrelease> { \l_@@_environment_str } { \tl_to_str:n {#2} }
+%<latexrelease> }
+%<latexrelease> \bool_set_false:N \l_@@_expandable_bool
+%<latexrelease> \bool_set_true:N \l_@@_environment_bool
+%<latexrelease> \exp_args:NV \@@_declare_env_internal:nnnn
+%<latexrelease> \l_@@_environment_str {#2}
+%<latexrelease> }
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
% Creating a document environment requires a few more steps than creating
% a single command. In order to pass the arguments of the command to the
@@ -685,6 +705,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Structure of \pkg{xparse} commands}
%
@@ -4552,6 +4573,8 @@
% \changes{v1.0l}{2022/03/18}{Fix \cs{@@_cmd_type_cases:NnnnnF}
% prematurely expanding macros (gh/795)}
% \changes{v1.2b}{2023/12/01}{Extend for optimized commands}
+% \changes{v1.2e}{2024/04/17}{Use \cs{__kernel_cs_parameter_spec:N} instead
+% of \cs{cs_argument_spec:N}/\cs{cs_parameter_spec:N}}
% \begin{macro}{\@@_cmd_if_xparse_aux:N}
%
% To determine whether the command is an \pkg{xparse} command check
@@ -4570,7 +4593,7 @@
{
\exp_args:Ne \str_case_e:nnF
{
- \exp_args:Nf \tl_if_empty:nT { \cs_argument_spec:N #1 }
+ \exp_args:Nf \tl_if_empty:nT { \__kernel_cs_parameter_spec:N #1 }
{ \exp_not:N \exp_not:n { \exp_not:e { \tl_head:N #1 } } }
}
{
@@ -5020,36 +5043,109 @@
%
% \begin{macro}{\NewDocumentEnvironment}
% \changes{v1.0h}{2021/08/27}{Check for end-of-environment command}
+% \changes{v1.2f}{2024/07/06}{Trim spaces from envname first (gh/1399)}
% \begin{macro}{\RenewDocumentEnvironment}
% \begin{macro}{\ProvideDocumentEnvironment}
% \begin{macro}{\DeclareDocumentEnvironment}
-% Very similar for environments.
-% \begin{macrocode}
+% \begin{macro}{\@@_new_env:nnnn, \@@_renew_env:nnnn, \@@_provide_env:nnnn}
+% \begin{macro}{\@@_new_env:ennn, \@@_renew_env:ennn, \@@_provide_env:ennn}
+% Very similar for environments. Trim spaces from user-specified
+% \meta{envname}, do existence check then hand off to
+% \cs{@@_declare_env:nnnn}.
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2024/11/01}{\NewDocumentEnvironment}%
+%<latexrelease> {Trim~spaces~from~envname~first}
\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4
{
+ \@@_new_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4}
+ }
+\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4
+ {
+ \@@_renew_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4}
+ }
+\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
+ {
+ \@@_provide_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4}
+ }
+\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4
+ {
+ \@@_declare_env:ennn { \tl_trim_spaces:e {#1} } {#2} {#3} {#4}
+ }
+% \end{macrocode}
+% Each of \cs[no-index]{@@_(new|renew|provide)_env:nnnn} is curried.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_new_env:nnnn #1
+ {
\cs_if_exist:cTF {#1}
- { \msg_error:nnx { cmd } { env-already-defined } {#1} }
+ {
+ \msg_error:nnx { cmd } { env-already-defined } {#1}
+ \use_none:nnn
+ }
{
\cs_if_exist:cTF { end #1 }
- { \msg_error:nnx { cmd } { env-end-already-defined } {#1} }
- { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
+ {
+ \msg_error:nnx { cmd } { env-end-already-defined } {#1}
+ \use_none:nnn
+ }
+ { \@@_declare_env:nnnn {#1} }
}
}
-\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4
+\cs_new_protected:Npn \@@_renew_env:nnnn #1
{
\cs_if_exist:cTF {#1}
- { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
- { \msg_error:nnx { cmd } { env-undefined } {#1} }
+ { \@@_declare_env:nnnn {#1} }
+ {
+ \msg_error:nnx { cmd } { env-undefined } {#1}
+ \use_none:nnn
+ }
}
-\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
- { \cs_if_exist:cF {#1} { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} } }
-\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4
- { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
+\cs_new_protected:Npn \@@_provide_env:nnnn #1
+ {
+ \cs_if_exist:cTF {#1}
+ { \use_none:nnn }
+ { \@@_declare_env:nnnn {#1} }
+ }
+\cs_generate_variant:Nn \@@_new_env:nnnn { e }
+\cs_generate_variant:Nn \@@_renew_env:nnnn { e }
+\cs_generate_variant:Nn \@@_provide_env:nnnn { e }
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2024/06/01}{\NewDocumentEnvironment}%
+%<latexrelease> {Trim~spaces~from~envname~first}
+%<latexrelease>\cs_new_protected:Npn \NewDocumentEnvironment #1#2#3#4
+%<latexrelease> {
+%<latexrelease> \cs_if_exist:cTF {#1}
+%<latexrelease> { \msg_error:nnx { cmd } { env-already-defined } {#1} }
+%<latexrelease> {
+%<latexrelease> \cs_if_exist:cTF { end #1 }
+%<latexrelease> { \msg_error:nnx { cmd } { env-end-already-defined } {#1} }
+%<latexrelease> { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
+%<latexrelease> }
+%<latexrelease> }
+%<latexrelease>\cs_new_protected:Npn \RenewDocumentEnvironment #1#2#3#4
+%<latexrelease> {
+%<latexrelease> \cs_if_exist:cTF {#1}
+%<latexrelease> { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
+%<latexrelease> { \msg_error:nnx { cmd } { env-undefined } {#1} }
+%<latexrelease> }
+%<latexrelease>\cs_new_protected:Npn \ProvideDocumentEnvironment #1#2#3#4
+%<latexrelease> { \cs_if_exist:cF {#1} { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} } }
+%<latexrelease>\cs_new_protected:Npn \DeclareDocumentEnvironment #1#2#3#4
+%<latexrelease> { \@@_declare_env:nnnn {#1} {#2} {#3} {#4} }
+%<latexrelease>\cs_undefine:N \@@_new_env:nnnn
+%<latexrelease>\cs_undefine:N \@@_new_env:ennn
+%<latexrelease>\cs_undefine:N \@@_renew_env:nnnn
+%<latexrelease>\cs_undefine:N \@@_renew_env:ennn
+%<latexrelease>\cs_undefine:N \@@_provide_env:nnnn
+%<latexrelease>\cs_undefine:N \@@_provide_env:ennn
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\NewExpandableDocumentCommand}
% \begin{macro}{\RenewExpandableDocumentCommand}
diff --git a/macros/latex-dev/base/ltcmdhooks-code.pdf b/macros/latex-dev/base/ltcmdhooks-code.pdf
index 1429b2063c..4658fb13b1 100644
--- a/macros/latex-dev/base/ltcmdhooks-code.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltcmdhooks-doc.pdf b/macros/latex-dev/base/ltcmdhooks-doc.pdf
index cd9af57523..67648cefec 100644
--- a/macros/latex-dev/base/ltcmdhooks-doc.pdf
+++ b/macros/latex-dev/base/ltcmdhooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltcmdhooks.dtx b/macros/latex-dev/base/ltcmdhooks.dtx
index a3c89b48a9..e8793817df 100644
--- a/macros/latex-dev/base/ltcmdhooks.dtx
+++ b/macros/latex-dev/base/ltcmdhooks.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%%% From File: ltcmdhooks.dtx
+%% From File: ltcmdhooks.dtx
%% Copyright (C) 2020-2024
%% Frank Mittelbach, Phelype Oleinik, The LaTeX Project
%
@@ -20,7 +20,7 @@
%<*driver>
% \fi
\ProvidesFile{ltcmdhooks.dtx}
- [2024/03/09 v1.0i LaTeX Kernel (Command hooks)]
+ [2024/07/08 v1.0j LaTeX Kernel (Command hooks)]
% \iffalse
%
\documentclass{l3doc}
@@ -406,6 +406,8 @@
% \end{macrocode}
%
% \changes{v1.0b}{2021/05/24}{Use \cs{msg_...} instead of \cs{__kernel_msg...}}
+% \changes{v1.0j}{2024/04/17}{Use \cs{__kernel_cs_parameter_spec:N} instead
+% of \cs{cs_argument_spec:N}/\cs{cs_parameter_spec:N}}
%
% \begin{macrocode}
%<*2ekernel|latexrelease>
@@ -850,14 +852,14 @@
\@@_patch_debug:x { ++~command~can~be~patched~without~rescanning }
% \end{macrocode}
% We'll start by counting the number of arguments in the command by
-% counting the number of characters in the \cs{cs_argument_spec:N} of
+% counting the number of characters in the \cs{cs_parameter_spec:N} of
% the macro, divided by two, and subtracting one if the command has an
% optional argument (that is, an extra |[]| in its
% \meta{parameter text}).
% \begin{macrocode}
\int_set:Nn \l_@@_patch_num_args_int
{
- \exp_args:Nf \str_count:n { \cs_argument_spec:N #2 } / 2
+ \exp_args:Nf \str_count:n { \__kernel_cs_parameter_spec:N #2 } / 2
\bool_if:NT #1 { -1 }
}
% \end{macrocode}
@@ -1010,7 +1012,7 @@
%<latexrelease> \@@_patch_debug:x { ++~command~can~be~patched~without~rescanning }
%<latexrelease> \int_set:Nn \l_@@_patch_num_args_int
%<latexrelease> {
-%<latexrelease> \exp_args:Nf \str_count:n { \cs_argument_spec:N #2 } / 2
+%<latexrelease> \exp_args:Nf \str_count:n { \__kernel_cs_parameter_spec:N #2 } / 2
%<latexrelease> \bool_if:NT #1 { -1 }
%<latexrelease> }
%<latexrelease> \int_compare:nNnTF { \l_@@_patch_num_args_int } > { \c_zero_int }
@@ -1260,12 +1262,12 @@
% top-level macro with no arguments, so testing this first would
% short-circuit \tn{robust@command@act} and the top-level macros would
% be incorrectly patched. In that case, we just check if the
-% \cs{cs_argument_spec:N} is empty, and call
+% \cs{cs_parameter_spec:N} is empty, and call
% \cs{@@_patch_expand_redefine:NNnn}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_retokenize_patch:Nnn #1 #2 #3
{
- \str_if_eq:eeTF { \cs_argument_spec:N #1 } { }
+ \str_if_eq:eeTF { \__kernel_cs_parameter_spec:N #1 } { }
{ \@@_patch_expand_redefine:NNnn \c_false_bool #1 {#2} {#3} }
{
\@@_patch_debug:x { ..~command~can~only~be~patched~by~rescanning }
@@ -1528,6 +1530,7 @@
%<latexrelease> {cmd~hooks~with~args}
\cs_new_protected:Npn \@@_patch_retokenize:Nnnn #1 #2 #3 #4
{
+% \end{macrocode}
% Here, when patching by retokenization, we can only guess the number
% of arguments of the macro.
% \changes{v1.0h}{2023/05/21}
diff --git a/macros/latex-dev/base/ltdefns.dtx b/macros/latex-dev/base/ltdefns.dtx
index db05962505..d9ec12e75a 100644
--- a/macros/latex-dev/base/ltdefns.dtx
+++ b/macros/latex-dev/base/ltdefns.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltdefns.dtx}
- [2024/02/29 v1.5s LaTeX Kernel (definition commands)]
+ [2024/04/17 v1.5t LaTeX Kernel (definition commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltdefns.dtx}
@@ -91,6 +91,9 @@
% \changes{v1.4b}{2015/02/21}
% {Removed autoload support}
% \changes{v1.5l}{2020/08/21}{Integration of new hook management interface}
+% \changes{v1.5t}{2024/04/17}
+% {Rename \cs{@expl@cs@argument@spec@@N} to
+% \cs{@expl@cs@parameter@spec@@N} (gh/1014)}
%
% \section{Definitions}
%
@@ -2020,7 +2023,7 @@
\long\def\@show@newcommand@aux#1#2#3{%
\typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:}%
#3{default \string##1=\expandafter\detokenize\@gobblethree#2.^^J%
- \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1}}
+ \@expl@cs@parameter@spec@@N#1->\@expl@cs@replacement@spec@@N#1}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2121,7 +2124,7 @@
\@show@environment@end#1}
\long\def\@show@environment@begin#1{%
\typeout{> \string\begin{\@expl@cs@to@str@@N#1}=environment:}%
- \typeout{\@expl@cs@argument@spec@@N#1->%
+ \typeout{\@expl@cs@parameter@spec@@N#1->%
\@expl@cs@replacement@spec@@N#1.^^J}}
% \end{macrocode}
% \end{macro}
@@ -2143,7 +2146,7 @@
\long\def\@show@environment@end@aux#1#2{%
\@show@tokens{\string\end{\@expl@cs@to@str@@N#2}%
\ifx\relax#1=undefined%
- \else:^^J\@expl@cs@argument@spec@@N#1->%
+ \else:^^J\@expl@cs@parameter@spec@@N#1->%
\@expl@cs@replacement@spec@@N#1%
\fi}}
% \end{macrocode}
@@ -2162,7 +2165,7 @@
% \begin{macrocode}
\def\@show@nonstop#1{%
\typeout{> \string#1=\@expl@cs@prefix@spec@@N#1macro:^^J%
- \@expl@cs@argument@spec@@N#1->\@expl@cs@replacement@spec@@N#1.}}
+ \@expl@cs@parameter@spec@@N#1->\@expl@cs@replacement@spec@@N#1.}}
\def\@show@typeout#1{\typeout{> #1.^^J}}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/ltdirchk.dtx b/macros/latex-dev/base/ltdirchk.dtx
index d06f68a706..917431552b 100644
--- a/macros/latex-dev/base/ltdirchk.dtx
+++ b/macros/latex-dev/base/ltdirchk.dtx
@@ -263,6 +263,10 @@
% In current formats enable primitives with unprefixed names.
% the \textsf{latexrelease} guards allow the primitives to be
% defined with a |\luatex| prefix if older formats are specified.
+%
+% The unprefixed forms are \emph{not} undefined for improved
+% compatibility with external packages when rolling back
+% the format.
% \begin{macrocode}
%</initex>
%</dircheck>
@@ -280,25 +284,6 @@
%<latexrelease> "luatex",
%<latexrelease> tex.extraprimitives("core","omega", "aleph", "luatex")
%<latexrelease> )
-%<latexrelease> local i
-%<latexrelease> local t = { }
-%<latexrelease> for _,i in pairs(tex.extraprimitives("luatex")) do
-%<latexrelease> if not string.match(i,"^U") then
-%<latexrelease> if not string.match(i, "^luatex") then
-%<latexrelease> table.insert(t,i)
-%<latexrelease> end
-%<latexrelease> else
-%<latexrelease> if string.match(i,"^Uchar$") then
-%<latexrelease> table.insert(t,i)
-%<latexrelease> end
-%<latexrelease> end
-%<latexrelease> end
-%<latexrelease> for _,i in pairs(t) do
-%<latexrelease> tex.print(
-%<latexrelease> "\noexpand\\let\noexpand\\" .. i
-%<latexrelease> .. "\noexpand\\undefined"
-%<latexrelease> )
-%<latexrelease> end
%<latexrelease>}
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\fi
diff --git a/macros/latex-dev/base/ltexpl.dtx b/macros/latex-dev/base/ltexpl.dtx
index 4aaf799e32..410235a056 100644
--- a/macros/latex-dev/base/ltexpl.dtx
+++ b/macros/latex-dev/base/ltexpl.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltexpl.dtx}
- [2023/10/13 v1.3g LaTeX Kernel (expl3-dependent code)]
+ [2024/04/17 v1.3h LaTeX Kernel (expl3-dependent code)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltexpl.dtx}
@@ -356,9 +356,19 @@
% \changes{v1.2e}{2020/08/19}
% {Add \cs{@expl@cs@\meta{thing}@spec@@N}
% for \cs{ShowCommand} (gh/373)}
+% \changes{v1.3h}{2024/04/17}
+% {Rename \cs{@expl@cs@argument@spec@@N} to
+% \cs{@expl@cs@parameter@spec@@N} (gh/1014)}
+% \changes{v1.3h}{2024/04/17}
+% {Update name of \pkg{expl3} function}
+% \changes{v1.3h}{2024/04/17}
+% {Add a kernel-level copy of \cs{cs_parameter_spec:N}}
% \begin{macrocode}
\cs_gset_eq:NN \@expl@cs@prefix@spec@@N \cs_prefix_spec:N
-\cs_gset_eq:NN \@expl@cs@argument@spec@@N \cs_argument_spec:N
+\cs_if_exist:NTF \cs_parameter_spec:N
+ { \cs_gset_eq:NN \@expl@cs@parameter@spec@@N \cs_parameter_spec:N }
+ { \cs_gset_eq:NN \@expl@cs@parameter@spec@@N \cs_argument_spec:N }
+\cs_gset_eq:NN \__kernel_cs_parameter_spec:N \@expl@cs@parameter@spec@@N
\cs_gset_eq:NN \@expl@cs@replacement@spec@@N \cs_replacement_spec:N
% \end{macrocode}
%
@@ -387,7 +397,7 @@
%<latexrelease>\let \@expl@cs@to@str@@N \@undefined
%<latexrelease>\let \@expl@str@if@eq@@nnTF \@undefined
%<latexrelease>\let \@expl@cs@prefix@spec@@N \@undefined
-%<latexrelease>\let \@expl@cs@argument@spec@@N \@undefined
+%<latexrelease>\let \@expl@cs@parameter@spec@@N \@undefined
%<latexrelease>\let \@expl@cs@replacement@spec@@N \@undefined
%<latexrelease>\let \@expl@str@map@function@@NN \@undefined
%<latexrelease>\EndIncludeInRelease
diff --git a/macros/latex-dev/base/ltfilehook-code.pdf b/macros/latex-dev/base/ltfilehook-code.pdf
index 8b4b2d52c7..df8e583b37 100644
--- a/macros/latex-dev/base/ltfilehook-code.pdf
+++ b/macros/latex-dev/base/ltfilehook-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfilehook-doc.pdf b/macros/latex-dev/base/ltfilehook-doc.pdf
index 5dc31034ee..78f5c5f10e 100644
--- a/macros/latex-dev/base/ltfilehook-doc.pdf
+++ b/macros/latex-dev/base/ltfilehook-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltfinal.dtx b/macros/latex-dev/base/ltfinal.dtx
index 648e3e1b8b..2c6b96049b 100644
--- a/macros/latex-dev/base/ltfinal.dtx
+++ b/macros/latex-dev/base/ltfinal.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltfinal.dtx}
- [2024/02/08 v2.3c LaTeX Kernel (Final Settings)]
+ [2024/07/08 v2.3c LaTeX Kernel (Final Settings)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfinal.dtx}
@@ -930,7 +930,7 @@
%
% \begin{macrocode}
%<*2ekernel>
-% \begin{macrocode}
+% \end{macrocode}
%
% We temporarily define |\reserved@a| to apply |\reserved@c| to all the
% numbers in the range of its arguments.
diff --git a/macros/latex-dev/base/ltfloat.dtx b/macros/latex-dev/base/ltfloat.dtx
index a07e5e81da..ef057def0b 100644
--- a/macros/latex-dev/base/ltfloat.dtx
+++ b/macros/latex-dev/base/ltfloat.dtx
@@ -31,7 +31,7 @@
%
%<*driver>
% \fi
-\ProvidesFile{ltfloat.dtx}[2021/10/14 v1.2g LaTeX Kernel (Floats)]
+\ProvidesFile{ltfloat.dtx}[2024/04/22 v1.2g LaTeX Kernel (Floats)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfloat.dtx}
@@ -559,7 +559,7 @@
% set globally to false when they are definitely true.
%
% If anyone is unhappy with this argument then both flags should be
-% treated as in |\set@nobreak|; otherwise this command will be
+% treated as in |\@setnobreak|; otherwise this command will be
% redundant.
% \changes{v1.1p}{1996/10/24}
% {Added local settings of flags: dangerous!!}
@@ -1061,7 +1061,7 @@
% set globally to false when they are definitely true.
%
% If anyone is unhappy with this argument then both flags should be
-% treated as in |\set@nobreak|; otherwise this command will be
+% treated as in |\@setnobreak|; otherwise this command will be
% redundant.
% \changes{v1.1p}{1996/10/24}
% {Added local settings of flags: dangerous!!}
diff --git a/macros/latex-dev/base/ltfssbas.dtx b/macros/latex-dev/base/ltfssbas.dtx
index df02a5749a..387214e947 100644
--- a/macros/latex-dev/base/ltfssbas.dtx
+++ b/macros/latex-dev/base/ltfssbas.dtx
@@ -35,7 +35,7 @@
%
%
\ProvidesFile{ltfssbas.dtx}
- [2024/02/08 v3.2l LaTeX Kernel (NFSS Basic Macros)]
+ [2024/06/17 v3.2m LaTeX Kernel (NFSS Basic Macros)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
@@ -2111,6 +2111,8 @@
% {Suppress unnecessary error when used in preamble}
% \changes{v3.2a}{2017/01/10}
% {Add version of \cs{showhyphens} that works with Xe\TeX.}
+% \changes{v3.2m}{2024/06/17}
+% {set \cs{tracinglostchars} to 0 in \cs{showhyphens}}
% The |\showhyphens| command must be redefined since the version in
% \texttt{plain.tex} uses |\tenrm|. We have also made some further
% adjustments for its use in \LaTeX.
@@ -2142,10 +2144,10 @@
% horizontal list with explicit hyphens to generate the display. Note
% that the |lmr| OpenType font is forced, this works even if the
% characters are not in the font as hyphenation is attempted due to
-% the width of the space and hyphen character. It may generate
+% the width of the space and hyphen character. It would generate
% spurious Missing Character warnings in the log, these are however
-% suppressed from the terminal output by ensuring that
-% |\tracingonline| is locally zero.
+% suppressed from the terminal and log output by ensuring that
+% |\tracinglostchars| is locally zero.
% \begin{macrocode}
\DeclareRobustCommand\showhyphens[1]{%
\setbox0\vbox{%
@@ -2154,6 +2156,7 @@
\hbadness\@M
\hfuzz\maxdimen
\tracingonline\z@
+ \tracinglostchars\z@
\everypar={}%
\leftskip\z@skip
\rightskip\z@skip
diff --git a/macros/latex-dev/base/lthooks-code.pdf b/macros/latex-dev/base/lthooks-code.pdf
index 2dd40dd859..03716bb52e 100644
--- a/macros/latex-dev/base/lthooks-code.pdf
+++ b/macros/latex-dev/base/lthooks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lthooks-doc.pdf b/macros/latex-dev/base/lthooks-doc.pdf
index 0a32eabd53..9dce6ac8a2 100644
--- a/macros/latex-dev/base/lthooks-doc.pdf
+++ b/macros/latex-dev/base/lthooks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lthooks.dtx b/macros/latex-dev/base/lthooks.dtx
index 7e02aa4fd5..aed23ab16d 100644
--- a/macros/latex-dev/base/lthooks.dtx
+++ b/macros/latex-dev/base/lthooks.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{lthooks.dtx}
- [2024/03/09 v1.1h LaTeX Kernel (hooks)]
+ [2024/07/08 v1.1h LaTeX Kernel (hooks)]
% \iffalse
%
\documentclass{l3doc}
@@ -130,6 +130,9 @@
%
% The \meta{hook} can be specified using the dot-syntax to denote
% the current package name. See section~\ref{sec:default-label}.
+% The string \texttt{??} can't be used as a hook name because it
+% has a special significance as a placeholder in hook rules.
+%
% \end{function}
%
% \begin{function}{\NewReversedHook}
@@ -751,8 +754,6 @@
% given \meta{hook}. If \meta{hook} is \texttt{??} this defines a default
% relation for all hooks that use the two labels, i.e., that have
% chunks of code labeled with \meta{label1} and \meta{label2}.
-% Rules specific to a given hook take precedence over default
-% rules that use \texttt{??} as the \meta{hook}.
%
% Currently, the supported relations are the following:
% \begin{itemize}
@@ -793,9 +794,17 @@
%
% \end{itemize}
% There can only be a single relation between two labels for a
-% given hook,
-% i.e., a later \cs{DeclareHookRule} overwrites any previous
-% declaration.
+% given hook, i.e., a later \cs{DeclareHookRule} overwrites any
+% previous declaration. In all cases rules specific to a given
+% hook take precedence over default rules that use \texttt{??} as
+% the \meta{hook}.
+%
+% If a default rule is applied, it is done before reversing the
+% label order in a reversed hook, e.g., \texttt{before} in a
+% default rule effectively becomes \texttt{after} in such a hook.
+% In contrast, a rule for a specific hook is always applied to the
+% state after any reversal (i.e., the state you see when using
+% \cs{ShowHook} on that hook).
%
% The \meta{hook} and \meta{label} can be specified using the
% dot-syntax to denote the current package name.
@@ -826,6 +835,16 @@
% (Technically it is just a shorthand for using \cs{DeclareHookRule}
% with \texttt{??} as the hook name.)
%
+% If such a rule is applied to a reversed
+% hook it behaves as if the rule is reversed (e.g.,
+% \texttt{after} becomes \texttt{before})
+% because those rules are applied first and then the order is reversed.
+% The rationale is that in hook pairs (in which the ordering in one
+% is reversed) default rules have to be reversed too in nearly all
+% scenarios. If this is not the case, a default rule can't be used
+% or has to be overwritten with an explicit \cs{DeclareHookRule}
+% for that specific hook.
+%
% Declaring default rules is only supported in the document
% preamble.\footnotemark{}
%
@@ -1411,7 +1430,7 @@
% This is helpful if you have a pair of hooks where you expect to see
% code added that involves grouping, e.g., starting an environment
% in the first and closing that environment in the second hook.
-% To give a somewhat contrived example\footnote{there are simpler
+% To give a somewhat contrived example\footnote{There are simpler
% ways to achieve the same effect.}, suppose there is a package
% adding the following:
%\begin{verbatim}
@@ -1457,9 +1476,14 @@
% > package-too, package-1.
%\end{verbatim}
%
-% The reversal of the execution order happens before applying any
-% rules, so if you alter the order you will probably have to alter
-% it in both hooks, not just in one, but that depends on the use case.
+% If there is a matching default rule (done with
+% \cs{DeclareDefaultHookRule} or with \texttt{??} for the hook
+% name) then this default rule is applied before the reversal so that the order
+% in the reversed hook mirrors the one in the normal hook. However,
+% all rules specific to a hook happen always after the reversal of the
+% execution order, so if you alter the order you will probably have
+% to alter it in both hooks, not just in one, but that depends on
+% the use case.
%
%
%
@@ -1549,7 +1573,7 @@
% \hook{cmd},
% \hook{env},
% \hook{file},
-% \hook{include}
+% \hook{include},
% \hook{package}, and
% \hook{class},
% and all these are available out of the box: you only have to
@@ -1910,6 +1934,14 @@
% right sequence.
%
% \end{description}
+%
+% Given that these generic hook names involve \texttt{/} as part of
+% their name they would not work if one tries to define an
+% environment using a name that involves a
+% \texttt{/}.\footnote{Officially, \LaTeX{} names for environments
+% should only consist of a sequence of letters, numbers, and the
+% character \texttt{*}, i.e., this is not a new restriction.}
+%
% Generic environment hooks are never one-time hooks even with
% environments that are supposed to appear only once in a
% document.\footnote{Thus if one adds code to such hooks after the
@@ -7601,6 +7633,7 @@
% \begin{macrocode}
\NewDocumentCommand \SetDefaultHookLabel { m }
{ \@@_set_default_hook_label:n {#1} }
+% \end{macrocode}
%
% The label is only automatically updated with \cs{@onefilewithoptions}
% (\cs{usepackage} and \cs{documentclass}), but some packages, like
diff --git a/macros/latex-dev/base/ltkeys.dtx b/macros/latex-dev/base/ltkeys.dtx
index da8340ea9d..a9e430206b 100644
--- a/macros/latex-dev/base/ltkeys.dtx
+++ b/macros/latex-dev/base/ltkeys.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltkeys.dtx}
- [2024/01/13 v1.0m LaTeX Kernel (Keyval options)]
+ [2024/06/20 v1.0o LaTeX Kernel (Keyval options)]
% \iffalse
\documentclass{l3doc}
\GetFileInfo{ltkeys.dtx}
@@ -73,6 +73,9 @@
% \item \texttt{.code} --- execute arbitrary code
% \item \texttt{.if} --- sets a \TeX{} \cs{if...} switch
% \item \texttt{.ifnot} --- sets an inverted \TeX{} \cs{if...} switch
+% \item \texttt{.pass-to-packages} --- for class options, this specifies
+% whether the option should be treated \enquote{global} (read by packages
+% from the global list); for package options this property has no effect
% \item \texttt{.store} --- stores a value in a macro
% \item \texttt{.usage} -- defines whether the option can be given only
% when loading (\texttt{load}), in the preamble (\texttt{preamble}) or
@@ -100,7 +103,7 @@
% \texttt{second-name} can be given anywhere, and will save its value in
% \cs{@mypkg@other@name}.
%
-% Keys created \emph{before} the use of \cs{ProcessKeyOptions}act as
+% Keys created \emph{before} the use of \cs{ProcessKeyOptions} act as
% package options.
% \end{function}
%
@@ -182,12 +185,74 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{.pass-to-packages}
+% \changes{v1.0n}{2024/06/19}{New key property}
+% \begin{macro}{\@@_scope:n}
+% \changes{v1.0n}{2024/06/19}{New function}
+% \begin{macro}{\@@_scope:N}
+% \changes{v1.0n}{2024/06/19}{New function}
+% \changes{v1.0o}{2024/06/20}{Ensure only key name is stored}
+% Used to force options to be global: as this property (uniquely) has
+% an \emph{optional} value, there is a bit of work to do.
+% \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_str .pass-to-packages }
+ {
+ \bool_if:NTF \l_@@_no_value_bool
+ { \@@_scope:n { true } }
+ { \@@_scope:n }
+ }
+\cs_new_protected:Npn \@@_scope:n #1
+ {
+ \str_case:nnF {#1}
+ {
+ { true }
+ { \@@_scope:N \clist_put_right:NV }
+ { false }
+ { \@@_scope:N \clist_remove_all:NV }
+ }
+ {
+ \msg_error:nnnn { keys }
+ { choice-unknown }
+ { .pass-to-packages }
+ {#1}
+ }
+ }
+\cs_new_protected:Npn \@@_scope:N #1
+ {
+ \exp_after:wN \@@_find_key_module:wNN
+ \l_keys_path_str \s_@@_stop
+ \l_keys_key_tl \l_keys_key_str
+ #1 \l_@@_forced_global_clist \l_keys_key_str
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Main mechanism}
%
% \begin{macrocode}
+\cs_generate_variant:Nn \clist_if_in:NnT { Ne }
+\cs_generate_variant:Nn \clist_if_in:NnTF { Ne }
\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
% \end{macrocode}
%
+% \begin{macro}{\l_@@_class_only_clist}
+% \changes{v1.0n}{2024/06/19}{New variable}
+% Used to track class-only options.
+% \begin{macrocode}
+\clist_new:N \l_@@_class_only_clist
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l_@@_forced_global_clist}
+% \changes{v1.0n}{2024/06/19}{New variable}
+% Used to force options to be global.
+% \begin{macrocode}
+\clist_new:N \l_@@_forced_global_clist
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\l_@@_options_clist}
% A single list is used for all options, into which they are collected
% before processing.
@@ -295,33 +360,34 @@
% \changes{v1.0h}{2022/06/19}{Further work on handling of option removal}
% \changes{v1.0h}{2022/06/20}{Use raw options data}
% \changes{v1.0m}{2024/01/13}{Trim spaces off key names}
+% \changes{v1.0n}{2024/06/19}{Refactor function}
% \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}
+% \changes{v1.0n}{2024/06/19}{Refactor function}
+% \changes{v1.0n}{2024/06/19}{Track options used by classes}
+% \begin{macro}{\@@_options_class:nn}
+% \changes{v1.0n}{2024/06/19}{New function}
% 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
-% are stored up in \cs{@unusedoptionlist}. Before any of that, though,
-% there is a simple check to see if there is an |unknown| key. If there
-% is, then \emph{everything} will match and the mapping can be skipped.
+% are stored up in \cs{@unusedoptionlist}. An earlier version of
+% this code checked for the \texttt{unknown} key just once and
+% if found short-cutted the loop: that though makes handling more
+% complex situations harder, so we take the performance hit instead.
+% Options used by classes are tracked but the catch-all \texttt{unknown}
+% is excluded (hence not using a lazy evaluation for the key testing).
% \begin{macrocode}
\cs_new_protected:Npn \@@_options_class:n #1
{
\cs_if_free:cF { @raw@opt@ \@currname . \@currext }
{
- \keys_if_exist:nnTF {#1} { unknown }
+ \clist_map_inline:cn { @raw@opt@ \@currname . \@currext }
{
- \clist_put_right:Nv \l_@@_options_clist
- { @raw@opt@ \@currname . \@currext }
- }
- {
- \clist_map_inline:cn { @raw@opt@ \@currname . \@currext }
- {
- \exp_args:Ne \@@_options_class:nnn
- { \tl_trim_spaces:e { \@@_remove_equals:n {##1} } }
- {##1} {#1}
- }
+ \exp_args:Ne \@@_options_class:nnn
+ { \tl_trim_spaces:e { \@@_remove_equals:n {##1} } }
+ {##1} {#1}
}
}
}
@@ -329,17 +395,27 @@
{
\keys_if_exist:nnTF {#3} {#1}
{
- \clist_put_right:Nn \l_@@_options_clist {#2}
- \clist_remove_all:Nn \@unusedoptionlist {#1}
+ \@@_options_class:nn {#1} {#2}
+ \clist_put_right:Ne \l_@@_class_only_clist { \tl_to_str:n {#1} }
}
{
- \clist_if_in:NnF \@unusedoptionlist {#1}
- { \clist_put_right:Nn \@unusedoptionlist {#1} }
+ \keys_if_exist:nnTF {#3} { unknown }
+ { \@@_options_class:nn {#1} {#2} }
+ {
+ \clist_if_in:NnF \@unusedoptionlist {#1}
+ { \clist_put_right:Nn \@unusedoptionlist {#1} }
+ }
}
}
+\cs_new_protected:Npn \@@_options_class:nn #1#2
+ {
+ \clist_remove_all:Nn \@unusedoptionlist {#1}
+ \clist_put_right:Nn \l_@@_options_clist {#2}
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_options_package:n}
% \changes{v1.0g}{2022/06/16}{Better handling of option removal}
@@ -348,6 +424,9 @@
% \changes{v1.0m}{2024/01/13}{Trim spaces off key names}
% \begin{macro}{\@@_options_package:nnn}
% \changes{v1.0h}{2022/06/19}{New function}
+% \changes{v1.0n}{2024/06/19}{Skip options given to packages}
+% \begin{macro}{\@@_options_package:nn}
+% \changes{v1.0n}{2024/06/19}{New functions}
% For global options when processing a package, the tasks are slightly
% different from those for a class. The check is the same, but here
% there is nothing to do if the option is not applicable. Each valid
@@ -362,17 +441,31 @@
{##1} {#1}
}
}
+% \end{macrocode}
+% The forced-global test here needs to use \cs{tl_to_str:n} as the data come
+% from a key name, which is always a string.
+% \begin{macrocode}
\cs_new_protected:Npn \@@_options_package:nnn #1#2#3
{
\keys_if_exist:nnT {#3} {#1}
{
- \clist_put_right:Nn \l_@@_options_clist {#2}
- \clist_remove_all:Nn \@unusedoptionlist {#1}
+ \clist_if_in:NeTF \l_@@_class_only_clist { \tl_to_str:n {#1} }
+ {
+ \clist_if_in:NeT \l_@@_forced_global_clist { \tl_to_str:n {#1} }
+ { \@@_options_package:nn {#1} {#2} }
+ }
+ { \@@_options_package:nn {#1} {#2} }
}
}
+\cs_new_protected:Npn \@@_options_package:nn #1#2
+ {
+ \clist_put_right:Nn \l_@@_options_clist {#2}
+ \clist_remove_all:Nn \@unusedoptionlist {#1}
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_options_local:}
% \changes{v1.0h}{2022/06/20}{Use raw options data}
diff --git a/macros/latex-dev/base/ltlists.dtx b/macros/latex-dev/base/ltlists.dtx
index 8d4c25d916..5858cbddfb 100644
--- a/macros/latex-dev/base/ltlists.dtx
+++ b/macros/latex-dev/base/ltlists.dtx
@@ -31,7 +31,7 @@
%<*driver>
% \fi
\ProvidesFile{ltlists.dtx}
- [2023/05/17 v1.0t LaTeX Kernel (List Environments)]
+ [2024/06/23 v1.0u LaTeX Kernel (List Environments)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltlists.dtx}
@@ -428,13 +428,13 @@
%
% DEFINE \dimen's and \count
% \end{oldcomments}
-% \begin{macro}{\topskip}
+% \begin{macro}{\topsep}
% \begin{macro}{\partopsep}
% \begin{macro}{\itemsep}
% \begin{macro}{\parsep}
% \begin{macro}{\@topsep}
% \begin{macro}{\@topsepadd}
-% \begin{macro}{\outerparskip}
+% \begin{macro}{\@outerparskip}
% \begin{macrocode}
%<*2ekernel>
\newskip\topsep
@@ -450,6 +450,7 @@
% \begin{macro}{\leftmargin}\begin{macro}{\rightmargin}
% \begin{macro}{\listparindent}\begin{macro}{\itemindent}
% \begin{macro}{\labelwidth}\begin{macro}{\labelsep}
+% \begin{macro}{\linewidth}
% \begin{macro}{\@totalleftmargin}
% \begin{macrocode}
\newdimen\leftmargin
@@ -462,7 +463,7 @@
\newdimen\@totalleftmargin \@totalleftmargin=\z@
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
-% \end{macro}\end{macro}
+% \end{macro}\end{macro}\end{macro}
%
% \begin{macro}{\leftmargini}
% \begin{macro}{\leftmarginii}
@@ -715,6 +716,66 @@
%
% This allows paragraph-making environments to work right when called
% by other environments. (Changed 27 Oct 86)
+%
+% In 2024 this logic was partially replaced with a new algorithm:
+% \begin{itemize}
+% \item
+% \cs{if@endpe} is now set globally to \texttt{true} or \texttt{false}.
+% \item
+% In addition \cs{@endpetrue} initiates an \cs{aftergroup} call
+% to \cs{propagate@doendpe} if it is used inside a group.
+% \item
+% \cs{propagate@doendpe} in turn checks the status of \cs{if@endpe}
+% and if that is \texttt{true} it calls \cs{@doendpe} otherwise it
+% does nothing.
+% \item
+% \cs{@doendpe} in turn calls \cs{@endpetrue} and also makes the
+% necessary changes to
+% \cs{par} and \cs{everypar} so that they handle as before any
+% empty line that follows the environment.
+% \item
+% Because of the \cs{@endpetrue} we get another \cs{aftergroup}, so the
+% mechanisnm slowly migrates out of several groups if those follow
+% immediately after the end of the environment. If, however, there is a new
+% paragraph started or an explicit \cs{par} before the next group ends then this will
+% result in a call to \cs{@endpefalse} and the migration stops
+% (note that \cs{propagate@doendpe} is still called once after the group but does nothing).
+% \item
+% Using this approach something like
+%\begin{verbatim}
+% {% some customization here
+% \begin{equation}
+% x=y
+% \end{equation}}
+% some text
+%\end{verbatim}
+% is still correctly identified as a paragraph continuation so that
+% there is no indentation before \texttt{some text}.
+% \item
+% We can get away with using global settings of \cs{if@endpe} even
+% in nested situations (without keeping track of the status in a
+% stack), because the switch change is made only at
+% the very end of such environments, basically directly before the
+% \cs{endgroup} in \cs{end}, and it is later set back to \texttt{false} by
+% the next \cs{everypar} or the next \cs{par}. Even if the
+% environment is called without using \cs{begin} \cs{end}, the
+% situation doesn't change (or rather cause a problem).
+% \item
+% However, there is one scenario where the new approach would
+% change the behavior. If a box is being built, e.g., with
+% \cs{setbox}, we have now the case that a \cs{@endpetrue}
+% inside would migrate out into a context in which it should not be
+% true (because the box might get used elsewhere, e.g., a float).
+% In the past, due to local switch changes, that didn't happen, i.e.,
+% \cs{if@endpe} would revert to \texttt{false} at the end of the box
+% definition.
+% \item
+% Thus, to avoid that one has to explicitly set it back to false at
+% the end of such constructions, just as we also need to prevent
+% colors from
+% migrating out. Thus the correct place to do this is
+% in \cs{color@endgroup} because that is always called at that point.
+% \end{itemize}
% \begin{macrocode}
\def\@endparenv{%
\addpenalty\@endparpenalty\addvspace\@topsepadd\@endpetrue}
@@ -732,9 +793,12 @@
% |\clubpenalty| back to its default.
% \changes{v1.0t}{2015/05/10}{Explicitly reset \cs{clubpenalty} before
% clearing \cs{everypar}; see also pr/0462 and pr/4065}
+% \changes{v1.0u}{2024/06/23}{Set \cs{if@endpe} to \texttt{false}
+% before calling \cs{par} (needed for tagging)}
% \begin{macrocode}
\clubpenalty\@clubpenalty
- \everypar{}\par\@endpefalse}\everypar
+ \@endpefalse
+ \everypar{}\par}%
% \end{macrocode}
%
% Use |\setbox0=\lastbox| instead of |\hskip -\parindent|
@@ -743,8 +807,9 @@
% \changes{v1.0k}{1995/11/07}{Enclosed \cs{setbox0} assignment by a
% group so that it leaves the contents of box $0$ intact.}
% \begin{macrocode}
- {{\setbox\z@\lastbox}%
- \everypar{}\@endpefalse}}
+ \everypar
+ {{\setbox\z@\lastbox}%
+ \everypar{}\@endpefalse}}
%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
%
@@ -761,12 +826,60 @@
%
% \begin{macro}{\if@endpe}
% \begin{macro}{\@endpefalse}
-% \begin{macro}{\@endpeltrue}
+% \begin{macro}{\@endpetrue}
+% \begin{macro}{\propagate@doendpe}
+% As outlined above these are no longer simple switches, but we
+% keep the name because it is used all over the place.
% \begin{macrocode}
\newif\if@endpe
-\@endpefalse
% \end{macrocode}
-% \end{macro}\end{macro}\end{macro}
+%
+% \changes{v1.0u}{2024/06/23}{Set \cs{if@endpe} globally and also set
+% up migration to the outside}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2024/11/01}%
+%<latexrelease> {\@endpetrue}{New @endpe handling}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@endpefalse{\global\let\if@endpe\iffalse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@endpetrue {%
+ \global\let\if@endpe\iftrue
+% \end{macrocode}
+% If we are inside a group then propagate to the outside:
+% \begin{macrocode}
+ \ifnum\currentgrouplevel>\z@
+ \aftergroup\propagate@doendpe
+ \fi
+}
+% \end{macrocode}
+% If \cs{if@endpe} is still true after the group ends, we run \cs{@doendpe}
+% that in turn runs another \cs{@endpetrue} (besides other things),
+% thus propagating further if necessary.
+% However, if the endpe situation got resolved and \cs{if@endpe} is \texttt{false}
+% then nothing further happens.
+% \begin{macrocode}
+\def\propagate@doendpe{\if@endpe \@doendpe \fi}
+% \end{macrocode}
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@endpetrue}{New @endpe handling}%
+%<latexrelease>
+%<latexrelease>
+%<latexrelease>\def\@endpefalse{\let\if@endpe\iffalse}
+%<latexrelease>\def\@endpetrue{\let\if@endpe\iftrue}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}\end{macro}
%
%
% \begin{macro}{\@mklab}
diff --git a/macros/latex-dev/base/ltluatex.dtx b/macros/latex-dev/base/ltluatex.dtx
index a15019dcd5..315b62cc9e 100644
--- a/macros/latex-dev/base/ltluatex.dtx
+++ b/macros/latex-dev/base/ltluatex.dtx
@@ -30,7 +30,7 @@
%<*plain>
% \fi
% \ProvidesFile{ltluatex.dtx}
-[2024/02/11 v1.2c
+[2024/08/16 v1.2e
% LaTeX Kernel (LuaTeX support)^^A
%\iffalse
%<plain> LuaTeX support for plain TeX (core)%
@@ -330,6 +330,8 @@
% field |date| in the usual \LaTeX{} format |yyyy/mm/dd|. Optional fields
% |version| (a string) and |description| may be used if present. This
% information will be recorded in the log. Other fields are ignored.
+% If the |version| begins with a digit, a \texttt{v} will be added at the
+% start in the log.
%
% \noindent
% \DescribeMacro{module_info}
@@ -420,7 +422,7 @@
% 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
+% Only the constraints for which both callback descriptions refer to callbacks
% registered at the time the callback is called will have an effect.
%
% \endgroup
@@ -1004,6 +1006,8 @@ local modules = modules or { }
% \begin{macro}{provides_module}
% \changes{v1.0a}{2015/09/24}{Function added}
% \changes{v1.0f}{2015/10/03}{use luatexbase\_log}
+% \changes{v1.2d}{2024/06/04}{Add \texttt{v} to version string if required (gh/1364)}
+% \changes{v1.2e}{2024/08/16}{Support missing version string (gh/1443)}
% Local function to write to the log.
% \begin{macrocode}
local function luatexbase_log(text)
@@ -1024,7 +1028,7 @@ local function provides_module(info)
luatexbase_log(
"Lua module: " .. info.name
.. spaced(info.date)
- .. spaced(info.version)
+ .. spaced(info.version and string_gsub(info.version or "","^(%d)","v%1"))
.. spaced(info.description)
)
modules[info.name] = info
@@ -1336,7 +1340,7 @@ luatexbase.new_luafunction = new_luafunction
% 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.
+% value indicates a normal ordering constraint.
%
% \changes{v1.2a}{2022/10/03}{Add rules for callback ordering}
% \begin{macrocode}
@@ -1398,7 +1402,7 @@ local callbacklist = setmetatable({}, {
end
list[i] = current.value
else
- -- Cycle occured. TODO: Show cycle for debugging
+ -- Cycle occurred. TODO: Show cycle for debugging
-- list[i] = ...
local remaining = {}
for name, entry in next, meta do
@@ -1432,7 +1436,7 @@ local callbacklist = setmetatable({}, {
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))
+ error('Cycle occurred at ' .. table.concat(cycle, ' -> ', 1, length))
end
end
end
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index 1a44905749..ed6b6f34e5 100644
--- a/macros/latex-dev/base/ltluatex.pdf
+++ b/macros/latex-dev/base/ltluatex.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks-code.pdf b/macros/latex-dev/base/ltmarks-code.pdf
index 50f1b1e0f8..98e16b3a12 100644
--- a/macros/latex-dev/base/ltmarks-code.pdf
+++ b/macros/latex-dev/base/ltmarks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks-doc.pdf b/macros/latex-dev/base/ltmarks-doc.pdf
index 7ae166d8a2..8d5833b40b 100644
--- a/macros/latex-dev/base/ltmarks-doc.pdf
+++ b/macros/latex-dev/base/ltmarks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmarks.dtx b/macros/latex-dev/base/ltmarks.dtx
index dcfa2fcb27..f71bfab9b6 100644
--- a/macros/latex-dev/base/ltmarks.dtx
+++ b/macros/latex-dev/base/ltmarks.dtx
@@ -17,21 +17,12 @@
%<*driver>
% \fi
\ProvidesFile{ltmarks.dtx}
- [2024/02/11 v1.0e LaTeX Kernel (Marks)]
+ [2024/07/08 v1.0g LaTeX Kernel (Marks)]
% \iffalse
%
\documentclass{l3doc}
\GetFileInfo{ltmarks.dtx}
-%\usepackage{ltmarks}
-
-% Fixing footnotes in functions and variables: this should be in l3doc!
-
-\newcommand\fixfootnote[2]{\footnotemark
- \AddToHookNext{env/#1/after}{\footnotetext{#2}}}
-\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}}
-\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}}
-
\EnableCrossrefs
\CodelineIndex
\begin{document}
@@ -220,7 +211,7 @@
% The commands are only meaningful inside the output routine, in
% other places their result is (while not random) unpredictable due
% to the way \LaTeX{} cuts text material into pages.
-%% \end{function}
+% \end{function}
%
%
%
@@ -293,6 +284,11 @@
% The \meta{pos\textsubscript{\itshape i}} argument can be either
% \texttt{top}, \texttt{first}, or \texttt{last}.
%
+% Important to note is that the comparison is not with respect to
+% the textual content of the marks but whether or not they
+% originated from the same \cs{InsertMark} command (or the L3 layer
+% version \cs{mark_insert:nn}).
+%
% If you wish to compare marks across different regions or across
% different classes, you have to do it using the generic test only
% available in the L3 programming layer or do it manually, i.e.,
@@ -809,6 +805,32 @@
\tl_new:c { g_@@_last-column_top_ #1 _tl }
\tl_new:c { g_@@_last-column_first_ #1 _tl }
\tl_new:c { g_@@_last-column_last_ #1 _tl }
+% \end{macrocode}
+% All marks will have an identification at the beginning of the form
+% \cs{@@_id:n}\texttt\{\meta{number}\texttt\} and therefore the
+% initial empty values should have that too, so that data extraction
+% is going to be uniform.
+% \changes{v1.0g}{2024/05/31}{Initialize all marks with an id, use 0
+% when a new class is made (gh/1359)}
+% \begin{macrocode}
+ \tl_set:cn { g_@@_page_top_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_page_first_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_page_last_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_previous-page_top_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_previous-page_first_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_previous-page_last_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_column_top_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_column_first_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_column_last_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_previous-column_top_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_previous-column_first_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_previous-column_last_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_first-column_top_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_first-column_first_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_first-column_last_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_last-column_top_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_last-column_first_ #1 _tl }{ \@@_id:n{0} }
+ \tl_set:cn { g_@@_last-column_last_ #1 _tl }{ \@@_id:n{0} }
}
% \end{macrocode}
% \end{macro}
@@ -1005,7 +1027,7 @@
%
% We disguise \cs{c_max_dim} in an odd looking csname, which then
% shows up as part of the display of an error message if that error
-% happens. This csname forms part of the error diplay so what
+% happens. This csname forms part of the error display so what
% you get is something like
%\begin{verbatim}
% ! Infinite glue shrinkage found in box being split.
@@ -1408,7 +1430,18 @@
% \begin{macrocode}
\@kernel@before@insertmark
\hook_use:n { insertmark }
- \unrestored@protected@xdef \g_@@_tmp_tl {#2}
+ \unrestored@protected@xdef \g_@@_tmp_tl
+ {
+% \end{macrocode}
+% To ensure that marks are unique we insert a hidden sequence
+% marker at the beginning of the content of the mark containing the
+% sequence number of the mark.
+% \changes{v1.0f}{2024/05/30}{Use sequence marker to make all marks
+% unique on nearby regions (gh/1359)}
+% \begin{macrocode}
+ \@@_id:n{ \int_use:N\g_@@_int }
+ #2
+ }
%<*trace>
\@@_debug:n{ \iow_term:x { Marks:~ set~#1~<-~
'\tl_to_str:V \g_@@_tmp_tl' ~ \msg_line_context: } }
@@ -1421,9 +1454,11 @@
% becomes empty, but not immediately; otherwise we just put
% \cs{g_@@_tmp_tl} in.
% \begin{macrocode}
- \tl_if_empty:NTF \g_@@_tmp_tl
- { \exp_not:n { \prg_do_nothing: } }
- { \exp_not:o { \g_@@_tmp_tl } }
+% this is no longer needed with 1.0f
+% \tl_if_empty:NTF \g_@@_tmp_tl
+% { \exp_not:n { \prg_do_nothing: } }
+% { \exp_not:o { \g_@@_tmp_tl } }
+ \exp_not:o { \g_@@_tmp_tl }
}
\group_end:
% \end{macrocode}
@@ -1445,15 +1480,43 @@
% \end{macro}
%
%
+% \begin{macro}{\@@_id:n}
+% A hidden marker is placed into every mark added by
+% \cs{mark_insert:nn}. It will will not show up in the output but
+% its argument (a counter value that is incremented) makes all
+% marks unique so the test for \enquote{equal} is not fooled by two
+% different marks having the same mark text.
+% \changes{v1.0f}{2024/05/30}{Use sequence marker to make all marks
+% unique on nearby regions (gh/1359)}
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_id:n #1 { }
+% \end{macrocode}
+% \end{macro}
+%
+%
% \begin{macro}[int]{\@kernel@before@insertmark}
% \begin{macro}{insertmark}
% By default \cs{label}, \cs{index}, and \cs{glossary} do nothing
% when the mark is inserted.
% \begin{macrocode}
+\int_new:N \g_@@_int
\cs_new:Npn \@kernel@before@insertmark {
\cs_set_eq:NN \label \scan_stop:
\cs_set_eq:NN \index \scan_stop:
\cs_set_eq:NN \glossary \scan_stop:
+% \end{macrocode}
+% We count each mark and use that to place a hidden marker in front
+% of the mark text. To ensure that there is no overflow (very
+% unlikely but you never know) we restart every 100000 marks. Thus,
+% if somebody puts more than that number of marks on a single page
+% you could construct a scenario in which that approach fails.
+% \changes{v1.0f}{2024/05/30}{Use sequence marker to make all marks
+% unique on nearby regions (gh/1359)}
+% \begin{macrocode}
+ \int_compare:nNnTF \g_@@_int < {99999}
+ { \int_gincr:N \g_@@_int }
+ { \int_gzero:N \g_@@_int }
+
}
% \end{macrocode}
% The public hook to augment the setup.
@@ -1473,10 +1536,20 @@
%
% If used with an unknown class or region they generate an error
% (fairly low-level because we are in an expandable context).
+%
+% Each mark starts with an id and while the id does not print it is
+% nevertheless better to remove it when returning the mark, so that
+% downstream manipulation of the data doesn't have to deal with it.
+% \changes{v1.0g}{2024/05/31}{Remove the id when returning the mark value (gh/1359)}
% \begin{macrocode}
-\cs_new:Npn \mark_use_first:nn #1#2 { \exp_not:v { g_@@_#1_first_#2_tl } }
-\cs_new:Npn \mark_use_last:nn #1#2 { \exp_not:v { g_@@_#1_last_#2_tl } }
-\cs_new:Npn \mark_use_top:nn #1#2 { \exp_not:v { g_@@_#1_top_#2_tl } }
+\cs_new:Npn \mark_use_first:nn #1#2 { \@@_use:v { g_@@_#1_first_#2_tl } }
+\cs_new:Npn \mark_use_last:nn #1#2 { \@@_use:v { g_@@_#1_last_#2_tl } }
+\cs_new:Npn \mark_use_top:nn #1#2 { \@@_use:v { g_@@_#1_top_#2_tl } }
+% \end{macrocode}
+% This is what the \cs{use_none:nn} accomplishes.
+% \begin{macrocode}
+\cs_new:Npn \@@_use:n #1 { \exp_not:o { \use_none:nn #1 } }
+\cs_generate_variant:Nn \@@_use:n { v }
% \end{macrocode}
% \end{macro}
%
@@ -1854,6 +1927,12 @@
% \begin{macrocode}
\seq_map_inline:Nn \g_@@_classes_seq
{
+% \end{macrocode}
+% The \texttt{previous-page} updates need to come before the
+% updates for \texttt{page} region because otherwise the values
+% to copy are already overwritten.
+% necessary values.
+% \begin{macrocode}
\tl_gset_eq:cc { g_@@_previous-page_top_ ##1 _tl }
{ g_@@_page_top_ ##1 _tl }
\tl_gset_eq:cc { g_@@_previous-page_first_ ##1 _tl }
@@ -1861,16 +1940,48 @@
\tl_gset_eq:cc { g_@@_previous-page_last_ ##1 _tl }
{ g_@@_page_last_ ##1 _tl }
% \end{macrocode}
-% The \texttt{page} updates need to come after the corresponding
-% updates for \texttt{previous-page} otherwise we loose the
-% necessary value.
+% To update the \texttt{top} we only have to copy what is in
+% \texttt{first-column}:
% \begin{macrocode}
\tl_gset_eq:cc { g_@@_page_top_ ##1 _tl }
{ g_@@_first-column_top_ ##1 _tl }
- \tl_gset_eq:cc { g_@@_ page_first_ ##1 _tl }
- { g_@@_first-column_first_ ##1 _tl }
- \tl_gset_eq:cc { g_@@_page_last_ ##1 _tl }
- { g_@@_last-column_last_ ##1 _tl }
+
+% \end{macrocode}
+% Updating the \texttt{first} mark for the \texttt{page} region is
+% more complicated. We first have to find out of there is any mark
+% in the first column (this can be done by comparing the \texttt{top} and
+% the \texttt{first} mark of of that region).
+% \changes{v1.0f}{2024/05/30}{Correct logic for first mark in page
+% region if first column contains no marks (gh/1359)}
+% \begin{macrocode}
+ \tl_if_eq:ccTF { g__@@_first-column_top_ ##1 _tl }
+ { g__@@_first-column_first_ ##1 _tl }
+ {
+% \end{macrocode}
+% If there is no mark in the first column we copy the first mark of
+% the last column. If that doesn't contain a mark we still get the
+% right result because the first mark is then equal to the top mark.
+% \begin{macrocode}
+ \tl_gset_eq:cc { g_@@_page_first_ ##1 _tl }
+ { g_@@_last-column_first_ ##1 _tl }
+ }
+ {
+% \end{macrocode}
+% On the other hand, if there is a mark in the first column we copy
+% over the \texttt{first} mark from that column.
+% \begin{macrocode}
+ \tl_gset_eq:cc { g_@@_page_first_ ##1 _tl }
+ { g_@@_first-column_first_ ##1 _tl }
+ }
+% \end{macrocode}
+% The logic for the \texttt{last} page mark is again simple, we can
+% just copy the value in the \texttt{last} mark of the last column.
+% If that column doesn't contain any marks, then the value in
+% \texttt{last} will be automatically the same as the \texttt{last}
+% from the first column.
+% \begin{macrocode}
+ \tl_gset_eq:cc { g_@@_page_last_ ##1 _tl }
+ { g_@@_last-column_last_ ##1 _tl }
}
}
%<*trace>
diff --git a/macros/latex-dev/base/ltmeta.dtx b/macros/latex-dev/base/ltmeta.dtx
index 1e4bdaed2c..cc3e62811d 100644
--- a/macros/latex-dev/base/ltmeta.dtx
+++ b/macros/latex-dev/base/ltmeta.dtx
@@ -16,19 +16,12 @@
%<*driver>
% \fi
\ProvidesFile{ltmeta.dtx}
- [2024/02/11 v1.0b LaTeX Kernel (Document Metadata)]
+ [2024/05/16 v1.0b LaTeX Kernel (Document Metadata)]
% \iffalse
%
\documentclass{l3doc}
\GetFileInfo{ltmeta.dtx}
-% Fixing footnotes in functions and variables: this should be in l3doc!
-
-\newcommand\fixfootnote[2]{\footnotemark
- \AddToHookNext{env/#1/after}{\footnotetext{#2}}}
-\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}}
-\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}}
-
\EnableCrossrefs
\CodelineIndex
\begin{document}
diff --git a/macros/latex-dev/base/ltmiscen.dtx b/macros/latex-dev/base/ltmiscen.dtx
index accdac24b2..423f51624c 100644
--- a/macros/latex-dev/base/ltmiscen.dtx
+++ b/macros/latex-dev/base/ltmiscen.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltmiscen.dtx}
- [2024/02/08 v1.2c LaTeX Kernel (Misc. Environments)]
+ [2024/07/10 v1.2e LaTeX Kernel (Misc. Environments)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltmiscen.dtx}
@@ -276,6 +276,21 @@
% \changes{v1.0w}{1994/11/30}{(DPC) Use \cs{@dofilelist}}
% \changes{v1.2a}{2022/11/06}{Repeat release info at the end (gh/944)}
% \begin{macrocode}
+% \end{macrocode}
+% If we roll back we have to drop stuff before adding chunks,
+% otherwise the code will just be appended, and thus doubled.
+% This would result in a harmless warning during the format
+% generation, because in that case the code chunk label doesn't
+% exist, and therefore can't be dropped.
+% \changes{v1.2e}{2024/07/10}{Drop code chunks before adding them to
+% avoid duplication in rollback (gh/1407)}
+% \begin{macrocode}
+%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/filelist]
+%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/warnings]
+%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/release]
+% \end{macrocode}
+%
+% \begin{macrocode}
\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings}
\AddToHook{enddocument/info}[kernel/release]{%
@@ -389,6 +404,18 @@
%<latexrelease>\NewHook{enddocument/afteraux}
%<latexrelease>\NewHook{enddocument/info}
%<latexrelease>\NewHook{enddocument/end}
+% \end{macrocode}
+% If we roll back we have to drop stuff before adding chunks,
+% otherwise the code will just be appended, and thus doubled.
+% \changes{v1.2e}{2024/07/10}{Drop code chunks before adding them to
+% avoid duplication in rollback (gh/1407)}
+% \begin{macrocode}
+%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/filelist]
+%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/warnings]
+%<latexrelease>\RemoveFromHook{enddocument/info}[kernel/release]
+% \end{macrocode}
+%
+% \begin{macrocode}
%<latexrelease>\AddToHook{enddocument/info}[kernel/filelist]{\@dofilelist}
%<latexrelease>\AddToHook{enddocument/info}[kernel/warnings]{\@enddocument@kernel@warnings}
%<latexrelease>\AddToHook{enddocument/info}[kernel/release]{%
@@ -719,6 +746,8 @@
% position of non-matching \cs{begin}.}
% \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}}
% \changes{v1.1p}{2019/08/27}{Make command robust}
+% \changes{v1.2d}{2024/06/23}{Separate \cs{begin} and \cs{end} definitions
+% for individual rollback}
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
@@ -758,54 +787,6 @@
}
% \end{macrocode}
%
-% The top level definition for \cs{end}. for an explanation see
-% below (this is the same as the 2019 version where it was
-% introduced, but for rollback we have to repeat it).
-% \begin{macrocode}
-\edef\end
- {\unexpanded{%
- \romannumeral
- \ifx\protect\@typeset@protect
- \expandafter %1
- \expandafter %2
- \expandafter %1
- \expandafter %3 expands the \csname inside \end<space>
- \expandafter %1
- \expandafter %2 expands \end<space>
- \expandafter %1 expands the \else
- \z@
- \else
- \expandafter\z@\expandafter\protect
- \fi
- }%
- \expandafter\noexpand\csname end \endcsname
- }
-% \end{macrocode}
-% Version that adds hooks (so different from the 2019 version). It
-% fixes tlb3722 but the change should perhaps be made in
-% \texttt{tabularx} instead.
-% \begin{macrocode}
-\@namedef{end }#1{%
- \romannumeral
- \IfHookEmptyTF{env/#1/end}%
- {\expandafter\z@}%
- {\z@\UseHook{env/#1/end}}%
- \csname end#1\endcsname\@checkend{#1}%
- \expandafter\endgroup\if@endpe\@doendpe\fi
- \UseHook{env/#1/after}%
- \if@ignore\@ignorefalse\ignorespaces\fi
-}
-% \end{macrocode}
-% Version without the fix for tlb3722 for the record:
-% \begin{macrocode}
-%\@namedef{end }#1{%
-% \UseHook{env/#1/end}%
-% \csname end#1\endcsname\@checkend{#1}%
-% \expandafter\endgroup\if@endpe\@doendpe\fi
-% \UseHook{env/#1/after}%
-% \if@ignore\@ignorefalse\ignorespaces\fi}%
-% \end{macrocode}
-%
% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
@@ -822,6 +803,7 @@
%<latexrelease> \csname #1\endcsname}}%
%<latexrelease> \@ignorefalse
%<latexrelease> \begingroup\@endpefalse\reserved@a}
+%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
% A version that doesn't start out with \cs{relax} when in
% typesetting mode would be the following, but since \cs{begin}
@@ -847,7 +829,45 @@
% \begingroup\@endpefalse\reserved@a}
% \end{macrocode}
%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\begin}{Making \begin/\end robust}%
+%<latexrelease>\def\begin#1{%
+%<latexrelease> \@ifundefined{#1}%
+%<latexrelease> {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
+%<latexrelease> {\def\reserved@a{\def\@currenvir{#1}%
+%<latexrelease> \edef\@currenvline{\on@line}%
+%<latexrelease> \csname #1\endcsname}}%
+%<latexrelease> \@ignorefalse
+%<latexrelease> \begingroup\@endpefalse\reserved@a}
+%<latexrelease>
+% \end{macrocode}
+% Also undo the internal commands as some packages unfortunately test
+% for their existence instead of using \cs{IfFormatAtLeastTF}.
+% \changes{v1.1y}{2021/02/08}{Undo the internals for robust \cs{begin}
+% and \cs{end} in rollback (gh/494)}
+% \begin{macrocode}
+%<latexrelease>\expandafter\let\csname begin \endcsname\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+%
+
+
+
+
% \begin{macro}{\end}
+% The top level definition for \cs{end}.
+% \changes{v1.2d}{2024/06/23}{Separate \cs{begin} and \cs{end} definitions
+% for individual rollback}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease> {\end}{Making \begin/\end robust}%
+% \end{macrocode}
% While \cs{begin} was made robust simply by using
% \cs{DeclareRobustCommand} we need to be a bit more subtle with
% \cs{end} as there are packages out there that try to look into
@@ -895,65 +915,129 @@
% \changes{v1.1p}{2019/08/27}{Make command robust}
%
% \begin{macrocode}
-%<latexrelease>\edef\end
-%<latexrelease> {\unexpanded{%
-%<latexrelease> \romannumeral
-%<latexrelease> \ifx\protect\@typeset@protect
-%<latexrelease> \expandafter %1
-%<latexrelease> \expandafter %2
-%<latexrelease> \expandafter %1
-%<latexrelease> \expandafter %3 expands the \csname inside \end<space>
-%<latexrelease> \expandafter %1
-%<latexrelease> \expandafter %2 expands \end<space>
-%<latexrelease> \expandafter %1 expands the \else
-%<latexrelease> \z@
-%<latexrelease> \else
-%<latexrelease> \expandafter\z@\expandafter\protect
-%<latexrelease> \fi
-%<latexrelease> }%
-%<latexrelease> \expandafter\noexpand\csname end \endcsname
-%<latexrelease> }
+\edef\end
+ {\unexpanded{%
+ \romannumeral
+ \ifx\protect\@typeset@protect
+ \expandafter %1
+ \expandafter %2
+ \expandafter %1
+ \expandafter %3 expands the \csname inside \end<space>
+ \expandafter %1
+ \expandafter %2 expands \end<space>
+ \expandafter %1 expands the \else
+ \z@
+ \else
+ \expandafter\z@\expandafter\protect
+ \fi
+ }%
+ \expandafter\noexpand\csname end \endcsname
+ }
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
% And here is the original definition of \cs{end} the way it was in
% \LaTeX{} for several decades now hidden in \verb*=\end =.
% \begin{macrocode}
-%<latexrelease>\@namedef{end }#1{%
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\end}{Making \begin/\end robust}%
+%<latexrelease>\def\end#1{%
%<latexrelease> \csname end#1\endcsname\@checkend{#1}%
%<latexrelease> \expandafter\endgroup\if@endpe\@doendpe\fi
%<latexrelease> \if@ignore\@ignorefalse\ignorespaces\fi}
+%<latexrelease>
%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
-% An here the rollback in case that is ever needed.
+% \end{macro}
+
+
+
+% \begin{macro}{\end\verbvisiblespace}
+% The internal version with a space at the end.
% \begin{macrocode}
-%<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease> {\begin}{Making \begin/\end robust}%
-%<latexrelease>\def\begin#1{%
-%<latexrelease> \@ifundefined{#1}%
-%<latexrelease> {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
-%<latexrelease> {\def\reserved@a{\def\@currenvir{#1}%
-%<latexrelease> \edef\@currenvline{\on@line}%
-%<latexrelease> \csname #1\endcsname}}%
-%<latexrelease> \@ignorefalse
-%<latexrelease> \begingroup\@endpefalse\reserved@a}
-%<latexrelease>\def\end#1{%
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2024/11/01}%
+%<latexrelease> {\end!space}{New @endpe handling}%
+\@namedef{end }#1{%
+ \romannumeral
+ \IfHookEmptyTF{env/#1/end}%
+ {\expandafter\z@}%
+ {\z@\UseHook{env/#1/end}}%
+ \csname end#1\endcsname\@checkend{#1}%
+% \end{macrocode}
+% We can now close the environment group and due to the new
+% \cs{if@endpe} handling we no longer need to \cs{expandafter}
+% out of the group.
+% \changes{v1.2d}{2024/06/23}{Adjust for new \texttt{@endpe} handling}
+% \begin{macrocode}
+% \expandafter\endgroup\if@endpe\@doendpe\fi
+ \endgroup
+ \UseHook{env/#1/after}%
+ \if@ignore\@ignorefalse\ignorespaces\fi
+}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% Version that adds hooks (so different from the 2019 version). It
+% fixes tlb3722 but the change should perhaps be made in
+% \texttt{tabularx} instead.
+% \begin{macrocode}
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\end!space}{Use hook system}%
+%<latexrelease>
+%<latexrelease>\@namedef{end }#1{%
+%<latexrelease> \romannumeral
+%<latexrelease> \IfHookEmptyTF{env/#1/end}%
+%<latexrelease> {\expandafter\z@}%
+%<latexrelease> {\z@\UseHook{env/#1/end}}%
+%<latexrelease> \csname end#1\endcsname\@checkend{#1}%
+%<latexrelease> \expandafter\endgroup\if@endpe\@doendpe\fi
+%<latexrelease> \UseHook{env/#1/after}%
+%<latexrelease> \if@ignore\@ignorefalse\ignorespaces\fi
+%<latexrelease>}
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% Version without the fix for tlb3722 for the record:
+%\begin{verbatim}
+%\@namedef{end }#1{%
+% \UseHook{env/#1/end}%
+% \csname end#1\endcsname\@checkend{#1}%
+% \expandafter\endgroup\if@endpe\@doendpe\fi
+% \UseHook{env/#1/after}%
+% \if@ignore\@ignorefalse\ignorespaces\fi}%
+% \end{verbatim}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease> {\end!space}{Making \begin/\end robust}%
+%<latexrelease>
+%<latexrelease>\@namedef{end }#1{%
%<latexrelease> \csname end#1\endcsname\@checkend{#1}%
%<latexrelease> \expandafter\endgroup\if@endpe\@doendpe\fi
%<latexrelease> \if@ignore\@ignorefalse\ignorespaces\fi}
-%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
% \end{macrocode}
-% Also undo the internal commands as some packages unfortunately test
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\end!space}{Making \begin/\end robust}%
+% \end{macrocode}
+% Undo the internal command as some packages unfortunately test
% for their existence instead of using \cs{IfFormatAtLeastTF}.
% \changes{v1.1y}{2021/02/08}{Undo the internals for robust \cs{begin}
% and \cs{end} in rollback (gh/494)}
% \begin{macrocode}
-%<latexrelease>\expandafter\let\csname begin \endcsname\@undefined
%<latexrelease>\expandafter\let\csname end \endcsname\@undefined
%<latexrelease>
%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index 0cbcc8a6ef..099a362d16 100644
--- a/macros/latex-dev/base/ltnews.pdf
+++ b/macros/latex-dev/base/ltnews.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews.tex b/macros/latex-dev/base/ltnews.tex
index d4a6d274ae..af21aad00b 100644
--- a/macros/latex-dev/base/ltnews.tex
+++ b/macros/latex-dev/base/ltnews.tex
@@ -40,7 +40,7 @@
\ProvidesFile{ltnews.tex}%
[2022/06/10 v1.4e Master file for ltnews*.tex (LaTeX Project)]
-\providecommand*{\lastissue}{39}
+\providecommand*{\lastissue}{40}
\InputIfFileExists{ltnews-lastissue.cfg}{}{}
diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf
index 5b14c49d10..49d956f8bc 100644
--- a/macros/latex-dev/base/ltnews01.pdf
+++ b/macros/latex-dev/base/ltnews01.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf
index 9151907387..f99811b46d 100644
--- a/macros/latex-dev/base/ltnews02.pdf
+++ b/macros/latex-dev/base/ltnews02.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf
index ceb51fe57f..3c598c03cc 100644
--- a/macros/latex-dev/base/ltnews03.pdf
+++ b/macros/latex-dev/base/ltnews03.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf
index 843ee94355..c1bd1ea4b4 100644
--- a/macros/latex-dev/base/ltnews04.pdf
+++ b/macros/latex-dev/base/ltnews04.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf
index e06b1c07e1..c7502d2a58 100644
--- a/macros/latex-dev/base/ltnews05.pdf
+++ b/macros/latex-dev/base/ltnews05.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf
index ebdc860ae9..0fed3db7aa 100644
--- a/macros/latex-dev/base/ltnews06.pdf
+++ b/macros/latex-dev/base/ltnews06.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf
index 7f45fffff7..94ab760d5c 100644
--- a/macros/latex-dev/base/ltnews07.pdf
+++ b/macros/latex-dev/base/ltnews07.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf
index 9be1cdc574..67b362a213 100644
--- a/macros/latex-dev/base/ltnews08.pdf
+++ b/macros/latex-dev/base/ltnews08.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf
index a887abd373..2dc3022a35 100644
--- a/macros/latex-dev/base/ltnews09.pdf
+++ b/macros/latex-dev/base/ltnews09.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf
index 39c76574ff..f7dd06b71b 100644
--- a/macros/latex-dev/base/ltnews10.pdf
+++ b/macros/latex-dev/base/ltnews10.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf
index 96f41e1033..71d611af63 100644
--- a/macros/latex-dev/base/ltnews11.pdf
+++ b/macros/latex-dev/base/ltnews11.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf
index 7e84f22d41..ece8055543 100644
--- a/macros/latex-dev/base/ltnews12.pdf
+++ b/macros/latex-dev/base/ltnews12.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf
index a253cbc7c9..57b2732ec9 100644
--- a/macros/latex-dev/base/ltnews13.pdf
+++ b/macros/latex-dev/base/ltnews13.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf
index 1d9507d396..e79da819e8 100644
--- a/macros/latex-dev/base/ltnews14.pdf
+++ b/macros/latex-dev/base/ltnews14.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf
index 8c3a9c7638..42d431f65f 100644
--- a/macros/latex-dev/base/ltnews15.pdf
+++ b/macros/latex-dev/base/ltnews15.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf
index 73126e3b26..fac9993362 100644
--- a/macros/latex-dev/base/ltnews16.pdf
+++ b/macros/latex-dev/base/ltnews16.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf
index 674fb17950..828adce881 100644
--- a/macros/latex-dev/base/ltnews17.pdf
+++ b/macros/latex-dev/base/ltnews17.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf
index 00d2aae9f1..b1d1b09aba 100644
--- a/macros/latex-dev/base/ltnews18.pdf
+++ b/macros/latex-dev/base/ltnews18.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf
index b764b6d09e..a776cf4b41 100644
--- a/macros/latex-dev/base/ltnews19.pdf
+++ b/macros/latex-dev/base/ltnews19.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf
index 40ad72b2f9..170f75f121 100644
--- a/macros/latex-dev/base/ltnews20.pdf
+++ b/macros/latex-dev/base/ltnews20.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf
index 88a1328927..05ab5bfc67 100644
--- a/macros/latex-dev/base/ltnews21.pdf
+++ b/macros/latex-dev/base/ltnews21.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf
index a525ff66ad..bdd619b7fa 100644
--- a/macros/latex-dev/base/ltnews22.pdf
+++ b/macros/latex-dev/base/ltnews22.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf
index e249261e27..cac39a0cab 100644
--- a/macros/latex-dev/base/ltnews23.pdf
+++ b/macros/latex-dev/base/ltnews23.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf
index 0b598eb978..1b8b11d09c 100644
--- a/macros/latex-dev/base/ltnews24.pdf
+++ b/macros/latex-dev/base/ltnews24.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf
index aa7a3d909d..483cbb9053 100644
--- a/macros/latex-dev/base/ltnews25.pdf
+++ b/macros/latex-dev/base/ltnews25.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf
index 82e773c79f..020cd3a994 100644
--- a/macros/latex-dev/base/ltnews26.pdf
+++ b/macros/latex-dev/base/ltnews26.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf
index c9f6df0909..58d2730ca1 100644
--- a/macros/latex-dev/base/ltnews27.pdf
+++ b/macros/latex-dev/base/ltnews27.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf
index 6a32f26cc1..f95bcbd985 100644
--- a/macros/latex-dev/base/ltnews28.pdf
+++ b/macros/latex-dev/base/ltnews28.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.tex b/macros/latex-dev/base/ltnews28.tex
index fec5c5c6c9..de4ecfa00a 100644
--- a/macros/latex-dev/base/ltnews28.tex
+++ b/macros/latex-dev/base/ltnews28.tex
@@ -126,7 +126,7 @@ happened. For example, the German word ``Gr\"o\ss e'' (height) entered on a
German keyboard could show up as ``Gr\v T\`ae'' on a different
computer using a different encoding by default.
-So in summmary the situation wasn't at all good and it was clear in
+So in summary the situation wasn't at all good and it was clear in
the early nineties that \LaTeXe{} (that was being developed to provide
a \LaTeX{} version usable across the world) had to provide a solution
to this issue.
@@ -318,7 +318,7 @@ As a result some parts of the columns did overprint each other.
The fix required a redesign of the output routines used by
\pkg{multicol} and while it ``should'' be transparent in other cases
-(and all tests in the regession test suite came out fine) there is the
+(and all tests in the regression test suite came out fine) there is the
off-chance that code that hooked into internals of \pkg{multicol}
needs adjustment.
diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf
index da2d15bafd..b01519ab8e 100644
--- a/macros/latex-dev/base/ltnews29.pdf
+++ b/macros/latex-dev/base/ltnews29.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf
index 54e32d8e22..6904ebf5cc 100644
--- a/macros/latex-dev/base/ltnews30.pdf
+++ b/macros/latex-dev/base/ltnews30.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf
index c4fe803b90..40ba3cad42 100644
--- a/macros/latex-dev/base/ltnews31.pdf
+++ b/macros/latex-dev/base/ltnews31.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf
index a2bb20351b..9cd5debfed 100644
--- a/macros/latex-dev/base/ltnews32.pdf
+++ b/macros/latex-dev/base/ltnews32.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews33.pdf b/macros/latex-dev/base/ltnews33.pdf
index 126ec75937..47c39c9c60 100644
--- a/macros/latex-dev/base/ltnews33.pdf
+++ b/macros/latex-dev/base/ltnews33.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews34.pdf b/macros/latex-dev/base/ltnews34.pdf
index 7bf3d48b15..75795d9553 100644
--- a/macros/latex-dev/base/ltnews34.pdf
+++ b/macros/latex-dev/base/ltnews34.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews35.pdf b/macros/latex-dev/base/ltnews35.pdf
index 35f0be31c7..956ea0c98f 100644
--- a/macros/latex-dev/base/ltnews35.pdf
+++ b/macros/latex-dev/base/ltnews35.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews35.tex b/macros/latex-dev/base/ltnews35.tex
index 8f0c9d6ae3..d8c985b813 100644
--- a/macros/latex-dev/base/ltnews35.tex
+++ b/macros/latex-dev/base/ltnews35.tex
@@ -547,7 +547,7 @@ enabling \cs{obeyspaces} within a %
quote environment.
\end{quote}
Thus, if you are keen to use the plain \TeX{} trick, you need to say
-\cs{let}\cs{obeyedlines}\texttt{=}\cs{cr} now.
+\cs{let}\cs{obeyedline}\texttt{=}\cs{cr} now.
%
\githubissue{367}
diff --git a/macros/latex-dev/base/ltnews36.pdf b/macros/latex-dev/base/ltnews36.pdf
index fb7b4cc348..2418ce0ff6 100644
--- a/macros/latex-dev/base/ltnews36.pdf
+++ b/macros/latex-dev/base/ltnews36.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews37.pdf b/macros/latex-dev/base/ltnews37.pdf
index e1d1be67d0..b1e668626e 100644
--- a/macros/latex-dev/base/ltnews37.pdf
+++ b/macros/latex-dev/base/ltnews37.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews38.pdf b/macros/latex-dev/base/ltnews38.pdf
index 2940e7cb04..eb3119f066 100644
--- a/macros/latex-dev/base/ltnews38.pdf
+++ b/macros/latex-dev/base/ltnews38.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews39.pdf b/macros/latex-dev/base/ltnews39.pdf
index 9303ba97ea..260701d4cb 100644
--- a/macros/latex-dev/base/ltnews39.pdf
+++ b/macros/latex-dev/base/ltnews39.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews39.tex b/macros/latex-dev/base/ltnews39.tex
index 92c835926f..8d306b0bf0 100644
--- a/macros/latex-dev/base/ltnews39.tex
+++ b/macros/latex-dev/base/ltnews39.tex
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 2023
+% Copyright 2024
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -34,12 +34,12 @@
\documentclass{ltnews}
-%% Maybe needed only for Chris' inadequate system:
+%% Maybe needed only for Chris' inadequate system:
\providecommand\Dash {\unskip \textemdash}
-%% NOTE: Chris' preferred hyphens!
-%%\showhyphens{parameters}
-%% \hyphenation{because parameters parameter}
+%% NOTE: Chris' preferred hyphens!
+%% \showhyphens{parameters}
+%% \hyphenation{because}
\usepackage[T1]{fontenc}
@@ -64,6 +64,8 @@
\providecommand\MiKTeX{\hologo{MiKTeX}}
\providecommand\CTAN{\textsc{ctan}}
\providecommand\TL{\TeX\,Live}
+
+
\providecommand\githubissue[2][]{\ifhmode\unskip\fi
\quad\penalty500\strut\nobreak\hfill
\mbox{\small\slshape(%
@@ -72,7 +74,7 @@
)}%
\par\smallskip}
%% But Chris has to mostly disable \href for his TEXPAD app:
-%% \def\href #1{} % Only For Chris' deficient TeX engine
+%% \def\href #1#2{#2} % Only For Chris' deficient TeX engine
% simple solution right now (just link to the first issue if there are more)
\def\getfirstgithubissue#1 #2\relax{#1}
@@ -102,31 +104,31 @@
\let\finalpagebreak\pagebreak % for TUB (if they use it)
+\let\finalvspace\vspace % for document layout fixes
\makeatletter
% maybe not the greatest design but normally we wouldn't have subsubsections
\renewcommand{\subsubsection}{%
- \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
- {-1em}{\@subheadingfont\colonize}%
+ \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+ {-1em}{\@subheadingfont\colonize}%
}
\providecommand\colonize[1]{#1:}
\makeatother
-\let\finalvspace\vspace % for document layout fixes
% Undo ltnews's \verbatim@font with active < and >
\makeatletter
-\def\verbatim@font{%
- \normalsize\ttfamily}
-\makeatletter
+\def\verbatim@font{\normalsize\ttfamily}
+\makeatother
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\providecommand\tubcommand[1]{}
\tubcommand{\input{tubltmac}}
\publicationmonth{June}
-\publicationyear{2024 --- DRAFT version for upcoming release}
-%\publicationyear{2024}
+%\publicationyear{2024 --- DRAFT version for upcoming release}
+\publicationyear{2024}
\publicationissue{39}
@@ -144,28 +146,46 @@
\section{Introduction}
-\emph{to write}
+The \LaTeX{} Project team remains strongly focused on producing
+automatically tagged PDF output for accessibility and reuse. At the
+beginning of 2024 the ISO PDF/UA-2 and the WTPDF (well-tagged PDF)
+standards were released and we are glad to be able to report that it
+is now possible to use \LaTeX{} to automatically produce documents
+that conform to these new standards.\footnote{At the present time we
+are still in a trial/prototype phase in which only a limited set of
+document classes and packages are supported. Over the next releases
+we expect to gradually lift these restrictions and eventually provide
+the full functionality as part of the core distribution, rather than
+through \texttt{latex-lab} modules.} A sample collection of such
+documents ranging from classical texts, such as the Bible, to recent
+technical papers submitted to arXiv.org can be found at
+\url{https://github.com/latex3/tagging-project/discussions/72}.
+
+In February Ulrike and Frank presented the current project status
+during the 5th International Workshop on \enquote{Digitization and
+ E-Inclusion in Mathematics and Science 2024} (DEIMS 2024) at Nihon
+University, Tokyo, Japan; see~\cite{39:deims}.
\section{News from the \enquote{\LaTeX{} Tagged PDF} project}
-In the previous \LaTeX{} News~\cite{39:ltnews38} we announced a first prototype
-support for tagged tabulars. Some of the necessary support code has
+In the previous \LaTeX{} News~\cite{39:ltnews38} we announced some prototype
+support for tagged tabulars. Some of the necessary code has
now been moved from \texttt{latex-lab} to the corresponding packages
(using sockets and plugs) and to the \LaTeX{} kernel (for those parts
that are also necessary for other aspects of tagging).
The kernel code specific to tagging is implemented in the file
-\texttt{lttagging.dtx}. For now it contains \cs{UseTaggingSocket}, a
+\texttt{lttagging.dtx}. For now it contains \cs{UseTaggingSocket}, a
special invocation command for sockets that are specific to
tagging. This enables us to also provide \cs{SuspendTagging} and
\cs{ResumeTagging}, i.e., a very efficient way to temporarily disable
-the whole tagging process. This is, for example, necessary, if some
+the whole tagging process. This is, for example, necessary if some
code is doing trial typesetting. In that case the trials should not
-generate tagging structures\Dash only the finally chosen version
+generate tagging structures\Dash only the finally-chosen version
should. Thus, \pkg{tabularx}, for example, stops the tagging while
doing its trials to figure out the correct column widths to use, and
-then renables tagging when the table is finally typeset.
+then re-enables tagging when the table is finally typeset.
Over time, \texttt{lttagging.dtx} will hold more general tagging code
as appropriate. For now it is only documented as part of
@@ -173,35 +193,35 @@ as appropriate. For now it is only documented as part of
for tagging, which will then also include the information currently
found in various other places, e.g., \texttt{tagpdf.pdf}.
-We also added support for a few missing commands
+We also added support for a few missing commands
described in Leslie Lamport's \emph{\LaTeX{}
-Manual}~\cite{38:Lamport}: If \texttt{phase-III} is used
+Manual}~\cite{39:Lamport}: If \texttt{phase-III} is used
the \cs{marginpar} command will be properly tagged (depending on
the PDF version) as an \texttt{Aside} or a \texttt{Note} structure.
In the standard classes \cs{maketitle} will be tagged if the additional
testphase module \texttt{title} is used.
The \texttt{math} module has been extended and now includes
-options to attach MathML files to the structures.
+options to attach MathML files to the structures.
First tests with a PDF reader and screen reader that support
-associated files looks very promising. Examples of PDF files tagged with the
-new method can be found at
-\url{https://github.com/latex3/tagging-project/discussions/56}.
+associated files look very promising. Examples of PDF files tagged with the
+new method can be found at
+\url{https://github.com/latex3/tagging-project/discussions/72}.
-At last various small bugs and problems reported at
+At last various small bugs and problems reported at
\url{https://github.com/latex3/tagging-project}
-has been fixed. Such a feedback is very valuable,
+have been fixed.
+Such feedback is very valuable,
so we hope to see you there and thank you for
any contribution, whether it is an issue or a post on a discussion
thread.
-
+
\section{Enhancements to the new mark mechanism}
-In June 2022 we introduced a new mark mechanism in
-\LaTeX{}~\cite[p.~76]{39:ltnews} that allows keeping track of multiple
-independent marks. It also properly supports top marks, something that wasn't
+In June 2022 we introduced a new mark mechanism~\cite[p.~76]{39:ltnews} that allows keeping track of multiple
+independent marks. It also properly supports top marks, something that wasn't
reliably possible with \LaTeX{} before.
There was, however, one limitation: to retrieve the marks from the
@@ -210,7 +230,7 @@ that \TeX{} would produce split marks that the mechanism could then
use. Unfortunately, \TeX{} gets very upset if it finds infinite
negative glue (e.g., from \cs{vss}) within this data. This is not
totally surprising because such glue would allow splitting off any
-amount of material as such glue would hide the size of it. \TeX{}
+amount of material as such glue would hide its size. \TeX{}
therefore responds with an error message if it find such glue while
doing a \cs{vsplit} operation (and it does so even if a later glue
item cancels the infinite glue).
@@ -228,11 +248,11 @@ that make use of its testing capabilities: the new mechanism
temporarily changes \cs{interactionmode} and, for implementation
reasons in \TeX{}, that results in extra newlines in the \texttt{.log}
file, so instead of seeing \texttt{[1] [2]} you will see each on
-separate lines. This means that test files might show difference of
+separate lines. This means that test files might show differences of
that nature, once the code is active, and must therefore be
-regenerated as necessary.} With the new code \TeX{} will neither stop
-nor show anything on the terminal. What we can't do, though, is to
-avoid that an error is written to the log file, but to make it clear
+regenerated as necessary.} With the new code \TeX{} will neither stop
+nor show anything on the terminal. What we can't do, though, is
+avoid an error being written to the log file, but to make it clear
that this error is harmless and should be ignored we have arranged the
code so that the error message, if it is issued, takes the following
format:
@@ -240,60 +260,29 @@ format:
\makeatletter
\def\verbatim@font{%
\small\ttfamily}
-\makeatletter
+\makeatother
\begin{verbatim}
! Infinite glue shrinkage found in box being split.
-<argument> Infinite shrink error above ignored !
-l. ... }
+<argument> Infinite shrink error above ignored !
+l. ... }
\end{verbatim}
Not perfect (especially the somewhat unmotivated \texttt{<argument>}),
-but you can only do so much if error messages and their texts are
+but you can only do so much when error messages and their texts are
hard-wired in the engine.
\endgroup
So why all this? There are two reasons: we do not lose marks in edge
-cases any longer and perhaps more importantly we are now also reliably
+cases any more, and perhaps more importantly we are now also reliably
able to extract marks from arbitrarily boxed data, something that
-wasn't possible at all before. This is, for example, necessary to
+wasn't possible at all before. This is necessary, for example, to
support extended marks in \env{multicols} environments or extract them
-from floats, marginpars, etc.
+from floats, marginpars, etc.\tubcommand{\looseness-1}
Details about the implementation can be found in \texttt{texdoc
ltmarks-code} or in the shorter \texttt{texdoc ltmarks-doc} (which
only describes the general concepts and the command interfaces).
-\section{New or improved commands}
-
-\subsection{\pkg{doc}: provide \cs{ProvideDocElement}}
-
-Beside \cs{NewDocElement} and \cs{RenewDocElement} we now also offer a
-\cs{ProvideDocElement} declaration that does nothing unless the doc
-element could be declared with \cs{NewDocElement}. This can be useful
-if documentation files are processed both individually as well as
-combined.
-
-
-\subsection{\pkg{doc}: better support for \pkg{upquote}}
-
-In \LaTeX{} News~37~\cite{39:ltnews37} we wrote that support for the
-\pkg{upquote} package was added to the \pkg{doc} package, but back
-then this was only done for \cs{verb}, and the \env{verbatim}
-environments. However, the bulk of code in a typical \texttt{.dtx} file is
-within \env{macrocode} or \env{macrocode*} environments which were not
-affected by adding \pkg{upquote}. We have now updated those, such that
-\pkg{upquote} alters the quote characters in these environments as
-well.
-%
-\githubissue{1230}
-
-\subsection{\pkg{ifthen}: guard against active characters in comparisons}
-The \cs{ifthenelse} command now ensures that \verb|<|, \verb|=| and
-\verb|>| are safe
-in numeric tests, even if they have been made active
-(typically by \pkg{babel} language shorthands.)
-%
-\githubissue{756}
\section{Providing \pkg{xtemplate} in the format}
@@ -302,26 +291,32 @@ into the kernel: the package \pkg{xparse}, which was integrated as \pkg{ltcmd}.
With this edition, we move another long-term development idea to stable status:
\emph{templates}.
-In this context, templates are a mechanism to abstract out various elements of a
-document (such as \enquote{sectioning}) in such a way that different
-implementations can be interchanged, and design decisions are set up efficiently
-and controllably.
+In this context, templates are a mechanism to abstract out various elements
+of a document (such as \enquote{sectioning}) in such a way that different
+implementations can be interchanged,
+%% CAR added text: --- FMi: but it is wrong
+%% variations of the document markup can be accommodated,
+and design decisions can be implemented efficiently and controllably.
In contrast to \pkg{ltcmd}, which provides a mechanism that many document
authors will exploit routinely, templates are a more specialised tool. We
anticipate that they will be used by a small number of programmers, providing
generic ideas that will then be used within document classes. Most document
-authors will therefore likely encounter templates directly only rarely.
+authors will therefore likely directly encounter templates only rarely.
We anticipate though that they will be \emph{using} templates provided
by the team or others.
+%% CAR added this paragraph: FMi: doesn't belong in ltnews
+%We shall continue to develop these generic ideas and interfaces in various ways: for example, to support the varied document markup possibilities
+%provided in \pkg{ltcmd} and elsewhere.
+
The template system requires three separate ideas
\begin{itemize}
\item Template \emph{type}: the \enquote{thing} we are using templates
for, such as \enquote{sectioning} or \enquote{enumerated-list}
\item A template: a combination of code and keys that can be used
to implement a type. Here for example we might have
- \enquote{standard-\LaTeX{}-sectioning} as a template for
+ \enquote{standard-\LaTeX{}-sectioning} as a template for
\enquote{sectioning}
\item One or more \emph{instances}: a specific use case of a template
where (some) keys are set to known values. We might for example see
@@ -331,16 +326,17 @@ The template system requires three separate ideas
As part of the move from the experimental \pkg{xtemplate} to kernel integration,
the team have revisited the commands provided. The stable set now comprises
\begin{itemize}
- \item \cs{NewTemplateType}
- \item \cs{DeclareTemplateInterface}
- \item \cs{DeclareTemplateCode}
- \item \cs{DeclareTemplateCopy}
- \item \cs{EditTemplateDefault}
- \item \cs{UseTemplate}
- \item \cs{DeclareInstance}
- \item \cs{DeclareInstanceCopy}
- \item \cs{EditInstance}
- \item \cs{UseInstance}
+\item \cs{NewTemplateType}
+\item \cs{DeclareTemplateInterface}
+\item \cs{DeclareTemplateCode}
+\item \cs{DeclareTemplateCopy}
+\item \cs{EditTemplateDefault}
+\item \cs{UseTemplate}
+\item \cs{DeclareInstance}
+\item \cs{DeclareInstanceCopy}
+\item \cs{EditInstance}
+\item \cs{UseInstance}
+\item \cs{IfInstanceExistsTF} and variants
\end{itemize}
To support existing package authors, we have released an updated version of
@@ -348,14 +344,89 @@ To support existing package authors, we have released an updated version of
existing commands provided in \pkg{xtemplate} will continue to work, but
we encourage programmers to move to the set above.
+
+\section{New or improved commands}
+
+\subsection{\pkg{doc}:\ Provide \cs{ProvideDocElement}}
+
+In addition to
+\cs{NewDocElement} and \cs{RenewDocElement} we now also offer a
+\cs{ProvideDocElement} declaration that does nothing unless the doc
+element could be declared with \cs{NewDocElement}. This can be useful
+if documentation files are processed both individually and
+combined.
+
+
+\subsection{\pkg{doc}:\ Better support for \pkg{upquote}}
+
+In \LaTeX{} News~37~\cite{39:ltnews37} we wrote that support for the
+\pkg{upquote} package was added to the \pkg{doc} package, but back
+then this was added only for \cs{verb} and the \env{verbatim}
+environments. However,
+in a typical \texttt{.dtx} file, most of the code will be in the body
+of some \env{macrocode} or \env{macrocode*} environments, and neither
+of these was affected by adding \pkg{upquote}.
+We have now updated \pkg{doc} so that
+\pkg{upquote} alters the quote characters in these environments as
+well.
+%
+\githubissue{1230}
+
+\subsection[\pkg{ifthen}:\ Allow active characters in comparisons]
+ {\pkg{ifthen}:\ Guard against active characters in comparisons}
+The \cs{ifthenelse} command now ensures that \verb|<|, \verb|=| and
+\verb|>| are safe
+in numeric tests, even if they have been made active
+(typically by \pkg{babel} language shorthands).
+%
+\githubissue{756}
+
+\subsection%[New conditionals: \cs{IfClassAtLeastT}, etc.]
+ {New conditionals:\ \cs{IfClassAtLeastT} and friends}
+
+Around 2020 we added a number of conditionals with CamelCase names, i.e.,
+%
+\cs{IfClassAtLeastTF},
+\cs{IfClassLoadedTF},
+\cs{IfClassLoadedWithOptionsFF},
+\cs{IfFormatAtLeastTF},
+\cs{IfPackageAtLeastTF},
+\cs{IfPackageLoadedTF}, and
+\cs{IfPackageLoadedWithOptionsTF}
+%
+to help arranging conditional code that depends on the release of a
+particular class, package or format. However, we only provided the
+\texttt{TF} commands and not also the \texttt{T} and \texttt{F}
+variants. This has now been changed.
+
+In 2023 we introduced \cs{IfFileAtLeastTF} but we did not also provide
+\cs{IfFileLoadedTF} at the same time. This conditional and its
+\texttt{T} and \texttt{F} variants have now also been added. Remember
+that one can only test for files that contain a \cs{ProvidesFile}
+line.
+%
+We did the same for the conditionals \cs{IfLabelExistsTF} and
+\cs{IfPropertyExistsTF}, also introduced in 2023.\footnote{By mistake they
+were initially introduced under the names \cs{IfLabelExistTF} and
+\cs{IfPropertyExistTF}; we corrected that at the same time. This is a
+breaking change, but the commands have been used so far only in
+kernel code.}
+%
+\githubissue[s]{1222 1262}
+
+
\section{Code improvements}
-\subsection{Loading packages at the top level}
-Classes and packages should only be loaded with \cs{documentclass}, \cs{usepackage},
-or class interface commands such as \cs{LoadClass} or \cs{RequirePackageWithOptions}
-at the top level, not inside a group. Previously \LaTeX\ did not check this,
+\subsection{Load packages only at the top level}
+
+Classes and packages must be loaded only by using the commands
+\cs{documentclass} and \cs{usepackage} or the class interface commands
+such as \cs{LoadClass} or \cs{RequirePackageWithOptions}; moreover,
+all of these must always be used at the top level, and not inside a
+group of any type (for example, within an environment).
+Previously \LaTeX\ did not check this,
which would often lead to low level errors later on if package declarations
-were reverted as a group ended.
+were reverted when a group ended.
\LaTeX\ now checks the group level and an error is thrown
if the class or package is loaded in a group.
%
@@ -374,8 +445,8 @@ corrected.
\subsection{Improve \pkg{fontenc} error message}
-If the \pkg{fontenc} is asked to load a font encoding for which it
-doesn't find a suitable \texttt{.def} file it generates an error
+If the \pkg{fontenc} package is asked to load a font encoding for which it
+doesn't find a suitable \texttt{.def} file then it generates an error
message indicating that the encoding name might be misspelled. That
is, of course, one of the possible causes, but another one is that the
installation is missing a necessary support package, e.g., that no
@@ -403,8 +474,8 @@ The \cs{listfiles} command provides useful information when finding issues
related to variation in package versions. However, this has to date relied on
the information in the \cs{ProvidesPackage} line, or similar: that can be
misleading if for example a file has been edited locally. We have now extended
-\cs{listfiles} to take an optional argument which will then include the MD5
-hash of each file (and the size of each file) in the \texttt{.log}. Thus for
+\cs{listfiles} to take an optional argument which can include the MD5
+hash and size of each file in the \texttt{.log}. Thus for
example you can use
\begin{verbatim}
\listfiles[hashes,sizes]
@@ -416,7 +487,7 @@ the standard release information.
\subsection{Optimize creation of simple document commands}
-Creating document commands using \cs{NewDocumentCommand}, etc., provides a very
+Creating document commands using declarations such as \cs{NewDocumentCommand}, etc., provides a very
flexible way of grabbing arguments. When the document command only takes simple
mandatory arguments, this has to-date added an overhead that could be avoided.
We have now refined the internal code path such that \enquote{simple} document
@@ -427,16 +498,17 @@ the direct equivalent to \cs{newcommand} is \cs{NewExpandableDocumentCommand}.
%
\githubissue{1189}
-\subsection{Handling of end-of-lines in \cs{NewDocumentCommand} \texttt{+v} arguments}
+\subsection{\texorpdfstring{\raggedright}{}Handling of end-of-lines in \texttt{+v} arguments of \cs{NewDocumentCommand} and friends}
-The \texttt{+v} argument type provided by \cs{NewDocumentCommand}, etc., allows
+The \texttt{+v} argument type provided by declarations such as \cs{NewDocumentCommand}, etc., allows
grabbing of multiple lines of text in a verbatim-like argument. Almost always,
the result of this grabbing will be used in a typesetting context. Previously,
the end-of-line characters were stored literally as category code~12
(\enquote{other}) \verb|^^M| tokens. However, these are difficult to work with
in general. We have now revised this behavior, such that end-of-line characters
are converted to the \cs{obeyedline} command when parsed by \texttt{+v}-type
-arguments. This may require adjustment in the source of some documents, but the
+arguments.
+This change may require adjustments to the source of some documents, but the
enhanced ability of users and programmers to exploit the \texttt{+v}-type
argument means we believe it is necessary.
@@ -448,26 +520,31 @@ directly into the kernel and in this way removed the need to load the
\cs{texteuro} available.
There is, however, a big problem with this \texttt{TS1} symbol
-encoding: only very few fonts can provide every glyph that is supposed
+encoding: only very few fonts provide every glyph that is supposed
to be part of \texttt{TS1}. This means that changing font families
might result in certain symbols becoming unavailable. This can be a
-major disaster if, for example, the \cs{texteuro} (\texteuro) or the
-\cs{textohm} (\textohm) are no longer printed in your document, just
-because you altered your text font family.
+major disaster if, for example,
+the symbol \cs{texteuro} (\texteuro) or \cs{textohm} (\textohm)
+no longer gets printed in your document, just because you altered the
+text font family.
-To mitigate this problem, we also introduced in 2020 the declaration
+To mitigate this problem, in 2020 we also introduced the declaration
\cs{DeclareEncodingSubset}. This declaration is supposed to be used in
font definition files for the \texttt{TS1} encoding to specify which
subset (we have defined 10 common ones) a specific font implements. If
such a declaration is used then missing symbols are automatically
-taking from a fallback font. While this is not perfect, it is the best
-you can do other than painstrickenly checking that your document only
-uses glyphs that the font supports and if necessary switch to a
-different font or avoid the missing symbols. See also the discussion
-in \cite{39:ltnews33}.
+taken from a fallback font.
+
+%% CAR -- this paragraph maybe needs more substantial rewording ??
+While this is not perfect, it is the best
+you can do other than painstakingly checking that your document
+%% CAR: was "painstrickenly" -- should be a word, but!!
+uses only glyphs that the font supports
+and, if necessary, switching to a different font or avoiding the
+missing symbols. See also the discussion in \cite{39:ltnews33}.
To jumpstart the process we also added declarations to the \LaTeX{}
-kernel for most of the fonts found in \TeX{}Live at the time\Dash with
+kernel for most of the fonts found in \TL{} at the time\Dash with
the assumption that such declarations would over time be superseded by
declarations in the \texttt{.fd} files. Unfortunately, this hasn't
happened yet (or not often) and so many of the initial declarations
@@ -475,16 +552,16 @@ went stale: several fonts got new glyphs added to them (so their
sub-encoding should have been changed but didn't); others (mainly due
to license issues) changed the family name and thus our declarations
became useless and the renamed fonts (now without a declaration) ended
-up in the default sub-encoding which offers only few glyphs; yet
-others such as CharisSIL (which triggered the GitHub issue) were
+up in the default sub-encoding that offers only a few glyphs;
+yet others such as CharisSIL (which triggered the GitHub issue) were
simply not around at the time.
-We have therefore, again attempted to provide the (currently) correct
+We have, therefore, again attempted to provide the (currently) correct
declarations, but it is obvious that this is not a workable
process. As we do not maintain the fonts we do not have the
information that something has changed, and to regularly check the
ever growing font support bundles is simply not possible. It is
-therefore very important that maintainers of font packages do not only
+therefore very important that maintainers of font packages not only
provide \texttt{.fd} files but also add such a declaration to every
\texttt{TS1...fd} font definition file that they distribute.
@@ -492,6 +569,7 @@ To simplify this process, we now provide a simple \LaTeX{} file
(\texttt{checkencodingsubset.tex}) for determining the correct (safe)
sub-encoding. If run, it asks for a font family and then outputs its
findings, for example, for \texttt{AlgolRevived-TLF} you will get:
+\tubcommand{\begin{small}}
\begin{verbatim}
-----------------------------------------
Testing font family AlgolRevived-TLF
@@ -520,6 +598,7 @@ TS1 encoding subset for AlgolRevived-TLF (ok)
Use sub-encoding 9
-----------------------------------------
\end{verbatim}
+\tubcommand{\end{small}\noindent}%
This output is meant for human consumption, e.g., you see which glyphs
are missing and why a certain sub-encoding is suggested, but it is not
that hard to use it in a script and extract the suggested sub-encoding
@@ -536,47 +615,142 @@ TS1 encoding subset for ppl (bad)
Use sub-encoding 0 (not 5)
-----------------------------------------
\end{verbatim}
-i.e., all glyphs are provided, while in reality more than twenty are
-missing and sub-encoding 5 as declared in the kernel is correct.
+thus it claims that
+all glyphs are provided, while in reality more than twenty are missing
+and sub-encoding 5, as declared in the kernel, is in fact correct.
%
\githubissue{1257}
+
+\subsection{Behavior when loading \pkg{textcomp} without options}
+
+When incorporating the \pkg{textcomp} package into the \LaTeX{} kernel, in
+the February 2020 release~\cite{39:ltnews31}, the default type of its package messages was changed from package info (\texttt{Package textcomp Info})
+to \LaTeX{} kernel info (\texttt{LaTeX Info}). But if \pkg{textcomp}
+was loaded without options, the message type got restored to package info.
+This restoration has now been canceled.
+
+Note that loading \pkg{textcomp} with one of the options \option{error},
+\option{warn}, or \option{info} still changes the message
+type to an error, warning, or info message from the \pkg{textcomp} package.
+%
+\githubissue{1333}
+
+
+\subsection{Rollback improvements}
+
+When requesting a rollback of the \LaTeX{} kernel and/or packages,
+several packages produced the error \enquote{Suspicious rollback date}
+because their rollback section contained only data about recent
+releases even if the package, such as \pkg{array}, was available since
+the first release of \LaTeXe{} in 1994. We now suppress this error and
+load the first release that is still part of the distribution (and
+hope for the best). This change was implemented for the packages
+\pkg{amsmath},
+\pkg{array},
+\pkg{doc},
+\pkg{graphics},
+\pkg{longtable},
+\pkg{multicol},
+\pkg{showkeys},
+\pkg{textcomp}, and
+\pkg{varioref}.
+%
+\githubissue{1333}
+
+
+
\section{Documentation improvements}
\subsection{Further updates to the guides}
We reported about the updated versions of \texttt{usrguide} and
-\texttt{clsguide} in \LaTeX{} News~37~\cite{39:ltnews37}. We have now
+\texttt{clsguide} in \LaTeX{} News~37~\cite{39:ltnews37}. We have now
revised \texttt{fntguide} as well to reflect the changes and macros
-added to the kernel over the last years of development. Note that the
+added to the kernel over the last years of development. Note that the
file name hasn't changed and there is no \texttt{fntguide-historic}.
\section{Bug fixes}
-\subsection{Fix inconsistent expansion on package option list}
+\subsection{Fix inconsistent expansion of the package option list}
-\LaTeX{} applies one-step expansion to raw option list of packages and
-classes so constructions like
+\LaTeX{} applies one-step expansion to the raw option list of packages
+and classes, so that constructions such as
\begin{verbatim}
\def\myoptions{opt1,opt2}
\usepackage[\myoptions]{foo}
\end{verbatim}
-are supported. But when a package declares its options with the new
-key/value approach~\cite{39:ltnews35} and was loaded a second time,
-its raw option list was not expanded and an error might be raised.
+are supported.
+%% CAR Rewritten sentence:
+But if a package declares its options using the new
+key/value approach~\cite{39:ltnews35} and it gets loaded a second time,
+then its raw option list will not be expanded and so an error might be raised.
This has now been corrected.
%
\githubissue{1298}
+\subsection{Fix logic for first mark (page region)}
+
+In the new mark mechanism introduced in June 2022~\cite{39:ltnews35} the result of
+\cs{FirstMark} on a two-column page was incorrect if the first column
+contained no marks. In that case it should have returned the first
+mark of the second column but didn't.
+This has now been corrected.
+
+Documents using \cs{leftmark} are not affected, because that command is still
+using the old mechanism for now.
+%
+\githubissue{1359}
+
+
+\subsection{Struts at the end of footnotes or \texttt{p} columns}
+
+To produce consistent spacing in footnotes and tabular
+\texttt{p}-cells \LaTeX{} adds a strut at the beginning and end of
+the content.
+%% CAR Rewritten sentences:
+%% It assumed, however, that the footnote or tabular cell ended in
+%% horizontal mode and until now added the struts unconditionally. As a
+%% result, with vertical material at the end of the material this strut
+%% started a new paragraph consisting of a single line with just the
+%% strut inside.
+This assumed, however, that the content of the footnote or tabular cell ended in
+horizontal mode and so, until now, these struts were unconditionally added;
+as a result, if this content ended with vertical material then this strut
+started a new paragraph consisting of a single line with just the
+strut in it. This has finally been corrected and now the placement
+logic for the strut changes when vertical mode is detected.
+
+\emph{(First seen in a bug report for \pkg{footmisc} in combination with
+\pkg{bigfoot})}
+
+
+\subsection{Fix a ``missing \cs{item}'' rollback error}
+
+If \LaTeX{} is rolled back to a date between 2023/06/01 (inclusive) and
+2024/06/01 (exclusive), any list-based environment would raise an
+error:
+%(shown on two lines for \textsl{TUGboat}):
+\begin{verbatim}
+! LaTeX Error: Something's wrong--perhaps
+a missing \item.
+\end{verbatim}
+This has now been corrected as a hotfix in patch level 2, by enhancing
+the 2023/06/01 version rollback code of the new paragraph mechanism.
+%
+\githubissue{1386}
+
+
+
\section{Changes to packages in the \pkg{amsmath} category}
-\subsection{\pkg{amsmath}: correct equation tag placement}
+\subsection{\pkg{amsmath}:\ Correct equation tag placement}
If there is not enough space to place an equation tag on the same line
-as the equation \pkg{amsmath} calculates a suitable offset and then
+as the equation then \pkg{amsmath} calculates a suitable offset and it
places the tag above (or below) the equation. In the case of the
\env{gather} environment this offset was not reset at the end, with
-the result that it applied to a following environment as well
+the result that it also got applied to any following environment,
resulting in incorrect spacing in certain situations. This has now
been corrected.
%
@@ -586,43 +760,52 @@ been corrected.
%\section{Changes to packages in the \pkg{graphics} category}
-
-
\section{Changes to packages in the \pkg{tools} category}
+\subsection{\pkg{array}, \pkg{longtable}, \pkg{tabularx}:\ Support tagging}
-\subsection{\pkg{array}, \pkg{longtable}, \pkg{tabularx}: support tagging}
+%% CAR Rewritten sentences
+These three packages have been extended so they can now, on request,
+produce tagged tabular. This is done by adding a number of sockets (see
+\cite{39:ltnews38}) that, by default, do nothing; but when tagged PDF
+is requested they get equipped with appropriate plugs.
-The three packages are now extended to enable producing tagged tabulars upon
-request. This is done by adding a number of sockets (see
-\cite{39:ltnews38}) that, by default, do nothing, but are equipped
-with appropriate plugs if tagged PDF is requested.
+In the previous \LaTeX{} release this was handled in \texttt{latex-lab}, by
+patching the packages when tagging was requested.
-In the previous \LaTeX{} release this was handled in
-\texttt{latex-lab} patching the packages when tagging was requested.
+\subsection{\pkg{array}:\ No \cs{unskip} in math cells}
+Math cells in the standard \env{array} environment of the kernel are
+not subject to space removal at the right end of the cell, i.e., explicit
+spaces from \cs{hspace} or \verb*|\ |, etc.\ are honored
+(normal spaces are automatically ignored in math). In the \pkg{array}
+package all spaces got removed by calling \cs{unskip} unconditionally,
+regardless of the type of cell.
+This difference in behavior has now been removed by correcting the processing of
+math cells in \pkg{array}.
+%
+\githubissue{1323}
-\subsection{\pkg{verbatim}: \cs{verb} showed visible spaces}
+\subsection{\pkg{verbatim}:\ \cs{verb} showed visible spaces}
A recent change in the kernel was not reflected in the \pkg{verbatim}
-package with the result that \cs{verb} showed visible spaces
+package, with the result that \cs{verb} showed visible spaces
(\verb*/ /) after the package was loaded. This has already been corrected
-in a hotfix for release 2023-11.
+in a hotfix for the November 2023 release.
%
\githubissue{1160}
-\subsection{\pkg{verbatim}: Support tabs in \cs{verbatiminput*}}
+\subsection{\pkg{verbatim}:\ Support tabs in \cs{verbatiminput*}}
-Mimicking the kernel update (November, 2023) that allowed \cs{verb*}
-to mark tabs as spaces, the \pkg{verbatim} package has been updated
-such that \cs{verbatiminput*} marks tabs as spaces as well.
-%
+Mimicking the November 2023 kernel update that allowed \cs{verb*}
+to mark tabs as spaces, the \pkg{verbatim} package
+has now been updated so that \cs{verbatiminput*} also marks tabs as spaces.
\githubissue{1245}
-\subsection{\pkg{multicol}: \cs{columnbreak} interferes with mark mechanism}
+\subsection{\pkg{multicol}:\ \cs{columnbreak} interferes with mark mechanism}
The \pkg{multicol} package has to keep track of marks (from
\cs{markright} or \cs{markboth}) as part of its output routine code
@@ -638,20 +821,34 @@ mechanism\Dash see the discussion at the beginning of the newsletter.
%
\githubissue{1130}
-\subsection{\pkg{showkeys}: Allow \cs{newline} in \pkg{amsthm} to work}
+\subsection{\pkg{showkeys}:\ Allow \cs{newline} in \pkg{amsthm} to work}
%
Previously \pkg{showkeys} added an extra box layer which disabled the \cs{newline}
of \pkg{amsthm} theorem styles. This extra box has now been avoided.
%
\githubissue{1123}
-
+\tubcommand{\newpage}
+\subsection{\pkg{xr}:\ Support links and properties}
+%
+The \pkg{xr} package implements a system for eXternal References.
+The \pkg{xr-hyper} package (in the \pkg{hyperref} bundle)
+extended this to also support links to external documents.
+%% CAR: Rewritten sentences:
+Using last year's extension of the \cs{label} command, which unified
+the label syntax of \LaTeX{} and \pkg{hyperref},
+it became possible to merge the two packages and thus make
+\pkg{xr-hyper} obsolete.
+With this change it is also possible to refer to properties
+that are stored in external documents using \cs{RecordProperties}.
+%
+\githubissue{1180}
\section{Changes to files in the \pkg{cyrillic} category}
\subsection{Correct definition of \cs{k}}
-Ages ago, the encoding specific definitions for various accent
+Ages ago, the encoding-specific definitions for various accent
commands were changed to guard against altering some parameter values
non-locally by mistake. For some reason the definition for \cs{k} in
the Cyrillic encodings \texttt{T2A}, \texttt{T2B}, and \texttt{T2C}
@@ -660,26 +857,23 @@ didn't get this treatment. This oversight has now been corrected.
\githubissue{1148}
-
-\begin{thebibliography}{9}
+\begin{thebibliography}{9}\frenchspacing
%\fontsize{9.3}{11.3}\selectfont
-%\bibitem{39:Lamport}
-%Leslie Lamport.
-%\newblock \emph{{\LaTeX}: {A} Document Preparation System: User's Guide and Reference
-% Manual}.
-%\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
-%\newblock ISBN 0-201-52983-1.
-%\newblock Reprinted with corrections in 1996.
-%
+\bibitem{39:Lamport}
+Leslie Lamport.
+\newblock \emph{{\LaTeX}: {A} Document Preparation System: User's Guide and Reference
+ Manual}.
+\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
+\newblock ISBN 0-201-52983-1.
+\newblock Reprinted with corrections in 1996.
\bibitem{39:ltnews} \LaTeX{} Project Team.
\emph{\LaTeXe{} news 1--39}. June, 2024.
\url{https://latex-project.org/news/latex2e-news/ltnews.pdf}
-%
-%
+
\bibitem{39:ltnews31} \LaTeX{} Project Team.
\emph{\LaTeXe{} news 31}. February, 2020.
\url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}
@@ -697,13 +891,19 @@ didn't get this treatment. This oversight has now been corrected.
\url{https://latex-project.org/news/latex2e-news/ltnews37.pdf}
\bibitem{39:ltnews38} \LaTeX{} Project Team.
- \emph{\LaTeXe{} news 38}. November 2023.\\
+ \emph{\LaTeXe{} news 38}. November 2023.
\url{https://latex-project.org/news/latex2e-news/ltnews38.pdf}
-%\bibitem{39:blueprint} Frank Mittelbach and Chris Rowley.
+\bibitem{39:deims} Frank Mittelbach and Ulrike Fischer.
+ \emph{Enhancing \LaTeX{} to automatically produce
+ tagged and accessible PDF}. \textsl{TUGboat} 45:1, 2024.
+ \url{https://latex-project.org/publications/indexbyyear/2024/}
+
+ %\bibitem{39:blueprint} Frank Mittelbach and Chris Rowley.
% \emph{\LaTeX{} Tagged PDF \Dash A blueprint for a large project}.\\
% \url{https://latex-project.org/publications/indexbyyear/2020/}
\end{thebibliography}
\end{document}
+
diff --git a/macros/latex-dev/base/ltnews40.pdf b/macros/latex-dev/base/ltnews40.pdf
new file mode 100644
index 0000000000..2fbd82566d
--- /dev/null
+++ b/macros/latex-dev/base/ltnews40.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews40.tex b/macros/latex-dev/base/ltnews40.tex
new file mode 100644
index 0000000000..211f638afc
--- /dev/null
+++ b/macros/latex-dev/base/ltnews40.tex
@@ -0,0 +1,406 @@
+% \iffalse meta-comment
+%
+% Copyright 2024
+% The LaTeX Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -——————————————
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2008 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+% Filename: ltnews40.tex
+%
+% This is issue 40 of LaTeX News.
+
+\NeedsTeXFormat{LaTeX2e}[2020-02-02]
+
+\documentclass{ltnews}
+
+%% Maybe needed only for Chris' inadequate system:
+\providecommand\Dash {\unskip \textemdash}
+
+%% NOTE: Chris' preferred hyphens!
+%% \showhyphens{parameters}
+%% \hyphenation{because}
+
+\usepackage[T1]{fontenc}
+
+\usepackage{lmodern,url,hologo}
+
+\usepackage{csquotes}
+\usepackage{multicol}
+\usepackage{color}
+
+\providecommand\hook[1]{\texttt{#1}}
+
+\providecommand\meta[1]{$\langle$\textrm{\itshape#1}$\rangle$}
+\providecommand\option[1]{\texttt{#1}}
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}
+
+
+\providecommand\eTeX{\hologo{eTeX}}
+\providecommand\XeTeX{\hologo{XeTeX}}
+\providecommand\LuaTeX{\hologo{LuaTeX}}
+\providecommand\pdfTeX{\hologo{pdfTeX}}
+\providecommand\MiKTeX{\hologo{MiKTeX}}
+\providecommand\CTAN{\textsc{ctan}}
+\providecommand\TL{\TeX\,Live}
+
+
+\providecommand\githubissue[2][]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://github.com/latex3/latex2e/issues/\getfirstgithubissue#2 \relax}%
+ {github issue#1 #2}%
+ )}%
+ \par\smallskip}
+
+
+% same for issues in the tagging repository:
+
+\providecommand\taggingissue[2][]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://github.com/latex3/tagging-project/issues/\getfirstgithubissue#2 \relax}%
+ {github tagging issue#1 #2}%
+ )}%
+ \par\smallskip}
+
+%% But Chris has to mostly disable \href for his TEXPAD app:
+%% \def\href #1#2{#2} % Only For Chris' deficient TeX engine
+
+% simple solution right now (just link to the first issue if there are several)
+\def\getfirstgithubissue#1 #2\relax{#1}
+
+\providecommand\sxissue[1]{\ifhmode\unskip
+ \else
+ % githubissue preceding
+ \vskip-\smallskipamount
+ \vskip-\parskip
+ \fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(\url{https://tex.stackexchange.com/#1})}\par}
+
+\providecommand\gnatsissue[2]{\ifhmode\unskip\fi
+ \quad\penalty500\strut\nobreak\hfill
+ \mbox{\small\slshape(%
+ \href{https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=#1\%2F\getfirstgithubissue#2 \relax}%
+ {gnats issue #1/#2}%
+ )}%
+ \par}
+
+
+
+\let\cls\pkg
+\providecommand\env[1]{\texttt{#1}}
+\providecommand\acro[1]{\textsc{#1}}
+
+\vbadness=1400 % accept slightly empty columns
+
+
+\let\finalpagebreak\pagebreak % for TUB (if they use it)
+\let\finalvspace\vspace % for document layout fixes
+
+\makeatletter
+% maybe not the greatest design but normally we wouldn't have subsubsections
+\renewcommand{\subsubsection}{%
+ \@startsection {subsubsection}{2}{0pt}{1.5ex \@plus 1ex \@minus .2ex}%
+ {-1em}{\@subheadingfont\colonize}%
+}
+\providecommand\colonize[1]{#1:}
+\makeatother
+
+
+% Undo ltnews's \verbatim@font with active < and >
+\makeatletter
+\def\verbatim@font{\normalsize\ttfamily}
+\makeatother
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand\tubcommand[1]{}
+\tubcommand{\input{tubltmac}}
+
+\publicationmonth{November}
+\publicationyear{2024 --- DRAFT version for upcoming release}
+
+\publicationissue{40}
+
+\begin{document}
+
+\maketitle
+{\hyphenpenalty=10000 \exhyphenpenalty=10000 \spaceskip=3.33pt \hbadness=10000
+\tableofcontents}
+
+\setlength\rightskip{0pt plus 3em}
+
+\medskip
+
+\section{Introduction}
+
+% To write
+
+\section{News from the \enquote{\LaTeX{} Tagged PDF} project}
+
+The tagging of tabulars has been extended: it is now possible to tag
+also row headers and to create cells that span more than one row.
+
+\emph{write more details ...}
+
+
+The math module will automatically generate a MathML file and use it to
+attach MathML associated files to the structure if lua\LaTeX{} and
+the \pkg{unicode-math} package are used and the \pkg{luamml} is found.
+This new feature can be disabled with \verb+\tagpdfsetup{math/mathml/luamml=false}+
+More details can be found in the documentation of \pkg{latex-lab-math}.
+
+
+\section{Handling paragraph continuation}
+
+Already \LaTeX~2.09 offered some automatism to detect whether or not
+text after a list or some other display environment is meant to be a
+continuation of the current paragraph or should start a new one. The
+document-level syntax for this is that a blank line after such an
+environment signals to \LaTeX{} that it should start a new paragraph; whilst
+no blank line signals that there should be no new paragraph and the
+text should be considered a continuation.
+
+Unfortunately, there are a number of cases where the original 2.09
+approach failed, e.g., with
+\begin{flushleft}
+ \ttfamily
+\{\meta{local customizations}\\
+\cs{begin}\{equation\} a<b \cs{end}\{equation\}\} \\
+\meta{some text}
+\end{flushleft}
+the \meta{some text} incorrectly started a new paragraph. Bug reports
+about this behavior can be traced back to the time \LaTeXe{} was
+developed, e.g., one test file from 1992 has a note that the above
+case was unfortunately not resolvable despite some improvements made back
+then. The main cause of the issue (as you probably guessed) is that
+the mechanism failed whenever the environment was executed within a
+group (\texttt{\{...\}}, \cs{begingroup}/\cs{endgroup}, or
+\cs{bgroup}/\cs{egroup} pair) that was closed before the next blank
+line was reached.
+
+While most of the time this could be visually corrected by adding some
+explicit \cs{noindent}, the situation got worse when we tried to
+implement tagged PDFs resulting in incorrect structures or worse.
+
+We therefore made a new attempt to resolve this problem in every
+situation and this new solution is rolled out in the current
+release.
+
+
+\section{New or improved commands}
+
+\section{Code improvements}
+
+\subsection{Avoiding keyval option clashes between classes and packages}
+
+In \LaTeX{} News~35~\cite{40:ltnews35} we introduced keyval option processing
+to the kernel. Following the standard for \LaTeXe{} options, keyval options
+given to the \cs{documentclass} line were treated as global and so parsed by
+every package. However, with keyvals, the likelihood of a name clash between a
+class-specific option and one used by a package is much higher than it is with
+simple strings. We have therefore refined the mechanism in the current release.
+
+When a class uses the kernel keyval processor, any options it recognises are
+recorded and any packages using the keyval processor will then \emph{skip}
+these \enquote{global} options. To allow for the case where a class directly
+uses an option which should be global (for example \texttt{draft}), a new key
+property \texttt{.pass-to-packages} has been added. This can then be set to
+indicate that this key is not to be skipped. For example
+\begin{verbatim}
+\DeclareKeys{
+ draft .if = {ifl@cls@draft},
+ draft .pass-to-packages = true,
+ mode .store = \cls@mode
+}
+\end{verbatim}
+in a class would create two options, \texttt{draft} and \texttt{mode}. The
+\texttt{draft} option will be treated in the normal way by packages using
+keyvals, but they will ignore the \texttt{mode} option: it is effectively
+marked as \enquote{private} to the class.
+
+
+
+\githubissue{1279}
+
+\section{Bug fixes}
+
+\subsection{Fix wrong file type in a rollback warning}
+
+When \LaTeX{} is rolled back to date \meta{date1} and a class or
+package with minimum date requirement \meta{date2} is to be loaded, a
+rollback warning is raised if \meta{date2} is later than \meta{date1}:
+\begin{verbatim}
+LaTeX Warning: Suspicious rollback/min-date
+ date given.
+ A minimal date of YYYY-MM-DD has been
+ specified for package '<pkgname>'.
+ But this is in conflict with a rollback
+ request to YYYY-MM-DD.
+\end{verbatim}
+
+In some cases this message showed a wrong file type, i.e.,
+\verb|document class '<pkgname>'| or \verb|package '<clsname>'|.
+This has now been corrected.
+%
+\githubissue{870}
+
+\subsection*{Fix existence check of document environments}
+\cs{NewDocumentEnvironment} and friends define (or redefine) a document
+environment using the space-trimmed \meta{envname}, but the existence
+check for \meta{envname} was done without space trimming. Thus when the
+user-specified \meta{envname} consists of leading and/or trailing
+space(s), it may lead to erroneously silent environment declaration.
+For example, in
+\begin{verbatim}
+ \NewDocumentEnvironment{myenv}{}{begin}{end}
+ \NewDocumentEnvironment{ myenv }{}{begin}{end}
+\end{verbatim}
+the first line defines a new environment \env{myenv} but the second
+line would check existence for \env{ myenv } (which is not yet defined),
+then redefine \env{myenv} environment without raising any errors.
+This has now been corrected.
+%
+\githubissue{1399}
+
+\subsection{\pkg{doc}:\ \cs{PrintDescribeMacro} in preamble}
+
+In \pkg{doc} version 2 it was possible alter the definition of
+\cs{PrintDescribeMacro} and similar commands in preamble. In version 3
+this stopped working because they go reset at the end of the
+preamble. This has now been implemented differently and changes in the
+preamble are possible again.
+%
+\githubissue{1000}
+
+
+\section{Improvement to \XeTeX\ \cs{showhyphens}}
+When using \cs{showhyphens} with \XeTeX, missing character warnings
+would be generated for any character not in Latin Modern. This has been
+corrected and the warnings are suppressed.
+%
+\githubissue{1380}
+
+
+\section{Avoid code duplication in rollback}
+
+When the kernel uses \cs{AddToHook} in a region that might be
+rolled back (which happens in a few places) and a document requests a
+rollback, then we have the situation that the hook already contains code to which we added the same
+(or slightly different) code during the
+rollback; this results in code duplication or, worse, in errors. This has
+now been corrected by dropping any such code chunk (if there is one) prior to
+adding the rollback code.
+%
+\githubissue{1407}
+
+
+
+
+\section{Changes to packages in the \pkg{amsmath} category}
+
+\section{Extend support for \cs{dots}}
+
+The implementation of \cs{dots} in \pkg{amsmath} has the feature that
+it selects different dots depending on the symbol that follows: e.g.,
+dots between commas would normally be on the baseline, while dots
+between binary or relational symols would be raised. However, when symbols such
+as \cs{cong} were protected from expansion in moving arguments (so
+that they worked in places such as headings) it had the unfortunate
+side-effect that the \cs{dots} magic stopped working for them. This
+has now been corrected.
+%
+\githubissue{1265}
+
+
+
+%\section{Changes to packages in the \pkg{graphics} category}
+
+\section{Changes to packages in the \pkg{tools} category}
+
+
+\subsection{\pkg{array}: Tagging support for \cs{cline}}
+
+In the last release we added tagging support for \pkg{array},
+\pkg{longtable} and other tabular packages, but we overlooked that the
+kernel definition for \cs{cline} also needs modification because the
+rule generated by the command needs to be tagged as an
+artifact. Furthermore, the processing of a \cs{cline} looks to the
+algorithm as if another row is added (which is technically what
+happens), thus it was also necessary to decrement the internal row
+counter to get a correct row count. This has now been corrected in
+\pkg{array} which is automatically loaded for tagging, so that all
+these packages are now fully compatible with the tagging code if it is
+turned on.
+%
+\taggingissue{134}
+
+
+\subsection{\pkg{longtable}: Extend caption type}
+
+The \pkg{longtable} has been extended and now provides the command \cs{LTcaptype}
+(stemming from the \pkg{ltcaption} package) to change
+the counter and caption type used by the \cs{caption} command from longtable.
+So with \verb+\renewcommand\LTcaptype{figure}+, a longtable will step the
+figure counter instead of the table counter and produce an
+entry in the list of figures. An empty definition, \verb+\renewcommand\LTcaptype{}+,
+will suppress increasing of the counter. This makes it easy to define an
+unnumbered variant of longtable:
+\begin{verbatim}
+\newenvironment{longtable*}
+ {\renewcommand\LTcaptype{}\longtable}
+ {\endlongtable}
+\end{verbatim}
+
+%\section{Changes to files in the \pkg{cyrillic} category}
+
+\begin{thebibliography}{9}\frenchspacing
+
+%\fontsize{9.3}{11.3}\selectfont
+
+\bibitem{40:Lamport}
+Leslie Lamport.
+\newblock \emph{{\LaTeX}: {A} Document Preparation System: User's Guide and Reference
+ Manual}.
+\newblock \mbox{Addison}-Wesley, Reading, MA, USA, 2nd edition, 1994.
+\newblock ISBN 0-201-52983-1.
+\newblock Reprinted with corrections in 1996.
+
+\bibitem{40:ltnews} \LaTeX{} Project Team.
+ \emph{\LaTeXe{} news 1--39}. June, 2024.
+ \url{https://latex-project.org/news/latex2e-news/ltnews.pdf}
+
+\bibitem{40:ltnews35} \LaTeX{} Project Team.
+ \emph{\LaTeXe{} news 35}. June 2022.
+ \url{https://latex-project.org/news/latex2e-news/ltnews35.pdf}
+
+\bibitem{40:ltnews39} \LaTeX{} Project Team.
+ \emph{\LaTeXe{} news 39}. June 2024.
+ \url{https://latex-project.org/news/latex2e-news/ltnews39.pdf}
+
+\end{thebibliography}
+
+\end{document}
diff --git a/macros/latex-dev/base/ltpara-code.pdf b/macros/latex-dev/base/ltpara-code.pdf
index 4c47bd85e4..3d2c2e4866 100644
--- a/macros/latex-dev/base/ltpara-code.pdf
+++ b/macros/latex-dev/base/ltpara-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltpara-doc.pdf b/macros/latex-dev/base/ltpara-doc.pdf
index 7dc5eab3f5..1247f38154 100644
--- a/macros/latex-dev/base/ltpara-doc.pdf
+++ b/macros/latex-dev/base/ltpara-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltpara.dtx b/macros/latex-dev/base/ltpara.dtx
index e9741ff935..b7b895350d 100644
--- a/macros/latex-dev/base/ltpara.dtx
+++ b/macros/latex-dev/base/ltpara.dtx
@@ -17,21 +17,12 @@
%<*driver>
% \fi
\ProvidesFile{ltpara.dtx}
- [2024/02/11 v1.0m LaTeX Kernel (paragraph hooks)]
+ [2024/06/29 v1.0n LaTeX Kernel (paragraph hooks)]
% \iffalse
%
\documentclass{l3doc}
\GetFileInfo{ltpara.dtx}
-%\usepackage{ltpara}
-
-% Fixing footnotes in functions and variables: this should be in l3doc!
-
-\newcommand\fixfootnote[2]{\footnotemark
- \AddToHookNext{env/#1/after}{\footnotetext{#2}}}
-\AddToHook{env/function/begin}{\def\footnote{\fixfootnote{function}}}
-\AddToHook{env/variable/begin}{\def\footnote{\fixfootnote{variable}}}
-
\EnableCrossrefs
\CodelineIndex
\begin{document}
@@ -489,7 +480,7 @@
% ended by \cs{RawParEnd}\footnote{Technical note for those who
% know their \textit{\TeX book\/}: the \cs{RawParEnd} command
% invokes the original \TeX{} engine definition of \cs{par} that
-% (soley) triggers the paragraph builder in \TeX{} when found
+% (solely) triggers the paragraph builder in \TeX{} when found
% inside unrestricted horizontal mode and does nothing in other
% processing modes.}
% and not by \cs{par} (or a blank line), because the latter will execute
@@ -643,7 +634,7 @@
% \glue(\parskip) 0.0 plus 1.0
% \glue(\baselineskip) 5.16669
%\end{verbatim}
-% but now there is anothe \cs{parskip} glue (that is always 0pt):
+% but now there is another \cs{parskip} glue (that is always 0pt):
%\begin{verbatim}
% \glue(\parskip) 0.0 plus 1.0
% \glue(\parskip) 0.0
@@ -828,6 +819,18 @@
\@@_handle_indent:
% \the \everypar % <--- done differently below
}
+% \end{macrocode}
+% \changes{v1.0n}{2024/06/23}
+% {Append \cs{everypar} toks to \cs{g_@@_standard_everypar_tl},
+% rollback 2023/06/01 (gh/1386)}
+% \begin{macrocode}
+%<latexrelease>\cs_set:Npn \@@_tmp:w #1#2#3#4#5 { }
+%<latexrelease>\tl_gput_right:Nx \g_@@_standard_everypar_tl {
+%<latexrelease> \exp_not:N \the
+%<latexrelease> \exp_not:N \toks
+%<latexrelease> \exp_after:wN \@@_tmp:w \token_to_meaning:N \everypar
+%<latexrelease> \c_space_tl
+%<latexrelease>}
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{2021/06/01}
%<latexrelease> {\g_@@_standard_everypar_tl}{minipage~ fix}
@@ -926,10 +929,10 @@
% the paragraph text starts.
% \begin{macrocode}
\tl_gput_right:Nx \g_@@_standard_everypar_tl {
- \exp_not:N \the
- \exp_not:N \toks
- \the \allocationnumber
- \c_space_tl
+ \exp_not:N \the
+ \exp_not:N \toks
+ \the \allocationnumber
+ \c_space_tl
}
% \end{macrocode}
% \end{macro}
@@ -1084,7 +1087,7 @@
% it should get removed before the hook code gets added so we have
% to arrange for this removal.
%
-% As in other simular cases, it maybe best to add here
+% As in other similar cases, it may be best to add here
% a \cs{nobreak} in case the hook itself adds glue and thus
% creates a non-explicit and unwanted potential breakpoont.
% On the other hand (as has been argued) the code in the hook
@@ -1265,7 +1268,7 @@
% redo the \cs{everypar} setting from the kernel, otherwise that
% gets lost (as it happens before that file is loaded).
% \begin{macrocode}
-\everypar{\@nodocument} %% To get an error if text appears before the
+\everypar{\@nodocument} %% To get an error if text appears before the \document
% \end{macrocode}
%
%
diff --git a/macros/latex-dev/base/ltpictur.dtx b/macros/latex-dev/base/ltpictur.dtx
index ea5ac4205b..c6fc5236a5 100644
--- a/macros/latex-dev/base/ltpictur.dtx
+++ b/macros/latex-dev/base/ltpictur.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltpictur.dtx}
- [2021/04/20 v1.2b LaTeX Kernel (Picture Mode)]
+ [2024/07/08 v1.2b LaTeX Kernel (Picture Mode)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltpictur.dtx}
@@ -1413,7 +1413,6 @@
% \begin{macrocode}
\newif\if@ovvline \@ovvlinetrue
\newif\if@ovhline \@ovhlinetrue
-% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
diff --git a/macros/latex-dev/base/ltproperties-code.pdf b/macros/latex-dev/base/ltproperties-code.pdf
index 056f6e328d..904b39e7f7 100644
--- a/macros/latex-dev/base/ltproperties-code.pdf
+++ b/macros/latex-dev/base/ltproperties-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltproperties-doc.pdf b/macros/latex-dev/base/ltproperties-doc.pdf
index 16e7530e2e..9b2962b737 100644
--- a/macros/latex-dev/base/ltproperties-doc.pdf
+++ b/macros/latex-dev/base/ltproperties-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltproperties.dtx b/macros/latex-dev/base/ltproperties.dtx
index 4a5fa78b5f..5b869437ba 100644
--- a/macros/latex-dev/base/ltproperties.dtx
+++ b/macros/latex-dev/base/ltproperties.dtx
@@ -2,7 +2,7 @@
%
% File: ltproperties.dtx
%
-% Copyright (C) 2021-2023 The LaTeX Project
+% Copyright (C) 2023-2024 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
@@ -30,7 +30,7 @@
%<*driver>
% \fi
\ProvidesFile{ltproperties.dtx}
- [2024/02/11 v1.0d LaTeX Kernel (Properties)]
+ [2024/06/29 v1.0e LaTeX Kernel (Properties)]
% \iffalse
%
\documentclass[full]{l3doc}
@@ -94,7 +94,7 @@
% and labels which consist of lists of these properties. The reason for the
% split is that individual labels will want to record some but not all
% properties. For examples, a label concerned with position would track
-% the $x$ and $y$ co-ordinates of the current point, but not for example
+% the $x$ and $y$ coordinates of the current point, but not for example
% the page number.
%
% In the current implementation, properties share a single namespace. This
@@ -274,7 +274,7 @@
% \cs{property_if_exist_p:n} \Arg{property}
% \cs{property_if_exist:nTF} \Arg{property} \Arg{true code} \Arg{false code}
% \end{syntax}
-% \LaTeXe{}-interface: \cs{IfPropertyExistTF}.\\
+% \LaTeXe{}-interface: \cs{IfPropertyExistsTF}.\\
% Tests if the \meta{property} has been declared.
% \end{function}
%
@@ -283,7 +283,7 @@
% \cs{property_if_recorded_p:n} \Arg{label}
% \cs{property_if_recorded:nTF} \Arg{label} \Arg{true code} \Arg{false code}
% \end{syntax}
-% \LaTeXe{}-interface: \cs{IfLabelExistTF}\\
+% \LaTeXe{}-interface: \cs{IfLabelExistsTF}\\
% Tests if the \meta{label} is known. This is also true if the label has been
% set with the standard \cs{label} command.
% \end{function}
@@ -348,16 +348,16 @@
% If \Arg{property} has not been declared an error is issued.
% \end{function}
%
-% \begin{function}{\IfPropertyExistTF}
+% \begin{function}{\IfPropertyExistsTF,\IfPropertyExistsT,\IfPropertyExistsF}
% \begin{syntax}
-% \cs{IfPropertyExistTF} \Arg{property} \Arg{true code} \Arg{false code}
+% \cs{IfPropertyExistsTF} \Arg{property} \Arg{true code} \Arg{false code}
% \end{syntax}
% Tests if the \meta{property} has been declared.
% \end{function}
%
-% \begin{function}{\IfLabelExistTF}
+% \begin{function}{\IfLabelExistsTF,\IfLabelExistsT,\IfLabelExistsF}
% \begin{syntax}
-% \cs{IfLabelExistTF} \Arg{label} \Arg{true code} \Arg{false code}
+% \cs{IfLabelExistsTF} \Arg{label} \Arg{true code} \Arg{false code}
% \end{syntax}
% Tests if the \meta{label} has been recorded. This is also true if a label
% has been set with the standard \cs{label} command.
@@ -404,7 +404,7 @@
%
% \begin{variable}{pagenum}
% (shipout) The current page as arabic number. This is suitable for integer operations and
-% comparisions.
+% comparisons.
% \end{variable}
%
% \begin{variable}{label}
@@ -746,9 +746,13 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\IfPropertyExistTF}
+% \begin{macro}{\IfPropertyExistsTF,\IfPropertyExistsT,\IfPropertyExistsF}
+% \changes{v1.0e}{2024-04-17}{Renamed \cs{IfPropertyExistTF} to
+% \cs{IfPropertyExistsTF} (gh/1262)}
% \begin{macrocode}
-\cs_new_eq:NN \IfPropertyExistTF \property_if_exist:eTF
+\cs_new_eq:NN \IfPropertyExistsTF \property_if_exist:eTF
+\cs_new:Npn \IfPropertyExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} }
+\cs_new:Npn \IfPropertyExistsF #1 {\property_if_exist:eTF {#1}{} }
% \end{macrocode}
% \end{macro}
%
@@ -771,9 +775,13 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\IfLabelExistTF}
+% \begin{macro}{\IfLabelExistsTF,\IfLabelExistsT,\IfLabelExistsF}
+% \changes{v1.0e}{2024-04-17}{Renamed \cs{IfLabelExistTF} to
+% \cs{IfLabelExistsTF} (gh/1262)}
% \begin{macrocode}
-\cs_new_eq:NN \IfLabelExistTF \property_if_recorded:eTF
+\cs_new_eq:NN \IfLabelExistsTF \property_if_recorded:eTF
+\cs_new:Npn \IfLabelExistsT #1#2 {\property_if_exist:eTF {#1}{#2}{} }
+\cs_new:Npn \IfLabelExistsF #1 {\property_if_exist:eTF {#1}{} }
% \end{macrocode}
% \end{macro}
%
@@ -947,8 +955,8 @@
%<latexrelease>\let \RefProperty \@undefined
%<latexrelease>\let \RefUndefinedWarn \@undefined
%<latexrelease>
-%<latexrelease>\let \IfPropertyExistTF \@undefined
-%<latexrelease>\let \IfLabelExistTF \@undefined
+%<latexrelease>\let \IfPropertyExistsTF \@undefined
+%<latexrelease>\let \IfLabelExistsTF \@undefined
%<latexrelease>\let \IfPropertyRecordedTF \@undefined
%<latexrelease>
%<latexrelease>\let\new@label@record \@undefined
diff --git a/macros/latex-dev/base/ltshipout-code.pdf b/macros/latex-dev/base/ltshipout-code.pdf
index 9c7fe80c98..504b5cc514 100644
--- a/macros/latex-dev/base/ltshipout-code.pdf
+++ b/macros/latex-dev/base/ltshipout-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltshipout-doc.pdf b/macros/latex-dev/base/ltshipout-doc.pdf
index 142fa00cb7..acd0ec8985 100644
--- a/macros/latex-dev/base/ltshipout-doc.pdf
+++ b/macros/latex-dev/base/ltshipout-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltsockets-code.pdf b/macros/latex-dev/base/ltsockets-code.pdf
index 8c920d6715..8fb7667275 100644
--- a/macros/latex-dev/base/ltsockets-code.pdf
+++ b/macros/latex-dev/base/ltsockets-code.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltsockets-doc.pdf b/macros/latex-dev/base/ltsockets-doc.pdf
index c3d42ecbaf..c136253279 100644
--- a/macros/latex-dev/base/ltsockets-doc.pdf
+++ b/macros/latex-dev/base/ltsockets-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltsockets.dtx b/macros/latex-dev/base/ltsockets.dtx
index 243963f7bc..c77c74b57f 100644
--- a/macros/latex-dev/base/ltsockets.dtx
+++ b/macros/latex-dev/base/ltsockets.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltsockets.dtx}
- [2024/02/11 v0.9a LaTeX Kernel (Sockets)]
+ [2024/06/29 v0.9a LaTeX Kernel (Sockets)]
% \iffalse
%
\documentclass{l3doc}
@@ -87,7 +87,7 @@
% executing code for each command or environment in the document
% source. Through various steps this code transforms the input and
% eventually generates typeset output appearing in a \enquote{galley}
-% from which individual pages are cut off in an asyncronous way. This
+% from which individual pages are cut off in an asynchronous way. This
% page generating process is normally not directly associated with
% commands in the input\footnote{Excepts for directives such as
% \cs{newpage}.} but is triggered whenever the galley has received
@@ -208,7 +208,7 @@
% simply calls some instance that implements the logic and that instance
% is altered by selecting a different templates and/or adjusting their
% parameters. However, in many cases customization through parameters is
-% overkill in such a case (or otherwise awkward, because paramerization
+% overkill in such a case (or otherwise awkward, because parameterization
% is better done on a higher level instead of individually for small
% blocks of code) and using the template mechanism just to replace one
% block of code with a different one results in a fairly high
@@ -400,7 +400,7 @@
%
% However, there is no requirement that sockets and
% hook names have to be different. In fact, if a certain action that
-% could overwise be specified as hook code has to be executed always
+% could otherwise be specified as hook code has to be executed always
% last (or first) one could ensure this by placing a socket (single
% action) after a hook (or vice versa) and using the same name to
% indicate the relationship, e.g.,
diff --git a/macros/latex-dev/base/lttab.dtx b/macros/latex-dev/base/lttab.dtx
index a85b4f8cf7..f114757821 100644
--- a/macros/latex-dev/base/lttab.dtx
+++ b/macros/latex-dev/base/lttab.dtx
@@ -31,7 +31,7 @@
%%% From File: lttab.dtx
%<*driver>
% \fi
-\ProvidesFile{lttab.dtx}[2021/04/20 v1.1s LaTeX Kernel (Columns)]
+\ProvidesFile{lttab.dtx}[2024/06/23 v1.1s LaTeX Kernel (Columns)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{lttab.dtx}
@@ -1499,7 +1499,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@testpatch}
+% \begin{macro}{\@testpach}
% \begin{macrocode}
\def\@testpach#1{\@chclass \ifnum \@lastchclass=\tw@ 4 \else
\ifnum \@lastchclass=3 5 \else
diff --git a/macros/latex-dev/base/lttagging.dtx b/macros/latex-dev/base/lttagging.dtx
index 585479df21..f4d2377837 100644
--- a/macros/latex-dev/base/lttagging.dtx
+++ b/macros/latex-dev/base/lttagging.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{lttagging.dtx}
- [2023/12/19 v1.0a LaTeX Kernel (tagging support)]
+ [2024/08/10 v1.0g LaTeX Kernel (tagging support)]
% \iffalse
\documentclass{l3doc}
\GetFileInfo{lttagging.dtx}
@@ -56,18 +56,11 @@
% \providecommand\socket[1]{\texttt{#1\DescribeSocket[noprint]{#1}}}
% \providecommand\plug[1]{\texttt{#1\DescribePlug[noprint]{#1}}}
%
-% \let\ProvideDocElement\NewDocElement
-%
% \ProvideDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl}
% \ProvideDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl}
% \ProvideDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl}
%
%
-% \section{}
-%
-%
-%
-% \MaybeStop{}
%
% \begin{macrocode}
%<*2ekernel|latexrelease>
@@ -125,10 +118,16 @@
% suspended with \cs{SuspendTagging} instead of changing the plugs of
% the tagging support sockets back and forth.
%
+% This means that with \cs{SuspendTagging} in force all socket
+% arguments are ignored (including the case when there is a single
+% one), i.e., all sockets used with \cs{UseTaggingSocket} behave as
+% if the \text{noop} plug is assigned.
+%
% It is possible to use the tagging support sockets with
-% \cs{UseSocket} directly, but in this case the socket remains active
-% if \cs{SuspendTagging} is in force. There my be reasons for doing
-% that but in general we expect to always use \cs{UseTaggingSocket}.
+% \cs{UseSocket} instead of \cs{UseTaggingSocket}, but in this case
+% the socket remains active if \cs{SuspendTagging} is in force. There
+% may be reasons for doing that, but in general we expect to always
+% use \cs{UseTaggingSocket}.
%
% The L3 programming layer versions \cs{tag_socket_use:n} and
% \cs{tag_socket_use:nn} are slightly more efficient than
@@ -138,6 +137,12 @@
% of the CamelCase command.
%
%
+% \MaybeStop{}
+%
+%
+% \section{Implementation}
+%
+%
%
% \begin{macro}{\SuspendTagging,\ResumeTagging}
%
@@ -149,7 +154,7 @@
\cs_new_eq:NN \ResumeTagging \use_none:n
% \end{macrocode}
%
-% A simplified version of this defnition should move to
+% A simplified version of this definition should move to
% \pkg{tagpdf} and dropped here, eventually.
% \begin{macrocode}
\AddToHook{begindocument/before}{
@@ -209,16 +214,87 @@
}
\ERRORusetaggingsocket % that should get a proper error message
}
-\ExplSyntaxOff
% \end{macrocode}
%
% \end{macro}
%
+% \subsection{Tagging sockets}
+% This collects tagging sockets that should be generally available
+% so that they can also be used even if the tagging code is not loaded.
+%
+% \subsubsection{Tagging support for paragraph setup}
+%
+% Paragraphs are tagged through the code in the para/hooks. This code is sometimes
+% adjusted, e.g. to produce a \enquote{flattened} paragraph or to use a different tag.
+% Sockets related to such code parts are collected here.
+%
+% \begin{macro}{\l__tag_block_flattened_level_int}
+% The block code needs to know if they are nested blockenvs inside
+% a flattened environment. For this it uses a counter. Inside some contexts,
+% e.g. at the begin of a minipage or a footnote this counter must be reset.
+% We therefore define the counter here so that we can use it in the following
+% socket.
+% \begin{macrocode}
+\int_new:N \l__tag_block_flattened_level_int
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{socketdecl}{tagsupport/para/restore}
+% This socket restores the para related settings to their default. It
+% should be used in places where ``normal'' paragraph tagging must be ensured, for example
+% at the begin of a footnote.
+% \begin{macrocode}
+\NewSocket{tagsupport/para/restore}{0}
+% \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{plugdecl}{default}
+% \begin{macrocode}
+\NewSocketPlug{tagsupport/para/restore}{default}
+ {
+ \tl_set:Nn \l__tag_para_main_tag_tl {text-unit}
+ \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl
+ \bool_set_false:N\l__tag_para_flattened_bool
+ \int_zero:N \l__tag_block_flattened_level_int
+ }
+\AssignSocketPlug{tagsupport/para/restore}{default}
+\ExplSyntaxOff
+% \end{macrocode}
+% \end{plugdecl}
+
+% \subsubsection{Tagging sockets for toc}
+
+% \begin{socketdecl}{tagsupport/toc/contentsline/before,
+% tagsupport/toc/contentsline/after}
+% Tagging sockets at the begin and end of contentsline.
+% They receive \emph{all} contentsline arguments as one argument
+% in four brace groups. The socket code should then use the parts it needs.
+% \begin{macrocode}
+\NewSocket{tagsupport/toc/contentsline/before}{1}
+\NewSocket{tagsupport/toc/contentsline/after}{1}
+% \end{macrocode}
+% \end{socketdecl}
%
-%
-%
-%
-%
+% \begin{socketdecl}{tagsupport/toc/starttoc/before,
+% tagsupport/toc/starttoc/after}
+% Tagging sockets for the begin and end of start of \cs{@starttoc}.
+% They take one argument, the extension.
+% \begin{macrocode}
+\NewSocket{tagsupport/toc/starttoc/before}{1}
+\NewSocket{tagsupport/toc/starttoc/after}{1}
+% \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{socketdecl}{tagsupport/toc/leaders/before,
+% tagsupport/toc/leaders/after}
+% Tagging sockets to make the dot leaders an artifact.
+% They do not take an argument.
+% \begin{macrocode}
+\NewSocket{tagsupport/toc/leaders/before}{0}
+\NewSocket{tagsupport/toc/leaders/after}{0}
+% \end{macrocode}
+% \end{socketdecl}
+%
% \subsection{Tagging support for table/tabular packages}
%
% The code uses a number of sockets to inject the tagging
@@ -260,6 +336,14 @@
% \end{macrocode}
% \end{socketdecl}
%
+% \begin{socketdecl}{tagsupport/tbl/init/celldata}
+% This socket is used in \cs{tbl_init_cell_data_for_table}, the command
+% that stores and initialize cell data to handle nested tables.
+% It can be used to restore similar tagging related values
+% \begin{macrocode}
+\NewSocket{tagsupport/tbl/init/celldata}{0}
+% \end{macrocode}
+% \end{socketdecl}
%
% \begin{socketdecl}{tagsupport/tbl/finalize}
% To fine tune the structure (change cells to header cells, remove
@@ -273,7 +357,14 @@
% \end{macrocode}
% \end{socketdecl}
%
-
+% \begin{socketdecl}{tagsupport/tbl/restore/celldata}
+% This socket is used in \cs{tbl_restore_outer_cell_data:}, the command
+% that restores cell data when quitting a nested table. It can be used to restore
+% similar tagging related values
+% \begin{macrocode}
+\NewSocket{tagsupport/tbl/restore/celldata}{0}
+% \end{macrocode}
+% \end{socketdecl}
% \begin{socketdecl}{tagsupport/tbl/colspan}
% This socket is used to manage spanning cells, e.g., a
@@ -331,6 +422,18 @@
% \end{socketdecl}
%
%
+% \begin{socketdecl}{tagsupport/tbl/leaders/begin,
+% tagsupport/tbl/leaders/end}
+% Sockets around leaders such as rules or dotted lines, that should
+% be tagged as artifacts, used, for example, in \cs{cline}.
+% \changes{v1.0c}{2024/07/13}{Sockets for \cs{cline} leaders added (tagging/134)}
+% \begin{macrocode}
+\NewSocket{tagsupport/tbl/leaders/begin}{0}
+\NewSocket{tagsupport/tbl/leaders/end}{0}
+% \end{macrocode}
+% \end{socketdecl}
+%
+%
%
%
%
@@ -557,6 +660,10 @@
)
}
% \end{macrocode}
+% Tagging has to initialize cell data too.
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/init/celldata}
+% \end{macrocode}
% These are the initial values when starting a table:
% \begin{macrocode}
\int_gzero:N \g_@@_row_int
@@ -656,6 +763,7 @@
\int_gset:Nn \g_@@_row_int { \l_@@_saved_row_tl }
\tl_gset_eq:NN \g_@@_span_tl \l_@@_saved_span_tl
\tl_gset_eq:NN \g_@@_table_cols_tl \l_@@_saved_table_cols_tl
+ \UseTaggingSocket{tbl/restore/celldata}
\@@_trace:n { ==>~ restored~cell~data:~
\int_use:N \g_@@_row_int,
\int_use:N \g_@@_col_int,
@@ -721,8 +829,15 @@
\int_compare:nNnT \g_@@_col_int > 0
{
\tbl_count_missing_cells:n {#1}
- \cr
}
+% \end{macrocode}
+% Even if we are at the start of a row we my have to do a \cs{cr},
+% so we do a \cs{crcr} always at the end.
+% \changes{v1.0b}{2024/06/10}
+% {Always issue a \cs{crcr} even if we are at the start of a
+% row to avoid problems with tabulary and similar code}
+% \begin{macrocode}
+ \crcr
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/lttemplates.dtx b/macros/latex-dev/base/lttemplates.dtx
index d27c232fe0..6e950d1ec2 100644
--- a/macros/latex-dev/base/lttemplates.dtx
+++ b/macros/latex-dev/base/lttemplates.dtx
@@ -36,7 +36,7 @@
%<*driver>
% \fi
\ProvidesFile{lttemplates.dtx}
- [2024-02-15 v1.0b LaTeX Kernel (Prototype document functions)]
+ [2024-06-04 v1.0c LaTeX Kernel (Prototype document functions)]
% \iffalse
\documentclass{l3doc}
\GetFileInfo{lttemplates.dtx}
@@ -225,7 +225,9 @@
% value, which will be used in by the template if the \meta{key} is
% not set explicitly. The \meta{default} should be of the correct
% form to be accepted by the \meta{key type} of the \meta{key}: this
-% is not checked by the code.
+% is not checked by the code. Expressions for numerical values are
+% evaluated when the template is used, thus for example values given
+% in terms of |em| or |ex| will be set respecting the prevailing font.
% \end{function}
%
% \begin{table}
@@ -318,7 +320,7 @@
% \toprule
% \multicolumn{1}{l}{Key-type} & Description of binding \\
% \midrule
-% boolean & Boolean variable, \emph{e.g}.~\cs{l_tmpa_bool} \\
+% \ & Boolean variable, \emph{e.g}.~\cs{l_tmpa_bool} \\
% choice
% & List of choice implementations
% (see Section~\ref{sec:choices-key}) \\
@@ -469,9 +471,9 @@
% the general idea of fixing some settings.
% \end{function}
%
-% \begin{function}{\IfInstanceExistT, \IfInstanceExistF, \IfInstanceExistTF}
+% \begin{function}{\IfInstanceExistsT, \IfInstanceExisstF, \IfInstanceExistsTF}
% \begin{syntax}
-% \cs{IfInstanceExistTF} \Arg{type} \Arg{instance} \Arg{true code} \Arg{false code}
+% \cs{IfInstanceExistsTF} \Arg{type} \Arg{instance} \Arg{true code} \Arg{false code}
% \end{syntax}
% Tests if the named \meta{instance} of a \meta{type} exists, and
% then inserts the appropriate code into the input stream.
@@ -728,13 +730,13 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\l_@@_default_tl}
+% \begin{variable}{\l_@@_default_tl}
% The default value for a key is recovered here from the property list
% in which it is stored.
% \begin{macrocode}
\tl_new:N \l_@@_default_tl
% \end{macrocode}
-%\ end{macro}
+% \end{variable}
%
% \begin{variable}{\l_@@_error_bool}
% A flag for errors to be carried forward.
@@ -1320,7 +1322,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \subsubsection{Storing values}
%
@@ -1913,7 +1914,8 @@
{ \@@_find_global: }
}
\tl_set:Nn \l_@@_key_name_tl {#1}
- \use:c { @@_assign_ \l_@@_keytype_tl : }
+ \cs_if_exist_use:cF { @@_assign_ \l_@@_keytype_tl : }
+ { \@@_assign_variable: }
}
{ \msg_error:nnn { template } { unknown-attribute } {#1} }
}
@@ -1923,7 +1925,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\@@_find_global:}
% \begin{macro}{\@@_find_global_aux:w}
@@ -2096,103 +2097,20 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\@@_assign_integer:}
-% \begin{macro}{\@@_assign_length:}
-% \begin{macro}{\@@_assign_muskip:}
-% \begin{macro}{\@@_assign_real:}
-% \begin{macro}{\@@_assign_skip:}
-% All of the calculated assignments use the same underlying code, with
-% only the low-level assignment function changing.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_assign_integer:
- {
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_variable:N \int_gset:Nn }
- { \@@_assign_variable:N \int_set:Nn }
- }
-\cs_new_protected:Npn \@@_assign_length:
- {
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_variable:N \dim_gset:Nn }
- { \@@_assign_variable:N \dim_set:Nn }
-}
-\cs_new_protected:Npn \@@_assign_muskip:
- {
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_variable:N \muskip_gset:Nn }
- { \@@_assign_variable:N \muskip_set:Nn }
- }
-\cs_new_protected:Npn \@@_assign_real:
- {
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_variable:N \fp_gset:Nn }
- { \@@_assign_variable:N \fp_set:Nn }
- }
-\cs_new_protected:Npn \@@_assign_skip:
- {
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_variable:N \skip_gset:Nn }
- { \@@_assign_variable:N \skip_set:Nn }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_assign_tokenlist:}
-% \begin{macro}{\@@_assign_tokenlist_aux:NN}
-% Life would be easy here if it were not for \cs{KeyValue}. To deal
-% correctly with that, we need to allow for the recovery a stored value
-% at point of use.
+% \begin{macro}{\@@_assign_variable:}
+% \begin{macro}{\@@_assign_variable:N, \@@_assign_variable:c}
+% A general-purpose function for all of the other assignments.
+% As long as the value is not coming from another variable, the stored
+% value is simply transferred for output.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_assign_tokenlist:
+\cs_new_protected:Npn \@@_assign_variable:
{
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_tokenlist_aux:NN \tl_gset:NV \tl_gset:Nn }
- { \@@_assign_tokenlist_aux:NN \tl_set:NV \tl_set:Nn }
- }
-\cs_new_protected:Npn \@@_assign_tokenlist_aux:NN #1#2
- {
- \@@_if_key_value:VTF \l_@@_value_tl
- {
- \@@_key_to_value:
- \tl_put_right:Ne \l_@@_assignments_tl
- {
- #1 \exp_not:V \l_@@_var_tl
- { \exp_not:V \l_@@_value_tl }
- }
- }
+ \@@_assign_variable:c
{
- \tl_put_right:Ne \l_@@_assignments_tl
- {
- #2 \exp_not:V \l_@@_var_tl
- { \exp_not:V \l_@@_value_tl }
- }
+ \@@_map_var_type: _
+ \bool_if:NT \l_@@_global_bool { g } set:Nn
}
}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_assign_commalist:}
-% Very similar for commas lists, so some code is shared.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_assign_commalist:
- {
- \bool_if:NTF \l_@@_global_bool
- { \@@_assign_tokenlist_aux:NN \clist_gset:NV \clist_gset:Nn }
- { \@@_assign_tokenlist_aux:NN \clist_set:NV \clist_set:Nn }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_assign_variable:N}
-% A general-purpose function for all of the numerical assignments.
-% As long as the value is not coming from another variable, the stored
-% value is simply transferred for output.
-% \begin{macrocode}
\cs_new_protected:Npn \@@_assign_variable:N #1
{
\@@_if_key_value:VT \l_@@_value_tl
@@ -2203,8 +2121,10 @@
{ \exp_not:V \l_@@_value_tl }
}
}
+\cs_generate_variant:Nn \@@_assign_variable:N { c }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_key_to_value:}
% \begin{macro}{\@@_key_to_value_auxi:w}
@@ -2653,15 +2573,16 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\IfInstanceExistT, \IfInstanceExistF, \IfInstanceExistTF}
+% \begin{macro}{\IfInstanceExistsT, \IfInstanceExistsF, \IfInstanceExistsTF}
% \changes{2024-02-15}{v1.0b}{New macros}
+% \changes{2024-04-17}{v1.0c}{Use plural names}
% More direct translation.
% \begin{macrocode}
-\cs_new:Npn \IfInstanceExistTF #1#2
+\cs_new:Npn \IfInstanceExistsTF #1#2
{ \@@_if_instance_exist:nnTF {#1} {#2} }
-\cs_new:Npn \IfInstanceExistT #1#2
+\cs_new:Npn \IfInstanceExistsT #1#2
{ \@@_if_instance_exist:nnT {#1} {#2} }
-\cs_new:Npn \IfInstanceExistF #1#2
+\cs_new:Npn \IfInstanceExistsF #1#2
{ \@@_if_instance_exist:nnF {#1} {#2} }
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/lttextcomp.dtx b/macros/latex-dev/base/lttextcomp.dtx
index c67bac00dd..7f247747d6 100644
--- a/macros/latex-dev/base/lttextcomp.dtx
+++ b/macros/latex-dev/base/lttextcomp.dtx
@@ -37,7 +37,7 @@
%
%
\ProvidesFile{lttextcomp.dtx}
- [2024/02/08 v1.1a LaTeX Kernel (text companion symbols)]
+ [2024/04/24 v1.1c LaTeX Kernel (text companion symbols)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
@@ -1525,16 +1525,19 @@
% \section{The \texttt{textcomp} package}
%
%
+% For any rollback request before 2018-08-11 we make an attempt by
+% loading the 2018 version.
+% \changes{v2.1b}{2024/04/24}
+% {Load the 2018 version when rolling back prior to 2018-08-11
+% (gh/1333)}
% \begin{macrocode}
%<*TS1sty>
-\providecommand\DeclareRelease[3]{}
-\providecommand\DeclareCurrentRelease[2]{}
-
+\DeclareRelease{}{1997-12-01}{textcomp-2018-08-11.sty}
\DeclareRelease{}{2018-08-11}{textcomp-2018-08-11.sty}
\DeclareCurrentRelease{}{2020-02-02}
\ProvidesPackage{textcomp}
- [2020/02/02 v2.0n Standard LaTeX package]
+ [2024/04/24 v2.1b Standard LaTeX package]
% \end{macrocode}
%
% A precaution in case this is used without rebuilding the format.
@@ -1590,8 +1593,8 @@
}
% \end{macrocode}
%
+% \changes{v2.1a}{2024/04/22}{Drop default option \texttt{info} (gh/1333)}
% \begin{macrocode}
-\ExecuteOptions{info}
\ProcessOptions\relax
% \end{macrocode}
%
diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx
index be7011a537..0df433450c 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -112,10 +112,10 @@
%</2ekernel>
%<latexrelease>\edef\latexreleaseversion
%<*2ekernel|latexrelease>
- {2024-06-01}
+ {2024-11-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-2}
+\def\patch@level{-3}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index 6e419ab172..5f38c6a69b 100644
--- a/macros/latex-dev/base/ltx3info.pdf
+++ b/macros/latex-dev/base/ltx3info.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf
index 0a1ddb4a7f..e9a337c294 100644
--- a/macros/latex-dev/base/ltxdoc.pdf
+++ b/macros/latex-dev/base/ltxdoc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf
index 18ca3f9247..a46919d21e 100644
--- a/macros/latex-dev/base/makeindx.pdf
+++ b/macros/latex-dev/base/makeindx.pdf
Binary files differ
diff --git a/macros/latex-dev/base/manifest.txt b/macros/latex-dev/base/manifest.txt
index ff7bf49ad1..21b3c0bff3 100644
--- a/macros/latex-dev/base/manifest.txt
+++ b/macros/latex-dev/base/manifest.txt
@@ -74,7 +74,9 @@
% ltnews35.tex -- What was new in the release dated 2022/06.
% ltnews36.tex -- What was new in the release dated 2022/11.
% ltnews37.tex -- What was new in the release dated 2023/06.
-
+% ltnews38.tex -- What was new in the release dated 2023/11.
+% ltnews39.tex -- What was new in the release dated 2024/06.
+%
%
% ltx3info.tex -- Information about the LaTeX3 project.
%
@@ -91,61 +93,69 @@
%
% cmfonts.fdd -- Font definitions for Computer modern fonts.
% fontdef.dtx -- Code for font definitions.
-% lthyphen.dtx -- Hyphenation support.
+% ltalloc.dtx -- Allocation of counters and others.
+% ltbibl.dtx -- Bibliography commands.
% ltboxes.dtx -- Code for making boxes.
% ltclass.dtx -- Class and option handling.
+% ltcntrl.dtx -- Program control macros.
% ltcounts.dtx -- Counters.
-% ltpageno.dtx -- Page numbering.
-% ltxref.dtx -- Cross referencing.
-% ltlength.dtx -- Lengths.
+% ltdefns.dtx -- Initial definitions.
% ltdirchk.dtx -- Support for search in current directory.
+% lterror.dtx -- Error handling.
% ltfiles.dtx -- File handling.
% ltfinal.dtx -- Code for debugging and final initialisations.
% ltfloat.dtx -- Float handling.
% ltfntcmd.dtx -- Various font switching commands.
+% ltfssaxes.dtx -- NFSS font axes
% ltfssbas.dtx -- NFSS Base macros
-% ltfsstrc.dtx -- NFSS Tracing (and tracefnt.sty)
+% ltfsscmp.dtx -- NFSS1 compatibility
% ltfssdcl.dtx -- NFSS Declarative interface
% ltfssini.dtx -- NFSS Initialisation
-% ltfsscmp.dtx -- NFSS1 compatibility
+% ltfsstrc.dtx -- NFSS Tracing (and tracefnt.sty)
+% lthyphen.dtx -- Hyphenation support.
% ltidxglo.dtx -- Index and glossary.
-% ltbibl.dtx -- Bibliography commands.
-% ltalloc.dtx -- Allocation of counters and others.
-% ltdefns.dtx -- Initial definitions.
-% ltcntrl.dtx -- Program control macros.
-% lterror.dtx -- Error handling.
-% ltpar.dtx -- Paragraphs.
-% ltspace.dtx -- Spacing, line and page breaking.
-% ltlogos.dtx -- Logos.
+% ltlength.dtx -- Lengths.
% ltlists.dtx -- Code for lists and related environments.
+% ltlogos.dtx -- Logos.
% ltluatex.dtx -- LuaTeX engine related code.
% ltmath.dtx -- Code for math.
% ltmiscen.dtx -- Code for miscellaneous environments.
% ltoutenc.dtx -- Code for output encoding commands.
% ltoutput.dtx -- LaTeX page makeup (output routine).
-% ltpictur.dtx -- The picture environment.
% ltpage.dtx -- Page styles and related commands.
+% ltpageno.dtx -- Page numbering.
+% ltpar.dtx -- Paragraphs.
+% ltpictur.dtx -- The picture environment.
% ltplain.dtx -- Things borrowed from the plain format.
+% ltsect.dtx -- Sectioning and title commands.
+% ltspace.dtx -- Spacing, line and page breaking.
% lttab.dtx -- The tabbing, tabular and array environments.
% lttextcomp -- The text companion symbols
% ltthm.dtx -- The theorem-like environments.
-% ltsect.dtx -- Sectioning and title commands.
% ltvers.dtx -- Version identification code.
+% ltxref.dtx -- Cross referencing.
% preload.dtx -- Code for preloading fonts.
% tulm.fdd -- Font definitions for TU latin modern fonts.
%
+%
% L3 Programming layer:
% -----------------
%
-% ltexpl.dtx -- Basic support
-% ltcmd.dtx -- Document command definition
-% lthooks.dtx -- Hook management
-% ltfilehook.dtx -- Hook management for file loading
-% ltshipout.dtx -- Hook management for \shipout
-% ltcmdhooks.dtx -- Hook management (generic) for commands
-% ltpara.dtx -- Hook management for paragraphs
+% ltcmd.dtx -- Document command definitions
+% ltexpl.dtx -- Basic support (LaTeX3 kernel integration)
+% lthooks.dtx -- Hook management (core commands and core hooks)
+% ltfilehook.dtx -- Hook management for file loading
+% ltshipout.dtx -- Hook management for \shipout
+% ltcmdhooks.dtx -- Hook management (generic) for commands
+% ltpara.dtx -- Hook management for paragraphs
+% ltkeys.dtx -- Key/value options
% ltmarks.dtx -- Mark management
+% ltmeta.dtx -- Document metadata
+% ltproperties.dtx -- Properties mechanism
% ltsockets.dtx -- Sockets and plugs management
+% lttagging.dtx -- Tagging support
+% lttemplate.dtx -- Template management
+%
%
% Standard Classes:
% -----------------
@@ -168,7 +178,7 @@
%
% alltt.dtx -- Implements the alltt environment.
% fix-cm.dtx -- Implements modified font choices for cm fonts.
-% latexrelease.dtx -- Controls fixes to LaTeX.
+% latexrelease.dtx -- Rollback functionality to previous releases
% graphpap.dtx -- Implements programming \graphpaper command..
% inputenc.dtx -- Implements eight-bit input.
% utf8ienc.dtx -- Supplement for inputenc to implement UTF8 encoding.
@@ -248,4 +258,6 @@
% ltxcheck.tex -- Test file for checking the LaTeX installation.
%
%
+% (There are probably a few files missing)
+%
% ======================================================================
diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf
index 2069363ee3..ffb74f3081 100644
--- a/macros/latex-dev/base/modguide.pdf
+++ b/macros/latex-dev/base/modguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf
index 8b45e7770c..ac6aff77ab 100644
--- a/macros/latex-dev/base/nfssfont.pdf
+++ b/macros/latex-dev/base/nfssfont.pdf
Binary files differ
diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf
index 5973decadb..68a40ba5fa 100644
--- a/macros/latex-dev/base/proc.pdf
+++ b/macros/latex-dev/base/proc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf
index 767e52d533..d996212322 100644
--- a/macros/latex-dev/base/slides.pdf
+++ b/macros/latex-dev/base/slides.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf
index 972afa5d75..86fa4d4a12 100644
--- a/macros/latex-dev/base/slifonts.pdf
+++ b/macros/latex-dev/base/slifonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf
index 0db61ba189..be615118f0 100644
--- a/macros/latex-dev/base/source2e.pdf
+++ b/macros/latex-dev/base/source2e.pdf
Binary files differ
diff --git a/macros/latex-dev/base/source2e.tex b/macros/latex-dev/base/source2e.tex
index 6ff2928a42..b82ef5664a 100644
--- a/macros/latex-dev/base/source2e.tex
+++ b/macros/latex-dev/base/source2e.tex
@@ -256,6 +256,8 @@ page_precedence "rnaA"
\DocInclude{ltsockets}% Socket and plug management (L3 module)
+ \DocInclude{lttemplates} % Prototype document functions (was xtemplate)
+
\DocInclude{ltalloc} % Allocation of counters and others.
\DocInclude{ltcntrl} % Program control macros.
@@ -266,7 +268,7 @@ page_precedence "rnaA"
\DocInclude{ltpara} % Paragraph hooks (L3 module)
- \DocInclude{ltmeta} % Document Metadara interface (L3 module)
+ \DocInclude{ltmeta} % Document Metadata interface (L3 module)
\DocInclude{ltspace} % Spacing, line and page breaking.
diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf
index 41ff62b0de..8876c3b6b7 100644
--- a/macros/latex-dev/base/syntonly.pdf
+++ b/macros/latex-dev/base/syntonly.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf
index ca468e2797..f46fd95ad7 100644
--- a/macros/latex-dev/base/tlc2.pdf
+++ b/macros/latex-dev/base/tlc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tlc3.err b/macros/latex-dev/base/tlc3.err
index 7c2c732568..a7f8af1bfa 100644
--- a/macros/latex-dev/base/tlc3.err
+++ b/macros/latex-dev/base/tlc3.err
@@ -1,4 +1,4 @@
-\newcommand\erratafiledate{2024/03/17} % needs / and not -
+\newcommand\erratafiledate{2024/08/07} % needs / and not -
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% To produce a printed version of this errata file run this file through
@@ -320,6 +320,9 @@
\let\u\underline % needs resetting after hyperref
+\usepackage{hologo}
+\providecommand\XeTeX{\hologo{XeTeX}}
+
\begin{document}
@@ -397,7 +400,7 @@ Good luck!
\begin{center}
\begin{tabular}{clr}
Contest period ends & Winner \\[4pt]
-2024/03 & Bernd Burkhardt & 52 suggestions\\
+2024/03 & Bernd Burghardt & 52 suggestions\\
\end{tabular}
\end{center}
@@ -466,6 +469,10 @@ beyond \> \u{B}eyond
\erroronpage{I-xx\ldots I-xxi}{}{FMi}{2023/04/04}{s}
Dot leaders have been changed on all sections.
+\erroronpage{xxv}{footnote}{FMi}{2024/07/11}{s}
+The package implementing the Silly Walk is called \u{\texttt{sillypage}}
+not \u{\texttt{sillywalk}} as claimed in the footnote.
+
\CHAPTER{Bibliography (Part I)}
@@ -555,7 +562,12 @@ ones.
%\CHAPTER{General}
%
-%\CHAPTER{Front matter}
+
+\CHAPTER{Front matter}
+
+\erroronpage{I-xli}{footnote}{FMi}{2024/07/11}{s}
+The package implementing the Silly Walk is called \u{\texttt{sillypage}}
+not \u{\texttt{sillywalk}} as claimed in the footnote.
\CHAPTER{Bibliography}
@@ -591,18 +603,37 @@ the index is always fully regenerated for new printings.
English. Personally, I prefer the version with accent (as does Don
Knuth) so it is deliberate and will not change.
+
+\CHAPTER{Preface}
+
+\erroronpage{I-xlii}{para 1, l.3}{FMi}{2024/04/01}{s}
+\u{the designer} of the Lato fonts \> \u{a co-designer} of the Lato fonts
+
+
\CHAPTER{Chapter 1 --- Introduction}
\erroronpage{I-5}{para 4, l.4}{kb}{2023/04/04}{s}
\u{of} the bugs \> \u{with} the bugs
-
-
\erroronpage{I-5}{para 5, l.5}{kb}{2023/04/04}{s}
not least \> \u{but} not least
+\erroronpage{I-10}{para -1, l.2}{ACa}{2024/06/05}{s}
+
+The value should have been shown with an upright mu, using
+\verb=\qty{0.01}{\micro\metre}= from the \pkg{siunitx} package.
+\erroronpage{I-18}{before 1.3.3}{ACa/FMi}{2024/06/05}{s}
+
+Add paragraph:\\
+%
+There are also two sections (2.2.8 and 2.3.4) providing low-level
+background information for reference---useful when looking at existing
+code in older document class files. They are set in a slightly smaller
+typeface to save space and to indicate their special nature as
+reference material, rather than material for daily use.
+
\CHAPTER{Chapter 2 --- The Structure of a \LaTeX{} Document}
\erroronpage{I-31}{para-1,l.-1}{BeB}{2024/03/17}{s}
@@ -617,6 +648,11 @@ Moved first line of page 35 to 34.
Moved first line of page 35 to 34.
+\erroronpage{I-70}{section 2.3.4}{FMi}{2023/06/05}{s}
+
+Add footnote: The whole section is set in a smaller font to indicate
+that is more a reference — helpful mainly when studying existing code.
+
\erroronpage{I-113}{listing}{FMi}{2023/05/14}{s}
Situation is the same in the 2023 distributions; listing output updated.
@@ -656,12 +692,20 @@ Use
\newcommand\sample[1]{\textnormal{\noindent #1:}
The limit is \qty{30}{\kmh} not $\qty{50}{\kmh}$.\par}}
\end{verbatim}
-so that both text and math usage of \verb=\pty= are compared in the example.
+so that both text and math usage of \verb=\qty= are compared in the example.
\erroronpage{I-182}{para 4}{BeB}{2024/03/17}{s}
Add sentence: The command \verb+\textcquote+ is used in Example 16-5-50 on page II-535.
+\erroronpage{I-195}{para 2}{FMi}{2024/07/20}{s}
+Replace the whole paragraph with:\\
+For the same reason \texttt{soul} was unable to cope with UTF-8 input
+characters if they are internally represented by several bytes. If you
+used such characters, you had to load \texttt{soulutf8} (by Heiko Oberdiek)
+instead of \texttt{soul} — since 2023, both packages are equivalent, thus you may
+always use the \texttt{soul} package.
+
\CHAPTER{Chapter 4 --- Basic Formatting Tools -- Larger \ldots}
\erroronpage{I-253}{para 2, l.-3}{YEi}{2023/11/27}{s}
@@ -669,6 +713,17 @@ Move comma:\\
and \textsf{thmtools} packages and \textsf{typed-checklist}\u{,} helps you write \> \\
and \textsf{thmtools} packages\u{,} and \textsf{typed-checklist} helps you write
+\erroronpage{I-286}{para 1, l.3}{DPC}{2024/07/15}{s}
+in this case \texttt{shade\u{d}thm} \> in this case \texttt{shadethm}
+
+\erroronpage{I-322}{para -1, l.-2}{MBe/FMi}{2024/08/07}{s}
+
+Change: \texttt{algorithm\u{s}} \> \texttt{algorithm\u{ic}}
+
+\textit{Reason: The package is called \texttt{algorithmic} and there
+is also \texttt{algorithm} to make floats, but the CTAN bundle (and
+its documentation) calls it \texttt{algorithms}.}
+
\erroronpage{I-323}{Table 4.4, left column}{BeB}{2023/07/25}{s}
Typo: Assembler (\u{N}otorola68k, x86masm) \> \\ Assembler (\u{M}otorola68k, x86masm)
@@ -707,6 +762,14 @@ is not shown.}
\u{\cs{right}} \> \u{\cs{rightmark}}
+\erroronpage{I-393}{Documentation of \rlap{\cs{IfMarksEqualTF}}}{FMi}{2024/05/31}{s}
+
+Add paragraph:
+Note that two retrieved mark values are only considered equal if they
+originated from the same \cs{InsertMark} command — it is not enough
+that they contain the same data, as that may be conincidental.
+
+
\CHAPTER{Chapter 6 --- Tabular Material}
@@ -722,17 +785,28 @@ text can be interpreted as a value, a somewhat ``random'' number and
the rest is dropped. For example, \texttt{31 December 2022} would
result in ``31.00'', which is probably not desired.
-\erroronpage{I-494}{para -2, l.3}{MRu}{2024/03/16}{s}
+\erroronpage{I-491}{exa 6-7-22, Booklet 114}{EOl}{2024/05/13}{s}
+ Change: remove `0,00' in `actual' column for item `loss'. (This
+is not really an error, but it looks better---and is consistent with the
+`actual' item of `profit' for Booklet 113.)
+\erroronpage{I-492}{footnote}{DPC}{2024/07/15}{s}
+called \u{\texttt{threetableex}} \> called \u{\texttt{threeparttablex}}
+
+\erroronpage{I-494}{para -2, l.3}{MRu}{2024/03/16}{s}
Use plural: The allowed key\u{s} are \ldots
\CHAPTER{Chapter 7 --- Mastering Floats}
-\erroronpage{I-520}{paragraph 4, l.3}{EOl}{2023/09/09}{s}
+\erroronpage{I-520}{para 4, l.3}{EOl}{2023/09/09}{s}
Change:
For \u{a} example \> For example
+\erroronpage{I-612}{para -2, l.1}{EOl}{2024/05/13}{s}
+Change: up \u{do} several \> up to several
+
+
\CHAPTER{Chapter 8 --- Graphics Generation and Manipulation}
\erroronpage{I-619}{para -2, l.2}{FMi}{2023/05/30}{s}
@@ -749,11 +823,18 @@ start from full red, i.e., \> \verb*/left color=red/ instead.
\erroronpage{I-644}{syntaxbox for \cs{foreach}}{BeB}{2023/07/14}{s}
superfluous ``in'': \ldots\{\textsl{commands}\} \u{in} \> \ldots\{\textsl{commands}\}
+\erroronpage{I-645}{para 3, l.4}{EOl}{2024/05/13}{s}
+Correct hyphenation: stan-dalone \> stand-alone
+
\CHAPTER{Chapter 9 --- Font Selection and Encodings}
+\erroronpage{I-687}{table 9.6, l.21}{YvH}{2024/06/19}{s}
+ cmdh \> lmdh
+
+
\erroronpage{I-688}{para -2, l. 1}{BeB}{2023/08/13}{s}
acronym PSNFSS not explained: PSNFSS \> PostScript New Font Selection Scheme (PSNFSS)
@@ -767,9 +848,28 @@ Missing space: Theproblem \> The problem
\erroronpage{I-708}{listing}{FMi}{2023/05/14}{s}
Situation is the same in the 2023 distributions; listing output updated.
+\erroronpage{I-726}{para 4, l.5}{MRu}{2024/04/07}{s}
+Add word: more than hundred \> more than \u{one} hundred
+
\erroronpage{I-759}{l.1}{BeB}{2023/08/20}{s}
in the range of 0000 to \u{00FF} \> in the range of 0000 to \u{007F}
+\erroronpage{I-797}{exa 9-6-3}{BYu/FMi}{2024/04/08}{s}
+
+This example may fail with \XeTeX{} because of a deficiency in
+older versions of \pkg{fontspec}. With versions prior 2.9e one has to
+use the \texttt{Extension} key and omit the extension on the other
+lines:
+\begin{verbatim}
+\setmainfont{Alegreya}[
+ Extension = .otf,
+ UprightFont = *-Medium,
+ ItalicFont = *-MediumItalic,
+ BoldFont = *-ExtraBold,
+ BoldItalicFont = *-ExtraBoldItalic
+]
+\end{verbatim}
+
\CHAPTER{Chapter 10 --- Text and Symbol Fonts}
@@ -786,7 +886,7 @@ then this structure is repeated \u{for the related font families} as often as ne
\erroronpage{II-24}{para 3, l. -2}{BeB}{2023/08/13}{s}
-There is no slanted shape in Grande Mono: \\
+There is no slanted shape in Grande Mono (so it should be in blue): \\
\u{\textsl{naïve}} \> \u{\textsl{\bl naïve}}
@@ -795,8 +895,11 @@ Open Type font is available: \\
\u{— no Open Type —} \> \u{Lucida Handwriting OT}
\erroronpage{II-25}{para -2, l.-2}{BeB}{2023/08/13}{s}
-There are no italic blackletters: \\
-\textit{phœnix's official rôle}\> \textit{\bl phœnix's official rôle}
+There are no italic blackletters (so it should be in blue): \\
+\textit{phœnix's official rôle} \> \textit{\bl phœnix's official rôle}
+
+\erroronpage{II-27}{para 1, l.1}{MBe/FMi}{2024/08/02}{s}
+Package was renamed: \texttt{droidmono} \> \texttt{droid\u{sans}mono}
\erroronpage{II-28}{table 10.14, l. 3}{BeB}{2023/08/13}{s}
Inconsistent order: sl, l \> l, sl
@@ -827,6 +930,8 @@ bold) or in some families for \textttu{ub} (ultra bold).}
\erroronpage{II-40}{table 10.24}{FMi}{2023/08/15}{s}
In table note: \textit{Unfortunately, \u{\texttt{sco}}} \> \textit{Unfortunately, \u{\textttu{sco}}}
+\erroronpage{II-42}{para 3, l.4}{MRu}{2024/04/12}{s}
+rudimentary \> rudimentarily
\erroronpage{II-50}{font sample Cambria}{FMi}{2023/08/14}{s}
@@ -840,7 +945,7 @@ Because of problems with the font names, the Cambria family currently requires a
BoldItalicFont = cambriaz.ttf}
\end{verbatim}
Without it, the bold fonts are not correctly set up, which is why
-\textbf{almost anything} is not in bold and \textbf{Fields} is not typeset in
+\textbf{almost anything} was not in bold and \textbf{Fields} was not typeset in
bold small caps in the sample even though Cambria supports these typefaces.
@@ -1117,6 +1222,10 @@ point in front of the display, thus \cs{predisplaypenalty} is no
longer honored.
+\erroronpage{II-149}{para 2, l.4}{DPC}{2024/07/15}{s}
+package \texttt{flex\u{y}sym} \>
+package \texttt{flex\u{i}sym}
+
\erroronpage{II-167}{para. 3, l. -2}{BeB}{2023/08/13}{s}
option\u e \> option\u{s}
@@ -1127,7 +1236,8 @@ option\u e \> option\u{s}
\erroronpage{II-178}{Tab. 11.3, l.10}{BeB}{2023/08/13}{s}
in the description column: \u{array}-symbol-arrow \> \u{arrow}-symbol-arrow
-
+\erroronpage{II-189}{footnote}{DPC}{2024/07/15}{s}
+\texttt{oubrace} package \> \texttt{oubrace\u{s}} package
@@ -1294,6 +1404,10 @@ The keyword \texttt{Harf\u{b}uzz} should be spelled
\texttt{Harf\u{B}uzz}. Both names are supported, but the recommended
spelling is \texttt{HarfBuzz}.
+\erroronpage{II-341}{para -4, l.4}{DPC/FMi}{2024/07/15}{s}
+\texttt{devnag} \u{package} \> \texttt{devnag} \u{program}
+
+
\CHAPTER{Chapter 14 --- Index Generation}
% Das Beispiel von S. II-352 als File wäre schön, dann könnte man das mit
@@ -1330,6 +1444,8 @@ Changes the output of example 16-7-31 on page II-560 as well.
the \cs{MakeUpper}\texttt{\u{C}ase} trick \>
the \cs{MakeUpper}\texttt{\u{c}ase} trick
+\erroronpage{II-423}{table 15.9}{MBe/FMi}{2024/08/04}{s}
+Drop \texttt{nature.bst} line. Style no longer supported.
\erroronpage{II-435}{code}{FMi}{2023/05/26}{s}
\verb=\textcolor{See= \> \cs{textcolor}\u{\texttt{\{blue\}}}\texttt{\{See}
@@ -1387,7 +1503,6 @@ Replace for consistency with section 1.4: \u{command definition} \> \u{code} \\
\erroronpage{II-633}{para 2}{BeB/FMi}{2023/08/31}{s}
Add at the end: A maximum of nine ``argument'' letters is supported.
-
\erroronpage{II-657}{par -2, l. -2}{BeB}{2024/03/17}{s}
a few that \> a few \u{commands} that
@@ -1395,6 +1510,9 @@ a few that \> a few \u{commands} that
\erroronpage{II-658}{first item in the list}{BeB}{2024/03/17}{s}
square root $\sqrt{x}$ \> square root \texttt{sqrt} $x$
+\erroronpage{II-663}{A-3-7}{MRu}{2024/05/01}{}
+In the code, text should read either ``This is the content'' or ``These are the contents''.
+
\erroronpage{II-682}{para -2, l .3}{FMi}{2023/04/28}{s}
\texttt{Harf\u{b}uzz} \> \texttt{Harf\u{B}uzz}
@@ -1440,12 +1558,16 @@ Appendix title not properly capitalized.
\begin{multicols}{3}[Thanks to all who have found errors or
omissions. Listed are the people who found an errata entry first.]
+\contributor{ACa}{Alfredo Canziani}
\contributor{BeB}{Bernd Burghardt}
+\contributor{BYu}{Boshi Yuan}
\contributor{CAR}{Chris Rowley}
+\contributor{DPC}{David Carlisle}
\contributor{DC}{Davide Campagnari}
\contributor{DFl}{Daniel Flipo}
\contributor{EOl}{Edgar Olthof}
\contributor{FMi}{Frank Mittelbach}
+\contributor{MBe}{Matthew Bertucci}
\contributor{MJo}{Maciej Jończyk}
\contributor{MRu}{Mark Rudolph}
\contributor{YFu}{FUJIMURA Yukitoshi}
diff --git a/macros/latex-dev/base/tlc3.pdf b/macros/latex-dev/base/tlc3.pdf
index 5b9f0237a8..325bdc17d5 100644
--- a/macros/latex-dev/base/tlc3.pdf
+++ b/macros/latex-dev/base/tlc3.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf
index 283b4eedad..1816882589 100644
--- a/macros/latex-dev/base/tulm.pdf
+++ b/macros/latex-dev/base/tulm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide-historic.pdf b/macros/latex-dev/base/usrguide-historic.pdf
index 1013a34434..2efbb9cb50 100644
--- a/macros/latex-dev/base/usrguide-historic.pdf
+++ b/macros/latex-dev/base/usrguide-historic.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf
index a447d9547b..7ac313fe64 100644
--- a/macros/latex-dev/base/usrguide.pdf
+++ b/macros/latex-dev/base/usrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.tex b/macros/latex-dev/base/usrguide.tex
index cf0a01e836..2b9e959627 100644
--- a/macros/latex-dev/base/usrguide.tex
+++ b/macros/latex-dev/base/usrguide.tex
@@ -43,7 +43,7 @@
\texttt{usrguide.tex} for full details.}%
}
-\date{2024-03-17}
+\date{2024-05-24}
\NewDocumentCommand\cs{m}{\texttt{\textbackslash\detokenize{#1}}}
\NewDocumentCommand\marg{m}{\arg{#1}}
@@ -646,7 +646,7 @@ take account of the possibility that the \meta{token} has been made active
(category code~$13$) and will split at such tokens.
Spaces are trimmed at each end of each item parsed. Exactly one set
of braces will be stripped if an entire item is surrounded by them,
-i.e.~the following inputs and outputs result (each separte item as
+i.e.~the following inputs and outputs result (each separate item as
a brace group).
\begin{verbatim}
a ==> {a}
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index bfa803c7da..4b1a1edb7c 100644
--- a/macros/latex-dev/base/utf8ienc.pdf
+++ b/macros/latex-dev/base/utf8ienc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf
index b1b6d41562..42a2c1bd62 100644
--- a/macros/latex-dev/base/webcomp.pdf
+++ b/macros/latex-dev/base/webcomp.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/README.md b/macros/latex-dev/required/amsmath/README.md
index e8cefa4d07..acf256c850 100644
--- a/macros/latex-dev/required/amsmath/README.md
+++ b/macros/latex-dev/required/amsmath/README.md
@@ -1,7 +1,7 @@
The amsmath bundle for LaTeX
============================
-Release 2024-06-01 pre-release 2
+Release 2024-11-01 pre-release 0
Overview
--------
diff --git a/macros/latex-dev/required/amsmath/ams-external.txt b/macros/latex-dev/required/amsmath/ams-external.txt
index fa2dbea556..69f5689c15 100644
--- a/macros/latex-dev/required/amsmath/ams-external.txt
+++ b/macros/latex-dev/required/amsmath/ams-external.txt
@@ -60,7 +60,6 @@
\Rightarrow
\Tilde
\Umathaccent
-\Umathcar
\Umathchar
\Umathcharnumdef
\Umathcode
diff --git a/macros/latex-dev/required/amsmath/amsbsy.pdf b/macros/latex-dev/required/amsmath/amsbsy.pdf
index 7ba7e970ee..98414b672d 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.pdf
+++ b/macros/latex-dev/required/amsmath/amsbsy.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amscd.pdf b/macros/latex-dev/required/amsmath/amscd.pdf
index 9e7064f446..9f6494bb8e 100644
--- a/macros/latex-dev/required/amsmath/amscd.pdf
+++ b/macros/latex-dev/required/amsmath/amscd.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsgen.pdf b/macros/latex-dev/required/amsmath/amsgen.pdf
index 145aa1486a..d67090a444 100644
--- a/macros/latex-dev/required/amsmath/amsgen.pdf
+++ b/macros/latex-dev/required/amsmath/amsgen.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsldoc.pdf b/macros/latex-dev/required/amsmath/amsldoc.pdf
index ec0449e096..e615a52dc4 100644
--- a/macros/latex-dev/required/amsmath/amsldoc.pdf
+++ b/macros/latex-dev/required/amsmath/amsldoc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty b/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
index ab45172a32..ca5ac506fb 100644
--- a/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
+++ b/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `amsmath.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `amsmath.sty',
%% generated with the docstrip utility.
%%
@@ -517,7 +521,7 @@ Foreign command \@backslashchar#1;\MessageBreak
\else % \not \mathxxx
\@xp\Umathch@\meaning@"0"\Umathch@
\ifgtest@ % if \Umathchar
- \else % else not \Umathcar
+ \else % else not \Umathchar
\@xp\macro@\meaning@@\macro@
\ifgtest@ % if macro test
\@xp\not@\meaning@\not@
diff --git a/macros/latex-dev/required/amsmath/amsmath.dtx b/macros/latex-dev/required/amsmath/amsmath.dtx
index d0ed131811..ec44957a89 100644
--- a/macros/latex-dev/required/amsmath/amsmath.dtx
+++ b/macros/latex-dev/required/amsmath/amsmath.dtx
@@ -76,17 +76,16 @@ Bug reports can be opened (category \texttt{#1}) at\\%
[1994/12/01]% LaTeX date must be December 1994 or later
% \end{macrocode}
%
-% Providing a rollback to earlier version(s)
+% Providing a rollback to earlier version(s). Anything prior to
+% 2018 we attempt to fulfill by using the version from 2018.
% \begin{macrocode}
-\providecommand\DeclareRelease[3]{}
-\providecommand\DeclareCurrentRelease[2]{}
-%
+\DeclareRelease{}{1994-06-01}{amsmath-2018-12-01.sty}
\DeclareRelease{}{2018-12-01}{amsmath-2018-12-01.sty}
\DeclareCurrentRelease{}{2019-04-01}
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesPackage{amsmath}[2024/03/13 v2.17p AMS math features]
+\ProvidesPackage{amsmath}[2024/05/23 v2.17q AMS math features]
% \end{macrocode}
%
% \section{Catcode defenses}
@@ -1162,7 +1161,7 @@ Foreign command \@backslashchar#1;\MessageBreak
% \begin{macrocode}
\@xp\Umathch@\meaning@"0"\Umathch@
\ifgtest@ % if \Umathchar
- \else % else not \Umathcar
+ \else % else not \Umathchar
% \end{macrocode}
% \begin{macrocode}
\@xp\macro@\meaning@@\macro@
diff --git a/macros/latex-dev/required/amsmath/amsmath.pdf b/macros/latex-dev/required/amsmath/amsmath.pdf
index fde4b6a38f..2ae7c81905 100644
--- a/macros/latex-dev/required/amsmath/amsmath.pdf
+++ b/macros/latex-dev/required/amsmath/amsmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsopn.pdf b/macros/latex-dev/required/amsmath/amsopn.pdf
index 978b9d6a70..6f1b3c0331 100644
--- a/macros/latex-dev/required/amsmath/amsopn.pdf
+++ b/macros/latex-dev/required/amsmath/amsopn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amstext.pdf b/macros/latex-dev/required/amsmath/amstext.pdf
index 48ff030166..37ad4cc7fa 100644
--- a/macros/latex-dev/required/amsmath/amstext.pdf
+++ b/macros/latex-dev/required/amsmath/amstext.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsxtra.pdf b/macros/latex-dev/required/amsmath/amsxtra.pdf
index a96c13d257..af44bc5e9b 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.pdf
+++ b/macros/latex-dev/required/amsmath/amsxtra.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/changes.txt b/macros/latex-dev/required/amsmath/changes.txt
index a15eab5bbf..588e7d36d0 100644
--- a/macros/latex-dev/required/amsmath/changes.txt
+++ b/macros/latex-dev/required/amsmath/changes.txt
@@ -1,13 +1,23 @@
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+#########################
+# 2023-11-01 Release
+#########################
+
+2024-05-23 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * amsmath.dtx:
+ Do not error with "suspicous date" when rolling back to
+ early years of LaTeX2e (gh/1336)
+
2024-03-11 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* amsmath.dtx (subsection{The \env{gather} environment}):
Reset \lineht@ to avoid that this is incorrectly picked
up by a following environment, such as align. (gh/1289)
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
#########################
# 2023-11-01 Release
#########################
diff --git a/macros/latex-dev/required/amsmath/subeqn.pdf b/macros/latex-dev/required/amsmath/subeqn.pdf
index 0f7d593343..54f6fe9385 100644
--- a/macros/latex-dev/required/amsmath/subeqn.pdf
+++ b/macros/latex-dev/required/amsmath/subeqn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/technote.pdf b/macros/latex-dev/required/amsmath/technote.pdf
index 6f70cc885c..6526568bda 100644
--- a/macros/latex-dev/required/amsmath/technote.pdf
+++ b/macros/latex-dev/required/amsmath/technote.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/testmath.pdf b/macros/latex-dev/required/amsmath/testmath.pdf
index 151d3d2920..e1ce7c6acd 100644
--- a/macros/latex-dev/required/amsmath/testmath.pdf
+++ b/macros/latex-dev/required/amsmath/testmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/README.md b/macros/latex-dev/required/graphics/README.md
index df1e890c5a..0efecadab8 100644
--- a/macros/latex-dev/required/graphics/README.md
+++ b/macros/latex-dev/required/graphics/README.md
@@ -1,7 +1,7 @@
The LaTeX `graphics` bundle
===========================
-Release 2024-06-01 pre-release 0
+Release 2024-11-01 pre-release 2
Overview
--------
@@ -61,4 +61,4 @@ of the package.
-----
-<p>Copyright (C) 1993-2023 The LaTeX Project <br />
+<p>Copyright (C) 1993-2024 The LaTeX Project <br />
diff --git a/macros/latex-dev/required/graphics/changes.txt b/macros/latex-dev/required/graphics/changes.txt
index 55dde0358f..5e72561389 100644
--- a/macros/latex-dev/required/graphics/changes.txt
+++ b/macros/latex-dev/required/graphics/changes.txt
@@ -4,11 +4,30 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+2024-06-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * color.dtx (section{Extra Groups}):
+ Support new @endpe mechanism
+
================================================================================
All changes above are only part of the development branch for the next release.
================================================================================
#########################
+# 2024-06-01 Release
+#########################
+
+2024-05-23 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * graphics.dtx:
+ Do not error with "suspicious date" when rolling back to
+ early years of LaTeX2e (gh/1336)
+
+2024-04-28 David Carlisle <David.Carlisle@latex-project.org>
+
+ * grfguide.tex: add \resizebox* example for gh/1339
+
+#########################
# 2022-11-01 Release
#########################
diff --git a/macros/latex-dev/required/graphics/color.dtx b/macros/latex-dev/required/graphics/color.dtx
index bd37971470..b14c148f2f 100644
--- a/macros/latex-dev/required/graphics/color.dtx
+++ b/macros/latex-dev/required/graphics/color.dtx
@@ -2,7 +2,7 @@
% \iffalse
%
%% color.dtx Copyright (C) 1994--1999 David Carlisle
-%% Copyright (C) 2005-2023 LaTeX Project
+%% Copyright (C) 2005-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -21,7 +21,7 @@
%<driver> \ProvidesFile{color.drv}
% \fi
% \ProvidesFile{color.dtx}
- [2022/01/06 v1.3d Standard LaTeX Color (DPC)]
+ [2024/06/23 v1.3e Standard LaTeX Color (DPC)]
%
% \iffalse
%<*driver>
@@ -168,7 +168,7 @@
%
% \begin{option}{dvips}
% \begin{option}{xdvi}
-% Tom Rokicki's dvips driver, and the X Windows previewer, xdvi which uses
+% Tom Rokicki's dvips driver, and the X Windows previewer, xdvi, which uses
% (a subset of) the same |\specials|.
% \begin{macrocode}
\DeclareOption{dvips}{\def\Gin@driver{dvips.def}%
@@ -248,7 +248,7 @@
% \changes{v0.3k}{1995/09/07}
% {Merge dviwindo and dvipsone options}
% The drivers of the Y\&Y \TeX\ system.
-% (Which use the same |\specials|).
+% (Which use the same |\specials|.)
% \begin{macrocode}
\DeclareOption{dvipsone}{\def\Gin@driver{dvipsone.def}}
\DeclareOption{dviwindo}{\ExecuteOptions{dvipsone}}
@@ -360,7 +360,7 @@
% The |dvipsnames| option predeclares all the names in the colour
% prologue of dvips. The |dvips| option automatically implies
% |dvipsnames| unless this choice is overruled with the |nodvipsnames|
-% option. For other drivers, eg |textures| you may use this option to
+% option. For other drivers, eg |textures|, you may use this option to
% explicitly request that these names be declared.
% \begin{macrocode}
\DeclareOption{dvipsnames}{\def\c@lor@namefile{dvipsnam.def}}
@@ -371,7 +371,7 @@
%
% \begin{option}{usenames}
% The |usenames| option modifies the behaviour of |\DefineNamedColor|
-% So that it declares the same name as a ```user's colour'' for use in
+% so that it declares the same name as a ``user's colour'' for use in
% a |\color| command, as well as a name in the |named| colour model.
% The normal behaviour is just to declare the name in the named colour
% model.
@@ -530,7 +530,7 @@
% |\color| or |\textcolor| commands to refer to a colour specified by
% \emph{colour-spec} in the colour model \emph{model}.
%
-% |\definecolor| associates the \emph{name} the to a colour in
+% |\definecolor| associates the \emph{name} to a colour in
% \emph{model}. So |\color{|\emph{name}|}| would check \emph{name}
% then issue a |\special| for the colour model \emph{model}.
%
@@ -579,12 +579,12 @@
% names.
%
% The `color1' drivers (dvips) currently ignore the specification of
-% the colour, and once a name is defined, just put the colour name in
-% the dvi file. For dvips, The header file \texttt{color.pro} is used to
+% the colour and, once a name is defined, just put the colour name in
+% the dvi file. For dvips, the header file \texttt{color.pro} is used to
% give the cmyk equivalents of the names.
%
% The `color2' drivers (textures) use a special postscript operator
-% that takes both the name and the cmyk equivalent. so if the names are
+% that takes both the name and the cmyk equivalent, so if the names are
% not being used, `fall back' definitions in the cmyk model are available.
% These drivers also allow a numeric value to affect the `density'
% of the colour to use.
@@ -688,9 +688,9 @@
%
% \begin{macro}{\normalcolor}
% Early versions of this package redefined |\reset@font| to reset the
-% color as well. Current versions do not do this (there are too many
-% |\reset@font| commands hidden in strange places) and so defines a
-% separate command, |\normalcolor| to reset the colour to the colour in
+% color as well. Current versions do not do this (since there are too many
+% |\reset@font| commands hidden in strange places) and so they define a
+% separate command, |\normalcolor|, to reset the colour to the colour in
% effect at the start of the document.
%
% |\normalcolor| is defined (to |\relax|) in the \LaTeX\ kernel, so it
@@ -722,9 +722,9 @@
% the truth as the `macro layer' of \TeX\ does not know where the output
% routine is going to re-insert floats. This is why drivers must
% maintain their own stack of colours in order to fully support these
-% commands.
+% commands.)
%
-% For dvips, the |\current@color| it is something like `|Black|' or
+% For dvips, the |\current@color| is something like `|Black|' or
% `|rgb 0 1 0|', but other packages should not rely on any particular
% format for this macro.
%
@@ -755,7 +755,7 @@
% definition of this command. A graphics package may want to define it
% using a special to produce (for example) a PostScript line. Producing
% the line in the |\special| has the advantage that on a preview that
-% does not understand |\special|s, the line is automatically omited,
+% does not understand |\special|s, the line is automatically omitted,
% without needing to modify the source of the document (for instance by
% adding the |monochrome| option).
%
@@ -877,10 +877,15 @@
% commands. The |\endgraf| in its definition is required in the case
% of groups of text in vertical `par' mode, but doesn't do any harm in
% horizontal `LR' contexts.
+% The |\@endpefalse| is required for the newer \texttt{@endpe}
+% handling, again it is harmless if an older kernel is used
+% (because there it was a local assignment).
% \changes{v0.2d}{1994/05/13}
% {New definition, was previously just \cs{endgroup}}
+% \changes{v1.3e}{2024/06/23}
+% {Support new \texttt{@endpe} mechanism}
% \begin{macrocode}
-\def\color@endgroup{\endgraf\endgroup}
+\def\color@endgroup{\endgraf\@endpefalse\endgroup}
% \end{macrocode}
% \end{macro}
%
@@ -894,7 +899,7 @@
% \end{macro}
%
% \begin{macro}{\color@vbox}
-% To be used to open a `coloured hbox'
+% To be used to open a `coloured vbox'
% \changes{v0.3h}{1994/11/22}
% {Macro added}
% \begin{macrocode}
diff --git a/macros/latex-dev/required/graphics/color.pdf b/macros/latex-dev/required/graphics/color.pdf
index e1c35c486d..84ae84109e 100644
--- a/macros/latex-dev/required/graphics/color.pdf
+++ b/macros/latex-dev/required/graphics/color.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/drivers.dtx b/macros/latex-dev/required/graphics/drivers.dtx
index 19fa2013db..fb5132272b 100644
--- a/macros/latex-dev/required/graphics/drivers.dtx
+++ b/macros/latex-dev/required/graphics/drivers.dtx
@@ -3,7 +3,7 @@
%
%% drivers.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz
%% Copyright (C) 1995 1996 1997 1998 1999 David Carlisle
-%% Copyright (C) 2000-2023 LaTeX Project
+%% Copyright (C) 2000-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
diff --git a/macros/latex-dev/required/graphics/drivers.pdf b/macros/latex-dev/required/graphics/drivers.pdf
index b32569dec4..3651bccd85 100644
--- a/macros/latex-dev/required/graphics/drivers.pdf
+++ b/macros/latex-dev/required/graphics/drivers.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/epsfig.dtx b/macros/latex-dev/required/graphics/epsfig.dtx
index 8a9911c965..46dc36d0bf 100644
--- a/macros/latex-dev/required/graphics/epsfig.dtx
+++ b/macros/latex-dev/required/graphics/epsfig.dtx
@@ -2,7 +2,7 @@
% \iffalse
%
%% epsfig.dtx Copyright (C) 1994-1996 1999 Sebastian Rahtz
-%% Copyright (C) 2000-2023 LaTeX Project
+%% Copyright (C) 2000-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -19,7 +19,7 @@
%<driver> \ProvidesFile{epsfig.drv}
% \fi
% \ProvidesFile{epsfig.dtx}
- [2017/06/25 v1.7b (e)psfig emulation (SPQR)]
+ [2024/01/14 v1.7b (e)psfig emulation (SPQR)]
%
% \iffalse
%<*driver>
@@ -51,7 +51,7 @@
\RequirePackage{graphicx}
% \end{macrocode}
% \subsection{Emulation of `psfig' syntax}
-% Emulate "epsfig.sty", and most varieties of psfig
+% Emulate \texttt{epsfig.sty}, and most varieties of psfig
% \begin{macro}{\psfig,\epsfig}
% \begin{macrocode}
\def\psfig#1{%
@@ -83,7 +83,7 @@
% \end{macrocode}
% \end{macro}
% \subsection{Emulation of `epsf' syntax}
-% Emulate Rokicki's "epsf.tex" supplied with the ever-popular dvips.
+% Emulate Rokicki's \texttt{epsf.tex}, supplied with the ever-popular dvips.
% \begin{macro}{\epsfbox,\epsffile}
% \begin{macrocode}
\newdimen\epsfxsize
diff --git a/macros/latex-dev/required/graphics/epsfig.pdf b/macros/latex-dev/required/graphics/epsfig.pdf
index 7c863b7a22..ab7f88d73f 100644
--- a/macros/latex-dev/required/graphics/epsfig.pdf
+++ b/macros/latex-dev/required/graphics/epsfig.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/graphics-2017-06-25.sty b/macros/latex-dev/required/graphics/graphics-2017-06-25.sty
index 154867d99a..24f6443124 100644
--- a/macros/latex-dev/required/graphics/graphics-2017-06-25.sty
+++ b/macros/latex-dev/required/graphics/graphics-2017-06-25.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `graphics.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `graphics.sty',
%% generated with the docstrip utility.
%%
diff --git a/macros/latex-dev/required/graphics/graphics.dtx b/macros/latex-dev/required/graphics/graphics.dtx
index d40c70a034..86556ea40a 100644
--- a/macros/latex-dev/required/graphics/graphics.dtx
+++ b/macros/latex-dev/required/graphics/graphics.dtx
@@ -2,7 +2,7 @@
% \iffalse
%
%% graphics.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz
-%% Copyright (C) 1995-2023 LaTeX Project
+%% Copyright (C) 1995-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -17,9 +17,9 @@
\ProvidesFile{graphics.dtx}
%</dtx>
%<+package>\NeedsTeXFormat{LaTeX2e}[1995/12/01]
-%<+package>\providecommand\DeclareRelease[3]{}
-%<+package>\providecommand\DeclareCurrentRelease[2]{}
%<+package>
+% Try to fulfill rollback requests to early years by using the 2017 version:
+%<+package>\DeclareRelease{}{1994-06-01}{graphics-2017-06-25.sty}
%<+package>\DeclareRelease{}{2017-06-25}{graphics-2017-06-25.sty}
%<+package>\DeclareCurrentRelease{}{2019-10-01}
%<+package>
@@ -27,7 +27,7 @@
%<driver> \ProvidesFile{graphics.drv}
% \fi
% \ProvidesFile{graphics.dtx}
- [2022/03/10 v1.4e Standard LaTeX Graphics (DPC,SPQR)]
+ [2024/08/06 v1.4g Standard LaTeX Graphics (DPC,SPQR)]
%
% \iffalse
%<*driver>
@@ -69,18 +69,18 @@
% \section{Introduction}
%
% This package implements various `graphics' functions. The main
-% features are a) inclusion of `graphics' files. b) Rotation of sections
-% of the page, c) Scaling of sections of the page.
+% features are: a) inclusion of `graphics' files; b) rotation of sections
+% of the page; c) scaling of sections of the page.
%
% The design is split into three `levels'.
% \begin{itemize}
% \item The user interface. This is the collection of commands designed
-% to appear in a document text. Actually two separate user interface
+% to appear in a document text. Actually two separate user interfaces
% have been implemented. The `standard' interface, described here, and a
% more powerful, and more `user-friendly' interface provided by the
% |graphicx| package.
% \item The core functions. These functions, which are also implemented
-% in this file do all the `main work'. The `user-interface functions
+% in this file, do all the `main work'. The `user-interface functions'
% just collect together the information from any optional-arguments or
% star-forms, and then call one of these functions.
% \item The driver files. It is not possible to achieve the
@@ -90,7 +90,7 @@
% and the syntax required to pass instructions to the drivers is also
% not standardised. So the `core functions' never access |\special|
% directly, but rather call a series of commands that must be defined in
-% a special file customised for each driver. The accompanying file,
+% a special file customised for each driver. The accompanying file
% |drivers.dtx| has suitable files for a range of popular drivers.
% \end{itemize}
%
@@ -99,9 +99,9 @@
% driver that is to be used to print the document. You may wish to set
% up a configuration file so that this option always takes effect, even
% if not specified in the document. To do this, produce a file
-% |graphics.cfg| containing the line:\\
+% |graphics.cfg| containing the line\\
% |\ExecuteOptions{dvips}|\\
-% (or whichever other driver you wish.)
+% (or whichever other driver you wish).
%
% Apart from the driver options there are a few other options to control
% the behaviour of the package.
@@ -166,7 +166,7 @@
% |\graphicspath{{eps/}{tiff/}}|
% would cause the system to look in the subdirectories |eps| and |tiff|
% of the current directory. The default setting of this path is
-% |\input@path| that is: graphics files will be found wherever \TeX\
+% |\input@path|, so that graphics files will be found wherever \TeX\
% files are found.
%
% \DescribeMacro
@@ -204,7 +204,7 @@
% \emph{default rule}. For instance the |dvips| driver file declares all
% files to be of type |eps| unless a more specific rule is declared.
%
-% Since Version v0.6, extensions should be specified including the |.|
+% Since Version v0.6, extensions should be specified including the |.|,
% that is, |.eps| not |eps|.
%
% \emph{type} is the `type' of file involved. All files of the same type
@@ -241,7 +241,7 @@
% used to denote the filename. Thus using the dvips driver, one may
% use\\
% |\DeclareGraphicsRule{.ps.gz}{eps}{.ps.bb}{`zcat #1}|\\
-% the final argument causes dvips to use the |zcat| command to unzip the
+% The final argument causes dvips to use the |zcat| command to unzip the
% file before inserting it into the PostScript output.
%
% \subsection{Rotation}
@@ -297,18 +297,18 @@
% \DescribeMacro
% {\Gread@eps}\marg{file}\\
% For each \emph{type} of graphics file supported, the driver file must
-% define |\Ginclude@|\emph{type} and, optionally |\Gread@|\emph{type}.
+% define |\Ginclude@|\emph{type} and, optionally, |\Gread@|\emph{type}.
% The read command is responsible for obtaining size information from
-% the file specified in the |\DeclareGraphicsRule| command. However the
+% the file specified in the |\DeclareGraphicsRule| command. However, the
% kernel defines a function, |\Gread@eps|, which can read PostScript
% files to find the
% |%%BoundingBox| comment. This function will be used for any type for
% which a specific function has not been declared. |\Gread@eps| accepts
% a generalised version of the bounding box comment. \TeX\ units may be
% used (but there must be no space before the unit). If the unit is
-% omitted |bp| is assumed. So\\
+% omitted, |bp| is assumed. So\\
% |%%BoundingBox 0 0 2in 3in|\\
-% Would be accepted by this function, to produce a 2in wide, by 3in high
+% would be accepted by this function, to produce a 2in wide by 3in high
% graphic.
%
% \subsection{Rotation}
@@ -334,7 +334,7 @@
% \DescribeMacro
% {\Gscale@box@dddd}
% \marg{dima}\marg{dimb}\marg{dimc}\marg{dimd}\marg{text}\\
-% Scale \emph{text} in horizontally by a factor \emph{dima}/\emph{dimb},
+% Scale \emph{text} horizontally by a factor \emph{dima}/\emph{dimb},
% and vertically by a factor of \emph{dimc}/\emph{dimd}.
%
% \DescribeMacro
@@ -353,7 +353,7 @@
% |\Ginclude@|\emph{type}\\
% The Graphics kernel function will call this driver-defined function
% with the filename as argument, and certain additional information will
-% be provided as follows.:
+% be provided as follows:
%
% \noindent\begin{tabular}{p{.4\textwidth}p{.5\textwidth}}
% |\Gin@llx|, |\Gin@lly|,\newline
@@ -362,7 +362,7 @@
% Registers storing the natural size.\\
% |\Gin@req@width|\newline |\Gin@req@height| &
% Registers storing the required size, after scaling.\\
-% |\Gin@scalex|, |\Gin@scaley| & macros with the scale factors. A value
+% |\Gin@scalex|, |\Gin@scaley| & Macros with the scale factors. A value
% of |!| means: Scale by the same amount as the other direction.\\
% |\ifGin@clip| & |\newif| token, true if the graphic should be
% `clipped' to the bounding box.
@@ -371,11 +371,11 @@
% Optionally the driver may define a command of the form:\\
% |\Gread@|\emph{type}\\
% This is responsible for reading an external file to find the bounding
-% box information. If such a command is not declared, but a read-file is
-% specified the command |\Gread@eps|, which is defined in the Graphics
-% Kernel will be used.
+% box information. If such a command is not declared but a read-file is
+% specified, the command |\Gread@eps|, which is defined in the Graphics
+% Kernel, will be used.
%
-% \subsection{Literal Postscript}
+% \subsection{Literal PostScript}
% Drivers that are producing PostScript output may want to define
% the following macros. They each take one argument which should be
% passed to an appropriate special. They are not used directly by this
@@ -384,7 +384,7 @@
% |\Gin@PS@raw|, Literal PostScript special.\\
% |\Gin@PS@restored|, Literal PostScript special, the driver will
% surround this with a save-restore pair.\\
-% |\Gin@PS@literal@header|, Postscript to be inserted in the header
+% |\Gin@PS@literal@header|, PostScript to be inserted in the header
% section of the PostScript file.\\
% |\Gin@PS@file@header|, external file to be inserted in the header
% section of the PostScript file.
@@ -550,7 +550,7 @@
% \changes{v0.3g}{1994/03/15}
% {Use dvips def file not development version}
% \begin{option}{xdvi}
-% Tomas Rockicki's PostScript driver (unix, MSDOS, VMS\ldots).
+% Tomas Rokicki's PostScript driver (unix, MSDOS, VMS\ldots).
% The |X11| previewer |xdvi| supports basically the same set of
% |\specials|.
% \begin{macrocode}
@@ -672,7 +672,7 @@
% \begin{option}{pctex32}
% \changes{v1.0b}{1996/10/29}
% {pctex32 option added}
-% PC\TeX\ (MSDOS/Windows) .
+% PC\TeX\ (MSDOS/Windows).
% \begin{macrocode}
\DeclareOption{pctexps}{\def\Gin@driver{pctexps.def}}
\DeclareOption{pctexwin}{\def\Gin@driver{pctexwin.def}}
@@ -913,7 +913,7 @@
% \end{macro}
%
% \begin{macro}{\Gin@iii}
-% Set the coordinates of the {\bfseries l}lower {\bfseries l}eft corner,
+% Set the coordinates of the {\bfseries l}ower {\bfseries l}eft corner,
% and the coordinates of the {\bfseries u}pper {\bfseries r}ight
% corner. The coordinates may be any \TeX\ dimension, defaulting to |bp|.
% \changes{v0.6c}{1994/12/15}
@@ -944,8 +944,8 @@
% is invisibly small but files conforming to Adobe DSC should have
% \emph{integer} Bounding Box Coordinates, and conceivably some drivers
% might demand integer values.
-% (Although most seem to accept real values (if they accept bounding box
-% coordinates at all) in the |\special|. This is the reason why the
+% Although most seem to accept real values (if they accept bounding box
+% coordinates at all) in the |\special|, this is the reason why the
% mechanism uses |\def| and not \TeX\ lengths, as in earlier releases of
% the package.
% \begin{macrocode}
@@ -1050,7 +1050,8 @@
%
% \begin{macrocode}
\edef\Gin@gzext{\detokenize{gz}}
-% \edef{macrocode}
+% \end{macrocode}
+% \end{macro}
% \end{macro}
%
% \begin{macro}{\Gin@set@curr@file}
@@ -1454,8 +1455,8 @@
% {New macro}
% \begin{macro}{\Gread@generic@aux}
% \begin{macro}{\Gread@eps}
-% Read an EPS file (|#1|) and search for a line
-% starting with |%%BoundingBox| and returns the result
+% Read an EPS file (|#1|), search for a line
+% starting with |%%BoundingBox|; then return the result
% by setting four dimension registers
% |\Gin@llx|, |\Gin@lly|, |\Gin@urx| and |\Gin@ury|.
% \changes{v0.5e}{1994/11/02}
@@ -1701,7 +1702,7 @@
% \begin{macro}{\Grot@left}
% \begin{macro}{\Grot@right}
% \begin{macro}{\Grot@depth}
-% Final Rotated box dimensions
+% Final rotated box dimensions
% \begin{macrocode}
\let\Grot@height\@ovxx
\let\Grot@left\@ovyy
@@ -1920,8 +1921,8 @@
% \end{macrocode}
% Now we should translate back by $(O_x,O_y)$, but \TeX\ can not really
% deal with boxes that do not have the reference point at the left edge.
-% (Everything with a $-$ve $x$-coordinate would over-print earlier
-% text). So we modify the horizontal translation so that the
+% (Everything with a negative $x$-coordinate would over-print earlier
+% text.) So we modify the horizontal translation so that the
% reference point as understood by \TeX\ \emph{is} at the left edge.
% This means that the `centre of rotation' is not fixed by |\rotatebox|,
% but typically moves horizontally. We also need to find the image of
@@ -2157,7 +2158,7 @@
% \end{macrocode}
% \end{macro}
%
-% Restore Catcodes
+% Restore catcodes.
% \begin{macrocode}
\Gin@codes
\let\Gin@codes\relax
diff --git a/macros/latex-dev/required/graphics/graphics.pdf b/macros/latex-dev/required/graphics/graphics.pdf
index 343be34fa6..f4dcb01727 100644
--- a/macros/latex-dev/required/graphics/graphics.pdf
+++ b/macros/latex-dev/required/graphics/graphics.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/graphicx.dtx b/macros/latex-dev/required/graphics/graphicx.dtx
index 3bce2bdcf0..92f1af1d39 100644
--- a/macros/latex-dev/required/graphics/graphicx.dtx
+++ b/macros/latex-dev/required/graphics/graphicx.dtx
@@ -2,7 +2,7 @@
% \iffalse
%
%% graphicx.dtx Copyright (C) 1994 David Carlisle Sebastian Rahtz
-%% Copyright (C) 1995-2023 LaTeX Project
+%% Copyright (C) 1995-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
diff --git a/macros/latex-dev/required/graphics/graphicx.pdf b/macros/latex-dev/required/graphics/graphicx.pdf
index 06aa1ba087..2407cb488b 100644
--- a/macros/latex-dev/required/graphics/graphicx.pdf
+++ b/macros/latex-dev/required/graphics/graphicx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/grfguide.pdf b/macros/latex-dev/required/graphics/grfguide.pdf
index 7aa2c8bc89..adf18e969a 100644
--- a/macros/latex-dev/required/graphics/grfguide.pdf
+++ b/macros/latex-dev/required/graphics/grfguide.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/grfguide.tex b/macros/latex-dev/required/graphics/grfguide.tex
index 585e87adc7..959486c05c 100644
--- a/macros/latex-dev/required/graphics/grfguide.tex
+++ b/macros/latex-dev/required/graphics/grfguide.tex
@@ -1,5 +1,5 @@
%% grfguide.tex Copyright (C) 1994-1999 David Carlisle
-%% Copyright (C) 2005-2021
+%% Copyright (C) 2005-2024
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -62,7 +62,8 @@ stroke
\begin{document}
\title{Packages in the `graphics' bundle}
\author{D. P. Carlisle \and The \LaTeX\ Project}
-\date{2021-03-05}
+
+\date{2024-05-22}
\maketitle
@@ -95,8 +96,10 @@ For special requirements you may edit a copy of these |cfg| files
to set up a site default for these options. Suppose that you wish
the \package{color} package to always default to use specials for the
PostScript driver, |dvisvgm|. In that case, create a file |color.cfg|
-containing the line:\\
-|\ExecuteOptions{dvisvgm}|\\
+containing the line:
+\begin{quote}
+ |\ExecuteOptions{dvisvgm}|
+\end{quote}
Normally you will want an identical file |graphics.cfg| to set a similar
default for the graphics packages.
@@ -113,12 +116,12 @@ The following two options are also supported, they do not correspond
to separate definition files, but are essentially aliases for the
|dvips| option (and |monochrome| in the case of |xdvi|).
\begin{quote}\raggedright
- |xdvi|, |oztex|
+ |xdvi|, |oztex|
\end{quote}
The following set of options are supported by these packages
with associated driver files extracted from the |drivers.dtx|
-documented source in this bundle. These are now, mainly of historic
+documented source in this bundle. These are now mainly of historic
interest but the documented sources do contain some useful code
and advice if you need to produce a new definition file for a new
driver or \TeX\ system. |drivers.dtx| also contains documented
@@ -206,11 +209,11 @@ your own colours use the |\definecolor| command.
This defines \m{name} as a colour which can be used in later colour
-commands. For example
-\begin{verbatim}
-\definecolor{light-blue}{rgb}{0.8,0.85,1}
-\definecolor{mygrey}{gray}{0.75}
-\end{verbatim}
+commands. For example:
+\begin{quote}
+ |\definecolor{light-blue}{rgb}{0.8,0.85,1}| \\
+ |\definecolor{mygrey}{gray}{0.75}|
+\end{quote}
\definecolor{light-blue}{rgb}{0.8,0.85,1}
\definecolor{mygrey}{gray}{0.75}
@@ -227,7 +230,7 @@ The basic syntax is:
|\color|\arg{name}
\end{decl}
-This is a \emph{declaration}, like |\bfseries| It changes the current
+This is a \emph{declaration}, like |\bfseries|. It changes the current
colour to \m{name} until the end of the current group or
environment.
@@ -259,7 +262,6 @@ See \texttt{mathcolor.pdf} for details on this command.
\subsubsection{Using colour specifications directly}
-
\begin{decl}
|\color|\oarg{model}\arg{specification}\\
|\textcolor|\oarg{model}\arg{specification}\arg{text}\\
@@ -271,18 +273,23 @@ the document preamble, but sometimes it is convenient to directly use
a colour without naming it first. To achieve this |\color| (and all
the other colour commands) take an optional argument specifying the
model. If this is used then the mandatory argument takes a
-\m{colour specification} instead of a \m{name}. For example:\\
-|\color[rgb]{1,0.2,0.3}|\\
+\m{colour specification} instead of a \m{name}. For example:
+\begin{quote}
+ |\color[rgb]{1,0.2,0.3}|
+\end{quote}
would directly select that colour.
-This is particularly useful for accessing the \textbf{named} model:\\
-|\color[named]{BrickRed}| selects the |dvips| colour BrickRed.
+This is particularly useful for accessing the \textbf{named} model:
+\begin{quote}
+ |\color[named]{BrickRed}|
+\end{quote}
+selects the |dvips| colour BrickRed.
Rather than repeatedly use |[named]| you may use |\definecolor| to
-provide convenient aliases:\\
-|\definecolor{myred}{named}{WildStrawberry}|
- \ldots\ |\color{myred}|\ \ldots
-
+provide convenient aliases:
+\begin{quote}
+ |\definecolor{myred}{named}{WildStrawberry}|\ldots |\color{myred}|\kern-10pt
+\end{quote}
Alternatively if you are happy to use the existing names from the
\textbf{named} model, you may use the |usenames| package option, which
effectively calls |\definecolor| on every colour in the \textbf{named}
@@ -396,7 +403,7 @@ you should set up a site-default in a file,
The graphics packages have some other options for controlling how many
of the features to enable:
\begin{description}
-\item[draft] suppress all the `special' features. In particular
+\item[draft] Suppress all the `special' features. In particular
graphics files are not included (but they are still read for size
info) just the filename is printed in a box of the correct size.
\item[final] The opposite of |draft|. Useful to over-ride a global
@@ -480,18 +487,23 @@ An abbreviation for |\scalebox{-1}[1]|\arg{text}.
Scale \emph{text} so that the width is \emph{h-length}.
If |!| is used as either length argument, the other argument is used
to determine a scale factor that is used in both directions.
- Normally \emph{v-length} refers to the height of the box, but in the
- star form, it refers to the `height + depth'.
+
As normal for \LaTeXe\ box length arguments, |\height|,
|\width|, |\totalheight|, |\depth| may be used to refer to the
original size of the box.
+ Normally \emph{v-length} refers to the height of the box, but in the
+ star form, |\resizebox*|, it refers to the `height + depth'.
+
|\resizebox{1in}{\height}{Some text}|:
\resizebox{1in}{\height}{Some text}
|\resizebox{1in}{!}{Some text}|:
\resizebox{1in}{!}{Some text}
+|\resizebox{!}{20pt}{Q} \resizebox*{!}{20pt}{Q}|:
+\resizebox{!}{20pt}{Q} \resizebox*{!}{20pt}{Q}
+
\subsection{Including Graphics Files}
The functions for graphics inclusion try to give the same user syntax
for including any kind of graphics file that can be understood by the
@@ -568,7 +580,7 @@ otherwise it will not use one of the others,
with a driver-defined order of preference.
|MediaBox| is always present.
-The |pagebox| key may be used to specify which bounding box specification to use,
+The |pagebox| key may be used to specify which bounding box specification to use.
The value should be one of
|mediabox|, |cropbox|, |bleedbox|, |trimbox|, |artbox|.
\item[viewport]\NEWfeature{1995/06/01}
@@ -602,7 +614,7 @@ The value should be one of
\item[scale] Scale factor.
\item[clip] Either `true' or `false' (or no value, which is equivalent
to `true'). Clip the graphic to the bounding box.
-\item[draft] a boolean valued key, like `clip'. Locally switches to
+\item[draft] A boolean valued key, like `clip'. Locally switches to
draft mode.
\item[type] Specify the graphics type.
\item[ext] Specify the file extension. This should \emph{only} be
@@ -614,12 +626,16 @@ The value should be one of
\item[quiet]\NEWfeature{2017/06/01}
Skip writing information to the log.
\item[page]\NEWfeature{2017/06/01}
-Page of a multi-page PDF file. (by default the first page will be used.)
+Page of a multi-page PDF file. (By default the first page will be used.)
\item[interpolate]\NEWfeature{2017/06/01}
Enable/disable interpolation of bitmap images by the viewer.
+\item[alt]\NEWfeature{2021/09/16}
+ Alternative text for accessibility uses. By default this key is not used
+ but users are encouraged to add descriptive text here that may be used in
+ tagged PDF or as the |alt| attribute in conversions to HTML.
\end{description}
-For the keys specifying the original size (i.e,, the bounding box,
+For the keys specifying the original size (i.e., the bounding box,
trim and viewport keys) the units can be omitted, in
which case bp (i.e., PostScript points) are assumed.
@@ -710,7 +726,7 @@ the \LaTeXe\ primitive |\input@path|. A list of directories, each in a
as the directory separator, even on Windows.)
The default setting of this path is
- |\input@path| that is: graphics files will be found wherever \TeX\
+ |\input@path|, so that graphics files will be found wherever \TeX\
files are found.
\begin{decl}
@@ -748,7 +764,7 @@ must exist at the time \LaTeX\ is used.
extension from the \emph{ext-list} specified with
|\DeclareGraphicsExtensions|.)
-\emph{ext} the file extension for which this rule applies. As a special
+\emph{ext} is the file extension for which this rule applies. As a special
case, \emph{ext} may be given as |*| to denote the default behaviour for
all undeclared extensions (see the example below).
@@ -838,7 +854,7 @@ argument would change (and generate errors) if the user were to load
\section{Remaining packages in the graphics bundle}
\subsection{Epsfig}
-This is a small package essentially a `wrapper' around the
+This is a small package, essentially a `wrapper' around the
\package{graphicx} package, defining a command |\psfig| which has the
syntax\\
|\psfig{file=xxx,...}| rather than |\includegraphics[...]{xxx}|.\\
@@ -860,7 +876,7 @@ As well as being used as a \LaTeX\ package, the macros may be extracted
with the \package{docstrip} options \texttt{plain,package}. In this case
the \LaTeX\ package declarations are omitted from the file, and the
macros may be directly used as part of another macro file (they work
-with any format based on plain \TeX.)
+with any format based on plain \TeX).
\subsection{Keyval}
The \package{keyval} package is intended to be used by other
diff --git a/macros/latex-dev/required/graphics/keyval.dtx b/macros/latex-dev/required/graphics/keyval.dtx
index 6e710a78f9..02f9a15ec7 100644
--- a/macros/latex-dev/required/graphics/keyval.dtx
+++ b/macros/latex-dev/required/graphics/keyval.dtx
@@ -1,7 +1,7 @@
%
% \iffalse
%% keyval.dtx Copyright (C) 1993 1994 1995 1997 1998 1999 David Carlisle
-%% Copyright (C) 2000-2023 David Carlisle, LaTeX Project
+%% Copyright (C) 2000-2024 David Carlisle, LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
diff --git a/macros/latex-dev/required/graphics/keyval.pdf b/macros/latex-dev/required/graphics/keyval.pdf
index 7b1c32da0e..31c8bcc0bc 100644
--- a/macros/latex-dev/required/graphics/keyval.pdf
+++ b/macros/latex-dev/required/graphics/keyval.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/lscape.dtx b/macros/latex-dev/required/graphics/lscape.dtx
index c30a9f8dbd..eca5aa432b 100644
--- a/macros/latex-dev/required/graphics/lscape.dtx
+++ b/macros/latex-dev/required/graphics/lscape.dtx
@@ -2,7 +2,7 @@
% \iffalse
%
%% lscape.dtx Copyright (C) 1994 1999-2000 David Carlisle
-%% Copyright (C) 2000-2023 LaTeX Project
+%% Copyright (C) 2000-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
diff --git a/macros/latex-dev/required/graphics/lscape.pdf b/macros/latex-dev/required/graphics/lscape.pdf
index a225429e46..49be46adcf 100644
--- a/macros/latex-dev/required/graphics/lscape.pdf
+++ b/macros/latex-dev/required/graphics/lscape.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/mathcolor.pdf b/macros/latex-dev/required/graphics/mathcolor.pdf
index f1bcf17585..82a7579d12 100644
--- a/macros/latex-dev/required/graphics/mathcolor.pdf
+++ b/macros/latex-dev/required/graphics/mathcolor.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/rotating.dtx b/macros/latex-dev/required/graphics/rotating.dtx
index 4aefc71156..bac5759956 100644
--- a/macros/latex-dev/required/graphics/rotating.dtx
+++ b/macros/latex-dev/required/graphics/rotating.dtx
@@ -5,7 +5,7 @@
% File: rotating.dtx
%% Copyright (C) 1995-1999 Sebastian Rahtz and Leonor Barroca
%% Copyright (C) 2001-2003,2007-2009 Robin Fairbairns
-%% Copyright (C) 2016-2023 LaTeX Project
+%% Copyright (C) 2016-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%
diff --git a/macros/latex-dev/required/graphics/rotating.pdf b/macros/latex-dev/required/graphics/rotating.pdf
index 1fe5a8b8b9..57e646c94f 100644
--- a/macros/latex-dev/required/graphics/rotating.pdf
+++ b/macros/latex-dev/required/graphics/rotating.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/rotex.pdf b/macros/latex-dev/required/graphics/rotex.pdf
index 7c153bad33..9e3bd42516 100644
--- a/macros/latex-dev/required/graphics/rotex.pdf
+++ b/macros/latex-dev/required/graphics/rotex.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/trig.dtx b/macros/latex-dev/required/graphics/trig.dtx
index 7e80931d2a..d2fa91f91f 100644
--- a/macros/latex-dev/required/graphics/trig.dtx
+++ b/macros/latex-dev/required/graphics/trig.dtx
@@ -1,6 +1,6 @@
% \iffalse
%% File: trig.dtx Copyright (C) 1993-1999 David Carlisle
-%% Copyright (C) 2000-2023 LaTeX Project
+%% Copyright (C) 2000-2024 LaTeX Project
%% The LaTeX Project and any individual authors listed elsewhere
%% in this file.
%%
@@ -19,7 +19,7 @@
%<driver> \ProvidesFile{trig.drv}
% \fi
% \ProvidesFile{trig.dtx}
- [2021/08/11 v1.11 sin cos tan (DPC)]
+ [2023/12/02 v1.11 sin cos tan (DPC)]
%
% \iffalse
%</!plain>
@@ -214,7 +214,7 @@
% \end{macro}
%
% \begin{macro}{\TG@reduce}
-% Repeatedly use one of the the relations
+% Repeatedly use one of the relations
% $\sin(x)=\sin(180-x)=\sin(-180-x)$ to get $x$ in the range $-90 \leq
% x\leq 90$. Then call |\TG@series|.
% \begin{macrocode}
diff --git a/macros/latex-dev/required/graphics/trig.pdf b/macros/latex-dev/required/graphics/trig.pdf
index 6daa5bc8a2..35d2e24dfd 100644
--- a/macros/latex-dev/required/graphics/trig.pdf
+++ b/macros/latex-dev/required/graphics/trig.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/CHANGELOG.md b/macros/latex-dev/required/l3kernel/CHANGELOG.md
index 82eb45806a..70b869d905 100644
--- a/macros/latex-dev/required/l3kernel/CHANGELOG.md
+++ b/macros/latex-dev/required/l3kernel/CHANGELOG.md
@@ -7,11 +7,53 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-09-10]
+
+### Fixed
+- `\seq_map_pairwise_function:NNN` not work with `\seq_map_break:(n)` (issue \#1587)
+
+### Changed
+- Increase outdent of long function names in `l3doc` (issue \#1585)
+
+## [2024-08-30]
+
+### Changed
+- Reduce memory usage when building Unicode data storage
+- Avoid recursive doc for `\file_if_exist:n(TF)` (issue \#1573)
+
+### Fixed
+- Handling of `ltcmd` newlines (`\obeyedline`) in `l3doc` (issue \#1577)
+
+## [2024-08-16]
+
+### Added
+- Add quark (`\q_`) and scan mark (`\s_`) prefixes to naming scheme
+ (issue \#1565)
+
+## [2024-07-20]
+
+### Fixed
+- Implementation of deprecated `\tl_mixed_case:n(n)`
+- Redo the fix for LaTeX2e key properties (issue latex3/latex2e\#1415)
+
+## [2024-06-19]
+
+### Fixed
+- Avoid a low-level error when LaTeX2e key properties are given without a value
+
+## [2024-05-27]
+
+### Added
+- Syntax entries of `\keys_set_groups:nnn(n)N`
+
+### Fixed
+- `\peek_analysis_map_inline:n` with active spaces (issue \#1539)
+
## [2024-05-08]
### Added
- Full set of variants for `\prop_(g)put_if_not_in:Nnn`
-- `keys_set_groups:nnn(n)N` to match `keys_set_exclude_groups:nnn(n)N`
+- `\keys_set_groups:nnn(n)N` to match `\keys_set_exclude_groups:nnn(n)N`
### Fixed
- Implementation of deprecated `\pdf_object_write:nn`
@@ -1734,7 +1776,13 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-05-08...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-09-10...HEAD
+[2024-09-10]: https://github.com/latex3/latex3/compare/2024-08-30...2024-09-10
+[2024-08-30]: https://github.com/latex3/latex3/compare/2024-08-16...2024-08-30
+[2024-08-16]: https://github.com/latex3/latex3/compare/2024-07-20...2024-08-16
+[2024-07-20]: https://github.com/latex3/latex3/compare/2024-06-19...2024-07-20
+[2024-06-19]: https://github.com/latex3/latex3/compare/2024-05-27...2024-06-19
+[2024-05-27]: https://github.com/latex3/latex3/compare/2024-05-08...2024-05-27
[2024-05-08]: https://github.com/latex3/latex3/compare/2024-04-11...2024-05-08
[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11
[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
diff --git a/macros/latex-dev/required/l3kernel/README.md b/macros/latex-dev/required/l3kernel/README.md
index 0928ea46ce..76cf62b310 100644
--- a/macros/latex-dev/required/l3kernel/README.md
+++ b/macros/latex-dev/required/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-05-08
+Release 2024-09-10
Overview
--------
diff --git a/macros/latex-dev/required/l3kernel/expl3.dtx b/macros/latex-dev/required/l3kernel/expl3.dtx
index f4129aeb02..2842da27d1 100644
--- a/macros/latex-dev/required/l3kernel/expl3.dtx
+++ b/macros/latex-dev/required/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-05-08}%
+\def\ExplFileDate{2024-09-10}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -454,6 +454,15 @@
% implementation in \LaTeX3 means that |toks| are not required, and that
% all operations for storing tokens can use the |tl| variable type.
%
+% There are two more special types of constants:
+% \begin{arg-description}
+% \item[q] constants of quark type;
+% \item[s] constants of scan mark type.
+% \end{arg-description}
+% The \meta{type} part of quark and scan mark constants is omitted, and
+% the \meta{module} part of general quarks and scan marks is often
+% omitted too.
+%
% Experienced \TeX{} programmers will notice that some of the variable
% types listed are native \TeX{} registers whilst others are not. In
% general, the underlying \TeX{} implementation for a data structure may
diff --git a/macros/latex-dev/required/l3kernel/expl3.pdf b/macros/latex-dev/required/l3kernel/expl3.pdf
index 6c334e54d6..3892145fe1 100644
--- a/macros/latex-dev/required/l3kernel/expl3.pdf
+++ b/macros/latex-dev/required/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/interface3.pdf b/macros/latex-dev/required/l3kernel/interface3.pdf
index db66e71788..d5dbb77029 100644
--- a/macros/latex-dev/required/l3kernel/interface3.pdf
+++ b/macros/latex-dev/required/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/interface3.tex b/macros/latex-dev/required/l3kernel/interface3.tex
index 613eb673b0..9db72db2f0 100644
--- a/macros/latex-dev/required/l3kernel/interface3.tex
+++ b/macros/latex-dev/required/l3kernel/interface3.tex
@@ -58,7 +58,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-09-10}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex-dev/required/l3kernel/l3basics.dtx b/macros/latex-dev/required/l3kernel/l3basics.dtx
index 4c00ec0032..48a4371d98 100644
--- a/macros/latex-dev/required/l3kernel/l3basics.dtx
+++ b/macros/latex-dev/required/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -1151,10 +1151,9 @@
% argument (a single token denoted by |N|) is still free for definition.
% It would be used in constructions like
% \begin{quote}
-% |\bool_if:nTF {| \\
-% \verb" \cs_if_free_p:N \l_tmpz_tl || \cs_if_free_p:N \g_tmpz_tl " \\
-% |}|
-% \Arg{true code} \Arg{false code}
+% "\bool_if:nTF" \\
+% " { \cs_if_free_p:N \l_tmpz_tl || \cs_if_free_p:N \g_tmpz_tl }" \\
+% " "\Arg{true code} \Arg{false code}
% \end{quote}
%
% For each predicate defined, a \enquote{branching conditional}
diff --git a/macros/latex-dev/required/l3kernel/l3bitset.dtx b/macros/latex-dev/required/l3kernel/l3bitset.dtx
index 22cf7dc1f7..6c7dddd9c0 100644
--- a/macros/latex-dev/required/l3kernel/l3bitset.dtx
+++ b/macros/latex-dev/required/l3kernel/l3bitset.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3bootstrap.dtx b/macros/latex-dev/required/l3kernel/l3bootstrap.dtx
index e17c056909..3a2d2c2477 100644
--- a/macros/latex-dev/required/l3kernel/l3bootstrap.dtx
+++ b/macros/latex-dev/required/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3box.dtx b/macros/latex-dev/required/l3kernel/l3box.dtx
index 5d5aa54027..7ee8f93e2e 100644
--- a/macros/latex-dev/required/l3kernel/l3box.dtx
+++ b/macros/latex-dev/required/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -906,9 +906,9 @@
% \begin{syntax}
% \cs{box_set_trim:Nnnnn} \meta{box} \Arg{left} \Arg{bottom} \Arg{right} \Arg{top}
% \end{syntax}
-% Adjusts the bounding box of the \meta{box} \meta{left} is removed from
+% Adjusts the bounding box of the \meta{box}: \meta{left} is removed from
% the left-hand edge of the bounding box, \meta{right} from the right-hand
-% edge and so fourth. All adjustments are \meta{dim exprs}.
+% edge, and so forth. All adjustments are \meta{dim exprs}.
% Material outside of the bounding box is still displayed in the output
% unless \cs{box_set_clipped:N} is subsequently applied.
% The updated \meta{box} is an
diff --git a/macros/latex-dev/required/l3kernel/l3cctab.dtx b/macros/latex-dev/required/l3kernel/l3cctab.dtx
index a8c5232b3e..7fbab7c75a 100644
--- a/macros/latex-dev/required/l3kernel/l3cctab.dtx
+++ b/macros/latex-dev/required/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3clist.dtx b/macros/latex-dev/required/l3kernel/l3clist.dtx
index ebbfa29ddc..8f2da5d029 100644
--- a/macros/latex-dev/required/l3kernel/l3clist.dtx
+++ b/macros/latex-dev/required/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -324,8 +324,10 @@
% {
% \clist_remove_all:Nn, \clist_remove_all:cn,
% \clist_remove_all:NV, \clist_remove_all:cV,
+% \clist_remove_all:Ne, \clist_remove_all:ce,
% \clist_gremove_all:Nn, \clist_gremove_all:cn,
-% \clist_gremove_all:NV, \clist_gremove_all:cV
+% \clist_gremove_all:NV, \clist_gremove_all:cV,
+% \clist_gremove_all:Ne, \clist_gremove_all:ce
% }
% \begin{syntax}
% \cs{clist_remove_all:Nn} \meta{clist~var} \Arg{item}
@@ -350,7 +352,7 @@
% Reverses the order of items stored in the \meta{clist~var}.
% \end{function}
%
-% \begin{function}[added = 2014-07-18]{\clist_reverse:n}
+% \begin{function}[added = 2014-07-18, EXP]{\clist_reverse:n}
% \begin{syntax}
% \cs{clist_reverse:n} \Arg{comma list}
% \end{syntax}
@@ -1429,13 +1431,15 @@
% \begin{macro}
% {
% \clist_remove_all:Nn, \clist_remove_all:cn,
-% \clist_remove_all:NV, \clist_remove_all:cV
+% \clist_remove_all:NV, \clist_remove_all:cV,
+% \clist_remove_all:Ne, \clist_remove_all:ce
% }
% \UnitTested
% \begin{macro}
% {
% \clist_gremove_all:Nn, \clist_gremove_all:cn,
-% \clist_gremove_all:NV, \clist_gremove_all:cV
+% \clist_gremove_all:NV, \clist_gremove_all:cV,
+% \clist_gremove_all:Ne, \clist_gremove_all:ce
% }
% \UnitTested
% \begin{macro}{\@@_remove_all:NNNn}
@@ -1509,8 +1513,8 @@
\cs_new:Npn \@@_remove_all:
{ \exp_after:wN \@@_remove_all:w \@@_tmp:w , }
\cs_new:Npn \@@_remove_all:w #1 , \s_@@_mark , #2 , { \exp_not:n {#1} }
-\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV }
-\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV }
+\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV , Ne , ce }
+\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV , Ne , ce }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex-dev/required/l3kernel/l3coffins.dtx b/macros/latex-dev/required/l3kernel/l3coffins.dtx
index 76bbc78d99..be982e324a 100644
--- a/macros/latex-dev/required/l3kernel/l3coffins.dtx
+++ b/macros/latex-dev/required/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3color.dtx b/macros/latex-dev/required/l3kernel/l3color.dtx
index f9383d0404..0fafd8ef24 100644
--- a/macros/latex-dev/required/l3kernel/l3color.dtx
+++ b/macros/latex-dev/required/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -103,7 +103,7 @@
% \begin{itemize}
% \item \texttt{Gray} Grayscale color, with a single axis running from
% $0$ (fully black) to $15$ (fully white)
-% \item \texttt{hsb} Hue-saturation-brightness color, with three axes,all
+% \item \texttt{hsb} Hue-saturation-brightness color, with three axes, all
% real values in the range $[0,1]$ for hue saturation and brightness
% \item \texttt{Hsb} Hue-saturation-brightness color, with three axes, integer
% in the range $[0,360]$ for hue, real values in the range $[0,1]$ for
@@ -325,7 +325,7 @@
% \end{function}
%
% \begin{variable}[module = color]{color.sc}
-% When using \texttt{dvips}, this PostScript variables hold the stroke color.
+% When using \texttt{dvips}, this PostScript variable holds the stroke color.
% \end{variable}
%
% \subsection{Coloring math mode material}
@@ -406,20 +406,20 @@
%
% \begin{function}{\color_export:nnN}
% \begin{syntax}
-% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \Arg{tl}
+% \cs{color_export:nnN} \Arg{color expression} \Arg{format} \meta{tl var}
% \end{syntax}
% Parses the \meta{color expression} as described earlier,
% then converts to the \meta{format} specified and assigns the data to the
-% \meta{tl}.
+% \meta{tl var}.
% \end{function}
%
% \begin{function}{\color_export:nnnN}
% \begin{syntax}
-% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \Arg{tl}
+% \cs{color_export:nnnN} \Arg{model} \Arg{value(s)} \Arg{format} \meta{tl var}
% \end{syntax}
% Expresses the combination of \meta{model} and \meta{value(s)} in an
% internal representation, then converts to the \meta{format} specified and
-% assigns the data to the \meta{tl}.
+% assigns the data to the \meta{tl var}.
% \end{function}
%
% \section{Creating new color models}
@@ -495,7 +495,7 @@
%
% Color profiles are used to ensure color accuracy by linking to collaboration.
% Applying a profile can be used to standardise color which is otherwise
-% device-dependence.
+% device-dependent.
%
% \begin{function}[added = 2021-02-23]{\color_profile_apply:nn}
% \begin{syntax}
@@ -697,14 +697,14 @@
% \begin{macro}{\@@_convert:nnnN, \@@_convert:nVnN, \@@_convert:nnVN}
% \begin{macro}[EXP]
% {
-% \@@_convert_gray_gray:w
-% \@@_convert_gray_rgb:w
-% \@@_convert_gray_cmyk:w
-% \@@_convert_cmyk_gray:w
-% \@@_convert_cmyk_rgb:w
-% \@@_convert_cmyk_cmyk:w
-% \@@_convert_rgb_gray:w
-% \@@_convert_rgb_rgb:w
+% \@@_convert_gray_gray:w,
+% \@@_convert_gray_rgb:w,
+% \@@_convert_gray_cmyk:w,
+% \@@_convert_cmyk_gray:w,
+% \@@_convert_cmyk_rgb:w,
+% \@@_convert_cmyk_cmyk:w,
+% \@@_convert_rgb_gray:w,
+% \@@_convert_rgb_rgb:w,
% \@@_convert_rgb_cmyk:w
% }
% \begin{macro}[EXP]{\@@_convert_rgb_cmyk:nnn}
diff --git a/macros/latex-dev/required/l3kernel/l3debug.dtx b/macros/latex-dev/required/l3kernel/l3debug.dtx
index 7fb64a8c13..496004c34b 100644
--- a/macros/latex-dev/required/l3kernel/l3debug.dtx
+++ b/macros/latex-dev/required/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-05-08}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-09-10}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
diff --git a/macros/latex-dev/required/l3kernel/l3deprecation.dtx b/macros/latex-dev/required/l3kernel/l3deprecation.dtx
index d947bb4599..8f36b2075f 100644
--- a/macros/latex-dev/required/l3kernel/l3deprecation.dtx
+++ b/macros/latex-dev/required/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -505,10 +505,10 @@
{ \text_uppercase:nn {#1} {#2} }
\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:n }
\cs_new:Npn \tl_mixed_case:n #1
- { \text_titlecase_first:n {#1} }
+ { \text_titlecase_first:n { \text_lowercase:n {#1} } }
\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase_first:nn }
\cs_new:Npn \tl_mixed_case:nn #1#2
- { \text_titlecase_first:nn {#1} {#2} }
+ { \text_titlecase_first:nn {#1} { \text_lowercase:n {#2} } }
% \end{macrocode}
% \end{macro}
%
@@ -571,7 +571,7 @@
% \char_lower_case:N, \char_upper_case:N,
% \char_mixed_case:Nn, \char_fold_case:N,
% \char_str_lower_case:N, \char_str_upper_case:N,
-% \char_str_mixed_case:Nn, \char_str_fold_case:N,
+% \char_str_mixed_case:N, \char_str_fold_case:N,
% }
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_lowercase:n }
diff --git a/macros/latex-dev/required/l3kernel/l3doc.dtx b/macros/latex-dev/required/l3kernel/l3doc.dtx
index 24efea50c7..9268f85744 100644
--- a/macros/latex-dev/required/l3kernel/l3doc.dtx
+++ b/macros/latex-dev/required/l3kernel/l3doc.dtx
@@ -71,7 +71,7 @@ and all files in that bundle must be distributed together.
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2024-05-08}{}
+\ProvidesExplClass{l3doc}{2024-09-10}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
% \maketitle
% \tableofcontents
%
@@ -1618,7 +1618,7 @@ and all files in that bundle must be distributed together.
%
% \subsection{Design}
%
-% Increase the text width slightly so that width the standard fonts
+% Increase the text width slightly so that with the standard fonts
% 72~columns of code may appear in a \env{macrocode} environment.
% Increase the marginpar width slightly, for long command names. And
% increase the left margin by a similar amount.
@@ -2160,10 +2160,18 @@ and all files in that bundle must be distributed together.
%
% \begin{macro}{\@@_names_get_seq:nN}
% The argument~|#1| (argument of a |function| or |macro| environment)
-% has catcodes $10$ (space), $12$ (other) and $13$ (active). Sanitize
-% catcodes. If the |verb| option was used, output a one-item
-% sequence. Otherwise, remove any \enquote{\%} character at the
-% beginning of a line. Remove tabs and newlines. Finally, convert
+% has catcodes $10$ (space), $12$ (other) and $13$ (active), and
+% since \LaTeX{} 2024-06-01 also macro \cs{obeyedline} in replacement
+% of active |^^M| tokens (due to the revised behavior of |+v|
+% argument type in |ltcmd|).
+% If the |verb| option was used, sanitize catcodes and output
+% a one-item sequence.
+% Otherwise, remove any \enquote{\%} character at the beginning of
+% a line using new end-of-line marker \cs{obeyedline}. Remove any
+% remaining \cs{obeyedline}. Then sanitize catcodes so we keep those
+% verbatim \cs{obeyedline} typed in by user. Remove remaining
+% \enquote{\%} character at the beginning of a line using traditional
+% |^^M| marker. Remove tabs and newlines. Finally, convert
% |_@@| and |@@| to |__|\meta{module name} (if it is non-empty). At
% this point, \cs{l_@@_tmpa_tl} contains a comma-delimited list of
% names, where |@| and~|_| have category code letter. Turn it to a
@@ -2172,17 +2180,20 @@ and all files in that bundle must be distributed together.
% \begin{macrocode}
\cs_new_protected:Npn \@@_names_get_seq:nN #1#2
{
- \__kernel_tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:n {#1} }
\bool_if:NTF \l_@@_names_verb_bool
{
\seq_clear:N #2
- \seq_put_right:NV #2 \l_@@_tmpa_tl
+ \seq_put_right:No #2 { \tl_to_str:n {#1} }
}
{
+ \tl_set:Nn \l_@@_tmpa_tl {#1}
\tl_remove_all:Ne \l_@@_tmpa_tl
- { \iow_char:N \^^M \c_percent_str }
+ { \exp_not:N \obeyedline \c_percent_str }
+ \tl_remove_all:Ne \l_@@_tmpa_tl
+ { \exp_not:N \obeyedline }
+ \__kernel_tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:N \l_@@_tmpa_tl }
\tl_remove_all:Ne \l_@@_tmpa_tl
- { \token_to_str:N \obeyedline \c_space_tl \c_percent_str }
+ { \iow_char:N \^^M \c_percent_str }
\tl_remove_all:Ne \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } }
\tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^I }
\tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M }
@@ -2529,7 +2540,7 @@ and all files in that bundle must be distributed together.
\cs_new_protected:Npn \@@_function_typeset_stop:
{
\par
- \dim_set:Nn \prevdepth { \box_dp:N \l_@@_descr_coffin }
+ \dim_set:Nn \prevdepth { \coffin_dp:N \l_@@_descr_coffin }
\allowbreak
}
% \end{macrocode}
@@ -2594,7 +2605,7 @@ and all files in that bundle must be distributed together.
\dim_zero:N \l_@@_trial_width_dim
\hcoffin_set:Nn \l_@@_functions_coffin { \@@_typeset_functions: }
\dim_set:Nn \l_@@_trial_width_dim
- { \box_wd:N \l_@@_functions_coffin }
+ { \coffin_wd:N \l_@@_functions_coffin }
\bool_set:Nn \l_@@_long_name_bool
{ \dim_compare_p:nNn \l_@@_trial_width_dim > \marginparwidth }
}
@@ -2643,7 +2654,7 @@ and all files in that bundle must be distributed together.
\coffin_join:NnnNnnnn
\l_@@_output_coffin {l} {b}
\l_@@_descr_coffin {l} {t}
- {0.75\marginparwidth + \marginparsep} {-\medskipamount}
+ {\marginparwidth + \marginparsep} {-\medskipamount}
\coffin_typeset:Nnnnn \l_@@_output_coffin
{\l_@@_descr_coffin-l} {\l_@@_descr_coffin-t}
{0pt} {0pt}
@@ -2695,8 +2706,7 @@ and all files in that bundle must be distributed together.
% \end{macro}
%
% ^^A TODO: collect all index targets from a given function environment in a box and stick it at the top.
-% \begin{macro}
-% {\@@_typeset_function_block:nN, \@@_typeset_function_block:eN}
+% \begin{macro}{\@@_typeset_function_block:nN}
% \begin{macro}{\@@_function_index:n, \@@_function_index:e}
% |#1| is a csname, |#2| a boolean indicating whether to add |TF| or not.
% \begin{macrocode}
@@ -2712,7 +2722,6 @@ and all files in that bundle must be distributed together.
{ \@@_typeset_variant_list:nN {#1} #2 }
\\
}
-\cs_generate_variant:Nn \@@_typeset_function_block:nN { e }
\cs_new_protected:Npn \@@_function_index:n #1
{
\seq_gput_right:Nn \g_doc_functions_seq {#1}
@@ -2840,7 +2849,7 @@ and all files in that bundle must be distributed together.
{
\textwidth
\bool_if:NT \l_@@_long_name_bool
- { + 0.75 \marginparwidth - \l_@@_trial_width_dim }
+ { + \marginparwidth - \l_@@_trial_width_dim }
}
\hbox_gset:Nw \g_@@_syntax_box
\small \ttfamily
@@ -3213,7 +3222,7 @@ and all files in that bundle must be distributed together.
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_print_macroname_aux:nn}
+% \begin{macro}{\@@_print_macroname_aux:nn, \@@_print_macroname_aux:on}
% |#1| is prefix, |#2| is optional |TF| suffix.
% \begin{macrocode}
\cs_new_protected:Npn \@@_print_macroname_aux:nn #1#2
@@ -4254,7 +4263,6 @@ and all files in that bundle must be distributed together.
{#2}
\l_@@_index_internal_bool
}
-\cs_generate_variant:Nn \@@_special_index:nn { o }
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/required/l3kernel/l3doc.pdf b/macros/latex-dev/required/l3kernel/l3doc.pdf
index 8ebd6f5caf..71c30326ad 100644
--- a/macros/latex-dev/required/l3kernel/l3doc.pdf
+++ b/macros/latex-dev/required/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3docstrip.dtx b/macros/latex-dev/required/l3kernel/l3docstrip.dtx
index a3b62db0af..c7664dbcce 100644
--- a/macros/latex-dev/required/l3kernel/l3docstrip.dtx
+++ b/macros/latex-dev/required/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3docstrip.pdf b/macros/latex-dev/required/l3kernel/l3docstrip.pdf
index 019b64c130..bdd6de971b 100644
--- a/macros/latex-dev/required/l3kernel/l3docstrip.pdf
+++ b/macros/latex-dev/required/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3expan.dtx b/macros/latex-dev/required/l3kernel/l3expan.dtx
index 7b859acaa5..376d19bf7e 100644
--- a/macros/latex-dev/required/l3kernel/l3expan.dtx
+++ b/macros/latex-dev/required/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -75,8 +75,8 @@
% If \cs{seq_gpush:No} was not defined it could be coded in the following way:
% \begin{verbatim}
% \exp_args:NNo \seq_gpush:Nn
-% \g_file_name_stack
-% { \l_tmpa_tl }
+% \g_file_name_stack
+% { \l_tmpa_tl }
% \end{verbatim}
% In other words, the first argument to \cs{exp_args:NNo} is the base
% function and the other arguments are preprocessed and then passed to
diff --git a/macros/latex-dev/required/l3kernel/l3file.dtx b/macros/latex-dev/required/l3kernel/l3file.dtx
index ba460e3fee..b08d59abce 100644
--- a/macros/latex-dev/required/l3kernel/l3file.dtx
+++ b/macros/latex-dev/required/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -718,8 +718,10 @@
% \cs{file_if_exist_p:n} \Arg{file name}
% \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Tests if \meta{file name} is found in the path as detailed for
-% \cs{file_if_exist:nTF}.
+% Expands the argument of the \meta{file name} to give a string, then
+% searches for this string using the current \TeX{} search
+% path and the additional paths controlled by
+% \cs{l_file_search_path_seq}.
% \end{function}
%
% \subsection{Information about files and file contents}
@@ -809,7 +811,6 @@
% Sets the \meta{tl var} to the result of applying
% \cs{file_size:n} to the \meta{file}. If the file is not found,
% the \meta{tl var} will be set to \cs{q_no_value}.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[rEXP, added = 2019-09-03]
@@ -825,7 +826,6 @@
% \meta{minute}\meta{second}\meta{offset}, where the latter may be |Z|
% (UTC) or \meta{plus-minus}\meta{hours}|'|\meta{minutes}|'|.
% When the file is not found, the result of expansion is empty.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
@@ -836,7 +836,6 @@
% Sets the \meta{tl var} to the result of applying
% \cs{file_timestamp:n} to the \meta{file}. If the file is not found,
% the \meta{tl var} will be set to \cs{q_no_value}.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[added = 2019-05-13, updated = 2019-09-20, pTF, EXP]
@@ -847,11 +846,11 @@
% \file_compare_timestamp:VNV
% }
% \begin{syntax}
-% \cs{file_compare_timestamp_p:nNn} \Arg{file-1} \meta{comparator} \Arg{file-2}
-% \cs{file_compare_timestamp:nNnTF} \Arg{file-1} \meta{comparator} \Arg{file-2} \Arg{true code} \Arg{false code}
+% \cs{file_compare_timestamp_p:nNn} \Arg{file-1} \meta{relation} \Arg{file-2}
+% \cs{file_compare_timestamp:nNnTF} \Arg{file-1} \meta{relation} \Arg{file-2} \Arg{true code} \Arg{false code}
% \end{syntax}
% Compares the file stamps on the two \meta{files} as indicated by
-% the \meta{comparator}, and inserts either the \meta{true code}
+% the \meta{relation}, and inserts either the \meta{true code}
% or \meta{false case} as required. A file which is not found
% is treated as older than any file which is found. This allows for
% example the construct
@@ -863,7 +862,6 @@
% \end{verbatim}
% to work when the derived file is entirely absent. The timestamp
% of two absent files is regarded as different.
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[noTF, updated = 2019-02-16]
diff --git a/macros/latex-dev/required/l3kernel/l3flag.dtx b/macros/latex-dev/required/l3kernel/l3flag.dtx
index bf7776f449..5b1794b3ad 100644
--- a/macros/latex-dev/required/l3kernel/l3flag.dtx
+++ b/macros/latex-dev/required/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-assign.dtx b/macros/latex-dev/required/l3kernel/l3fp-assign.dtx
index 9ef1944a99..e7a618d598 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-assign.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-assign.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex-dev/required/l3kernel/l3fp-aux.dtx b/macros/latex-dev/required/l3kernel/l3fp-aux.dtx
index f788b85df9..aeab995210 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-aux.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-basics.dtx b/macros/latex-dev/required/l3kernel/l3fp-basics.dtx
index 83c9cc87fa..9056f9e3ff 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-basics.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-basics.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-convert.dtx b/macros/latex-dev/required/l3kernel/l3fp-convert.dtx
index e42fb383fe..cc0112bf03 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-convert.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-expo.dtx b/macros/latex-dev/required/l3kernel/l3fp-expo.dtx
index 31eb49093d..4ef3b85c07 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-expo.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-expo.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-extended.dtx b/macros/latex-dev/required/l3kernel/l3fp-extended.dtx
index e35f0ae55e..4ebbbb3f09 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-extended.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-extended.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-functions.dtx b/macros/latex-dev/required/l3kernel/l3fp-functions.dtx
index e7667eaa9b..13753cbde4 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-functions.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-logic.dtx b/macros/latex-dev/required/l3kernel/l3fp-logic.dtx
index 49ad2b1c02..0ab92fb5ff 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-logic.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-logic.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-parse.dtx b/macros/latex-dev/required/l3kernel/l3fp-parse.dtx
index 7999be7966..fb9a07fbec 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-parse.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-parse.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-random.dtx b/macros/latex-dev/required/l3kernel/l3fp-random.dtx
index 2a3d00cb58..7832c58792 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-random.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-random.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-round.dtx b/macros/latex-dev/required/l3kernel/l3fp-round.dtx
index b96d496b22..1ea74e51dd 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-round.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx b/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
index cdb7383949..cb3e2e2655 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-traps.dtx b/macros/latex-dev/required/l3kernel/l3fp-traps.dtx
index bca459effa..b73d27a304 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-traps.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-traps.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex-dev/required/l3kernel/l3fp-trig.dtx b/macros/latex-dev/required/l3kernel/l3fp-trig.dtx
index 8e8bc1cbf8..d9c9db6071 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-trig.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-trig.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp-types.dtx b/macros/latex-dev/required/l3kernel/l3fp-types.dtx
index 9764606e83..4e0d024d4f 100644
--- a/macros/latex-dev/required/l3kernel/l3fp-types.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3fp.dtx b/macros/latex-dev/required/l3kernel/l3fp.dtx
index d49d2431cb..ef02d0f816 100644
--- a/macros/latex-dev/required/l3kernel/l3fp.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -773,7 +773,7 @@
% The result may contain other functions, which are
% then replaced by their results if they have any. For instance,
% \begin{quote}
-% \cs{fp_new_function:n} |{ foo }| \\
+% \cs{fp_new_function:n} |{ npow }| \\
% \cs{fp_set_function:nnn} |{ npow } { a,b } { a**b }| \\
% \cs{fp_show:n} |{ npow(16,0.25) } }|
% \end{quote}
diff --git a/macros/latex-dev/required/l3kernel/l3fparray.dtx b/macros/latex-dev/required/l3kernel/l3fparray.dtx
index 8b8026a6b8..8ce29ecaf8 100644
--- a/macros/latex-dev/required/l3kernel/l3fparray.dtx
+++ b/macros/latex-dev/required/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3int.dtx b/macros/latex-dev/required/l3kernel/l3int.dtx
index c4e8408af2..0d9b0137de 100644
--- a/macros/latex-dev/required/l3kernel/l3int.dtx
+++ b/macros/latex-dev/required/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -100,21 +100,6 @@
% restricted-expandable functions can both be used, and \cs{exp_not:n}
% and its variants have no effect while \cs{exp_not:N} may incorrectly
% interrupt the expression.
-% \begin{texnote}
-% Exactly two expansions are needed to evaluate \cs{int_eval:n}.
-% The result is \emph{not} an \meta{internal integer}, and therefore
-% should be terminated by a space if used in \cs{int_value:w} or in
-% a \TeX{}-style integer assignment.
-%
-% As all \TeX{} integers, integer operands can also be:
-% \tn{value}\Arg{\LaTeXe{} counter}; dimension or skip variables,
-% converted to integers in~\texttt{sp}; the character code of some
-% character given as \texttt{`}\meta{char} or
-% \texttt{`\textbackslash}\meta{char}; octal numbers given as
-% \texttt{'} followed by digits from \texttt{0} to \texttt{7}; or
-% hexadecimal numbers given as |"| followed by digits and upper case
-% letters from \texttt{A} to~\texttt{F}.
-% \end{texnote}
%
% \begin{function}[EXP]{\int_eval:n}
% \begin{syntax}
@@ -124,43 +109,7 @@
% input stream as an integer denotation: for positive results an
% explicit sequence of decimal digits not starting with~\texttt{0},
% for negative results \texttt{-}~followed by such a sequence, and
-% \texttt{0}~for zero. The \meta{int expr} should consist,
-% after expansion, of \texttt{+}, \texttt{-}, \texttt{*}, \texttt{/},
-% \texttt{(}, \texttt{)} and of course integer operands. The result
-% is calculated by applying standard mathematical rules with the
-% following peculiarities:
-% \begin{itemize}
-% \item \texttt{/} denotes division rounded to the closest integer with
-% ties rounded away from zero;
-% \item there is an error and the overall expression evaluates to zero
-% whenever the absolute value of any intermediate result exceeds
-% $2^{31}-1$, except in the case of scaling operations
-% $a$\texttt{*}$b$\texttt{/}$c$, for which $a$\texttt{*}$b$ may be
-% arbitrarily large;
-% \item parentheses may not appear after unary \texttt{+} or
-% \texttt{-}, namely placing \texttt{+(} or \texttt{-(} at the start
-% of an expression or after \texttt{+}, \texttt{-}, \texttt{*},
-% \texttt{/} or~\texttt{(} leads to an error.
-% \end{itemize}
-% Each integer operand can be either an integer variable (with no need
-% for \cs{int_use:N}) or an integer denotation. For example both
-% \begin{verbatim}
-% \int_eval:n { 5 + 4 * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% and
-% \begin{verbatim}
-% \tl_new:N \l_my_tl
-% \tl_set:Nn \l_my_tl { 5 }
-% \int_new:N \l_my_int
-% \int_set:Nn \l_my_int { 4 }
-% \int_eval:n { \l_my_tl + \l_my_int * 3 - ( 3 + 4 * 5 ) }
-% \end{verbatim}
-% evaluate to $-6$ because \cs[no-index]{l_my_tl} expands to the
-% integer denotation~|5|. As the \meta{int expr} is fully
-% expanded from left to right during evaluation, fully expandable and
-% restricted-expandable functions can both be used, and \cs{exp_not:n}
-% and its variants have no effect while \cs{exp_not:N} may incorrectly
-% interrupt the expression.
+% \texttt{0}~for zero.
% \begin{texnote}
% Exactly two expansions are needed to evaluate \cs{int_eval:n}.
% The result is \emph{not} an \meta{internal integer}, and therefore
@@ -462,7 +411,8 @@
% \end{syntax}
% This function evaluates the \meta{test int expr} and
% compares this in turn to each of the
-% \meta{int expr cases}. If the two are equal then the
+% \meta{int expr case}s until a match is found.
+% If the two are equal then the
% associated \meta{code} is left in the input stream
% and other cases are discarded. If any of the
% cases are matched, the \meta{true code} is also inserted into the
@@ -481,6 +431,10 @@
% { No idea! }
% \end{verbatim}
% leaves \enquote{\texttt{Medium}} in the input stream.
+% Since evaluation of the test expressions stops at the first
+% successful case, the order of possible matches should normally
+% be that the most likely are earlier: this will reduce the average
+% steps required to complete expansion.
% \end{function}
%
% \begin{function}[EXP,pTF]{\int_if_even:n, \int_if_odd:n}
@@ -909,7 +863,6 @@
% \end{syntax}
% Evaluates the two \meta{int expr}s and produces a
% pseudo-random number between the two (with bounds included).
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \begin{function}[EXP, added = 2018-05-05]{\int_rand:n}
@@ -918,7 +871,6 @@
% \end{syntax}
% Evaluates the \meta{int expr} then produces a
% pseudo-random number between $1$ and the \meta{int expr} (included).
-% This is not available in older versions of \XeTeX{}.
% \end{function}
%
% \section{Viewing integers}
diff --git a/macros/latex-dev/required/l3kernel/l3intarray.dtx b/macros/latex-dev/required/l3kernel/l3intarray.dtx
index 20e6219ef8..0320579e94 100644
--- a/macros/latex-dev/required/l3kernel/l3intarray.dtx
+++ b/macros/latex-dev/required/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx b/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
index 6779a3ca6c..ab12634783 100644
--- a/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex-dev/required/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3keys.dtx b/macros/latex-dev/required/l3kernel/l3keys.dtx
index f03c628a63..4535a6e845 100644
--- a/macros/latex-dev/required/l3kernel/l3keys.dtx
+++ b/macros/latex-dev/required/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -649,15 +649,13 @@
% { key } % Name of choice key
% { choice-a , choice-b , choice-c } % Valid choices
% { \exp_not:n {#1} } % Invalid choice given
-% %
-% %
% }
% \end{verbatim}
%
% Multiple choices are created in a very similar manner to mutually-exclusive
% choices, using the properties \texttt{.multichoice:} and
% \texttt{.multichoices:nn}. As with mutually exclusive choices, multiple
-% choices are define as sub-keys. Thus both
+% choices are defined as sub-keys. Thus both
% \begin{verbatim}
% \keys_define:nn { mymodule }
% {
@@ -792,36 +790,6 @@
% }
% \end{verbatim}
%
-% \begin{function}[added = 2011-08-23, updated = 2019-01-29]
-% {
-% \keys_set_known:nn, \keys_set_known:nV,
-% \keys_set_known:nv, \keys_set_known:ne,
-% \keys_set_known:no,
-% \keys_set_known:nnN, \keys_set_known:nVN,
-% \keys_set_known:nvN, \keys_set_known:neN,
-% \keys_set_known:noN,
-% \keys_set_known:nnnN, \keys_set_known:nVnN,
-% \keys_set_known:nvnN, \keys_set_known:nenN,
-% \keys_set_known:nonN
-% }
-% \begin{syntax}
-% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list}
-% \cs{keys_set_known:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_known:nnnN} \Arg{module} \Arg{keyval list} \Arg{root} \meta{tl}
-% \end{syntax}
-% These functions set keys which are known for the \meta{module}, and
-% simply ignore other keys. The \cs{keys_set_known:nn} function parses the
-% \meta{keyval list}, and sets those keys which are defined for
-% \meta{module}. Any keys which are unknown are not processed further by
-% the parser. In addition, \cs{keys_set_known:nnN} stores the key--value
-% pairs in the \meta{tl} in comma-separated form (\emph{i.e.}~an edited
-% version of the \meta{keyval list}). When a \meta{root} is given
-% (\cs{keys_set_known:nnnN}), the key--value entries are returned
-% relative to this point in the key tree. When it is absent, only the
-% key name and value are provided. The correct list is returned by
-% nested calls.
-% \end{function}
-%
% \section{Selective key setting}
% \label{sec:l3keys:selective}
%
@@ -862,33 +830,37 @@
% groups to be made \enquote{active}, or by marking one or more groups to
% be ignored in key setting.
%
-% \begin{function}[added = 2024-01-10]
+% \begin{function}[added = 2011-08-23, updated = 2019-01-29]
% {
-% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
-% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno,
-% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
-% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN,
-% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
-% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN,
+% \keys_set_known:nn, \keys_set_known:nV,
+% \keys_set_known:nv, \keys_set_known:ne,
+% \keys_set_known:no,
+% \keys_set_known:nnN, \keys_set_known:nVN,
+% \keys_set_known:nvN, \keys_set_known:neN,
+% \keys_set_known:noN,
+% \keys_set_known:nnnN, \keys_set_known:nVnN,
+% \keys_set_known:nvnN, \keys_set_known:nenN,
+% \keys_set_known:nonN
% }
% \begin{syntax}
-% \cs{keys_set_exclude_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
-% \cs{keys_set_exclude_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_exclude_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{root} \meta{tl}
+% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list}
+% \cs{keys_set_known:nnN} \Arg{module} \Arg{keyval list} \meta{tl~var}
+% \cs{keys_set_known:nnnN} \Arg{module} \Arg{keyval list} \Arg{root} \meta{tl~var}
% \end{syntax}
-% Sets keys by excluding those in the specified \meta{groups}.
-% The \meta{groups} are
-% given as a comma-separated list. Unknown keys are not assigned to any
-% group and are thus always set. The key--value pairs for each
-% key which is filtered out are stored in the \meta{tl} in a
-% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
-% list}). The \cs{keys_set_exclude_groups:nnn} version skips this stage.
-%
-% Use of \cs{keys_set_exclude_groups:nnnN} can be nested, with the correct residual
-% \meta{keyval list} returned at each stage. In the version which takes
-% a \meta{root} argument, the key list is returned relative to that point
-% in the key tree. In the cases without a \meta{root} argument, only
-% the key names and values are returned.
+% These functions set keys which are known for the \meta{module}, and
+% simply ignore other keys. The \cs{keys_set_known:nn} function parses the
+% \meta{keyval list}, and sets those keys which are defined for
+% \meta{module}. Any keys which are unknown are not processed further by
+% the parser.
+%
+% In addition, \cs{keys_set_known:nnN} and \cs{keys_set_known:nnnN}
+% store the key--value pairs for unknown keys in the \meta{tl~var}
+% in comma-separated form (\emph{i.e.}~an edited version of the
+% \meta{keyval list}). When a \meta{root} is given
+% (\cs{keys_set_known:nnnN}), the key--value entries are returned
+% relative to this point in the key tree. When it is absent, only the
+% key name and value are provided. The correct list is returned by
+% nested calls.
% \end{function}
%
% \begin{function}[added = 2013-07-14, updated = 2024-05-08]
@@ -902,25 +874,62 @@
% }
% \begin{syntax}
% \cs{keys_set_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
+% \cs{keys_set_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl~var}
+% \cs{keys_set_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \Arg{root} \meta{tl~var}
+% \end{syntax}
+% These functions activate key selection in an \enquote{opt-in} sense:
+% only keys assigned to one or more of the \meta{groups} specified are set.
+% The \meta{groups} are given as a comma-separated list. Unknown keys are
+% not assigned to any group and are thus never set.
+%
+% In addition, \cs{keys_set_groups:nnnN} and \cs{keys_set_groups:nnnnN}
+% store the key--value pairs for skipped keys in the \meta{tl~var}
+% in comma-separated form (\emph{i.e.}~an edited version of the
+% \meta{keyval list}). When a \meta{root} is given
+% (\cs{keys_set_groups:nnnnN}), the key--value entries are returned
+% relative to this point in the key tree. When it is absent, only the
+% key name and value are provided. The correct list is returned by
+% nested calls.
+% \end{function}
+%
+% \begin{function}[added = 2024-01-10]
+% {
+% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
+% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno,
+% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
+% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN,
+% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
+% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN,
+% }
+% \begin{syntax}
+% \cs{keys_set_exclude_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
+% \cs{keys_set_exclude_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl~var}
+% \cs{keys_set_exclude_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \Arg{root} \meta{tl~var}
% \end{syntax}
-% Activates key filtering in an \enquote{opt-in} sense: only keys assigned to
-% one or more of the \meta{groups} specified are set. The \meta{groups} are
-% given as a comma-separated list. Unknown keys are not assigned to any
-% group and are thus never set. The key--value pairs for each
-% key which is filtered out are stored in the \meta{tl} in a
-% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
-% list}). The \cs{keys_set_groups:nnn} version skips this stage
+% These functions activate key selection in an \enquote{opt-out} sense:
+% keys assigned to one or more of the \meta{groups} specified are
+% \emph{not} set. The \meta{groups} are given as a comma-separated list.
+% Unknown keys are not assigned to any group and are thus always set.
+%
+% In addition, \cs{keys_set_exclude_groups:nnnN} and
+% \cs{keys_set_exclude_groups:nnnnN} store the key--value pairs for
+% skipped keys in the \meta{tl~var} in comma-separated form
+% (\emph{i.e.}~an edited version of the \meta{keyval list}). When a
+% \meta{root} is given (\cs{keys_set_exclude_groups:nnnnN}), the
+% key--value entries are returned relative to this point in the key
+% tree. When it is absent, only the key name and value are provided.
+% The correct list is returned by nested calls.
% \end{function}
%
% \section{Digesting keys}
%
% \begin{function}[added = 2022-03-09]{\keys_precompile:nnN}
% \begin{syntax}
-% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
+% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl~var}
% \end{syntax}
% Parses the \meta{keyval list} as for \cs{keys_set:nn}, placing the
% resulting code for those which set variables or functions into the
-% \meta{tl}. Thus this function \enquote{precompiles} the keyval list into
+% \meta{tl~var}. Thus this function \enquote{precompiles} the keyval list into
% a set of results which can be applied rapidly.
% \end{function}
%
@@ -1687,14 +1696,14 @@
% \begin{variable}{\l_@@_selective_clist}
% The list of key groups being filtered in or out during selective setting.
% \begin{macrocode}
-\seq_new:N \l_@@_selective_clist
+\clist_new:N \l_@@_selective_clist
% \end{macrocode}
% \end{variable}
%
% \begin{variable}{\l_@@_tmp_clist}
% Scratch space used as a data dump.
% \begin{macrocode}
-\seq_new:N \l_@@_tmp_clist
+\clist_new:N \l_@@_tmp_clist
% \end{macrocode}
% \end{variable}
%
@@ -1915,19 +1924,21 @@
% \end{macro}
%
% \begin{macro}{\@@_define_code:n}
+% \begin{macro}[EXP]{\@@_define_code:nnn}
% \begin{macro}[EXP]{\@@_define_code:w}
% Two possible cases. If there is a value for the key, then just use
% the function. If not, then a check to make sure there is no need for
% a value with the property. If there should be one then complain,
-% otherwise execute it. There is no need to check for a |:| as if it
-% was missing the earlier tests would have failed.
+% otherwise execute it. For a \LaTeXe{} property like |.code| which
+% doesn't contain a |:|, treat it as having arity 1 and pass the
+% (empty) value to it.
% \begin{macrocode}
\cs_new_protected:Npn \@@_define_code:n #1
{
\bool_if:NTF \l_@@_no_value_bool
{
- \exp_after:wN \@@_define_code:w
- \l_@@_property_str \s_@@_stop
+ \@@_define_code:nnn
+ { \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
{ \use:c { \c_@@_props_root_str \l_@@_property_str } }
{
\msg_error:nnee { keys } { property-requires-value }
@@ -1936,12 +1947,31 @@
}
{ \use:c { \c_@@_props_root_str \l_@@_property_str } {#1} }
}
-\exp_last_unbraced:NNNNo
- \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \s_@@_stop
- { \tl_if_empty:nTF {#2} }
+\cs_new:Npe \@@_define_code:nnn
+ {
+ \exp_not:N \exp_after:wN \exp_not:N \@@_define_code:w
+ \exp_not:N \l_@@_property_str
+ \c_colon_str \c_colon_str
+ \exp_not:N \s_@@_stop
+ }
+\use:e
+ {
+ \cs_new:Npn \exp_not:N \@@_define_code:w
+ #1 \c_colon_str #2 \c_colon_str #3 \exp_not:N \s_@@_stop
+ }
+ {
+ \tl_if_empty:nTF {#3}
+ { \use_i:nnn }
+ {
+ \tl_if_empty:nTF {#2}
+ { \use_ii:nnn }
+ { \use_iii:nnn }
+ }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Turning properties into actions}
%
@@ -2148,7 +2178,7 @@
%
% \begin{macro}{\@@_initialise:n}
% A set up for initialisation: just run the code if it exists.
-% We need to set the key string here, using the deprecated \texttt{tl}
+% We need to set the key string here, using the deprecated \texttt{tl~var}
% as a piece of scratch space.
% \begin{macrocode}
\cs_new_protected:Npn \@@_initialise:n #1
diff --git a/macros/latex-dev/required/l3kernel/l3legacy.dtx b/macros/latex-dev/required/l3kernel/l3legacy.dtx
index fd30799ea1..06827eb5db 100644
--- a/macros/latex-dev/required/l3kernel/l3legacy.dtx
+++ b/macros/latex-dev/required/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3luatex.dtx b/macros/latex-dev/required/l3kernel/l3luatex.dtx
index 19d92a1591..9c1cabc9bd 100644
--- a/macros/latex-dev/required/l3kernel/l3luatex.dtx
+++ b/macros/latex-dev/required/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3msg.dtx b/macros/latex-dev/required/l3kernel/l3msg.dtx
index 96fc231193..5d1d0a5bec 100644
--- a/macros/latex-dev/required/l3kernel/l3msg.dtx
+++ b/macros/latex-dev/required/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3names.dtx b/macros/latex-dev/required/l3kernel/l3names.dtx
index c2af4697f2..7dec3ca091 100644
--- a/macros/latex-dev/required/l3kernel/l3names.dtx
+++ b/macros/latex-dev/required/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3news.pdf b/macros/latex-dev/required/l3kernel/l3news.pdf
index dd143fa9e6..67357d3ca7 100644
--- a/macros/latex-dev/required/l3kernel/l3news.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news01.pdf b/macros/latex-dev/required/l3kernel/l3news01.pdf
index 5b3278a9c0..294e75b55f 100644
--- a/macros/latex-dev/required/l3kernel/l3news01.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news02.pdf b/macros/latex-dev/required/l3kernel/l3news02.pdf
index cf92aa6e2b..521ec3c1f1 100644
--- a/macros/latex-dev/required/l3kernel/l3news02.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news03.pdf b/macros/latex-dev/required/l3kernel/l3news03.pdf
index bfec3ed2d1..c0fa44acf0 100644
--- a/macros/latex-dev/required/l3kernel/l3news03.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news04.pdf b/macros/latex-dev/required/l3kernel/l3news04.pdf
index ffda2b9917..90e38afc4b 100644
--- a/macros/latex-dev/required/l3kernel/l3news04.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news05.pdf b/macros/latex-dev/required/l3kernel/l3news05.pdf
index 36d6f0617b..5c221e067f 100644
--- a/macros/latex-dev/required/l3kernel/l3news05.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news06.pdf b/macros/latex-dev/required/l3kernel/l3news06.pdf
index 35f4d87bbd..64028db3f0 100644
--- a/macros/latex-dev/required/l3kernel/l3news06.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news07.pdf b/macros/latex-dev/required/l3kernel/l3news07.pdf
index 6e60a66006..015e68873b 100644
--- a/macros/latex-dev/required/l3kernel/l3news07.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news08.pdf b/macros/latex-dev/required/l3kernel/l3news08.pdf
index e1912b8a38..2b97620485 100644
--- a/macros/latex-dev/required/l3kernel/l3news08.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news09.pdf b/macros/latex-dev/required/l3kernel/l3news09.pdf
index 85edc9f516..f9fb62b930 100644
--- a/macros/latex-dev/required/l3kernel/l3news09.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news10.pdf b/macros/latex-dev/required/l3kernel/l3news10.pdf
index 80187c9117..edb54effc4 100644
--- a/macros/latex-dev/required/l3kernel/l3news10.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news11.pdf b/macros/latex-dev/required/l3kernel/l3news11.pdf
index 10daf64a29..794a1b4a13 100644
--- a/macros/latex-dev/required/l3kernel/l3news11.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3news12.pdf b/macros/latex-dev/required/l3kernel/l3news12.pdf
index 3f5955a1fc..3579fa74c2 100644
--- a/macros/latex-dev/required/l3kernel/l3news12.pdf
+++ b/macros/latex-dev/required/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3pdf.dtx b/macros/latex-dev/required/l3kernel/l3pdf.dtx
index 007cb5b5ad..4d90b326cf 100644
--- a/macros/latex-dev/required/l3kernel/l3pdf.dtx
+++ b/macros/latex-dev/required/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -70,8 +70,8 @@
% \cs{pdf_object_write:nnn} \Arg{object} \Arg{type} \Arg{content}
% \end{syntax}
% Writes the \meta{content} as content of the \meta{object}. Depending on the
-% \meta{type} declared for the object, the format required for the
-% \meta{data} will vary
+% \meta{type} declared for the object, the format required for
+% \meta{content} will vary:
% \begin{itemize}
% \item[\texttt{array}] A space-separated list of values
% \item[\texttt{dict}] Key--value pairs in the form
@@ -159,7 +159,7 @@
% \cs{pdf_object_unnamed_write:nn} \Arg{type} \Arg{content}
% \end{syntax}
% Writes the \meta{content} as content of an anonymous object. Depending on the
-% \meta{type}, the format required for the \meta{data} will vary
+% \meta{type}, the format required for \meta{content} will vary:
% \begin{itemize}
% \item[\texttt{array}] A space-separated list of values
% \item[\texttt{dict}] Key--value pairs in the form
@@ -192,11 +192,11 @@
%
% \begin{function}[pTF, EXP, added = 2021-02-10]{\pdf_version_compare:Nn}
% \begin{syntax}
-% \cs{pdf_version_compare_p:Nn} \meta{comparator} \Arg{version}
-% \cs{pdf_version_compare:NnTF} \meta{comparator} \Arg{version} \Arg{true code} \Arg{false code}
+% \cs{pdf_version_compare_p:Nn} \meta{relation} \Arg{version}
+% \cs{pdf_version_compare:NnTF} \meta{relation} \Arg{version} \Arg{true code} \Arg{false code}
% \end{syntax}
% Compares the version of the PDF being created with the \meta{version}
-% string specified, using the \meta{comparator}. Either the \meta{true code}
+% string specified, using the \meta{relation}. Either the \meta{true code}
% or \meta{false code} will be left in the output stream.
% \end{function}
%
@@ -251,9 +251,9 @@
%
% \section{Destinations}
%
-% Destinations are the places a link jumped too.
-% Unlike the name may suggest they don't described
-% an exact location in the PDF. Instead a destination contains a reference to
+% Destinations are the places a link jumped to.
+% Unlike the name may suggest, they don't describe
+% an exact location in the PDF. Instead, a destination contains a reference to
% a page along with an instruction how to display this page.
% The normally used \enquote{XYZ \textit{top left zoom}} for example instructs
% the viewer to show the page with the given \textit{zoom} and
diff --git a/macros/latex-dev/required/l3kernel/l3prefixes.csv b/macros/latex-dev/required/l3kernel/l3prefixes.csv
index 7baa984582..11cfeb08f4 100644
--- a/macros/latex-dev/required/l3kernel/l3prefixes.csv
+++ b/macros/latex-dev/required/l3kernel/l3prefixes.csv
@@ -26,6 +26,7 @@ block,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https:
bool,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
box,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,2018-02-02,2019-02-02,
+cal,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
cascade,cascade,F. Pantigny,,,,2020-07-21,2020-07-21,
catcode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
cctab,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
@@ -78,6 +79,7 @@ etex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https:
etl,etl,Jonathan P. Spratte,https://github.com/Skillmon/ltx_etl,git@github.com:Skillmon/ltx_etl.git,https://github.com/Skillmon/ltx_etl/issues,2021-08-16,2021-08-16,
exp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
expl,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+expltools,expltools,Vít Starý Novotný,https://github.com/witiko/expltools/,https://github.com/witiko/expltools.git,https://github.com/witiko/expltools/issues,2024-06-26,2024-06-26,Development tools for expl3 programmers
exsheets,exsheets,Clemens Niederberger,https://bitbucket.org/cgnieder/exsheets/,git@bitbucket.org:cgnieder/exsheets.git,https://bitbucket.org/cgnieder/exsheets/issues,2013-03-16,2013-03-16,
extblx,biblatex-ext,Moritz Wemheuer,https://github.com/moewew/biblatex-ext/,https://github.com/moewew/biblatex-ext.git,https://github.com/moewew/biblatex-ext/issues,2020-02-09,2020-02-09,
exwf,exwrapfig,Takuto Asakura,https://github.com/wtsnjp/exwrapfig,https://github.com/wtsnjp/exwrapfig.git,https://github.com/wtsnjp/exwrapfig/issues,2018-06-07,2018-06-07,
@@ -135,8 +137,10 @@ keys,"l3kernel,l3keys2e,ltkeys",The LaTeX Project,https://www.latex-project.org/
keyval,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
kgl,kantlipsum,Enrico Gregorio,,,,2013-03-16,2013-03-16,
kivitendo,"kiviletter, kivitables",Marei Peischl for Kivitendo,https://www.kivitendo.de/,https://github.com/kivitendo/kivitendo-erp,https://forum.kivitendo.de/,2021-05-28,2021-05-28,
+knot,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
langsci,langscibook,Language Science Press,https://langsci-press.org,https://github.com/langsci/langscibook,https://github.com/langsci/langscibook/issues,2021-07-20,2021-07-21,
left,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+liftarm,liftarm,Matthias Floré,,,,2024-05-25,2024-05-25,
lltxmath,lualatex-math,Philipp Stephani,https://github.com/phst/lualatex-math,https://github.com/phst/lualatex-math.git,https://github.com/phst/lualatex-math/issues,2012-11-07,2012-11-07,
log,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
lua,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -159,6 +163,7 @@ minibox,minibox,Will Robertson,,https://github.com/wspr/will2e.git,https://githu
minus,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
mix,media9,Alexander Grahn,,https://gitlab.com/agrahn/media9,https://gitlab.com/agrahn/media9/issues,2013-01-18,2020-04-15,
mode,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+moremath,moremath,Marcel Ilg,https://github.com/Mister00X/moremath,https://github.com/Mister00X/moremath.git,https://github.com/Mister00X/moremath/issues,2024-07-27,2024-07-27,
morewrites,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22,
msg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
msvg,media4svg,Alexander Grahn,,https://gitlab.com/agrahn/media4svg,https://gitlab.com/agrahn/media4svg/issues,2020-04-15,2020-04-15,
@@ -200,6 +205,7 @@ piton,piton,François Pantigny,,,,29/09/2022,29/09/2022,
pkgploader,pkgploader,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
platex,platex,Japanese TeX Development Community,https://github.com/texjporg/platex,https://github.com/texjporg/platex.git,https://github.com/texjporg/platex/issues,2020-09-30,2020-09-30,
polyglossia,polyglossia,Arthur Reutenauer,https://www.polyglossia.org/,https://github.com/reutenauer/polyglossia,https://github.com/reutenauer/polyglossia/issues,2019-09-03,,
+polyomino,polyomino,Matthias Floré,,,,2024-09-05,2024-09-05
postnotes,postnotes,gusbrs,https://github.com/gusbrs/postnotes,https://github.com/gusbrs/postnotes.git,https://github.com/gusbrs/postnotes/issues,2022-04-23,2022-04-23,
prelim,prelim2e,Marei Peischl,https://github.com/TeXhackse/prelim2e,https://github.com/TeXhackse/prelim2e.git,https://github.com/TeXhackse/prelim2e/issues,2020-11-24,2020-11-24,
prg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -209,6 +215,7 @@ property,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,htt
pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,2019-06-24,2019-06-24,
ptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28,
ptxcd,ptxcd,Marei Peischl,,,,2020-07-27,2020-07-27,Used for specific corporate design templates
+ptxtools,"depp, ptxtools",Marei Peischl,https://gitlab.com/islandoftex/texmf/depp,https://gitlab.com/islandoftex/texmf/depp.git,https://gitlab.com/islandoftex/texmf/depp,2024-07-09,2024-07-09,
qrbill,qrbill,Marei Peischl,https://github.com/peiTeX/qrbill,https://github.com/peiTeX/qrbill.git,https://github.com/peiTeX/qrbill/issues,2020-06-27,2020-06-27,
quark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
rainbow,beamertheme-rainbow,samcarter,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow,https://github.com/samcarter/beamertheme-rainbow/issues,2023-07-04,2023-07-04,
@@ -238,6 +245,7 @@ slcd,se2thesis,Stephan Lukasczyk,https://github.com/se2p/se2thesis,https://githu
socket,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2023-10-17,2023-10-17,
sort,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2017-02-13,
space,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+spath,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
starray,starray,Alceu Frigeri,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray,https://github.com/alceu-frigeri/starray/issues,2023-05-15,2023-05-15,
statistics,statistics,Julien Rivaud,https://gitlab.com/frnchfrgg-latex/statistics,https://gitlab.com/frnchfrgg-latex/statistics.git,https://gitlab.com/frnchfrgg-latex/statistics/issues,2018-06-25,2018-06-25,
stm,lt3-stm,CV Radhakrishnan,http://www.cvr.cc/,,,2014-02-26,2014-02-26,
@@ -257,6 +265,7 @@ tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https:/
text,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15,
tikzfill,tikzfill,Thomas F. Sturm,https://github.com/T-F-S/tikzfill,https://github.com/T-F-S/tikzfill.git,https://github.com/T-F-S/tikzfill/issues,2022-07-19,2022-07-19,
tikzlings,tikzlings,samcarter,https://github.com/samcarter/tikzlings,git@github.com:samcarter/tikzlings.git,https://github.com/samcarter/tikzlings/issues,2023-02-17,2023-02-17,
+tikzspath,spath3,Andrew Stacey,https://github.com/loopspace/spath3,https://github.com/loopspace/spath3.git,https://github.com/loopspace/spath3/issues,2024-07-18,2024-07-18,
tikzsymbols,tikzsymbols,Ben Vitecek,https://github.com/Vidabe/tikzsymbols,https://github.com/Vidabe/tikzsymbols.git,https://github.com/Vidabe/tikzsymbols/issues,2018-09-26,2018-09-26,
tilde,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
tl,"l3kernel,l3tl-build",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -287,6 +296,7 @@ xmarks,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https
xparse,xparse,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
xpatch,"regexpatch,xpatch",Enrico Gregorio,,,,2013-03-16,2013-03-16,
xpeek,xpeek,Joel C. Salomon,,,,2013-03-16,2013-03-16,
+xpg,polyglossia,Jürgen Spitzmüller,https://github.com/reutenauer/polyglossia/,https://github.com/reutenauer/polyglossia/,https://github.com/reutenauer/polyglossia/issues,2024-07-02,2024-07-02,
xpinyin,xpinyin,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2013-03-16,2013-05-26,
xsb,xsavebox,Alexander Grahn,,https://gitlab.com/agrahn/xsavebox,https://gitlab.com/agrahn/xsavebox/issues,2016-02-26,2020-04-15,
xsim,xsim,Clemens Niederberger,https://github.com/cgnieder/xsim/,https://github.com/cgnieder/xsim.git,https://github.com/cgnieder/xsim/issues,2020-04-14,2020-04-14,
@@ -298,4 +308,5 @@ zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/
zrefcheck,zref-check,gusbrs,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check,https://github.com/gusbrs/zref-check/issues,2021-08-05,2021-08-05,
zrefclever,zref-clever,gusbrs,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever,https://github.com/gusbrs/zref-clever/issues,2021-11-29,2021-11-29,
zrefvario,zref-vario,gusbrs,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario,https://github.com/gusbrs/zref-vario/issues,2022-02-02,2022-02-02,
+zugferd,zugferd,Marei Peischl,https://github.com/TeXhackse/LaTeX-ZUGFeRD,https://github.com/TeXhackse/LaTeX-ZUGFeRD.git,https://github.com/TeXhackse/LaTeX-ZUGFeRD/issues,2024-07-09,2024-07-09,
zxjt,zxjatype,Takayuki Yato,,,,2013-03-16,2013-03-16,
diff --git a/macros/latex-dev/required/l3kernel/l3prefixes.pdf b/macros/latex-dev/required/l3kernel/l3prefixes.pdf
index d90fd943f7..725c43b53b 100644
--- a/macros/latex-dev/required/l3kernel/l3prefixes.pdf
+++ b/macros/latex-dev/required/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3prg.dtx b/macros/latex-dev/required/l3kernel/l3prg.dtx
index 96ef859b3f..a5d6db8455 100644
--- a/macros/latex-dev/required/l3kernel/l3prg.dtx
+++ b/macros/latex-dev/required/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -664,7 +664,7 @@
% ~~\Arg{true code}
% ~~\Arg{false code}
% \end{syntax}
-% Evaluates in turn each of the \meta{boolean expression cases} until
+% Evaluates in turn each of the \meta{boolean expression case}s until
% the first one that evaluates to \texttt{true}.
% The \meta{code} associated to this first case is left in the input
% stream, followed by the \meta{true code}, and other cases are
diff --git a/macros/latex-dev/required/l3kernel/l3prop.dtx b/macros/latex-dev/required/l3kernel/l3prop.dtx
index 3350b27792..7a0e76cc54 100644
--- a/macros/latex-dev/required/l3kernel/l3prop.dtx
+++ b/macros/latex-dev/required/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -181,11 +181,11 @@
% \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn,
% }
% \begin{syntax}
-% \cs{prop_set_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_set_from_keyval:Nn} \meta{property list} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Sets \meta{property list} to contain key--value pairs given in the second
% argument. If duplicate keys appear only the last of the values is kept.
@@ -205,11 +205,11 @@
% \begin{function}[added = 2017-11-28, updated = 2021-11-07]
% {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn}
% \begin{syntax}
-% \cs{prop_const_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_const_from_keyval:Nn} \meta{property list} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Creates a new constant \enquote{flat} \meta{property list} or raises
% an error if the
@@ -224,11 +224,11 @@
% \begin{function}[added = 2024-02-12]
% {\prop_const_linked_from_keyval:Nn, \prop_const_linked_from_keyval:cn}
% \begin{syntax}
-% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_const_linked_from_keyval:Nn} \meta{prop~var} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Creates a new constant \enquote{linked} \meta{prop~var} or raises an
% error if the
@@ -347,11 +347,11 @@
% \prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn,
% }
% \begin{syntax}
-% \cs{prop_put_from_keyval:Nn} \meta{property list}
-% \{
-% \meta{key1} |=| \meta{value1} |,|
-% \meta{key2} |=| \meta{value2} |,| \ldots{}
-% \}
+% \cs{prop_put_from_keyval:Nn} \meta{property list} \\
+% ~~\{ \\
+% ~~~~\meta{key1} |=| \meta{value1} |,| \\
+% ~~~~\meta{key2} |=| \meta{value2} |,| \ldots{} \\
+% ~~\}
% \end{syntax}
% Updates the \meta{property list} by adding entries for each key--value
% pair given in the second argument. The addition is done through
diff --git a/macros/latex-dev/required/l3kernel/l3quark.dtx b/macros/latex-dev/required/l3kernel/l3quark.dtx
index c989bd4024..409efd6b7b 100644
--- a/macros/latex-dev/required/l3kernel/l3quark.dtx
+++ b/macros/latex-dev/required/l3kernel/l3quark.dtx
@@ -32,7 +32,7 @@
%
% \title{^^A
% The \pkg{l3quark} module\\ Quarks and scan marks^^A
-% }
+% }\ifdefined\thechapter\label{sec:l3quarks}\fi
%
% \author{^^A
% The \LaTeX{} Project\thanks
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3regex.dtx b/macros/latex-dev/required/l3kernel/l3regex.dtx
index ad44b8c6f9..cad8961101 100644
--- a/macros/latex-dev/required/l3kernel/l3regex.dtx
+++ b/macros/latex-dev/required/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -643,7 +643,7 @@
% \end{syntax}
% Determines which of the \meta{regular expressions} matches at the
% earliest point in the \meta{token list}, and leaves the
-% corresponding \meta{code_i} followed by the \meta{true code} in the
+% corresponding \meta{code} followed by the \meta{true code} in the
% input stream. If several \meta{regex} match starting at the same
% point, then the first one in the list is selected and the others are
% discarded. If none of the \meta{regex} match, the \meta{false code}
diff --git a/macros/latex-dev/required/l3kernel/l3seq.dtx b/macros/latex-dev/required/l3kernel/l3seq.dtx
index 713e4a33b1..f998531c34 100644
--- a/macros/latex-dev/required/l3kernel/l3seq.dtx
+++ b/macros/latex-dev/required/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -354,7 +354,6 @@
% \end{syntax}
% Selects a pseudo-random item of the \meta{seq~var}. If the
% \meta{seq~var} is empty the result is empty.
-% This is not available in older versions of \XeTeX{}.
% \begin{texnote}
% The result is returned within the \tn{unexpanded}
% primitive (\cs{exp_not:n}), which means that the \meta{item}
@@ -748,7 +747,7 @@
% Applies \meta{inline function} to every \meta{item} stored
% within the \meta{seq~var_2}. The \meta{inline function} should
% consist of code which will receive the \meta{item} as |#1|.
-% The sequence resulting applying \meta{inline function} to each
+% The sequence resulting from applying \meta{inline function} to each
% \meta{item} is assigned to \meta{seq~var_1}.
% \begin{texnote}
% Contrarily to other mapping functions, \cs{seq_map_break:} cannot
@@ -2410,6 +2409,7 @@
\exp_after:wN \@@_map_pairwise_function:wNw #2 \s_@@_stop #3
#1 { ? \prg_break: } { }
\prg_break_point:
+ \prg_break_point:Nn \seq_map_break: { }
}
\cs_new:Npn \@@_map_pairwise_function:wNw \s_@@ #1 \s_@@_stop #2
{
diff --git a/macros/latex-dev/required/l3kernel/l3skip.dtx b/macros/latex-dev/required/l3kernel/l3skip.dtx
index 3eeb891e3d..07ccb471fc 100644
--- a/macros/latex-dev/required/l3kernel/l3skip.dtx
+++ b/macros/latex-dev/required/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -277,7 +277,8 @@
% \end{syntax}
% This function evaluates the \meta{test dim expr} and
% compares this in turn to each of the
-% \meta{dim expr cases}. If the two are equal then the
+% \meta{dim expr case}s until a match is found.
+% If the two are equal then the
% associated \meta{code} is left in the input stream
% and other cases are discarded. If any of the
% cases are matched, the \meta{true code} is also inserted into the
@@ -297,6 +298,10 @@
% { No idea! }
% \end{verbatim}
% leaves \enquote{\texttt{Medium}} in the input stream.
+% Since evaluation of the test expressions stops at the first
+% successful case, the order of possible matches should normally
+% be that the most likely are earlier: this will reduce the average
+% steps required to complete expansion.
% \end{function}
%
% \section{Dimension expression loops}
diff --git a/macros/latex-dev/required/l3kernel/l3sort.dtx b/macros/latex-dev/required/l3kernel/l3sort.dtx
index 9ba8713244..1d4580f640 100644
--- a/macros/latex-dev/required/l3kernel/l3sort.dtx
+++ b/macros/latex-dev/required/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3str-convert.dtx b/macros/latex-dev/required/l3kernel/l3str-convert.dtx
index 0b280fb109..cde36b4e60 100644
--- a/macros/latex-dev/required/l3kernel/l3str-convert.dtx
+++ b/macros/latex-dev/required/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3str.dtx b/macros/latex-dev/required/l3kernel/l3str.dtx
index d4e08b2dd2..8ac612d1b6 100644
--- a/macros/latex-dev/required/l3kernel/l3str.dtx
+++ b/macros/latex-dev/required/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -303,7 +303,8 @@
% ~~\Arg{false code}
% \end{syntax}
% Compares the \meta{test string} in turn with each
-% of the \meta{string case}s (all token lists are converted to strings).
+% of the \meta{string case}s until a match is found
+% (all token lists are converted to strings).
% If the two are equal (as described for
% \cs{str_if_eq:nnTF}) then the associated \meta{code} is left in the
% input stream and other cases are discarded. If any of the
@@ -757,7 +758,7 @@
% \item Case changing text for typesetting: see the
% \cs[index=text_lowercase:n]{text_lowercase:n(n)},
% \cs[index=text_uppercase:n]{text_uppercase:n(n)} and
-% \cs[index=text_titlecase_all:n]{text_titlecase_(all|once):n(n)} functions which
+% \cs[index=text_titlecase_all:n]{text_titlecase_(all|first):n(n)} functions which
% correctly deal with context-dependence and other factors appropriate
% to text case changing.
% \end{itemize}
diff --git a/macros/latex-dev/required/l3kernel/l3styleguide.pdf b/macros/latex-dev/required/l3kernel/l3styleguide.pdf
index c3b43c90a8..e283bd363d 100644
--- a/macros/latex-dev/required/l3kernel/l3styleguide.pdf
+++ b/macros/latex-dev/required/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3styleguide.tex b/macros/latex-dev/required/l3kernel/l3styleguide.tex
index 2cffd774e3..46c5109535 100644
--- a/macros/latex-dev/required/l3kernel/l3styleguide.tex
+++ b/macros/latex-dev/required/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-09-10}
\begin{document}
diff --git a/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf b/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
index 83d368f738..79d4f5f76c 100644
--- a/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex-dev/required/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3syntax-changes.tex b/macros/latex-dev/required/l3kernel/l3syntax-changes.tex
index 0b21c09da0..3e3da5f95e 100644
--- a/macros/latex-dev/required/l3kernel/l3syntax-changes.tex
+++ b/macros/latex-dev/required/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-09-10}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex-dev/required/l3kernel/l3sys.dtx b/macros/latex-dev/required/l3kernel/l3sys.dtx
index 0417a963bc..0fcfa9f915 100644
--- a/macros/latex-dev/required/l3kernel/l3sys.dtx
+++ b/macros/latex-dev/required/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3term-glossary.pdf b/macros/latex-dev/required/l3kernel/l3term-glossary.pdf
index 7bd8b3b0fd..da80575d10 100644
--- a/macros/latex-dev/required/l3kernel/l3term-glossary.pdf
+++ b/macros/latex-dev/required/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/l3term-glossary.tex b/macros/latex-dev/required/l3kernel/l3term-glossary.tex
index 86ad15568a..6432d71c88 100644
--- a/macros/latex-dev/required/l3kernel/l3term-glossary.tex
+++ b/macros/latex-dev/required/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-09-10}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex-dev/required/l3kernel/l3text-case.dtx b/macros/latex-dev/required/l3kernel/l3text-case.dtx
index 888e6e97b9..60b92198b5 100644
--- a/macros/latex-dev/required/l3kernel/l3text-case.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3text-map.dtx b/macros/latex-dev/required/l3kernel/l3text-map.dtx
index ab4a6db91e..ed95ff2d34 100644
--- a/macros/latex-dev/required/l3kernel/l3text-map.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3text-purify.dtx b/macros/latex-dev/required/l3kernel/l3text-purify.dtx
index ec85eb8be4..f568063a21 100644
--- a/macros/latex-dev/required/l3kernel/l3text-purify.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3text.dtx b/macros/latex-dev/required/l3kernel/l3text.dtx
index a59e047bd7..3f771d3137 100644
--- a/macros/latex-dev/required/l3kernel/l3text.dtx
+++ b/macros/latex-dev/required/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -65,11 +65,11 @@
% \end{syntax}
% Takes user input \meta{text} and expands the content.
% Protected commands (typically
-% formatting) are left in place, and no processing takes place of
+% formatting) are left in place, and no processing of
% math mode material (as delimited by pairs given in
% \cs{l_text_math_delims_tl} or as the argument to commands listed
-% in \cs{l_text_math_arg_tl}). Commands which are neither engine-
-% nor \LaTeX{} protected are expanded exhaustively.
+% in \cs{l_text_math_arg_tl}) takes place. Commands which are neither engine-
+% nor \LaTeX{}-protected are expanded exhaustively.
% Any commands listed in \cs{l_text_expand_exclude_tl} are excluded from
% expansion, as are those in \cs{l_text_case_exclude_arg_tl} and
% \cs{l_text_math_arg_tl}.
@@ -114,8 +114,8 @@
% \end{function}
%
% Upper- and lowercase have the obvious meanings. Titlecasing may be regarded
-% informally as converting the first character of the \meta{tokens} to
-% uppercase. However, the process is more complex
+% informally as converting the first \emph{non-space} character of the
+% \meta{tokens} to uppercase. However, the process is more complex
% than this as there are some situations where a single lowercase character
% maps to a special form, for example \texttt{ij} in Dutch which becomes
% \texttt{IJ}. There are two functions available for titlecasing: one which
@@ -214,8 +214,8 @@
% \text_declare_uppercase_mapping:nnn
% }
% \begin{syntax}
-% \cs{text_declare_lowercase_mapping:nn} \Arg{codeppoint} \Arg{replacement}
-% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codeppoint} \Arg{replacement}
+% \cs{text_declare_lowercase_mapping:nn} \Arg{codepoint} \Arg{replacement}
+% \cs{text_declare_lowercase_mapping:nnn} \Arg{BCP-47} \Arg{codepoint} \Arg{replacement}
% \end{syntax}
% Declares that the \meta{replacement} tokens should be used when case mapping
% the \meta{codepoint}, rather than the standard mapping given in the
diff --git a/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx b/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx
index 80a7d74cef..4ae3f120d5 100644
--- a/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex-dev/required/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -1303,14 +1303,20 @@
% Expandable tokens (which are automatically |N|-type) can be
% \tn{outer} macros, hence the need for \cs{exp_after:wN} and
% \cs{exp_not:N} in the code above, which allows the next function to
-% safely grab the token as an argument. We run some code that is
-% expanded using the primitive \cs{cs_set_nopar:Npe} rather than
-% \cs{tl_set:Ne} to avoid grabbing it as an argument as |#1| may be
-% \tn{outer}. To allow~|#1| as an argument of the user's function
-% (stored in \cs{l_@@_peek_code_tl}), we set it equal to
-% \cs{scan_stop:}, but we do it at the last minute because |#1|
-% may be some pretty important function such as \cs{exp_after:wN}.
-% Then we put the user's function and the elaborate first argument
+% safely grab the token as an argument. To allow the
+% possibly-\tn{outer} token~|#1| as an argument of the \meta{user's
+% function} (which is protected and stored in \cs{l_@@_peek_code_tl}),
+% we set it equal to a harmless macro. This must be done at the very
+% last minute because |#1| may be some pretty important function such
+% as \cs{exp_after:wN}. Using a primitive \cs{cs_set_nopar:Npe}
+% expansion (to avoid \tn{outer} problems) we set up to run the code
+% \tn{let} |#1| \meta{user's function} \meta{user's function} followed
+% by arguments involving~|#1|. Regardless of~|#1| (including the
+% user's function itself), the user's function is run. It always
+% starts with \cs{group_end:}, which has not been redefined since |#1|
+% started out as expandable, and which restores the definition of~|#1|.
+%
+% Then we put the elaborate first argument
% \cs{__kernel_exp_not:w} \cs{exp_after:wN} |{| \cs{exp_not:N} |#1| |}|:
% indeed we cannot use \cs{exp_not:n} |{#1}| as this breaks for an
% \tn{outer} macro and we cannot use \cs{exp_not:N} |#1|, as
@@ -1323,29 +1329,31 @@
% the two cases is easy: since we have made the escape character
% printable, \cs{token_to_str:N} gives at least two characters for a
% control sequence versus a single one for an active character
-% (possibly being a space). Importantly, once we apply
-% \cs{token_to_str:N} we no longer need to worry about \tn{outer}
-% tokens.
+% (possibly being a space, in which case the trailing brace group is
+% taken as the first argument of \cs{@@_peek_analysis_exp_aux:Nw}).
+% Importantly, |#1| could be an \tn{outer} token (as it is only set to
+% \cs{scan_stop:} at the last minute) but once we apply
+% \cs{token_to_str:N} we no longer need to worry about it.
% \begin{macrocode}
\cs_new_protected:Npn \@@_peek_analysis_exp:N #1
{
\cs_set_nopar:Npe \l_@@_peek_code_tl
{
- \tex_let:D \exp_not:N #1 \scan_stop:
- \exp_not:o \l_@@_peek_code_tl
+ \tex_let:D \exp_not:N #1 \l_@@_peek_code_tl
+ \l_@@_peek_code_tl
{
\exp_not:n { \__kernel_exp_not:w \exp_after:wN }
{ \exp_not:N \exp_not:N \exp_not:N #1 }
}
\exp_after:wN \@@_peek_analysis_exp_aux:Nw
- \token_to_str:N #1 \prg_do_nothing: \s_@@
+ \token_to_str:N #1 { } \s_@@
}
\l_@@_peek_code_tl
}
\cs_new:Npe \@@_peek_analysis_exp_aux:Nw #1#2 \s_@@
{
- \exp_not:N \if:w \scan_stop: #2 \scan_stop:
- { \exp_not:N \int_value:w `#1 } \token_to_str:N D
+ \exp_not:N \if_meaning:w \scan_stop: #2 \scan_stop:
+ { \exp_not:N \int_value:w `#1 ~ } \token_to_str:N D
\exp_not:N \else:
{ -1 } 0
\exp_not:N \fi:
diff --git a/macros/latex-dev/required/l3kernel/l3tl-build.dtx b/macros/latex-dev/required/l3kernel/l3tl-build.dtx
index 708ea81680..e058e2be47 100644
--- a/macros/latex-dev/required/l3kernel/l3tl-build.dtx
+++ b/macros/latex-dev/required/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
diff --git a/macros/latex-dev/required/l3kernel/l3tl.dtx b/macros/latex-dev/required/l3kernel/l3tl.dtx
index 940b3cb8d0..f6f0e19f66 100644
--- a/macros/latex-dev/required/l3kernel/l3tl.dtx
+++ b/macros/latex-dev/required/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -994,7 +994,6 @@
% \end{syntax}
% Selects a pseudo-random item of the \meta{token list}. If the
% \meta{token list} is blank, the result is empty.
-% This is not available in older versions of \XeTeX{}.
% \begin{texnote}
% The result is returned within the \tn{unexpanded}
% primitive (\cs{exp_not:n}), which means that the \meta{item}
diff --git a/macros/latex-dev/required/l3kernel/l3token.dtx b/macros/latex-dev/required/l3kernel/l3token.dtx
index 5c31ab04e7..23b7e24b07 100644
--- a/macros/latex-dev/required/l3kernel/l3token.dtx
+++ b/macros/latex-dev/required/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -660,7 +660,10 @@
% \cs{token_if_long_macro_p:N} \meta{token} \\
% \cs{token_if_long_macro:NTF} \meta{token} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Tests if the \meta{token} is a long macro.
+% Tests if the \meta{token} is a long macro with no other prefix; to
+% test for a macro that is both long and protected, use
+% \cs[index = token_if_protected_long_macro:NTF]^^A
+% {token_if_protected_long_macro:N(TF)}.
% \end{function}
%
% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_protected_macro:N}
@@ -668,8 +671,10 @@
% \cs{token_if_protected_macro_p:N} \meta{token} \\
% \cs{token_if_protected_macro:NTF} \meta{token} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Tests if the \meta{token} is a protected macro: for a macro which
-% is both protected and long this returns \texttt{false}.
+% Tests if the \meta{token} is a protected macro with no other prefix; to
+% test for a macro that is both protected and long, use
+% \cs[index = token_if_protected_long_macro:NTF]^^A
+% {token_if_protected_long_macro:N(TF)}.
% \end{function}
%
% \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_protected_long_macro:N}
@@ -776,7 +781,7 @@
% ~~\Arg{false code}
% \end{syntax}
% This function compares the \meta{test token} in turn with each of
-% the \meta{token cases}. If the two are equal (as described for
+% the \meta{token case}s. If the two are equal (as described for
% \cs{token_if_eq_catcode:NNTF}, \cs{token_if_eq_charcode:NNTF} and
% \cs{token_if_eq_meaning:NNTF}, respectively) then the associated
% \meta{code} is left in the input stream and other cases are
diff --git a/macros/latex-dev/required/l3kernel/l3unicode.dtx b/macros/latex-dev/required/l3kernel/l3unicode.dtx
index 3b3bd007a4..b824a1f0a0 100644
--- a/macros/latex-dev/required/l3kernel/l3unicode.dtx
+++ b/macros/latex-dev/required/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-05-08}
+% \date{Released 2024-09-10}
%
% \maketitle
%
@@ -719,15 +719,22 @@
\tl_set:ce { l_@@_ #1 _block_tl }
{ \int_eval:n { \tl_use:c { l_@@_ #1 _block_tl } + 1 } }
}
- \prg_replicate:nn {#2}
+% \end{macrocode}
+% Here, we avoid \cs{prg_replicate:nn} as the number of tokens generated would be
+% high: that shows in the format dump (although \TeX{} recovers memory during
+% the subsequent runs).
+% \begin{macrocode}
+ \int_step_inline:nnn
+ { \tl_use:c { l_@@_ #1 _pos_tl } + 1 }
+ { \tl_use:c { l_@@_ #1 _pos_tl } + #2 }
{
- \tl_set:ce { l_@@_ #1 _pos_tl }
- { \int_eval:n { \tl_use:c { l_@@_ #1 _pos_tl } + 1 } }
\exp_args:Nc \__kernel_intarray_gset:Nnn
{ g_@@_ #1 _index_intarray }
- { \tl_use:c { l_@@_ #1 _pos_tl } }
+ {##1}
\l_@@_matched_block_tl
}
+ \tl_set:ce { l_@@_ #1 _pos_tl }
+ { \int_eval:n { \tl_use:c { l_@@_ #1 _pos_tl } + #2 } }
\clist_clear:c { l_@@_ #1 _block_clist }
}
% \end{macrocode}
diff --git a/macros/latex-dev/required/l3kernel/source3.pdf b/macros/latex-dev/required/l3kernel/source3.pdf
index 065674e225..7aa5a99a26 100644
--- a/macros/latex-dev/required/l3kernel/source3.pdf
+++ b/macros/latex-dev/required/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex-dev/required/l3kernel/source3.tex b/macros/latex-dev/required/l3kernel/source3.tex
index 623b9cc1a0..c8322135cc 100644
--- a/macros/latex-dev/required/l3kernel/source3.tex
+++ b/macros/latex-dev/required/l3kernel/source3.tex
@@ -57,7 +57,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-05-08}
+\date{Released 2024-09-10}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex-dev/required/l3kernel/source3body.tex b/macros/latex-dev/required/l3kernel/source3body.tex
index 8471296227..44b67816d6 100644
--- a/macros/latex-dev/required/l3kernel/source3body.tex
+++ b/macros/latex-dev/required/l3kernel/source3body.tex
@@ -285,7 +285,7 @@ pass it to |\foo:N|.
Variables are named in a similar manner to functions, but begin with
a single letter to define the type of variable:
-\begin{description}
+\begin{description}[leftmargin=2\parindent, labelindent*=-\parindent]
\item[\texttt{c}] Constant: global parameters whose value should not
be changed.
\item[\texttt{g}] Parameters whose value should only be set globally.
@@ -302,7 +302,7 @@ function, typically starting with the module\footnote{The module names are
\texttt{\string\l_int_tmpa_int} would be very unreadable.} name
and then a descriptive part.
Variables end with a short identifier to show the variable type:
-\begin{description}%
+\begin{description}[leftmargin=2\parindent, labelindent*=-\parindent]
\item[\texttt{bitset}] a set of bits (a string made up of a series of \texttt{0}
and \texttt{1} tokens that are accessed by position).
\item[\texttt{clist}] Comma separated list.
@@ -318,7 +318,7 @@ Variables end with a short identifier to show the variable type:
Applying \texttt{V}-type or \texttt{v}-type expansion to variables of
one of the above types is supported, while it is not supported for the
following variable types:
-\begin{description}
+\begin{description}[leftmargin=2\parindent, labelindent*=-\parindent]
\item[\texttt{bool}] Either true or false.
\item[\texttt{box}] Box register.
\item[\texttt{coffin}] A \enquote{box with handles} --- a higher-level
@@ -344,6 +344,19 @@ are never used by the core code. The nature of \TeX{} grouping means that as
with any other scratch variable, these should only be set and used with no
intervening third-party code.
+There are two more special types of constants:
+\begin{description}[leftmargin=2\parindent, labelindent*=-\parindent]
+ \item[\texttt{q}] Quark constants.
+ \item[\texttt{s}] Scan mark constants.
+\end{description}
+Similarly, each quark or scan mark name starts with the module name,
+but doesn't end with a variable type, because the type is already
+marked by the prefix \texttt{q} or \texttt{s}.
+Some general quarks and scan marks provided by \LaTeX3 don't start
+with a module name, for example \cs{s_stop}.
+See documentation of quarks and scan marks in Chapter~\ref{sec:l3quarks}
+for more info.
+
\subsection{Terminological inexactitude}
A word of warning. In this document, and others referring to the \pkg{expl3}
diff --git a/macros/latex-dev/required/latex-lab/README.md b/macros/latex-dev/required/latex-lab/README.md
index 8663b7e4ad..116223aecb 100644
--- a/macros/latex-dev/required/latex-lab/README.md
+++ b/macros/latex-dev/required/latex-lab/README.md
@@ -1,6 +1,6 @@
# LaTeX laboratory
-Release 2024-06-01 pre-release 2
+Release 2024-11-01 pre-release 3
## Overview
diff --git a/macros/latex-dev/required/latex-lab/blocks-code.pdf b/macros/latex-dev/required/latex-lab/blocks-code.pdf
index 958db3a440..38ff9f597e 100644
--- a/macros/latex-dev/required/latex-lab/blocks-code.pdf
+++ b/macros/latex-dev/required/latex-lab/blocks-code.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/blocks-doc.pdf b/macros/latex-dev/required/latex-lab/blocks-doc.pdf
index d34cb17fa3..e27577d88b 100644
--- a/macros/latex-dev/required/latex-lab/blocks-doc.pdf
+++ b/macros/latex-dev/required/latex-lab/blocks-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/changes.txt b/macros/latex-dev/required/latex-lab/changes.txt
index cc5bb2d4f0..9b016419ab 100644
--- a/macros/latex-dev/required/latex-lab/changes.txt
+++ b/macros/latex-dev/required/latex-lab/changes.txt
@@ -1,3 +1,69 @@
+2024-08-22 Joseph Wright <Joseph.Wright@latex-project.org>
+ * latex-lab-math.dtx: correct handling of empty math processing
+
+2024-08-21 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-math.dtx: correct luamml patches for array,
+ allow to use luamml without unicode-math
+
+2024-08-14 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-math.dtx: add luamml support for automatic mathml generation
+
+2024-08-12 Joseph Wright <Joseph.Wright@latex-project.org>
+ * latex-lab-math.dtx: add support for math in tabulars
+
+2024-08-11 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-firstaid.dtx: amsproc support, discussion in PR #517
+
+2024-08-11 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-block.dtx: preset verbatim para-instance, issue #119
+
+2024-08-10 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-block.dtx, latex-lab-table.dtx: reset flattened level in para/restore, issue #544
+
+2024-08-08 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-minipage.dtx, latex-lab-table.dtx: improve support for minipage in tables.
+ handle issue #37
+
+2024-08-06 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-table.dtx: add support for header-columns
+ * latex-lab-table.dtx: add support for multirows
+ * latex-lab-table.dtx: handle issue #432
+ * latex-lab-marginpar.dtx: handle issue #444
+
+2024-07-11 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-footnote.dtx: restore paragraph defaults at the begin of the footnote
+ tagging-project#262
+
+2024-07-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex-lab-table.dtx (subsection{Tagging support sockets}):
+ add plugs for tbl/leaders/begin and /end
+ (subsection{Misc stuff}): drop unused socket
+
+2024-07-11 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-toc.dtx, latex-lab-toc-kernel-changes: switch from configuration points
+ to sockets.
+
+2024-05-25 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-table.dtx: disable table headers in presentation tables.
+
+2024-05-25 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-firstaid.dtx: add firstaid for booktabs cmidrules,
+ see tagging-issue 69.
+
+2024-04-18 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * documentmetadata-support.dtx: change handling of default language.
+ The code now tries to detect languages set by babel/polyglossia.
+
+2024-04-16 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-math.dtx: use tagging socket to disable math-writing if tagging
+ is suspended
+
+2024-03-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * latex-lab-namespace.xlsx:
+ File added (draft) replacing tagnames-commands.md
+
2024-03-23 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* documentmetadata-support.dtx: keys for A4-E and A4-F
@@ -47,15 +113,15 @@
them too. Of course, none of this is very robust. By the end of the
day well need updating to the new standard solution.
-2024-02-23 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
- * latex-lab-amsmath.dtx, latex-lab-mathpkg.dtx: handle \pbm and poormans \bm
+2024-02-23 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-amsmath.dtx, latex-lab-mathpkg.dtx: handle \pbm and poormans \bm
(luatex only)
-2024-02-23 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+2024-02-23 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* update tagpdf and pdfmanagement
-2024-02-16 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
- * latex-lab-graphic.dtx: move end structure behind \fi, tagging-project#64
+2024-02-16 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * latex-lab-graphic.dtx: move end structure behind \fi, tagging-project#64
2024-02-12 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
* latex-lab-block.dtx: left align description labels.
diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf b/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
index 8699dd4426..b2d74f849f 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support-code.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf b/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
index 89d9c58314..362954edba 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support-doc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
index 54483ec4c9..a629d9c551 100644
--- a/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
+++ b/macros/latex-dev/required/latex-lab/documentmetadata-support.dtx
@@ -350,14 +350,35 @@
\file_input:n {l3backend-testphase-\c_sys_backend_str.def}
\ExplSyntaxOff\makeatother
% \end{macrocode}
-% Set the default language (this requires that the backend has been loaded),
-% process the rest of the keys,
-% and setup the generic driver.
+%
+% Process the init keys and setup the generic driver.
% \begin{macrocode}
- \keys_set_filter:nnn { document / metadata } { init } { lang=en-US, #1 }
+ \keys_set_filter:nnn { document / metadata } { init } { #1 }
\bool_if:NT \g_@@_active_bool
{
\PassOptionsToPackage{customdriver=hgeneric-testphase}{hyperref}
+% \end{macrocode}
+% Finally we setup the language default.
+% This is done after the begindocument hook so that it can pick up settings
+% from babel. If the Catalog dictionary already contains a lang value we do nothing,
+% otherwise we use the value stored in \cs{BCPdata}, either the main language
+% (if its exists) or the fall back language.
+% Note: if babel is loaded without a language this gives the language \texttt{und}.
+% \begin{macrocode}
+ \g@addto@macro\@kernel@after@begindocument
+ {
+ \pdfdict_get:nnN {g__pdf_Core/Catalog}{Lang}\l_@@_tmpa_tl
+ \quark_if_no_value:NT\l_@@_tmpa_tl
+ {
+ \tl_if_empty:eTF { \BCPdata{main.language} }
+ { \tl_set:Ne \l_@@_tmpb_tl { \BCPdata{language} } }
+ { \tl_set:Ne \l_@@_tmpb_tl { \BCPdata{main.language} } }
+ \msg_warning:nne { meta } { lang-missing }{ \l_@@_tmpb_tl }
+ \exp_last_unbraced:Ne
+ \AddToDocumentProperties{[document]{lang}{\l_@@_tmpb_tl}}
+ \pdfmanagement_add:nne {Catalog} {Lang}{(\l_@@_tmpb_tl)}
+ }
+ }
}
% \end{macrocode}
% \cs{pdfmanagement_add:nnn} has collected values in this hook.
@@ -556,6 +577,11 @@
{
LaTeX-lab~package~'#1'~not~found.
}
+\msg_new:nnn { meta } { lang-missing }
+ {
+ The~language~has~not~been~set~in~\token_to_str:N
+ \DocumentMetadata.\\Setting~it~to~'#1'~as~fallback.
+ }
% \end{macrocode}
%
% \begin{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
index 57e27067cb..1b6302bb33 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.dtx
@@ -66,7 +66,7 @@
% \subsection{File declaration}
% \begin{macrocode}
\ProvidesFile{latex-lab-amsmath.ltx}
- [2024-02-12 v0.1b amsmath adaptions]
+ [2024-07-05 v0.1b amsmath adaptions]
% \end{macrocode}
% \subsection{Tagpdf support}
% To make the code independent from tagging being loaded and active
@@ -200,8 +200,8 @@
% \end{macrocode}
%
% \subsection{\cs{pmb}}
-% \cs{pmb} prints is argument three times. For tagging we must mark
-% two of occurences as artifact.
+% \cs{pmb} prints its argument three times. For tagging we must mark
+% two of occurrences as artifact.
% For luatex the attributes in the box must be reset, for this
% we switch to expl3-boxes.
% \begin{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
index 3b652dd264..6bb389ef9e 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-amsmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx b/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx
index e8ee192a7b..9d336aba20 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-bib.dtx
@@ -16,7 +16,7 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabbibdate{2024-02-12}
+\def\ltlabbibdate{2024-07-05}
\def\ltlabbibversion{0.81b}
%<*driver>
\documentclass{l3doc}
@@ -128,7 +128,7 @@
%
% \begin{function}{\@extra@binfo,\@extra@b@citeb}
%
-% These are taken from hyperref, they are for chapterbib compability (and also
+% These are taken from hyperref, they are for chapterbib compatibility (and also
% signal to chapterbib not to change the citation commands)
% \end{function}
%
@@ -157,7 +157,7 @@
% \end{macrocode}
% \begin{macro}{\@extra@binfo,\@extra@b@citeb}
-% These are taken from hyperref, they are for chapterbib compability (and also
+% These are taken from hyperref, they are for chapterbib compatibility (and also
% signal to chapterbib not to change the citation commands)
% \begin{macrocode}
\providecommand*\@extra@binfo{}%
@@ -270,7 +270,7 @@
% \end{macrocode}
% Now we add the tagging structure.
% TODO: with the next tagpdf version it should no longer be
-% needed to exand the ref key.
+% needed to expand the ref key.
% \begin{macrocode}
\AddToHookWithArguments{bibcite/before}
{
@@ -305,7 +305,7 @@
% We need in part different code for both systems:
% with biblatex we have to take care that only the first
% structure sets a label, and if
-% hyperref is not loaded (or deactived) we will need additional code
+% hyperref is not loaded (or deactivated) we will need additional code
% but this currently doesn't exist.
% We assume that no document loads both package -- that will probably break.
% \begin{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf b/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf
index 94cc528e47..2643725efa 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-bib.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-block.dtx b/macros/latex-dev/required/latex-lab/latex-lab-block.dtx
index 7d08b270d2..23c590419e 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-block.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-block.dtx
@@ -9,8 +9,8 @@
%
% https://www.latex-project.org/lppl.txt
%
-\def\ltlabblockdate{2024-03-23}
-\def\ltlabblockversion{0.8n}
+\def\ltlabblockdate{2024-08-11}
+\def\ltlabblockversion{0.8p}
%<*driver>
\documentclass[kernel]{l3doc}
\usepackage{amstext}
@@ -341,7 +341,7 @@
%
% The idea of a \key{heading} key needs some further
% thoughts. Maybe instead the object type should accept a second
-% argument and receive input for such a headding from the document
+% argument and receive input for such a heading from the document
% level instead.
%
% The names of the keys need further thoughts and some
@@ -474,7 +474,7 @@
% \>\>\> The paragraph text before the display element \ldots\\
% \>\> \struct{/text}\\
% \>\> \struct{display element structure}\\
-% \>\>\> Content of the display structure possiblly involving inner \struct{text-unit} tags\\
+% \>\>\> Content of the display structure possibly involving inner \struct{text-unit} tags\\
% \>\> \struct{/display element structure}\\
% \>\> \struct{text}\\
% \>\>\> \ldots{} continuing the outer paragraph text\\
@@ -722,7 +722,7 @@
blockenv implementation]
% \end{macrocode}
%
-% Generell kernel changes, also loaded by the sec and toc code.
+% General kernel changes, also loaded by the sec and toc code.
% \begin{macrocode}
\RequirePackage{latex-lab-kernel-changes}
% \end{macrocode}
@@ -795,7 +795,52 @@
% The flag itself should be set globally not locally.\fmi{verify
% that this claim is actually correct!}
% \begin{macrocode}
-\def\@endpetrue {\global\let\if@endpe\iftrue}
+\def\@endpetrue {%
+ \global\let\if@endpe\iftrue
+% if called inside a group propagate to the outside
+ \ifnum\currentgrouplevel>\z@
+ \aftergroup\propagate@doendpe
+ \fi
+}
+% \end{macrocode}
+%
+% If \cs{if@endpe} is still true run \cs{@doendpe}
+% that in turn runs another \cs{@endpetrue} (besides other things),
+% thus propagating further, if necessary
+% However, if the endpe situation got resolved nothing further happens
+% \begin{macrocode}
+\def\propagate@doendpe{%
+ \if@endpe
+ \@@_debug_typeout:n{run~ (another)~ @doendpe~ at~
+ group~ level~ \the\currentgrouplevel}%
+ \@doendpe
+ \else
+ \@@_debug_typeout:n{do~ not~ run~ (another)~ @doendpe}%
+ \fi
+}
+% \end{macrocode}
+%
+% With the above approach we do not need the propagation in
+% \cs{end...} any longer
+% (since this is now handled by
+% \cs{aftergroup}\cs{propagate@doendpe}) so
+% here a simple \cs{endgroup} is enough. This replaces the
+% definition in ...:
+% \begin{macrocode}
+\@namedef{end }#1{%
+ \romannumeral
+ \IfHookEmptyTF{env/#1/end}%
+ {\expandafter\z@}%
+ {\z@\UseHook{env/#1/end}}%
+ \csname end#1\endcsname\@checkend{#1}%
+% \expandafter\endgroup\if@endpe\@doendpe\fi
+ \endgroup
+ \UseHook{env/#1/after}%
+ \if@ignore\@ignorefalse\ignorespaces\fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
\def\@endpefalse{\global\let\if@endpe\iffalse}
% \end{macrocode}
% \end{macro}
@@ -1569,7 +1614,7 @@
% \end{macrocode}
% We need to know later if we have nested blockenvs inside
% a flattened environment. Whenever we start a new blockenv we
-% increment \cs{\l_@@_flattened_level_int} if it is already
+% increment \cs{l__tag_block_flattened_level_int} if it is already
% different from zero. If it is zero we increment it if flattening
% is requested.
% Thus a value of \texttt{0} means no flattening requested so far
@@ -1578,14 +1623,14 @@
% is surrounded by a \texttt{text-unit} tag, while for any value above
% \texttt{1} we have to omit the \texttt{text-unit}.
% \begin{macrocode}
- \int_compare:nNnTF \l_@@_flattened_level_int > 0
+ \int_compare:nNnTF \l__tag_block_flattened_level_int > 0
{
- \int_incr:N \l_@@_flattened_level_int
+ \int_incr:N \l__tag_block_flattened_level_int
}
{
\bool_if:NT \l__tag_para_flattened_bool
{
- \int_incr:N \l_@@_flattened_level_int
+ \int_incr:N \l__tag_block_flattened_level_int
}
}
%
@@ -1681,11 +1726,15 @@
% \end{template}
%
%
-% \begin{macro}{\l_@@_flattened_level_int}
+% \begin{macro}{\l__tag_block_flattened_level_int}
% Count the levels of nested blockenvs starting with the first that
-% is \enquote{flattened}.
+% is \enquote{flattened}. The counter is defined in lttagging.dtx,
+% but until the next release 11/24 we set it up here too
% \begin{macrocode}
-\int_new:N \l_@@_flattened_level_int
+\int_if_exist:NF \l__tag_block_flattened_level_int
+ {
+ \int_new:N \l__tag_block_flattened_level_int
+ }
% \end{macrocode}
% \end{macro}
%
@@ -1814,9 +1863,13 @@
% and should not inherit the setting from the outer environment.
% \begin{macrocode}
\socket_new_plug:nnn{tagsupport/block-endpe}{on}
- { \legacy_if_gset_true:n { @endpe } }
+% \end{macrocode}
+% We can't use \cs{legacy_if_gset_true:n} because this is now doing
+% more than setting the legacy switch
+% \begin{macrocode}
+ { \@endpetrue }
\socket_new_plug:nnn{tagsupport/block-endpe}{off}
- { \legacy_if_gset_false:n { @endpe } }
+ { \@endpefalse }
% \end{macrocode}
%
% \begin{macrocode}
@@ -1981,7 +2034,7 @@
% \cs{parskip} and some other housekeeping, unless this block is inside a list and the list
% \cs{item} has not yet placed. In that case the vertical
% space and penalty us suppressed. This
-% is controled through the legacy switches \texttt{@noparitem},
+% is controlled through the legacy switches \texttt{@noparitem},
% \texttt{minipage}, and \texttt{@nobreak}.
% \begin{macrocode}
\legacy_if:nTF { @noparitem }
@@ -2520,7 +2573,7 @@
%
% \begin{macro}{\item}
% Here we already have all the building blocks. Complain in math
-% mode. Distingusih between first item (do necessary tagging) and
+% mode. Distinguish between first item (do necessary tagging) and
% later items \cs{@@_inter_item:} to
% cleanly close what's before, then call \cs{@@_item_instance:n} (which
% calls \cs{UseInstance}\{item\}\marg{instance}) to prepare the
@@ -2751,7 +2804,7 @@
\socket_assign_plug:nn{tagsupport/block-endpe}{on}
% \end{macrocode}
%
-% Handle the tag name and attribute classess using the key values
+% Handle the tag name and attribute classes using the key values
% from the current list instance.
% \begin{macrocode}
\tl_if_empty:NTF \l_@@_tag_name_tl
@@ -2994,6 +3047,7 @@
block-instance = verbatimblock ,
inner-instance = ,
final-code = \legacyverbatimsetup ,
+ para-instance = justify
}
% \end{macrocode}
% \end{instance}
@@ -3173,7 +3227,7 @@
% block quoteblock-4,
% block quoteblock-5,
% block quoteblock-6 }
-% Default layout is to indent equaly from both side.
+% Default layout is to indent equally from both sides.
% \begin{macrocode}
\DeclareInstance{block}{quoteblock-1}{display}
{ rightmargin = \KeyValue{leftmargin} }
@@ -3468,7 +3522,7 @@
% then have to avoid adding another \texttt{text-unit}.
% \begin{macrocode}
{
- \int_compare:nNnT \l_@@_flattened_level_int < 2
+ \int_compare:nNnT \l__tag_block_flattened_level_int < 2
{
\__tag_gincr_para_main_begin_int:
\tag_struct_begin:n
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-block.pdf b/macros/latex-dev/required/latex-lab/latex-lab-block.pdf
index 806562c30a..3b31116fd8 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-block.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-block.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx
index ba4addadd2..9a94863d7a 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.dtx
@@ -16,8 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabfirstaiddate{2024-03-18}
-\def\ltlabfirstaidversion{0.85c}
+\def\ltlabfirstaiddate{2024-08-11}
+\def\ltlabfirstaidversion{0.85e}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -65,8 +65,34 @@
\ltlabfirstaiddate\space v\ltlabfirstaiddate\space
Temporary patches to external packages needed for the tagging project]
% \end{macrocode}
+% \begin{macro}{\FirstAidNeededT}
+% This is a very simple help to ensure that we only apply first aid
+% to an unmodified package or class. It only works in the case the
+% file has already been loaded and the csname \cs{ver@\#1.\#2} got
+% defined (holding the current date, version, and short description
+% info). We then compare its content to a frozen string and make
+% the modification \verb=#3= only if both agree. If they differ we
+% assume that the package/class in question got updated by its
+% maintainer.
+% \begin{macrocode}
+\ExplSyntaxOn
+\providecommand\FirstAidNeededT[3]{
+ \exp_args:Ncx\str_if_eq:onF{ver@#1.#2}{#3}
+ { \typeout{==>~ First~ Aid~ for~ #1.#2~ no~ longer~ applied!^^J
+ \@spaces Expected:^^J
+ \@spaces\@spaces #3^^J
+ \@spaces but~ found:^^J
+ \@spaces\@spaces \use:c{ver@#1.#2}^^J
+ \@spaces so~ I'm~ assuming~ it~ got~ fixed.
+ } }
+ \exp_args:Ncx\str_if_eq:onT{ver@#1.#2}{#3}
+}
+\ExplSyntaxOff
+% \end{macrocode}
+% \end{macro}
+
% \subsection{ams classes}
-% The amsart and amsbook classes do not use \cs{@author} to store the author list
+% The amsart, amsbook and amsproc classes do not use \cs{@author} to store the author list
% but a command \cs{authors}. To be able to nevertheless use the authors in the
% xmp-metadata we map \cs{@author} to this new command.
%
@@ -75,6 +101,8 @@
{\def\@author{\authors}}
\AddToHook{class/amsbook/after}
{\def\@author{\authors}}
+\AddToHook{class/amsproc/after}
+ {\def\@author{\authors}}
% \end{macrocode}
%
%
@@ -254,6 +282,41 @@
}
% \end{macrocode}
%
+% \subsection{booktabs}
+% In some cases booktabs inserts a
+% \cs{multispan} into the table (through the commands \cs{@cmidruleb}
+% and \cs{@cmidrulea} and this then errors
+% with the tagging code.
+% This affects both tabular and longtable
+% (but longtable more as booktabs handles lines in longtable differently).
+% See also issue \url{https://github.com/latex3/tagging-project/issues/69}
+%
+%
+\ExplSyntaxOn
+\AddToHook{package/booktabs/after}
+ {
+ \def\@cmidrulea{
+ \multispan\@cmidla
+ &\multispan\@cmidlb
+ \unskip\hskip\cmrkern@l
+ {
+ \tag_mc_begin:n{artifact}
+ \CT@arc@\leaders\hrule \@height\@thisrulewidth\hfill\kern\z@}
+ \hskip\cmrkern@r
+ \tag_mc_end: \int_gdecr:N \g__tbl_row_int
+ \cr}
+
+ \def\@cmidruleb{%
+ \multispan\@cmidlb
+ \unskip\hskip \cmrkern@l%
+ {
+ \tag_mc_begin:n{artifact}
+ \CT@arc@\leaders\hrule \@height\@thisrulewidth\hfill\kern\z@}
+ \hskip\cmrkern@r
+ \tag_mc_end: \int_gdecr:N \g__tbl_row_int
+ \cr}
+ }
+\ExplSyntaxOff
%
% \begin{macrocode}
%</package>
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf
index a9789040a1..ce2e69882a 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-firstaid.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-float.dtx b/macros/latex-dev/required/latex-lab/latex-lab-float.dtx
index a817133713..25ae805cfd 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-float.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-float.dtx
@@ -16,7 +16,7 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabfloatdate{2024-03-23}
+\def\ltlabfloatdate{2024-07-05}
\def\ltlabfloatversion{0.81e}
%<*driver>
\documentclass{l3doc}
@@ -64,7 +64,7 @@
%
% A special type, called a H-float, (provided by the float package)
% is always placed in the main text stream and does not
-% necessarly preserve the order with normal floats of the same type: It is basically
+% necessarily preserve the order with normal floats of the same type: It is basically
% a minipage with a caption.
%
% Floats typically contain a figure (or a table, etc.) and a caption,
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-float.pdf b/macros/latex-dev/required/latex-lab/latex-lab-float.pdf
index 7940618082..1ac490c00a 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-float.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-float.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
index a3d044ab87..039d8554f4 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.dtx
@@ -17,8 +17,8 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabfootnotedate{2024-03-12}
-\def\ltlabfootnoteversion{0.8d}
+\def\ltlabfootnotedate{2024-07-27}
+\def\ltlabfootnoteversion{0.8e}
%<*driver>
\documentclass{l3doc}
@@ -636,7 +636,7 @@
% number to setup the reference and the link.
%
% The structure related to the \cs{footref} is added to the end of the \texttt{/Ref} array of the note and so the
-% \texttt{/Ref} array doesn't necessarly reflect the order of the marks in the document. It would probably
+% \texttt{/Ref} array doesn't necessarily reflect the order of the marks in the document. It would probably
% be possible to change this, but it is not clear if it actually matters and so it worth the additional coding
% and processing.
%
@@ -1150,6 +1150,21 @@
%
%
% \begin{macro}{\fnote_footnotetext:n}
+% We temporarily test for the tagging socket until it is in the next release:
+% \begin{macrocode}
+\str_if_exist:cF { l__socket_tagsupport/para/restore_plug_str }
+ {
+ \NewSocket{tagsupport/para/restore}{0}
+ \NewSocketPlug{tagsupport/para/restore}{default}
+ {
+ \tl_set:Nn \l__tag_para_main_tag_tl {text-unit}
+ \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl
+ \bool_set_false:N\l__tag_para_flattened_bool
+ }
+ \AssignSocketPlug{tagsupport/para/restore}{default}
+ }
+% \end{macrocode}
+%
% \begin{macrocode}
\cs_new_protected:Npn \fnote_footnotetext:n #1 {
\@@_debug_footnotetext:
@@ -1191,6 +1206,7 @@
\floatingpenalty \@MM
\hsize\columnwidth
\@parboxrestore
+ \UseTaggingSocket{para/restore}
\parindent 1em % typical default used in \@makefntext moved up here
\def\@currentcounter{footnote}
\protected@edef \@currentlabel { \p@footnote \@thefnmark }
@@ -1673,7 +1689,7 @@
%
% \subsubsection{\pkg{memoir}}
% The \pkg{memoir} class redefines various internal commands to inject its
-% hooks and addtional code. The following reinstates the kernel command and
+% hooks and additional code. The following reinstates the kernel command and
% so probably breaks various options of \pkg{memoir}, but without the
% changes it errors anyway. The \pkg{footmisc} package should be used to change
% for example to para footnotes.
@@ -2446,7 +2462,7 @@
% This can use the default interface, except that a negative value for
% \footnotemargin makes little sense, so we test for this and warn if
-% necessary. But -\maxdimen is ok again, so would need to be a litte bit more elaborate.
+% necessary. But -\maxdimen is ok again, so would need to be a little bit more elaborate.
%
%\AddToHook{fntext/para}{
@@ -2483,7 +2499,7 @@
\leavevmode
% \end{macrocode}
% Typesetting the mark twice means that one can't have any material
-% inside that gets unhappy in that case. Tha shouldn't be a
+% inside that gets unhappy in that case. That shouldn't be a
% problem, but perhaps we have to come up with a more elaborate
% solution in the end.
% \begin{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
index 2c1ca4f76d..58309a62f5 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-footnotes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx b/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx
index 5ea4a2db9c..a596366aa7 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-graphic.dtx
@@ -15,7 +15,7 @@
% https://github.com/latex3/latex2e/required/latex-lab
%
% for those people who are interested or want to report an issue.
-\def\ltlabgraphicdate{2024-03-13}
+\def\ltlabgraphicdate{2024-07-05}
\def\ltlabgraphicversion{0.80d}
%
%<*driver>
@@ -78,7 +78,7 @@
% The value of a \texttt{BBox} is an array of four numbers that gives the
% coordinates of the left, bottom, right, and top edges
% of the structure element’s bounding box. That is the rectangle that completely encloses
-% its \emph{visible} content so not necessarly the TeX bounding box:
+% its \emph{visible} content so not necessarily the TeX bounding box:
% if \texttt{viewport} or \texttt{trim} is used and the
% graphic is not clipped, the visible content can be larger.
%
@@ -146,8 +146,8 @@
% \item[\texttt{artifact}] When used the graphic will be tagged as artifact. This doesn't
% require a \texttt{BBox} and so works also in some of the not yet supported cases described
% above.
-% \item[\texttt{false}] When used tagging will be stopped completly. It is then the
-% responsability of the surrounding code to add appropriate tagging commands.
+% \item[\texttt{false}] When used tagging will be stopped completely. It is then the
+% responsibility of the surrounding code to add appropriate tagging commands.
% \item[\meta{name}] Other values will be used as tag names in the structure. If the tag is not
% known as a structure tag you will get an warning from tagpdf. The default name is currently
% \texttt{Figure}
@@ -291,7 +291,7 @@
% ,\l_@@_graphic_trim_uy_fp
% }
% A bunch of fp-variables (we don't use tl-vars,
-% to avoid to have to take care about minus signs everwhere)
+% to avoid to have to take care about minus signs everywhere)
% \begin{macrocode}
\fp_new:N\l_@@_graphic_sin_fp
\fp_new:N\l_@@_graphic_cos_fp
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf b/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf
index 7cb2babc4b..359856eb77 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-graphic.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-marginpar.dtx b/macros/latex-dev/required/latex-lab/latex-lab-marginpar.dtx
index ca79d8a67f..a57ebaab80 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-marginpar.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-marginpar.dtx
@@ -18,8 +18,8 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabmarginpardate{2024-02-12}
-\def\ltlabmarginparversion{0.85b}
+\def\ltlabmarginpardate{2024-08-06}
+\def\ltlabmarginparversion{0.85c}
%<*driver>
\documentclass[kernel]{l3doc}
@@ -72,7 +72,7 @@
% They can be tagged either as artifacts (if they are merely distracting decoration),
% as small headings before the paragraph, or as |Aside|. Unlike the PDF 1.7 fallback |Note|
% the structure |Aside| is not allowed inside |P|,
-% so if |Aside| is used, it must be placed before or after the current |P| in the surounding |text-unit|,
+% so if |Aside| is used, it must be placed before or after the current |P| in the surrounding |text-unit|,
% or it must split the |P|. Splitting is probably not so good as
% |\marginpar| is often used somewhere in the middle of sentence.
% The best default is probably to use |Aside|, find the parent |text-unit| and add it there.
@@ -153,13 +153,38 @@
\socket_new:nn {tagsupport/marginpar/end}{0}
% \end{macrocode}
% \end{socketdecl}
+%
+% \begin{macro}{\@@_get_marginpar_parent:N,\@@_get_marginpar_parent_aux:nn}
+% In a paragraph we must retrieve
+% the structure number of the surrounding Part structure
+% TODO: if this is needed in more places this should
+% go into tagpdf.
+% \begin{macrocode}
+\cs_new_protected:Npn\@@_get_marginpar_parent_aux:nn #1 #2
+ {
+ \str_if_eq:eeT{\use_ii:nn #1}{Part}{\seq_put_right:Nn\l_@@_tmpa_seq {#2}}
+ }
+\cs_new_protected:Npn \@@_get_marginpar_parent:N #1
+ {
+ \seq_clear:N\l_@@_tmpa_seq
+ \seq_map_pairwise_function:NNN
+ \g_@@_struct_tag_stack_seq
+ \g_@@_struct_stack_seq
+ \@@_get_marginpar_parent_aux:nn
+ \seq_put_right:Nn\l_@@_tmpa_seq {2}
+ \seq_get_left:NN \l_@@_tmpa_seq #1
+ }
+\cs_generate_variant:Nn \tag_struct_begin:n {e}
+% \end{macrocode}
+% \end{macro}
% \begin{plugdecl}{tagsupport/marginpar/begin,tagsupport/marginpar/end}
% \begin{macrocode}
\socket_new_plug:nnn {tagsupport/marginpar/begin}{default}
{
\if_mode_horizontal:
- \tag_mc_end:
- \tag_struct_begin:n{tag=Aside,parent=\g__tag_para_main_struct_tl}%
+ \tag_mc_end:
+ \@@_get_marginpar_parent:N \l_@@_tmpa_tl
+ \tag_struct_begin:e{tag=Aside,parent=\l_@@_tmpa_tl}%
\else:
\tag_struct_begin:n{tag=Aside}%
\fi:
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-marginpar.pdf b/macros/latex-dev/required/latex-lab/latex-lab-marginpar.pdf
index a80fe64faa..ad936afd31 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-marginpar.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-marginpar.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-math.dtx b/macros/latex-dev/required/latex-lab/latex-lab-math.dtx
index 4fabde3d11..c6e07d4832 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-math.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-math.dtx
@@ -19,8 +19,8 @@
% for those people who are interested or want to report an issue.
%
%
-\def\ltlabmathdate{2024-02-09}
-\def\ltlabmathversion{0.5i}
+\def\ltlabmathdate{2024-08-22}
+\def\ltlabmathversion{0.6c}
%
%<*driver>
\documentclass{l3doc}
@@ -247,8 +247,15 @@
% It can be suppressed by an option with
% \texttt{math/tex/AF=false}, see below.
%
-% The MathML is attached if a file |\jobname-mathml.html| is found and
-% if it contains a suitable MathML snippet for the current formula.
+% The MathML is attached if the files |\jobname-mathml.html| and/or
+% |\jobname-luamml-mathml.html| are found
+% and if they contains a suitable MathML snippet for the current formula.
+% If the files contain more than one suitable snippet (as identified by the hash)
+% the first one is used.
+% |\jobname-luamml-mathml.html| is automatically generated (see below section~\ref{sec:luamml})
+% and read after |\jobname-mathml.html|. This means that |\jobname-mathml.html| can contain
+% improved versions of a formula.
+%
% The MathML processing can be suppressed globally by emptying the list of
% mathml files with |math/mathml/sources=|. Locally for a formula |math/mathml/AF=false|
% can be used.
@@ -306,7 +313,7 @@
%
% As mentioned above the MathML-AF can be suppressed for the equations in a group with
% |math/mathml/AF=false|, or
-% completly by setting |math/mathml/sources=| in the preamble.
+% completely by setting |math/mathml/sources=| in the preamble.
%
% Files embedded in a PDF can be listed in the attachments panel of a PDF viewer.
% This is probably not so useful for lots of small files (but one could create
@@ -316,6 +323,27 @@
% |viewer/pane/mathsource=true| (anywhere in the document) and |viewer/pane/mathml=false| (in the
% preamble, before the external file is read).
%
+%
+% \subsection{Automatic mathml creation with luamml}\label{sec:luamml}
+%
+% If lualatex is used, if the package \texttt{unicode-math} is used
+% and if the package \texttt{luamml} is found
+% then it will automatically generate the file |\jobname-luamml-mathml.html|
+% with mathml representations of all math formulas.
+% The generation of the file can be suppressed with |math/mathml/luamml=false|.
+% If \texttt{unicode-math} is not used,
+% the generation of the file can be forced
+% with |math/mathml/luamml=true| or |math/mathml/luamml| but be aware that
+% it is then probable that various symbols are mapped to the wrong unicode code
+% points.
+% The package is still quite experimental and the output should be checked.
+% The |\jobname-luamml-mathml.html| file may be previewed in a browser although
+% you may need to add additional css or javascript declarations
+% to enable browser support for all mathml constructs.
+% The file is then used in subsequent compilations and works also with
+% pdflatex.
+%
+%
% \subsection{Options}
%
%
@@ -538,6 +566,7 @@
% \begin{macrocode}
\tl_new:N \l_@@_tmpa_tl
\skip_new:N \l_@@_tmpa_skip
+\str_new:N \l_@@_tmpa_str
% \end{macrocode}
% \end{variable}
%
@@ -592,8 +621,12 @@
% \l__tag_math_mathml_AF_bool,
% \g__tag_math_mathml_AF_bool,
% \l__tag_math_mathml_pane_bool,
-% \l__tag_math_alt_bool
+% \l__tag_math_alt_bool,
+% \g__tag_math_luamml_tl,
% }
+% The variable \cs{g__tag_math_luamml_tl} is initially 0 and
+% the user key can set it to -1 or 1. This allows to distinguish
+% the unset case from a value set by the user.
% \begin{macrocode}
\bool_new:N\l__tag_math_texsource_AF_bool
\bool_new:N\l__tag_math_texsource_pane_bool
@@ -601,6 +634,8 @@
\bool_new:N\g__tag_math_mathml_AF_bool
\bool_new:N\l__tag_math_mathml_pane_bool
\bool_new:N\l__tag_math_alt_bool
+\tl_new:N\g__tag_math_luamml_tl
+\tl_gset:Nn\g__tag_math_luamml_tl {0}
% \end{macrocode}
% \end{variable}
%
@@ -631,9 +666,11 @@
%
% \begin{variable}{\l__tag_math_mathml_files_clist}
% A sequence to store the file list for the mathml.
+% If luatex is detected with also check the luamml file.
% \begin{macrocode}
\clist_new:N\l__tag_math_mathml_files_clist
-\clist_put_right:Ne\l__tag_math_mathml_files_clist {\c_sys_jobname_str-mathml}
+\clist_put_right:Ne\l__tag_math_mathml_files_clist
+ {\c_sys_jobname_str-mathml,\c_sys_jobname_str-luamml-mathml}
% \end{macrocode}
% \end{variable}
@@ -654,15 +691,15 @@
% a simple Desc key, take care that it is a valid string!
% \begin{macrocode}
\pdfdict_put:nne {l_pdffile/Filespec} {Desc}{(mathml-#1)}
- \pdffile_embed_stream:nnN {#4}{mathml-#1.xml}\l_tmpa_tl
+ \pdffile_embed_stream:nnN {#4}{mathml-#1.xml}\l_@@_tmpa_tl
% \end{macrocode}
% not strictly necessary but makes the files visible in the file attachment
% page
% \begin{macrocode}
\bool_if:NT \l__tag_math_mathml_pane_bool
- {\pdfmanagement_add:nne {Catalog/Names}{EmbeddedFiles}{\l_tmpa_tl}}
+ {\pdfmanagement_add:nne {Catalog/Names}{EmbeddedFiles}{\l_@@_tmpa_tl}}
\tl_new:c{g_@@_mathml_#3_tl}
- \tl_gset_eq:cN{g_@@_mathml_#3_tl}\l_tmpa_tl
+ \tl_gset_eq:cN{g_@@_mathml_#3_tl}\l_@@_tmpa_tl
}
}
% \end{macrocode}
@@ -685,8 +722,268 @@
\@@_AF_mml:nnnn{#1}{#2}{#3}{#4}
}
% \end{macrocode}
+%
+% As with luatex we write two files we define a few constants for
+% the shared texts.
+%
+% \begin{macro}
+% {\c_@@_mathml_write_init_tl,\l_@@_mathml_write_before_tl,
+% \c_@@_mathml_write_after_tl,\c_@@_mathml_write_final_tl}
+% \begin{macrocode}
+\tl_const:Nn \c_@@_mathml_write_init_tl
+ {
+ <!DOCTYPE~html>
+ \iow_newline:
+ <html>
+ \iow_newline:
+ }
+\tl_new:N \l_@@_mathml_write_before_tl
+\tl_const:Nn \c_@@_mathml_write_after_tl
+ {
+ \iow_newline:
+ </div>
+ \iow_newline:
+ }
+\tl_const:Nn \c_@@_mathml_write_final_tl
+ {
+ </html>
+ }
+% \end{macrocode}
+% \end{macro}
+% \begin{socketdecl}{tagsupport/math/mathml/write/prepare}
+% To prepare the hash and the starting command we use a socket, so
+% that both the dummy and luamml can make use of it.
+% \begin{macrocode}
+\socket_new:nn {tagsupport/math/mathml/write/prepare}{0}
+% \end{macrocode}
+% \end{socketdecl}
+%
+% \begin{plugdecl}{On}
+% \begin{macrocode}
+\socket_new_plug:nnn{tagsupport/math/mathml/write/prepare}{On}
+ {
+ \str_set:NV\l_@@_tmpa_str\l_@@_content_AF_source_tl
+ \str_replace_all:Nnn\l_@@_tmpa_str{&}{&amp;}
+ \str_replace_all:Nnn\l_@@_tmpa_str{<}{&lt;}
+ \tl_set:Nn \l_@@_mathml_write_before_tl
+ {
+ <div>
+ \iow_newline:
+ <h2>\c_backslash_str mml\c_space_tl \int_use:N \g_@@_math_total_int </h2>
+ \iow_newline:
+ <p>\l_@@_tmpa_str</p>
+ \iow_newline:
+ <p>\l_@@_content_hash_tl </p>
+ \iow_newline:
+ }
+ }
+% \end{macrocode}
+% \end{plugdecl}
+%
+% With luatex we automatically generate mathml with luamml if the package
+% can be loaded and unicode-math is detected.
+% We start the process in the begindocument/end hook
+% so that the reading from a previous compilation can happen before!
+% \begin{macrocode}
+\sys_if_engine_luatex:T
+ {
+ \file_if_exist:nT { luamml.sty }
+ {
+ \RequirePackage { luamml }
+% \end{macrocode}
+% Temporary (!) fixes for endarray
+% \begin{macrocode}
+ \AddToHook{package/array/after}
+ {
+ \cs_set:Npn \endarray
+ {
+ \tbl_crcr:n{endarray}
+ \__luamml_array_save_array:
+ \egroup
+ \UseTaggingSocket{tbl/finalize}
+ \tbl_restore_outer_cell_data:
+ \egroup
+ \mode_if_math:T { \__luamml_array_finalize_array: }
+ \@arrayright
+ \gdef \@preamble {}
+ }
+ \cs_set:Npn \@classz
+ {
+ \@classx
+ \@tempcnta \count@
+ \prepnext@tok
+ \@addtopreamble {
+ \ifcase \@chnum
+ \hfil
+ \hskip 1sp
+ \d@llarbegin
+ \cs_if_eq:NNTF \d@llarbegin \begingroup {
+ \insert@column
+ \d@llarend
+ } {
+ \__luamml_array_init_col:
+ \insert@column
+ \luamml_flag_save:nn {} {mtd}
+ \d@llarend
+ \__luamml_array_finalize_col:w 0~
+ }
+ \do@row@strut
+ \hfil
+ \or
+ \hskip 1sp
+ \d@llarbegin
+ \cs_if_eq:NNTF \d@llarbegin \begingroup {
+ \insert@column
+ \d@llarend
+ } {
+ \__luamml_array_init_col:
+ \insert@column
+ \luamml_flag_save:nn {} {mtd}
+ \d@llarend
+ \__luamml_array_finalize_col:w 1~
+ }
+ \do@row@strut
+ \hfil
+ \or
+ \hfil
+ \hskip 1sp
+ \d@llarbegin
+ \cs_if_eq:NNTF \d@llarbegin \begingroup {
+ \insert@column
+ \d@llarend
+ } {
+ \__luamml_array_init_col:
+ \insert@column
+ \luamml_flag_save:nn {} {mtd}
+ \d@llarend
+ \__luamml_array_finalize_col:w 2~
+ }
+ \do@row@strut
+ \or
+ \setbox \ar@mcellbox \vbox \@startpbox { \@nextchar }
+ \insert@pcolumn
+ \@endpbox
+ \ar@align@mcell
+ \do@row@strut
+ \or
+ \vtop \@startpbox { \@nextchar }
+ \insert@pcolumn
+ \@endpbox
+ \do@row@strut
+ \or
+ \vbox \@startpbox { \@nextchar }
+ \insert@pcolumn
+ \@endpbox
+ \do@row@strut
+ \fi
+ }
+ \prepnext@tok
+ }
+ }
+% \end{macrocode}
%
+% \begin{macrocode}
+ \AddToHook{begindocument/end}
+ {
+ \str_case:on \g__tag_math_luamml_tl
+ {
+ { 1 } {
+ \@@_luamml_activate_write:
+ \msg_note:nnnn { tag }
+ { luamml-status }{ enabled }{ create }
+ }
+ {-1 } {
+ \msg_note:nnnn { tag }
+ { luamml-status }{ disabled }{ not~create }
+ }
+ { 0 }
+ {
+ \@ifpackageloaded { unicode-math }
+ {
+ \@@_luamml_activate_write:
+ \msg_note:nnnn { tag }
+ { luamml-status }{ enabled }{ create }
+ }
+ { \msg_warning:nn { tag }{ unicode-math-missing } }
+ }
+ }
+ }
+ }
+ }
+\msg_new:nnn { tag }{ luamml-status }
+ {
+ luamml~has~been~#1~and~will~#2~an~MathML~file.
+ }
+
+\msg_new:nnn { tag }{ unicode-math-missing }
+ {
+ The~package~unicode-math~is~missing\\
+ luamml~will~not~create~an~MathML~file.\\
+ To~avoid~this~warning~load~unicode-math~\\
+ or~disable~luamml~with~\\
+ \tl_to_str:n{\tagpdfsetup{math/mathml/luamml=false}}\\
+ or~force~luamml~with~\\
+ \tl_to_str:n{\tagpdfsetup{math/mathml/luamml=true}}
+ }
+\cs_new_protected:Npn \@@_luamml_activate_write:
+ {
+% \end{macrocode}
+% to avoid that nothing is written in the first run, we must activate the sockets:
+% \begin{macrocode}
+ \bool_gset_true:N\g__tag_math_mathml_AF_bool
+ \AssignSocketPlug{tagsupport/math/struct/begin}{test-mathml}
+ \AssignSocketPlug{tagsupport/math/struct/end}{test-mathml}
+ \AssignSocketPlug{tagsupport/math/substruct/begin}{single}
+ \AssignSocketPlug{tagsupport/math/substruct/end}{single}
+ \int_set:Nn \l__luamml_pretty_int { 5 }
+ \RegisterFamilyMapping\symsymbols{oms}
+ \RegisterFamilyMapping\symletters{oml}
+ \AssignSocketPlug{tagsupport/math/mathml/write/prepare}{On}
+ \iow_new:N \g_@@_luamml_iow
+ \iow_open:Nn \g_@@_luamml_iow {\c_sys_jobname_str-luamml-mathml.html}
+ \iow_now:Ne \g_@@_luamml_iow { \c_@@_mathml_write_init_tl }
+ \cs_new:Npn \@@_luamml_output_hook:n ##1
+ {
+ \tl_if_empty:NF \l_@@_mathml_write_before_tl
+ {
+ \iow_now:Ne \g_@@_luamml_iow
+ {
+ \l_@@_mathml_write_before_tl
+ ##1
+ \c_@@_mathml_write_after_tl
+ }
+ }
+ }
+ \__luamml_register_output_hook:N \@@_luamml_output_hook:n
+% \end{macrocode}
+% this starts the process and set flag to 3,
+% not really needed, as it is the default but set here for clarity:
+% \begin{macrocode}
+ \luamml_flag_process:
+% \end{macrocode}
+% At the end of the document we must finish and close the file:
+% \begin{macrocode}
+ \AddToHook{enddocument/afterlastpage}
+ {
+ \iow_now:Ne \g_@@_luamml_iow
+ { \c_@@_mathml_write_final_tl }
+ \iow_close:N \g_@@_luamml_iow
+ }
+ }
+% \end{macrocode}
+% And now a key to deactivate luamml
+% \begin{macrocode}
+
+\keys_define:nn { __tag / setup }
+ {
+ math/mathml/luamml .choice: ,
+ math/mathml/luamml/true .code:n = {\tl_gset:Nn \g__tag_math_luamml_tl{1}},
+ math/mathml/luamml/false .code:n = {\tl_gset:Nn \g__tag_math_luamml_tl{-1}},
+ math/mathml/luamml .default:n = true,
+ math/mathml/luamml .usage:n=preamble
+ }
+% \end{macrocode}
% \begin{socketdecl}{tagsupport/math/mathml/write}
% This writes a html-dummy with the hash and the math content.
% This should be optional, so it uses a socket that can be disabled
@@ -700,24 +997,11 @@
% \begin{macrocode}
\socket_new_plug:nnn{tagsupport/math/mathml/write}{On}
{
- \str_set:NV\l_@@_tmpa_str\l_@@_content_AF_source_tl
- \str_replace_all:Nnn\l_@@_tmpa_str{&}{&amp;}
- \str_replace_all:Nnn\l_@@_tmpa_str{<}{&lt;}
\iow_now:Ne \g_@@_writedummy_iow
{
- \iow_newline:
- <div>
- \iow_newline:
- <h2>\c_backslash_str mml\c_space_tl \int_use:N \g_@@_math_total_int </h2>
- \iow_newline:
- <p>\l_@@_tmpa_str</p>
- \iow_newline:
- <p>\l_@@_content_hash_tl </p>
- \iow_newline:
+ \l_@@_mathml_write_before_tl
<math></math>
- \iow_newline:
- </div>
- \iow_newline:
+ \c_@@_mathml_write_after_tl
}
}
% \end{macrocode}
@@ -739,14 +1023,14 @@
}
\iow_now:Ne \g_@@_writedummy_iow
{
- <!DOCTYPE~html>
- \iow_newline:
- <html>
+ \c_@@_mathml_write_init_tl
}
+ \AssignSocketPlug {tagsupport/math/mathml/write/prepare}{On}
\AssignSocketPlug {tagsupport/math/mathml/write}{On}
\AddToHook{enddocument/afterlastpage}
{
- \iow_now:Nn \g_@@_writedummy_iow {</html>}
+ \iow_now:Ne \g_@@_writedummy_iow
+ { \c_@@_mathml_write_final_tl }
\iow_close:N \g_@@_writedummy_iow
}
}
@@ -900,7 +1184,7 @@
% \end{macrocode}
% \end{plugdecl}
%
-% We probably will want to test different tagging receipes.
+% We probably will want to test different tagging recipes.
% \begin{plugdecl}{default}
% \begin{macrocode}
\socket_new_plug:nnn
@@ -1184,6 +1468,7 @@
{
\typeout{WARNING:~mathml~missing~for~hash~\l_@@_content_hash_tl}
}
+ \socket_use:n {tagsupport/math/mathml/write/prepare}
\socket_use:n {tagsupport/math/mathml/write} % write hash if request
\bool_if:NTF\l__tag_math_texsource_AF_bool
{ \tl_set_eq:NN \l_@@_content_AF_source_tmpa_tl \l_@@_content_AF_source_tl }
@@ -1349,47 +1634,60 @@
% \subsection{Content grabbing}
%
% \begin{macro}{\@@_grab_dollar:w}
-% Grab up to a single |$|, for inline math mode, suppressing
-% any processing if the token is \tn{m@th} found in the content.
-%
-% \fmi{what's that test doing?}
-%
-% \car{It is some kind of fix, to avoid the remote
-% possibility that the math is empty, making the code
-% produce an unwanted \texttt{\$\$}.}
-%
-%\car{cf.~the code for this in \cs{@ensuredmath}}
-%
-%\car{It is harmless but unnecessary in the dollardollar grabbing below.}
-%
+% \begin{macro}{\@@_grab_dollar:n}
+% \changes{v0.6c}{2024-08-22}{Correct handling of empty math segments}
+% Top-level function to handle grabbing of inline math mode delimited by
+% |$| tokens. We provide two different ways to do that: a token-by-token
+% one that can be used everywhere, and a fast delimited one that does not
+% work anywhere that the end |$| token may be hidden, most obviously in
+% tabulars. The function here is therefore set up as a variable starting
+% point.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_dollar:w { \@@_grab_dollar_delim:w }
+% \end{macrocode}
+% After grabbing inline math material, there is again common processing
+% independent of mechanism of collection.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_grab_dollar:w % $
- #1 $
+\cs_new_protected:Npn \@@_grab_dollar:n #1
{
% \end{macrocode}
-% \fmi{what's that test doing?}
+% We need to do processing first as this picks up \enquote{fake} math mode:
+% that information is needed below.
% \begin{macrocode}
- \tl_if_blank:nF {#1}
- {
- \@@_process:nn { math } {#1} % $
+ \@@_process:nn { math } {#1}
% \end{macrocode}
% We do not want math tagging in fakemath or when measuring,
+% We also do not want math tagging if tagging has been suspended.
% \begin{macrocode}
- \bool_lazy_or:nnTF
- {\legacy_if_p:n { measuring@ }}
- { \l_@@_fakemath_bool }
- { #1 $ }
+ \bool_lazy_any:nTF
{
- \socket_use:n {tagsupport/math/inline/begin} %end P-MC
- \socket_use:nn{tagsupport/math/inline/formula/begin}{#1}
- $
- \socket_use:n {tagsupport/math/inline/formula/end}
- \socket_use:n {tagsupport/math/inline/end} % restart P-MC
- }
- }
+ {\legacy_if_p:n { measuring@ }}
+ { \l_@@_fakemath_bool }
+ { \tl_if_blank_p:n {#1} }
+ }
+ {
+ #1 $ % $
+ }
+ {
+ \tag_socket_use:n {math/inline/begin} %end P-MC
+ \tag_socket_use:nn {math/inline/formula/begin}{#1}
+ $ % $
+ \tag_socket_use:n {math/inline/formula/end}
+ \tag_socket_use:n {math/inline/end} % restart P-MC
+ }
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_grab_dollar_delim:w}
+% Grab up to a single |$|, for inline math mode, suppressing
+% any processing if the token is \tn{m@th} found in the content.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_dollar_delim:w #1 $ % $
+ { \@@_grab_dollar:n {#1} }
+% \end{macrocode}
+% \end{macro}
%
% \begin{macro}{\@@_grab_dollardollar:w}
% And for the classical \TeX{} display structure.
@@ -1402,8 +1700,8 @@
\@@_process:nn { equation* } {#1}
\socket_use:n {tagsupport/math/display/begin}
\socket_use:nn{tagsupport/math/display/formula/begin}{#1}
- $$
}
+ $$
}
% \end{macrocode}
%
@@ -1462,6 +1760,170 @@
% \end{macrocode}
% \end{macro}
%
+% \subsection{Token-by-token inline grabbing}
+%
+% Grabbing inline math token-by-token is more involved. The mechanism here
+% is essentially a simplified version of that originally seen in
+% \pkg{collcell} and refined in \pkg{siunitx}. We make use of the fact that
+% in math mode spaces are ignored, so we have to deal with only \texttt{N}-type
+% tokens and groups. Furthermore, there is no need to look inside groups, so
+% the only special cases are a small selection of \texttt{N}-type tokens.
+%
+% \begin{variable}{\l_@@_grabbed_tl}
+% For collection of the material piecewise.
+% \begin{macrocode}
+\tl_new:N \l_@@_grabbed_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_grab_env_int}
+% Needed to count up the number of nested environments encountered.
+% \begin{macrocode}
+\int_new:N \l_@@_grab_env_int
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_grab_dollar_loop:}
+% \begin{macro}{\@@_grab_loop:}
+% The lead-off here establishes a group: we need that as we will have to
+% be careful in the way \tn{cr} is handled and ensure this is only
+% manipulated whilst grabbing. The main loop is then started.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_dollar_loop:
+ {
+ \group_begin:
+ \tl_clear:N \l_@@_grabbed_tl
+ \@@_grab_loop:
+ }
+\cs_new_protected:Npn \@@_grab_loop:
+ {
+ \peek_remove_spaces:n
+ {
+ \peek_meaning:NTF \c_group_begin_token
+ { \@@_grab_loop_group:n }
+ { \@@_grab_loop_token:N }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_grab_loop_group:n}
+% \begin{macro}{\@@_grab_loop_store:n}
+% Handling of grabbed groups is pretty easy.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_loop_group:n #1
+ { \@@_grab_loop_store:n { {#1} } }
+\cs_new_protected:Npn \@@_grab_loop_store:n #1
+ {
+ \tl_put_right:Nn \l_@@_grabbed_tl {#1}
+ \@@_grab_loop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_grab_loop_token:N}
+% \begin{macro}
+% {
+% \@@_grab_loop_$: ,
+% \@@_grab_loop_\\: ,
+% \@@_grab_loop_\begin: ,
+% \@@_grab_loop_\begin : ,
+% \@@_grab_loop_\end: ,
+% \@@_grab_loop_\ignorespaces: ,
+% \@@_grab_loop_\unskip: ,
+% \@@_grab_loop_\textonly@unskip:
+% }
+% Filter out the special cases: for performance reasons, use a hash table
+% approach rather than a loop (\emph{cf.}~\pkg{collcell}). The need to cover
+% \verb*|begin | is that at the start of a cell, \TeX{} will expand \cs{begin}
+% but the \LaTeX{} robust mechanism will mean this yields \verb*|begin |.
+% If\cs{begin} were protected, that would not be needed.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_loop_token:N #1
+ {
+ \cs_if_exist_use:cF
+ { @@_grab_loop_ \token_to_str:N #1 : }
+ { \@@_grab_loop_store:n {#1} }
+ }
+\cs_new_protected:cpn { @@_grab_loop_ \token_to_str:N $ : }
+ { \@@_grab_loop_end: }
+\cs_new_protected:cpn { @@_grab_loop_ \token_to_str:N \\ : }
+ {
+ \int_compare:nNnTF \l_@@_grab_env_int = 0
+ { \@@_grab_loop_newline: }
+ { \@@_grab_loop_store:n { \\ } }
+ }
+% \end{macrocode}
+% In contrast to \pkg{collcell}, nesting is tracked by counting
+% \cs{begin}/\cs{end} pairs: this is needed in case there is a tabular-like
+% construct containing |\\| inside a cell. As a result, the end-of-tabular
+% can be detected without checking the name argument: if \cs{end} is
+% encountered at nesting level~0, we've hit the end of a cell. In that case,
+% end the row and leave the environment to clean up.
+% \begin{macrocode}
+\cs_new_protected:cpn { @@_grab_loop_ \token_to_str:N \begin : }
+ {
+ \int_incr:N \l_@@_grab_env_int
+ \@@_grab_loop_store:n { \begin }
+ }
+\cs_new_eq:cc { @@_grab_loop_ \token_to_str:N \begin \c_space_tl : }
+ { @@_grab_loop_ \token_to_str:N \begin : }
+\cs_new_protected:cpn { @@_grab_loop_ \token_to_str:N \end : }
+ {
+ \int_compare:nNnTF \l_@@_grab_env_int = 0
+ {
+ \@@_grab_loop_newline:
+ \end
+ }
+ {
+ \int_decr:N \l_@@_grab_env_int
+ \@@_grab_loop_store:n { \end }
+ }
+ }
+\tl_map_inline:nn { \ignorespaces \unskip \textonly@unskip }
+ {
+ \cs_new_protected:cpn { @@_grab_loop_ \token_to_str:N #1 : }
+ { \@@_grab_loop: }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_grab_loop_newline:}
+% To allow collection of tokens in the part of the \tn{halign} template after
+% |#|, we need \TeX{} to see the primitive with the loop token in the right
+% place. That is done by re-defining \tn{cr} at present. Ideally there would
+% be a socket in the definition of \texttt{tabular}, etc., to handle this:
+% there is also the need to examine in interaction with \pkg{longtable}, which
+% also redefines \tn{cr}.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_loop_newline:
+ {
+ \if_false: { \fi:
+ \cs_set_protected:Npn \cr
+ {
+ \@@_grab_loop:
+ \tex_cr:D
+ }
+ \if_false: } \fi:
+ \\
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_grab_loop_end:}
+% Clean up and pass on.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_grab_loop_end:
+ {
+ \exp_args:NNV \group_end:
+ \@@_grab_dollar:n \l_@@_grabbed_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Marking math environments}
%
% A general mechanism for math mode environments that do not grab their
@@ -1860,6 +2322,10 @@
\bool_set_false:N \l_@@_collected_bool
\col@sep\tabcolsep \let\d@llarbegin\begingroup
\let\d@llarend\endgroup
+% \end{macrocode}
+% A proper switching mechanism is needed: for the present, do directly.
+% \begin{macrocode}
+ \cs_set_protected:Npn \@@_grab_dollar:w { \@@_grab_dollar_loop: }
\@tabarray}
}
% \end{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-math.pdf b/macros/latex-dev/required/latex-lab/latex-lab-math.pdf
index f9b74b0553..63bbe46ed7 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-math.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-math.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
index fb9a09adc9..9b4e0ef1b9 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathpkg.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx
index aa27cbf01d..79eee7aab7 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.dtx
@@ -23,7 +23,7 @@
\EnableCrossrefs
\CodelineIndex
\begin{document}
- \DocInput{latex-lab-amsmath.dtx}
+ \DocInput{latex-lab-mathtools.dtx}
\end{document}
%</driver>
%
@@ -66,7 +66,7 @@
% \subsection{File declaration}
% \begin{macrocode}
\ProvidesFile{latex-lab-mathtools.ltx}
- [2023-01-05 v0.1a mathtools adaptions]
+ [2024-07-13 v0.1a mathtools adaptions]
% \end{macrocode}
% \subsection{Tagpdf support}
% To make the code independent from tagging being loaded and active
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
index 0f6d85c344..7678082ac2 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-mathtools.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx b/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx
index ffbe5357e7..f5a324fa5e 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-minipage.dtx
@@ -18,8 +18,8 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabminipagedate{2023-10-30}
-\def\ltlabminipageversion{0.81c}
+\def\ltlabminipagedate{2024-08-08}
+\def\ltlabminipageversion{0.81d}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -120,12 +120,18 @@
% \end{macrocode}
% insert the socket
% \begin{macrocode}
- \socket_use:n{tagsupport/minipage/before}% new
+ \UseTaggingSocket{minipage/before}% new
\setbox\@tempboxa\vbox\bgroup
\color@begingroup
\hsize\@tempdima
\textwidth\hsize \columnwidth\hsize
\@parboxrestore
+% \end{macrocode}
+% minipages are perhaps used in environments where the tagging of paragraphs
+% has been altered. So we try to restore this. TODO: this should
+% perhaps be done in \cs{@parboxrestore} directly.
+% \begin{macrocode}
+ \UseTaggingSocket{para/restore}
\def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
\socket_assign_plug:nn{fntext/process}{mp}%
\let\@listdepth\@mplistdepth \@mplistdepth\z@
@@ -153,7 +159,7 @@
\tag_stop:n{minipage}
\expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}%
\tag_start:n{minipage}
- \socket_use:n{tagsupport/minipage/after} %new end ...
+ \UseTaggingSocket{minipage/after} %new end ...
}
% \end{macrocode}
%
@@ -164,8 +170,15 @@
\leavevmode
\@pboxswfalse
\setlength\@tempdima{#4}%
- \socket_use:n{tagsupport/parbox/before}
- \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
+ \UseTaggingSocket{parbox/before}
+ \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore
+% \end{macrocode}
+% parbox are perhaps used in environments where the tagging of paragraphs
+% has been altered. So we try to restore this. TODO: this should
+% perhaps be done in \cs{@parboxrestore} directly.
+% \begin{macrocode}
+ \UseTaggingSocket{para/restore}
+ #5\@@par}%
\ifx\relax#2\else
\setlength\@tempdimb{#2}%
\edef\@parboxto{to\the\@tempdimb}%
@@ -179,7 +192,7 @@
\csname bm@#3\endcsname}%
\if@pboxsw \m@th$\fi
\@end@tempboxa%
- \socket_use:n{tagsupport/parbox/after}
+ \UseTaggingSocket{parbox/after}
}
% \end{macrocode}
%
@@ -191,9 +204,11 @@
\socket_new_plug:nnn{tagsupport/minipage/before}{tag/dflt}
{
% \end{macrocode}
-% As there was a \cs{leavevmode} before that is a P/text open that we have to close.
+% As there was a \cs{leavevmode} before that is a P/text open that we have to close
+% if para tagging is active:
% \begin{macrocode}
- \tag_mc_end_push:\tag_struct_end:
+ \tag_mc_end_push:
+ \bool_if:NT \l__tag_para_bool {\tag_struct_end:}
% \end{macrocode}
% TODO: the P can be further up, we need a proper method to test and handle this.
% \begin{macrocode}
@@ -203,13 +218,25 @@
% similar for the other sockets:
% \begin{macrocode}
\socket_new_plug:nnn{tagsupport/minipage/after}{tag/dflt}
- {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}}
+ {
+ \tag_struct_end:
+ \bool_if:NT \l__tag_para_bool {\tag_struct_begin:n{tag=\l__tag_para_tag_tl}}
+ \tag_mc_begin_pop:n{}
+ }
\socket_new_plug:nnn{tagsupport/parbox/before}{tag/dflt}
- {\tag_mc_end_push:\tag_struct_end:\tag_struct_begin:n{tag=\l__ltboxes_tag_tl}}
+ {
+ \tag_mc_end_push:
+ \bool_if:NT \l__tag_para_bool {\tag_struct_end:}
+ \tag_struct_begin:n{tag=\l__ltboxes_tag_tl}
+ }
\socket_new_plug:nnn{tagsupport/parbox/after}{tag/dflt}
- {\tag_struct_end:\tag_struct_begin:n{tag=\l__tag_para_tag_tl}\tag_mc_begin_pop:n{}}
+ {
+ \tag_struct_end:
+ \bool_if:NT \l__tag_para_bool {\tag_struct_begin:n{tag=\l__tag_para_tag_tl}}
+ \tag_mc_begin_pop:n{}
+ }
% \end{macrocode}
% Activate the default tagging plug
% \begin{macrocode}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf b/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf
index eda0551b7a..6d68904c29 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-minipage.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx b/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx
index a6087abe57..d76dd8d489 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-namespace.dtx
@@ -26,7 +26,7 @@
% \fi
% \title{Prototype reimplementation of \LaTeXe{}'s role mapping}
% \author{\LaTeX{} Project, initial implementation Ulrike Fischer}
-% \date{v0.8 2023-09-04}
+% \date{v0.8b 2024-07-05}
%
% \maketitle
%
@@ -37,7 +37,7 @@
% \section{Introduction}
%
% This short file collects tag names from the \LaTeX{} namespace and their role mapping used
-% in the latex-lab files. The names and the roles are not necessarly the final ones!
+% in the latex-lab files. The names and the roles are not necessarily the final ones!
%
% Later settings of the same tag overwrite previous settings.
% The syntax of a line is a list of three strings ending with commas:
@@ -62,18 +62,33 @@
% \begin{macrocode}
title, Title, pdf2,
part, Title, pdf2,
+% \end{macrocode}
+% Headings differ in article and book class. This here is for article:
+% \begin{macrocode}
section, H1, pdf2,
subsection, H2, pdf2,
subsubsection,H3, pdf2,
paragraph, H4, pdf2,
subparagraph, H5, pdf2,
+% \end{macrocode}
+% And this here is used in book:
+% \begin{macrocode}
+%chapter, H1, pdf2,
+%section, H2, pdf2,
+%subsection, H3, pdf2,
+%subsubsection, H4, pdf2,
+%paragraph, H5, pdf2,
+%subparagraph, H6, pdf2,
+% \end{macrocode}
+%
+% \begin{macrocode}
list, L, pdf2,
itemize, L, pdf2,
enumerate, L, pdf2,
description, L, pdf2,
quote, BlockQuote,pdf,
quotation, BlockQuote,pdf,
-verbatim, Div, pdf2,
+verbatim, Div, pdf2, % overwritten by block
item, LI, pdf2,
itemlabel, Lbl, pdf2,
itembody, LBody, pdf2,
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf
index 113688d669..3363ce1918 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-namespace.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
index c2cd53f8e5..4a808d7f1b 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-1.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
index b0c53e859b..8618ee7deb 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-new-or-2.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx b/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx
index f3786c2ddb..231ed1a864 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-sec.dtx
@@ -16,7 +16,7 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabsecdate{2024-02-12}
+\def\ltlabsecdate{2024-07-05}
\def\ltlabsecversion{0.84c}
%<*driver>
\documentclass[kernel]{l3doc}
@@ -121,7 +121,7 @@
% commands must be at the right grouping level.
% \end{itemize}
%
-% \subsection{Funktions and keys}
+% \subsection{Functions and keys}
%
% \begin{function}{\tag_tool:n,\tagtool}
%
@@ -138,7 +138,7 @@
% to allow e.g. to put an epigraph or similar in front.
%
% \item The number in \cs{part} and \cs{chapter} is currently not correctly
-% tagged as a \texttt{Lbl} as this requires to redefine the internal (class dependant)
+% tagged as a \texttt{Lbl} as this requires to redefine the internal (class dependent)
% commands too.
%
% \end{itemize}
@@ -376,7 +376,7 @@
\tag_struct_begin:n{tag=part,title=#1}
% \end{macrocode}
% We remap here the text-unit from the paragraph to NonStruct.
-% It would be better to suppress it completly as with the other
+% It would be better to suppress it completely as with the other
% sectioning commands, but this would require to redefine \cs{@spart}
% and \cs{@part}, as there is the grouping, and these commands are
% all slightly different in the standard classes. So this is delayed
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf b/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf
index cdf61e2b1e..c62c8dbeb1 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-sec.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-table.dtx b/macros/latex-dev/required/latex-lab/latex-lab-table.dtx
index 5352df9550..be0c05a4e1 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-table.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-table.dtx
@@ -16,8 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabtbldate{2024-02-07}
-\def\ltlabtblversion{0.85k}
+\def\ltlabtbldate{2024-08-10}
+\def\ltlabtblversion{0.85m}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -100,6 +100,7 @@
% support for the tagging of tables. A list of the known limitations
% is shown below.
%
+% \subsection{Loading}
% The module is not loaded automatically (i.e., not yet integrated
% into any \texttt{phase-XX}) and by itself it doesn't activate
% tagging. For experimenting with table tagging it is therefore best
@@ -113,7 +114,26 @@
% It will then automatically tag all table environments it already supports with
% the exception of tables in the header and footer of the page (where tagging is disabled).
% Such tables can be nested.
+%
+% Inside cells the automatic tagging of paragraphs is disabled with the exception of
+% p/m/b-type cells.
%
+% Rows do not need to contain a full number of \&, missing cells are automatically
+% added with an empty TD-structure.
+%
+% You should not insert meaningful text with \verb+!{...}+ or \verb+@{...}+ or \cs{noalign}
+% between the rows or columns of the table.
+% With pdflatex such text will be unmarked, with lualatex it will be marked as artifact.
+% Either case means that it will be currently ignored in the
+% structure.\footnote{While it is theoretically possible
+% to collect such text and move it into a structure it would require manual markup
+% from the author to clarify where this text belongs too.}
+%
+% As mentioned below the \pkg{colortbl} doesn't work fully with the tagging,
+% but when it does, colors inside the table are currently ignored. If such a color
+% has a semantic meaning (like \enquote{important value}) this meaning will be lost.
+%
+% \subsection{Untagged and presentation tables}
% If a table should not be tagged as table, for example because it is merely used
% as a layout to ensure that the content is properly aligned
% or because it is a not yet (fully) supported table structure,
@@ -121,47 +141,52 @@
% \verb|\tagpdfsetup{table/tagging=false}| or with \verb|\tagpdfsetup{table/tagging=presentation}|%
% \footnote{The key has been renamed. The old name `table-tagging` still works but is
% deprecated. The value \texttt{presentation} refers to the ARIA role \enquote{presentation}.}
-% The first option disables the table tagging code and he content of the tabular
+% The first option disables the table tagging code and the content of the tabular
% is then treated more or less like running text. This works ok for simple tables using
% only hmode-cells (l/c/r) with normal text content, but fails if the table uses vmode-cells
% (p/m/b). In such cases the second option works better: it keeps the tagging code active
-% but changes the tag names to \texttt{Div} and the grouping structure \texttt{NonStruct}.
-%
-% Inside cells the automatic tagging of paragraphs is disabled with the exception of
-% p/m/b-type cells.
-%
-% Rows do not need to contain a full number of \&, missing cells are automatically
-% added with an empty TD-structure.
+% but changes the tag names to \texttt{Div} and the grouping structure \texttt{NonStruct}. It also
+% (re)sets the \texttt{table/header-rows} key to empty.
+% The key should currently only be used in a group as there is no key (yet) to reset to the default
+% tag names.
%
+% \subsection{Header rows and columns}
% There is some basic support\footnote{This is not meant to be the
% final interface, though.} for headers. With\footnote{The old key name \texttt{table-header-rows} still
% works but is deprecated.}
% \begin{quote}
% \verb|\tagpdfsetup{table/header-rows={|\meta{list of row numbers}\verb|}|
+% \verb|\tagpdfsetup{table/header-columns={|\meta{list of column numbers}\verb|}|
% \end{quote}
% you can
-% declare which (absolute) row numbers should be tagged as header rows.
-% It applies to all tables until it is changed to a different list of row numbers or undone by setting
-% the key to \meta{empty}.
-% A row number can be
-% negative, then the counting starts from the end of the table. There is no support
-% for header columns yet. In a \env{longtable} the code will currently use the \cs{endhead} or
+% declare which (absolute) row and column numbers should be tagged as header rows and header columns.
+% It applies to all tables until it is changed to a different list of row or
+% columns numbers or undone by setting
+% the keys to \meta{empty}.
+% A row or column number can be
+% negative, then the counting starts from the end of the table.
+% In a \env{longtable} the code will currently use the \cs{endhead} or
% \cs{endfirsthead} rows as header if one of these commands has been
% used and in that case the code
% ignores a \texttt{table/header-rows} setting.
%
-% You should not insert meaningful text with \verb+!{...}+ or \verb+@{...}+ or \cs{noalign}
-% between the rows or columns of the table.
-% With pdflatex such text will be unmarked, with lualatex it will be marked as artifact.
-% Either case means that it will be currently ignored in the
-% structure.\footnote{While it is theoretically possible
-% to collect such text and move it into a structure it would require manual markup
-% from the author to clarify where this text belongs too.}
+% \subsection{Spanning of cells}
%
-% As mentioned below the \pkg{colortbl} doesn't yet work properly with the tagging,
-% but once it does, then colors inside the table will probably be
-% simply ignored (at least initially). If such a color
-% has a semantic meaning (like \enquote{important value}) this meaning will be lost.
+% \cs{multicolumn} is supported out of the box and will create a structure with a
+% suitable \texttt{ColSpan} attribute\footnote{The code uses actually an attribute \emph{class}.
+% The validator PAC doesn't handle this correctly currently and complains about a missing attribute.}
+%
+% For cells spanning rows some preliminary support exists\footnote{The interface is bound to change!}:
+% If you add
+% \begin{quote}
+% \verb|\tagpdfsetup{table/multirow={|\meta{number of rows}\verb|}|
+% \end{quote}
+% to a cell the code will add the suitable \texttt{RowSpan} attribute and suppress the tagging of affected
+% cells in the following rows. This will also work if the current cell is a \cs{multicolumn}, then
+% the cell will span both rows and columns. It is the duty of the author to
+% ensure that all cells below and covered by a \texttt{RowSpan} are empty!
+% The code neither checks that nor does
+% it tries to suppress content.
%
% Feedback and problems with the code can be reported at
% \url{https://github.com/latex3/tagging-project} either in form of
@@ -180,19 +205,19 @@
% \item the \env{array} environment is assumed to be part of math and tagging as a table is disabled for
% it.
%
-% \item Row spans are not yet supported (and the \pkg{multirow} package is untested).
+% \item Row spans can only be added manually (the \pkg{multirow} package is untested).
%
-% \item The \pkg{colortbl} package breaks tagging if there are nested tables. It also breaks
-% the filling up of incomplete rows.
+% \item The \pkg{colortbl} package breaks tagging if there are nested tables.
%
% \item The \pkg{tabularray} package use a completed different
% method to create tables and will not be supported by this code.
%
% \item The \pkg{nicematrix} package is currently incompatible.
%
-% \item Most other packages related to tables in \LaTeX{} are not yet tested,
+% \item Most other packages related to tables in \LaTeX{} are not fully tested,
% that includes packages that change rules like \pkg{booktabs}, \pkg{hhline},
-% \pkg{arydshln}, \pkg{hvdashln}.
+% \pkg{arydshln}, \pkg{hvdashln}. Some problems have been resolved, either
+% in the packages or through a firstaid which can be loaded the \verb+testphase=firstaid+.
%
% \item \env{longtable} currently only works with lualatex.
% With other engines it breaks as its output
@@ -205,9 +230,9 @@
% the tagging of the table must be deactivated with \verb|\tagpdfsetup{table/tagging=false}|
% or \verb|\tagpdfsetup{table/tagging=presentation}|.
%
-% \item Only simple header rows are currently supported. Columns and complex headers with
+% \item Only simple header rows and columns are currently supported. Complex headers with
% subheaders will be handled later as that needs some syntax changes. Tables
-% with more than one header row are probably not pdf/UA as the headers array in
+% with more than one header row or column are probably not pdf/UA as the headers array in
% the cells is missing.
%
% \item A \pkg{longtable} \cs{caption} is currently simply formatted as a multicolumn and
@@ -256,9 +281,6 @@
%
% \item Longtable captions should be properly supported.
%
-% \item Handle p-cells better. para-tagging should probably be enabled,
-% but Part can't be a child of TD, so this should probably be changed to Div here.
-% Also there is a stray MC somewhere.
%
% \item More packages must be tested.
% \end{itemize}
@@ -289,8 +311,8 @@
% ,\l_@@_cellattribute_tl
% ,\l_@@_rowattribute_tl
% ,\l_@@_tmpa_clist
-% ,\l_@@_tmpa_seq
% ,\l_@@_tmpa_tl
+% ,\l_@@_tmpa_str
% }
% This is for the celltag, e.g. TD or TH:
% \begin{macrocode}
@@ -316,10 +338,16 @@
\tl_new:N \l_@@_rowattribute_tl
\tl_set:Nn \l_@@_rowattribute_tl {}
% \end{macrocode}
+% Variable to store cell info like which cell must be skipped when tagging multirows.
+% \begin{macrocode}
+\prop_new:N\g_@@_untagged_cells_prop
+\prop_new:N\l_@@_saved_untagged_cells_prop
+% \end{macrocode}
% Temp variables
% \begin{macrocode}
\clist_new:N \l_@@_tmpa_clist
\tl_new:N \l_@@_tmpa_tl
+\str_new:N \l_@@_tmpa_str
% \end{macrocode}
% \end{macro}
%
@@ -327,7 +355,41 @@
%
%
% This are the standard plugs for tagging of cells and rows.
-%
+%
+% The following two sockets are defined in lttagging, but we check
+% for their existence until the release 11/2024.
+% \begin{macrocode}
+\str_if_exist:cF { l__socket_tagsupport/tbl/init/celldata_plug_str }
+ {
+ \NewSocket{tagsupport/tbl/init/celldata}{0}
+ \NewSocket{tagsupport/tbl/restore/celldata}{0}
+ }
+% \end{macrocode}
+% \begin{plugdecl}{default}
+% This socket is used inside \cs{tbl_init_cell_data_for_table} for the
+% case that this a nested table in a cell.
+% \begin{macrocode}
+\NewSocketPlug{tagsupport/tbl/init/celldata}{default}
+ {
+ \prop_set_eq:NN\l_@@_saved_untagged_cells_prop \g_@@_untagged_cells_prop
+ \prop_gclear:N \g_@@_untagged_cells_prop
+ }
+\AssignSocketPlug{tagsupport/tbl/init/celldata}{default}
+% \end{macrocode}
+% \end{plugdecl}
+
+% \begin{plugdecl}{default}
+% This socket is used inside \cs{tbl_restore_outer_cell_data:} and restores
+% values when a nested table is ended.
+% \begin{macrocode}
+\NewSocketPlug{tagsupport/tbl/restore/celldata}{default}
+ {
+ \prop_gset_eq:NN\g_@@_untagged_cells_prop \l_@@_saved_untagged_cells_prop
+ }
+\AssignSocketPlug{tagsupport/tbl/restore/celldata}{default}
+% \end{macrocode}
+% \end{plugdecl}
+%
% \begin{plugdecl}{TD}
% \begin{macrocode}
\NewSocketPlug{tagsupport/tbl/cell/begin}{TD}
@@ -337,21 +399,44 @@
% always even if the noop plug is in force this needs a different solution.
% \begin{macrocode}
\@@_show_curr_cell_data:
- \tag_struct_begin:n
+% \end{macrocode}
+% We test if the cell should be tagged at all.
+% \begin{macrocode}
+ \@@_if_tag_cell:nnT {\g_@@_row_int } { \g_@@_col_int }
{
- tag =\l_@@_celltag_tl,
- attribute-class =\l_@@_cellattribute_tl
- }
- \seq_gput_right:Ne \g_@@_struct_cur_seq { \tag_get:n {struct_num} }
+% \end{macrocode}
+% this sets row headers
+% \begin{macrocode}
+ \clist_if_in:NVT \l_@@_header_columns_clist\g_@@_col_int
+ {
+ \tl_set:Nn \l_@@_celltag_tl {TH}
+ \tl_set:Ne \l_@@_cellattribute_tl {\l_@@_cellattribute_tl,TH-row}
+ }
+% \end{macrocode}
+% Here we handle negative value for row headers:
+% \begin{macrocode}
+ \tl_set:Ne \l_@@_tmpa_tl {\int_eval:n { \g_@@_col_int - 1 - \g_@@_table_cols_tl }}
+ \clist_if_in:NoT \l_@@_header_columns_clist { \l_@@_tmpa_tl }
+ {
+ \tl_set:Nn \l_@@_celltag_tl {TH}
+ \tl_set:Ne \l_@@_cellattribute_tl {\l_@@_cellattribute_tl,TH-row}
+ }
+ \tag_struct_begin:n
+ {
+ tag =\l_@@_celltag_tl,
+ attribute-class ={\l_@@_cellattribute_tl}
+ }
+ \seq_gput_right:Ne \g_@@_struct_cur_seq { \tag_get:n {struct_num} }
% \end{macrocode}
% we store the cells of multicolumns as negative number. This allow to skip them
% or to use them as needed.
% \begin{macrocode}
- \int_step_inline:nn { \g_@@_span_tl - 1 }
- {
- \seq_gput_right:Ne \g_@@_struct_cur_seq { -\tag_get:n {struct_num} }
- }
- \tag_mc_begin:n{}
+ \int_step_inline:nn { \g_@@_span_tl - 1 }
+ {
+ \seq_gput_right:Ne \g_@@_struct_cur_seq { -\tag_get:n {struct_num} }
+ }
+ \tag_mc_begin:n{}
+ }
}
% \end{macrocode}
% \end{plugdecl}
@@ -360,8 +445,11 @@
% \begin{macrocode}
\NewSocketPlug{tagsupport/tbl/cell/end}{TD}
{
- \tag_mc_end:
- \tag_struct_end:
+ \@@_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int }
+ {
+ \tag_mc_end:
+ \tag_struct_end:
+ }
}
% \end{macrocode}
% \end{plugdecl}
@@ -373,18 +461,26 @@
\NewSocketPlug{tagsupport/tbl/pcell/begin}{TDpbox}
{
\@@_show_curr_cell_data:
- \tag_struct_begin:n
- {
- tag =\l__tbl_pcelltag_tl,
- attribute-class =\l__tbl_cellattribute_tl
- }
- \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} }
- \int_step_inline:nn { \g__tbl_span_tl - 1 }
+ \@@_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int }
{
- \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} }
- }
- \tagpdfparaOn
- \tl_set:Nn \l__tag_para_main_tag_tl {Div}
+ \clist_if_in:NVT \l_@@_header_columns_clist\g_@@_col_int
+ {
+ \tl_set:Nn \l_@@_celltag_tl {TH}
+ \tl_set:Ne \l_@@_cellattribute_tl {\l_@@_cellattribute_tl,TH-row}
+ }
+ \tag_struct_begin:n
+ {
+ tag =\l_@@_pcelltag_tl,
+ attribute-class ={\l_@@_cellattribute_tl}
+ }
+ \seq_gput_right:Ne \g_@@_struct_cur_seq { \tag_get:n {struct_num} }
+ \int_step_inline:nn { \g_@@_span_tl - 1 }
+ {
+ \seq_gput_right:Ne \g_@@_struct_cur_seq { -\tag_get:n {struct_num} }
+ }
+ \tagpdfparaOn
+ \tl_set:Nn \l__tag_para_main_tag_tl {Div}
+ }
}
% \end{macrocode}
% \end{plugdecl}
@@ -393,7 +489,12 @@
% \begin{macrocode}
\NewSocketPlug{tagsupport/tbl/pcell/end}{TDpbox}
{
- \tag_struct_end:
+ \@@_if_tag_cell:nnT {\g_@@_row_int } { \g_@@_col_int }
+ {
+ \tag_struct_end:
+ \legacy_if:nT {@endpe}{\par}
+ \mode_if_vertical:T{ \tagpdfparaOff }
+ }
}
% \end{macrocode}
% \end{plugdecl}
@@ -429,7 +530,7 @@
{
\@@_trace:n
{==>~
- stucture~stored~for~row~\int_use:N\g_@@_row_int :~
+ structure~stored~for~row~\int_use:N\g_@@_row_int :~
\seq_use:Nn \g_@@_struct_cur_seq {,}
}
}
@@ -444,21 +545,49 @@
% normal tables which can also be used inline and nested and
% \enquote{vmode} tables like longtable.
%
+% \begin{macro}{\l__tag_block_flattened_level_int}
+% Count the levels of nested blockenvs starting with the first that
+% is \enquote{flattened}. The counter is defined in lttagging.dtx,
+% but until the next release 11/24 we set it up here too so that we can
+% use it in the following socket
+% \begin{macrocode}
+\int_if_exist:NF \l__tag_block_flattened_level_int
+ {
+ \int_new:N \l__tag_block_flattened_level_int
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{plugdecl}{Table}
+% Inside a TD or TR Part is not allowed as child. For structures that restore
+% paragraph settings we therefore need a special plug that adjust the settings.
+% Currently we set the para main tag to Div. This leads to double Div-structures
+% but flattening the paragraph doesn't work, it errors if there is a list inside.
+% \begin{macrocode}
+\NewSocketPlug{tagsupport/para/restore}{Table}
+ {
+ \tl_set:Nn \l__tag_para_main_tag_tl {Div}
+ \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl
+ \bool_set_true:N \l__tag_para_bool
+ \bool_set_false:N \l__tag_para_flattened_bool
+ \int_zero:N \l__tag_block_flattened_level_int
+ }
+% \end{macrocode}
+% \end{plugdecl}
+%
% \begin{plugdecl}{Table}
% Inside a table we currently only disable paratagging. We assume
-% that these sockets are in an environment group, so there is no
+% that these sockets are called in a group, so there is no
% need to reenable paratagging.
% \begin{macrocode}
\NewSocketPlug{tagsupport/tbl/init}{Table}
{
- \tag_if_active:T
- {
- \bool_set_false:N \l__tag_para_bool
+ \bool_set_false:N \l__tag_para_bool
+ \AssignSocketPlug{tagsupport/para/restore}{Table}
% \end{macrocode}
% We also initialize the structure data variables a this point.
% \begin{macrocode}
- \@@_init_struct_data:
- }
+ \@@_init_struct_data:
}
% \end{macrocode}
% \end{plugdecl}
@@ -570,7 +699,7 @@
\prop_if_exist:cT
{ g__tag_struct_ \l_@@_tmpa_tl _prop }
{
- \@@_struct_prop_gput:Vnn \l_@@_tmpa_tl {S}{/Artifact}
+ \__tag_struct_prop_gput:onn { \l_@@_tmpa_tl } {S}{/Artifact}
}
}
}
@@ -661,7 +790,7 @@
\prop_if_exist:cT
{ g__tag_struct_ \l_@@_tmpa_tl _prop }
{
- \@@_struct_prop_gput:Vnn \l_@@_tmpa_tl {S}{/Artifact}
+ \__tag_struct_prop_gput:onn {\l_@@_tmpa_tl} {S}{/Artifact}
}
}
}
@@ -708,7 +837,7 @@
\tag_mc_end_push:
% \end{macrocode}
% Close the P-chunk. This assumes that para-tagging is active.
-% For nested tables that is not necessarly true, so we test for it.
+% For nested tables that is not necessarily true, so we test for it.
% \begin{macrocode}
\bool_lazy_and:nnT
{ \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
@@ -726,7 +855,7 @@
\tag_struct_end:
% \end{macrocode}
% reopen the P-chunk. This assumes that para-tagging is active.
-% For nested tables that is not necessarly true, so we test for it.
+% For nested tables that is not necessarily true, so we test for it.
% \begin{macrocode}
\bool_lazy_and:nnT
{ \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
@@ -775,15 +904,32 @@
{/O /Table /ColSpan~\int_eval:n{#1}}
}
\tl_set:Ne \l_@@_cellattribute_tl
- {colspan-\int_eval:n{#1}}
+ {\l_@@_cellattribute_tl,colspan-\int_eval:n{#1}}
}
}
% \end{macrocode}
-% TODO: move to tagpdf
+% \end{plugdecl}
+%
+%
+%
+%
+% \begin{plugdecl}{code}
+% The sockets will be in lttagging.dtx, but that may only happen in
+% the next main release, so for now we test if they are in the
+% format and if not define them now.
% \begin{macrocode}
-\tag_if_active:T
- { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} }
-
+\str_if_exist:cF { l__socket_tagsupport/tbl/leaders/end_plug_str }
+ {
+ \NewSocket{tagsupport/tbl/leaders/begin}{0}
+ \NewSocket{tagsupport/tbl/leaders/end}{0}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewSocketPlug{tagsupport/tbl/leaders/begin}{code}
+ { \tag_mc_begin:n{artifact} }
+\NewSocketPlug{tagsupport/tbl/leaders/end}{code}
+ { \tag_mc_end: }
% \end{macrocode}
% \end{plugdecl}
%
@@ -807,8 +953,7 @@
% \subsection{Interfaces to tagging}
%
% \subsubsection{Tagging helper commands}
-%
-%
+
% \subsubsection{Disabling/enabling}
%
% For now we have only the option true/false but this will probably be extended
@@ -836,6 +981,8 @@
\AssignSocketPlug{tagsupport/tbl/vmode/begin}{noop}
\AssignSocketPlug{tagsupport/tbl/vmode/end}{noop}
\AssignSocketPlug{tagsupport/tbl/colspan}{noop}
+ \AssignSocketPlug{tagsupport/tbl/leaders/begin}{noop}
+ \AssignSocketPlug{tagsupport/tbl/leaders/end}{noop}
}
% \end{macrocode}
% \end{macro}
@@ -863,6 +1010,8 @@
\AssignSocketPlug{tagsupport/tbl/vmode/begin}{Table}
\AssignSocketPlug{tagsupport/tbl/vmode/end}{Table}
\AssignSocketPlug{tagsupport/tbl/colspan}{code}
+ \AssignSocketPlug{tagsupport/tbl/leaders/begin}{code}
+ \AssignSocketPlug{tagsupport/tbl/leaders/end}{code}
}
% \end{macrocode}
% \end{macro}
@@ -883,13 +1032,15 @@
\tl_set:Nn\l_@@_pcelltag_tl {NonStruct}
\tl_set:Nn\l_@@_celltag_tl {text}
\tl_set:Nn\l_@@_tabletag_tl {Div}
+ \clist_clear:N \l_@@_header_rows_clist
+ \clist_clear:N \l_@@_header_columns_clist
},
table/tagging .default:n = true,
table/tagging .initial:n = true
}
% \end{macrocode}
% This are the old key names kept for now for
-% compability. They will got at some time.
+% compatibility. They will got at some time.
% \begin{macrocode}
\keys_define:nn { __tag / setup }
{
@@ -951,30 +1102,16 @@
% \end{macrocode}
%
-% \begin{variable}{\l_@@_header_rows_clist}
-% This holds the numbers of the header rows. Negative numbers are
-% possible and count from the back.
+% \begin{variable}{\l_@@_header_rows_clist,\l_@@_header_columns_clist}
+% This holds the numbers of the header rows and columns. Negative numbers are
+% possible and count from the last column backwards.
% \begin{macrocode}
\clist_new:N \l_@@_header_rows_clist
+\clist_new:N \l_@@_header_columns_clist
% \end{macrocode}
% \end{variable}
%
% \begin{macro}{\@@_set_header_rows:}
-% TEMP: Next tagpdf will have the right command which also updates
-% the debug info.
-% For now a temporary command:
-% \begin{macrocode}
-\cs_if_free:NTF \__tag_struct_prop_gput:nnn
- {
- \cs_new_protected:Npn \@@_struct_prop_gput:nnn #1#2#3
- { \prop_gput:cnn { g__tag_struct_#1_prop }{#2}{#3} }
- }
- { \cs_new_protected:Npn \@@_struct_prop_gput:nnn #1#2#3
- { \__tag_struct_prop_gput:nnn {#1}{#2}{#3} }
- }
-\cs_generate_variant:Nn \@@_struct_prop_gput:nnn {nne,Vnn}
-% \end{macrocode}
-%
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_header_rows:
{
@@ -991,17 +1128,29 @@
% \begin{macrocode}
\prop_if_exist:cT { g__tag_struct_####1_prop }
{
- \@@_struct_prop_gput:nnn{ ####1 }{S}{/TH}
+ \__tag_struct_prop_gput:nnn{ ####1 }{S}{/TH}
% \end{macrocode}
-% This need refinement once row headers (and perhaps other attributes)
-% are used too, but for now it should be ok.
+% This sets the scope class. If the header has already a row attribute
+% we replace by TH-both.
% \begin{macrocode}
\prop_get:cnNTF
{ g__tag_struct_####1_prop }
{ C }
\l_@@_tmpa_tl
- {\@@_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l_@@_tmpa_tl]} }
- {\@@_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}}
+ {
+ \str_set:Ne \l_@@_tmpa_str {\l_@@_tmpa_tl}
+ \str_remove_once:Nn \l_@@_tmpa_str {[}
+ \str_remove_once:Nn \l_@@_tmpa_str {]}
+ \str_if_in:NnTF\l_@@_tmpa_str{/TH-row}
+ {
+ \str_replace_once:Nnn \l_@@_tmpa_str {/TH-row}{/TH-both}
+ \__tag_struct_prop_gput:nne{ ####1 }{C}{[\l_@@_tmpa_str]}
+ }
+ {
+ \__tag_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l_@@_tmpa_str]}
+ }
+ }
+ {\__tag_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}}
}
}
}
@@ -1015,6 +1164,7 @@
\keys_define:nn { __tag / setup }
{
table/header-rows .clist_set:N = \l_@@_header_rows_clist,
+ table/header-columns .clist_set:N = \l_@@_header_columns_clist,
% \end{macrocode}
% obsolete older name:
% \begin{macrocode}
@@ -1022,8 +1172,114 @@
}
% \end{macrocode}
%
+% \subsection{Multirow support}
+%
+% \begin{macro}{\@@_multirow:n}
+% This command makes the current cell into a multirow cell:
+% it creates, if needed, an RowSpan-attribute, adds it to the attributes
+% of the cell structure, and marks all following cells spanned by the multirow
+% as cells that should not be tagged. The argument is the number of spanned row
+% (including the current row).
+% \begin{macrocode}
+\cs_if_exist:NT \__tag_struct_prop_gput:nnn
+ {
+ \cs_generate_variant:Nn \__tag_struct_prop_gput:nnn {one}
+ }
+\cs_new_protected:Npn \@@_multirow:n #1
+ {
+% \end{macrocode}
+% Create an attribute if needed:
+% \begin{macrocode}
+ \prop_get:NeNF \g__tag_attr_entries_prop
+ {rowspan-\int_eval:n{#1}}
+ \l_@@_tmpa_tl
+ {
+ \__tag_attr_new_entry:ee
+ {rowspan-\int_eval:n{#1}}
+ {/O /Table /RowSpan~\int_eval:n{#1}}
+ }
+% \end{macrocode}
+% ensure that the attribute is marked as used:
+% \begin{macrocode}
+ \seq_gput_left:Ne\g__tag_attr_class_used_seq
+ {\pdf_name_from_unicode_e:n{rowspan-\int_eval:n{#1}}}
+% \end{macrocode}
+% Get the structure number of the current cell
+% \begin{macrocode}
+ \seq_get_right:NN\g_@@_struct_cur_seq \l_@@_tmpb_tl
+% \end{macrocode}
+% If we are in a multicolumn the number can be negative and
+% this must be changed
+% \begin{macrocode}
+ \tl_set:Ne \l_@@_tmpb_tl { \int_abs:n{\l_@@_tmpb_tl} }
+% \end{macrocode}
+% no we must update an existing attribute.
+% TODO: simplify this ... (see also colspan handling).
+% \begin{macrocode}
+ \prop_get:cnNTF
+ { g__tag_struct_\l_@@_tmpb_tl _prop }
+ { C }
+ \l_@@_tmpa_tl
+ {
+ \tl_remove_once:Nn \l_@@_tmpa_tl {[}
+ \tl_remove_once:Nn \l_@@_tmpa_tl {]}
+ \__tag_struct_prop_gput:one{ \l_@@_tmpb_tl }
+ {C}
+ {[/rowspan-\int_eval:n{#1}~\l_@@_tmpa_tl]}
+ }
+ {
+ \__tag_struct_prop_gput:one{ \l_@@_tmpb_tl }
+ {C}
+ {[/rowspan-\int_eval:n{#1}]}
+ }
+% \end{macrocode}
+% Now mark the spanned cells that should be ignored.
+% \begin{macrocode}
+ \@@_gset_untagged_row_cells:nn {#1-1}{\g_@@_span_tl}
+ }
+% \end{macrocode}
+% \end{macro}
%
+% \begin{macrocode}
+\keys_define:nn{ __tag / setup }
+ { table/multirow .code:n = {\@@_multirow:n {#1} }
+ ,table/multirow .default:n = 1
+ }
+% \end{macrocode}
%
+% \begin{macro}{\@@_gset_untagged_row_cells:nn}
+% This command stores the row and column numbers of the cells in the following row(s)
+% that should not be tagged as they are a part of a rowspan.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_gset_untagged_row_cells:nn #1 #2 % #1 number of rows, #2 number of columns
+ {
+ \int_step_inline:nn {#1}
+ {
+ \int_step_inline:nn {#2}
+ {
+ \prop_gput:Nee \g_@@_untagged_cells_prop
+ { \int_eval:n {\g_@@_row_int + ##1},\int_eval:n{\g_@@_col_int + ####1 -1 } }{}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_if_tag_cell:nn}
+% We must be able to detect if a cell should be tagged. For this
+% we define a conditional --- if more options are needed it can be extended.
+% \begin{macrocode}
+\prg_new_protected_conditional:Npnn\@@_if_tag_cell:nn #1 #2 %#1 row, #2 col
+ { T,TF }
+ {
+ \prop_get:NeNTF \g_@@_untagged_cells_prop
+ {\int_eval:n{#1},\int_eval:n{#2}}\l__tbl_tmpa_tl
+ { \prg_return_false:}
+ { \prg_return_true: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Misc stuff}
%
% \begin{macro}{\@@_show_curr_cell_data:}
@@ -1048,13 +1304,6 @@
% cell of a row, but still inside that cell, so we use two
% commands. The one adding is used in the row/end socket.
% \begin{macrocode}
-\NewSocket{tbl/celldata/missingcount}{1}
-\NewSocketPlug{tbl/celldata/missingcount}{code}{\tbl_count_missing_cells:n{#1}}
-\AssignSocketPlug{tbl/celldata/missingcount}{code}
-
-% \end{macrocode}
-%
-% \begin{macrocode}
\cs_new:Npn \@@_add_missing_cells:
{
% \end{macrocode}
@@ -1069,6 +1318,7 @@
additional~cell(s)~into~previous~row:}
\int_step_inline:nn { \g_@@_missing_cells_int }
{
+ \int_gincr:N\g_@@_col_int
\UseTaggingSocket{tbl/cell/begin}
\UseTaggingSocket{tbl/cell/end}
}
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-table.pdf b/macros/latex-dev/required/latex-lab/latex-lab-table.pdf
index a87f7638df..c2bb7e7c2f 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-table.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-table.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx b/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
index f0a6fe65d0..1134654cd6 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-testphase.dtx
@@ -47,7 +47,7 @@
%
% Currently the values |phase-I|, |phase-II|, |phase-III| and |new-or| (bundles |new-or-1|
% and |new-or-2|) are provided.
-% |tagpdf| is an undocumented alias for |phase-II| which is kept for compability.
+% |tagpdf| is an undocumented alias for |phase-II| which is kept for compatibility.
% The value |math| combines various math related files.
%
% \StopEventually{\setlength\IndexMin{200pt} \PrintIndex }
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf b/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
index 9cb5334c0d..c9988c89af 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-testphase.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-text.pdf b/macros/latex-dev/required/latex-lab/latex-lab-text.pdf
index 8b778cc94b..8c4fc7780d 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-text.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-text.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-title.pdf b/macros/latex-dev/required/latex-lab/latex-lab-title.pdf
index 94ea473b98..64dfa09d2c 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-title.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-title.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
index e94e8e9cc3..caf6bd4b7b 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-hyperref-changes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
index bb88ffdcb0..bf10bf4f2f 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.dtx
@@ -17,8 +17,8 @@
% for those people who are interested or want to report an issue.
%
% dates for latex-lab-kernel-changes.sty (pulled from various sources, see ins)
-\def\ltlabkerneldate{2024-02-12}
-\def\ltlabkernelversion{0.85c}
+\def\ltlabkerneldate{2024-07-11}
+\def\ltlabkernelversion{0.85d}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -44,6 +44,11 @@
%
% \providecommand\hook[1]{\texttt{#1}}
%
+%
+% \ProvideDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl}
+% \ProvideDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl}
+% \ProvideDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl}
+%
% \begin{abstract}
% \end{abstract}
%
@@ -187,12 +192,24 @@
% \subsection{\cs{contentsline} extension}
% [latex-lab]
% The tagging code must add code at the begin and end of \cs{contentsline}.
-% This code must have access to the arguments. We set it up as config point
-% for now.
+% This code must have access to the arguments. They are passed
+% together in tagging socket.
+% \begin{socketdecl}{tagsupport/toc/contentsline/before,
+% tagsupport/toc/contentsline/after}
+% Tagging sockets at the begin and end of contentsline.
+% They receive \emph{all} contentsline arguments as one argument
+% in four brace groups. The socket code should then use the parts it needs.
+% The sockets will be in lttagging.dtx, but that may only happen in
+% the next main release, so for now we test if they are in the
+% format and if not define them now.
% \begin{macrocode}
-\def\@contentsline@cfgpoint@before#1#2#3#4{}
-\def\@contentsline@cfgpoint@after#1#2#3#4{}
+\str_if_exist:cF { l__socket_tagsupport/toc/contentsline/before_plug_str }
+ {
+ \NewSocket{tagsupport/toc/contentsline/before}{1}
+ \NewSocket{tagsupport/toc/contentsline/after}{1}
+ }
% \end{macrocode}
+% \end{socketdecl}
% for the hooks we need that the \cs{l@XX} pass also the destination and
% that \cs{l@XX} takes three arguments.
% TODO: test that, if there are two many problems we should pass the
@@ -200,10 +217,10 @@
% \begin{macrocode}
\def\contentsline#1#2#3#4%
{%
- \@contentsline@cfgpoint@before{#1}{#2}{#3}{#4}%
+ \UseTaggingSocket{toc/contentsline/before}{{#1}{#2}{#3}{#4}}%
\gdef\@contentsline@destination{#4}%
\csname l@#1\endcsname{#2}{#3}%
- \@contentsline@cfgpoint@after{#1}{#2}{#3}{#4}%
+ \UseTaggingSocket{toc/contentsline/after}{{#1}{#2}{#3}{#4}}%
}
% \end{macrocode}
%
@@ -225,17 +242,33 @@
% \subsection{\cs{@starttoc}}
% [kernel?]
%
-% We add a configuration point before and after reading the file
+% We add a tagging socket before and after reading the file
% for the tagging.
+% \begin{socketdecl}{tagsupport/toc/starttoc/before,
+% tagsupport/toc/starttoc/after}
+% Tagging sockets for the begin and end of start of \cs{@starttoc}.
+% They take one argument, the extension.
+% The sockets will be in lttagging.dtx, but that may only happen in
+% the next main release, so for now we test if they are in the
+% format and if not define them now.
+% \begin{macrocode}
+\str_if_exist:cF { l__socket_tagsupport/toc/starttoc/before_plug_str }
+ {
+ \NewSocket{tagsupport/toc/starttoc/before}{1}
+ \NewSocket{tagsupport/toc/starttoc/after}{1}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+% \end{macrocode}
+% \end{socketdecl}
+%
% \begin{macrocode}
-\def\@starttoc@cfgpoint@before#1{}
-\def\@starttoc@cfgpoint@after#1{}
\def\@starttoc#1{%
\begingroup
\makeatletter
- \@starttoc@cfgpoint@before{#1}%
+ \UseTaggingSocket{toc/starttoc/before}{#1}%
\@input{\jobname.#1}%
- \@starttoc@cfgpoint@after{#1}%
+ \UseTaggingSocket{toc/starttoc/after}{#1}%
\if@filesw
\expandafter\newwrite\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
@@ -269,15 +302,32 @@
\NewMirroredHookPairWithArguments{contentsline/page/before}{contentsline/page/after}{4}%
% \end{macrocode}
%
-% The dot in the leader must be set as artifact.
+% The dots in the leader must be set as artifact.
% But luatex requires that the mc are set outside the leaders.
-% So we need a config point.
+% So we need sockets.
%
% \cs{@dottedtocline} needs hooks and formatting commands.
-% We add a sixth argument so that it can grab the destination too.
+% To make the leaders into artifact we use tagging sockets.
+% The declaration should perhaps be moved into lttagging so that
+% it can be used also by external packages even if the tagging code is not
+% loaded?
+% \begin{socketdecl}{tagsupport/toc/leaders/before,
+% tagsupport/toc/leaders/after}
+% Tagging sockets to make the dot leaders an artifact.
+% They do not take an argument.
+% The sockets will be in lttagging.dtx, but that may only happen in
+% the next main release, so for now we test if they are in the
+% format and if not define them now.
+% \begin{macrocode}
+\str_if_exist:cF { l__socket_tagsupport/toc/leaders/before_plug_str }
+ {
+ \NewSocket{tagsupport/toc/leaders/before}{0}
+ \NewSocket{tagsupport/toc/leaders/after}{0}
+ }
+% \end{macrocode}
+% \end{socketdecl}
+% The destination is accessed through \cs{@contentsline@destination}.
% \begin{macrocode}
-\def\@dottedtocline@cfgpoint@leaders#1{#1}
-
\def\@dottedtocline#1#2#3#4#5{%
\ifnum #1>\c@tocdepth \else
\vskip \z@ \@plus.2\p@
@@ -291,10 +341,11 @@
\csname contentsline@text@#1@format\endcsname{#4}%
\UseHookWithArguments{contentsline/text/after}{4}{#1}{#4}{#5}{\@contentsline@destination}%
\nobreak
- \@dottedtocline@cfgpoint@leaders{%
+ \UseTaggingSocket{toc/leaders/before}\SuspendTagging{toc/leaders}%
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
- mu$}\hfill}%
+ mu$}\hfill
+ \ResumeTagging{toc/leaders}\UseTaggingSocket{toc/leaders/after}%
\nobreak
\hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor
\UseHookWithArguments{contentsline/page/before}{4}{#1}{#4}{#5}{\@contentsline@destination}%
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
index 65e534d37b..7e19e8a9eb 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc-kernel-changes.pdf
Binary files differ
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx b/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx
index 7235eb9ed9..5ad0d3cec1 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc.dtx
@@ -16,8 +16,8 @@
%
% for those people who are interested or want to report an issue.
%
-\def\ltlabtocdate{2023-10-16}
-\def\ltlabtocversion{0.85b}
+\def\ltlabtocdate{2024-07-11}
+\def\ltlabtocversion{0.85c}
%<*driver>
\documentclass{l3doc}
\EnableCrossrefs
@@ -42,7 +42,10 @@
% \newcommand{\docclass}{document class \marginpar{\raggedright document class
% customizations}}
%
-% \providecommand\hook[1]{\texttt{#1}}
+%
+% \ProvideDocElement[printtype=\textit{socket},idxtype=socket,idxgroup=Sockets]{Socket}{socketdecl}
+% \ProvideDocElement[printtype=\textit{hook},idxtype=hook,idxgroup=Hooks]{Hook}{hookdecl}
+% \ProvideDocElement[printtype=\textit{plug},idxtype=plug,idxgroup=Plugs]{Plug}{plugdecl}
%
% \begin{abstract}
% \end{abstract}
@@ -196,14 +199,17 @@
\tag_struct_begin:n{tag=TOC,title=#1}
}
% \end{macrocode}
-% Now map it into the config point:
+% \end{macro}
+% Now define the tagging plug and assign it to the socket.
+% \begin{plugdecl}{default}
% \begin{macrocode}
-\cs_set_protected:Npn\@starttoc@cfgpoint@before#1
- {
- \@@_toc_starttoc_init:n{#1}
- }
+\NewSocketPlug{tagsupport/toc/starttoc/before}{default}
+ {
+ \@@_toc_starttoc_init:n{#1}
+ }
+\AssignSocketPlug{tagsupport/toc/starttoc/before}{default}
% \end{macrocode}
-% \end{macro}
+% \end{plugdecl}
% \begin{macro}{\@@_toc_starttoc_finalize:}
% \begin{macrocode}
\cs_new_protected:Npn \@@_toc_starttoc_finalize:
@@ -215,15 +221,18 @@
\seq_gclear:N \g_@@_toc_stack_seq
}
% \end{macrocode}
-% Now map it into the config point:
+% \end{macro}
+% Now define the tagging plug and assign it to the socket.
+% \begin{plugdecl}{default}
% \begin{macrocode}
-\cs_set_protected:Npn\@starttoc@cfgpoint@after#1
- {
- \@@_toc_starttoc_finalize:
- }
+\NewSocketPlug{tagsupport/toc/starttoc/after}{default}
+ {
+ \@@_toc_starttoc_finalize:
+ }
+\AssignSocketPlug{tagsupport/toc/starttoc/after}{default}
% \end{macrocode}
-% \end{macro}
-
+% \end{plugdecl}
+%
% \begin{macro}{\@@_toc_end:n}
% This commands ends all TOC on the stack with a level higher than the argument
% \begin{macrocode}
@@ -249,10 +258,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_toc_contentsline_begin:nnn}
+% \begin{macro}{\@@_toc_contentsline_begin:nnnn}
% This is main command executed at the begin of a |\contentsline|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_toc_contentsline_begin:nnn #1 #2 #3 %#1 level, #2 content, #3 destination
+\cs_new_protected:Npn \@@_toc_contentsline_begin:nnnn #1 #2 #3 #4
+ %#1 level, #2 content, #3 page number (unused) #4 destination
{
\tag_if_active:T
{
@@ -308,30 +318,34 @@
% \end{NOTE}
% \begin{macrocode}
\prop_gput:Nee \g_@@_struct_ref_by_dest_prop
- { \tag_get:n {struct_num} }{#3}
+ { \tag_get:n {struct_num} }{#4}
\seq_gpush:Ne \g_@@_toc_stack_seq {{TOCI}\use:c{toclevel@#1}}
\group_end:
}
}
}
% \end{macrocode}
-% Now map it into the config point:
+% \end{macro}
+% Now define the tagging plug and assign it to the socket.
+% \begin{plugdecl}{default}
% \begin{macrocode}
-\cs_set_protected:Npn\@contentsline@cfgpoint@before#1#2#3#4
+\NewSocketPlug{tagsupport/toc/contentsline/before}{default}
{
- \@@_toc_contentsline_begin:nnn {#1}{#2}{#4}
- }
+ \@@_toc_contentsline_begin:nnnn #1
+ }
+\AssignSocketPlug{tagsupport/toc/contentsline/before}{default}
% \end{macrocode}
-% \end{macro}
+% \end{plugdecl}
%
-% \begin{macro}{\@@_toc_contentsline_end:n}
+% \begin{macro}{\@@_toc_contentsline_end:nnnn}
% This is the closing code of a |\contentsline|.
% If the contentsline was actually printed, the code has to
% close the TOCI structure and to update the stack.
% \begin{macrocode}
\msg_new:nnn {tag}{toc-no-TOCI}{Missing~TOCI~structure~on~toc~stack}
-\cs_new_protected:Npn \@@_toc_contentsline_end:n #1 %#1 level name
+\cs_new_protected:Npn \@@_toc_contentsline_end:nnnn #1 #2 #3 #4
+% #1 level, #2 content (unused), #3 page number (unused) #4 destination (unused)
{
\int_compare:nNnF { \use:c{toclevel@#1} } > {\use:c{c@tocdepth}}
{
@@ -348,14 +362,17 @@
}
}
% \end{macrocode}
-% Now we map it to the config point
+% \end{macro}
+% Now define the tagging plug and assign it to the socket.
+% \begin{plugdecl}{default}
% \begin{macrocode}
-\cs_set_protected:Npn \@contentsline@cfgpoint@after #1#2#3#4
- {
- \@@_toc_contentsline_end:n {#1}
- }
+\NewSocketPlug{tagsupport/toc/contentsline/after}{default}
+ {
+ \@@_toc_contentsline_end:nnnn #1
+ }
+\AssignSocketPlug{tagsupport/toc/contentsline/after}{default}
% \end{macrocode}
-% \end{macro}
+% \end{plugdecl}
%
% \subsection{Tagging of the content}
% This need discussion.
@@ -380,12 +397,16 @@
\tag_struct_end:
\tag_mc_begin:n{tag=Reference}}
% \end{macrocode}
-%
+% \begin{plugdecl}{artifact}
% \begin{macrocode}
-\def\@dottedtocline@cfgpoint@leaders#1{%
- \tag_mc_begin:n{artifact}\tag_stop:n{leaders}\nobreak#1\nobreak\tag_start:n{leaders}\tag_mc_end:}
+\NewSocketPlug{tagsupport/toc/leaders/before}{artifact}
+ {\tag_mc_begin:n{artifact}\nobreak}
+\NewSocketPlug{tagsupport/toc/leaders/after}{artifact}
+ {\nobreak\tag_mc_end:}
+\AssignSocketPlug{tagsupport/toc/leaders/before}{artifact}
+\AssignSocketPlug{tagsupport/toc/leaders/after}{artifact}
% \end{macrocode}
-
+% \end{plugdecl}
%
% \begin{macrocode}
%</package>
diff --git a/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf b/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf
index 1bea97e1d9..5f6e705a90 100644
--- a/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf
+++ b/macros/latex-dev/required/latex-lab/latex-lab-toc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/README.md b/macros/latex-dev/required/tools/README.md
index f1500cc4c4..d5c8915ba9 100644
--- a/macros/latex-dev/required/tools/README.md
+++ b/macros/latex-dev/required/tools/README.md
@@ -1,7 +1,7 @@
The LaTeX `tools` bundle
========================
-Release 2024-06-01 pre-release 2
+Release 2024-11-01 pre-release 2
Overview
--------
diff --git a/macros/latex-dev/required/tools/afterpage.pdf b/macros/latex-dev/required/tools/afterpage.pdf
index afe6cd4471..63c625d8ef 100644
--- a/macros/latex-dev/required/tools/afterpage.pdf
+++ b/macros/latex-dev/required/tools/afterpage.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/array-2016-10-06.sty b/macros/latex-dev/required/tools/array-2016-10-06.sty
index f079fd4975..ced72d2913 100644
--- a/macros/latex-dev/required/tools/array-2016-10-06.sty
+++ b/macros/latex-dev/required/tools/array-2016-10-06.sty
@@ -1,5 +1,7 @@
%%
-%% This is an old release of `array.sty',
+%% This is an old release of `array.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
%%
%% Copyright 1993-2016
%% The LaTeX Project and any individual authors listed elsewhere
diff --git a/macros/latex-dev/required/tools/array-2020-02-10.sty b/macros/latex-dev/required/tools/array-2020-02-10.sty
index 1243f25f74..5acd9c727e 100644
--- a/macros/latex-dev/required/tools/array-2020-02-10.sty
+++ b/macros/latex-dev/required/tools/array-2020-02-10.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `array.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `array.sty',
%% generated with the docstrip utility.
%%
@@ -38,11 +42,6 @@
%% Package `array' to use with LaTeX 2e
%% Copyright (C) 1989-1998 Frank Mittelbach, all rights reserved.
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
-\providecommand\DeclareRelease[3]{}
-\providecommand\DeclareCurrentRelease[2]{}
-
-\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
-\DeclareCurrentRelease{}{2019-10-01}
\ProvidesPackage{array}
[2020/02/10 v2.4m Tabular extension package (FMi)]
diff --git a/macros/latex-dev/required/tools/array-2023-11-01.sty b/macros/latex-dev/required/tools/array-2023-11-01.sty
index cd6eee6a0f..b5267cffd2 100644
--- a/macros/latex-dev/required/tools/array-2023-11-01.sty
+++ b/macros/latex-dev/required/tools/array-2023-11-01.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `array.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `array.sty',
%% generated with the docstrip utility.
%%
@@ -38,12 +42,6 @@
%% Package `array' to use with LaTeX 2e
%% Copyright (C) 1989-1998 Frank Mittelbach, all rights reserved.
\NeedsTeXFormat{LaTeX2e}[1995/06/01]
-\providecommand\DeclareRelease[3]{}
-\providecommand\DeclareCurrentRelease[2]{}
-
-\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
-\DeclareRelease{v2.4}{2020-02-10}{array-2020-02-10.sty}
-\DeclareCurrentRelease{}{2020-10-01}
\ProvidesPackage{array}
[2023/10/16 v2.5g Tabular extension package (FMi)]
diff --git a/macros/latex-dev/required/tools/array.dtx b/macros/latex-dev/required/tools/array.dtx
index 66c40a5267..ca5e991bee 100644
--- a/macros/latex-dev/required/tools/array.dtx
+++ b/macros/latex-dev/required/tools/array.dtx
@@ -25,9 +25,10 @@
%% Package `array' to use with LaTeX 2e
%% Copyright (C) 1989-1998 Frank Mittelbach, all rights reserved.
%<+package>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
-%<+package>\providecommand\DeclareRelease[3]{}
-%<+package>\providecommand\DeclareCurrentRelease[2]{}
%<+package>
+% For anything before 2016-10-06 we load the 2016 version and hope for the best:
+%<+package>\DeclareRelease{}{1994-06-01}{array-2016-10-06.sty}
+%
%<+package>\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
%<+package>\DeclareRelease{v2.4}{2020-02-10}{array-2020-02-10.sty}
%<+package>\DeclareRelease{v2.5}{2023-11-01}{array-2023-11-01.sty}
@@ -38,7 +39,7 @@
% \begin{macrocode}
%<+package>\NeedsTeXFormat{LaTeX2e}[2024/06/01]
%<+package>\ProvidesPackage{array}
-%<+package> [2023/12/11 v2.6a Tabular extension package (FMi)]
+%<+package> [2024/07/13 v2.6e Tabular extension package (FMi)]
%
% \fi
%
@@ -714,7 +715,7 @@
%
% A similar problem happened when "\extrarowheight" was used. For that
% reason m-cells now manually position the cell content which
-% allows to ignore this extra space request during the vertical aligment.
+% allows to ignore this extra space request during the vertical alignment.
%
%
% \subsection{Bugs and Features}
@@ -1371,6 +1372,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
%
% \begin{macro}{\insert@column}
% \begin{macro}{\@sharp}
+% \begin{macro}{\textonly@unskip}
% We now define the macro =\insert@column= which will do
% this work for us.
% \begin{macrocode}
@@ -1399,8 +1401,9 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \changes{v2.0e}{1991/02/07}{Added \{\} around \cs{@sharp} for new ftsel}
% \changes{v2.0h}{1992/06/22}{Removed \{\} again in favour of
% \cs{d@llarbegin}}
+% \changes{v2.6b}{2024/04/08}{Do not \cs{unskip} if in math mode (gh/1323)}
% \begin{macrocode}
- \ignorespaces \@sharp \unskip
+ \ignorespaces \@sharp \textonly@unskip
% \end{macrocode}
% Then the second \textsf{token} register follows whose number should
% be saved in =\count@=.
@@ -1420,6 +1423,12 @@ Bug reports can be opened (category \texttt{#1}) at\\%
\UseTaggingSocket{tbl/cell/end}%
}
% \end{macrocode}
+% Do the unskip only if we are in hmode:
+% \changes{v2.6b}{2024/04/08}{Do not \cs{unskip} if in math mode (gh/1323)}
+% \begin{macrocode}
+\protected\def\textonly@unskip{\ifhmode\unskip\fi}
+% \end{macrocode}
+% \end{macro}
% \end{macro}
% \end{macro}
%
@@ -1891,7 +1900,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% is how much do we need to move down? If there is any
% =\arraystretch= in place then the first line will have some
% unusual height and we don't want to consider that when finding
-% the middle point. So we substract from the cell height the height
+% the middle point. So we subtract from the cell height the height
% of that strut. But of course we want to include the normal height
% of the first line (which would be something like =\ht\strutbox=)
% so we need to add that. On the other hand, when centering around
@@ -2647,7 +2656,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \begin{macro}{\d@llarbegin}
% \begin{macro}{\d@llarend}
% =\d@llar= has to be
-% locally asigned since otherwise nested \textsf{tabular} and \textsf{array}
+% locally assigned since otherwise nested \textsf{tabular} and \textsf{array}
% environments (via =\multicolumn=) are impossible.
% For 25 years or so =\@halignto= was set globally (to save space on the
% save stack, but that was a mistake: if there is a tabular in the
@@ -2843,11 +2852,13 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \end{macrocode}
%
% \begin{macro}{\@preamerr}
+% \changes{v2.6d}{2024/06/14}{Keep message sources out of L3 code (gh/1378)}
% We also have to redefine the error routine =\@preamerr= since
% new kind of errors are possible.
% The code for this macro is not perfect yet;
% it still needs too much memory.
% \begin{macrocode}
+\ExplSyntaxOff
\def\@preamerr#1{\def\@tempd{{..} at wrong position: }%
\PackageError{array}{%
\ifcase #1 Illegal pream-token (\@nextchar): `c' used\or %0
@@ -2896,7 +2907,6 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% to define letters, to be used in the same way as the primitive
% column specifiers, `c' `p' etc.
% \begin{macrocode}
-\ExplSyntaxOff % this is really oldstyle using \@tfor :=
\def\newcolumntype#1{%
% \end{macrocode}
% "\NC@char" was added in V2.01 so that active characters, like "@" in
@@ -3430,7 +3440,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \subsection{Implementing column types \texttt{w} and \texttt{W}}
%
% In TugBoat 38/2 an extension was presented that implemented two
-% aditional column types \texttt{w} and \texttt{W}. These have now
+% additional column types \texttt{w} and \texttt{W}. These have now
% been added to the package itself.
%
%
@@ -3507,8 +3517,47 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \end{macro}
%
%
+% \subsection{Handling \cs{cline}}
+%
+% In the past \pkg{array} did not have to concern itself with
+% \cs{cline} but simply used the definition already provided in the
+% kernel. However, for tagged PDF output this definition is
+% insufficient, because it causes incorrect row counting and the rules
+% it generates would need to be marked as artifacts.
+% We therefore update it here.
%
%
+% \begin{macro}{\@cline}
+% Tagging support for \cs{cline}
+% \changes{v2.6e}{2024/07/13}{Support for tagging \cs{cline} (tagging/134)}
+% \begin{macrocode}
+\ExplSyntaxOn
+\def\@cline#1-#2\@nil{
+ \omit
+ \@multicnt#1
+ \advance\@multispan\m@ne
+ \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
+ \@multicnt#2
+ \advance\@multicnt-#1
+ \advance\@multispan\@ne
+% \end{macrocode}
+% The rule needs artifact tagging in tagged PDF.
+% \begin{macrocode}
+ \UseTaggingSocket{tbl/leaders/begin}
+ \leaders\hrule\@height\arrayrulewidth\hfill
+ \UseTaggingSocket{tbl/leaders/end}
+% \end{macrocode}
+% To the row counting the above appears like an extra row, so we
+% have to correct the count.
+% \begin{macrocode}
+ \tbl_gdecr_row_count:
+ \cr
+ \noalign{\vskip-\arrayrulewidth}
+}
+\ExplSyntaxOff
+% \end{macrocode}
+% \end{macro}
+%
%
% \begin{macrocode}
\ExplSyntaxOff
diff --git a/macros/latex-dev/required/tools/array.pdf b/macros/latex-dev/required/tools/array.pdf
index c0c1d1035f..f42a936a8b 100644
--- a/macros/latex-dev/required/tools/array.pdf
+++ b/macros/latex-dev/required/tools/array.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/bm.pdf b/macros/latex-dev/required/tools/bm.pdf
index a94e1325b8..8da4641478 100644
--- a/macros/latex-dev/required/tools/bm.pdf
+++ b/macros/latex-dev/required/tools/bm.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/calc.pdf b/macros/latex-dev/required/tools/calc.pdf
index 3e1f07af3a..07f9891480 100644
--- a/macros/latex-dev/required/tools/calc.pdf
+++ b/macros/latex-dev/required/tools/calc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/changes.txt b/macros/latex-dev/required/tools/changes.txt
index 4339d8e702..31292d1b2b 100644
--- a/macros/latex-dev/required/tools/changes.txt
+++ b/macros/latex-dev/required/tools/changes.txt
@@ -1,3 +1,14 @@
+2024-08-13 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * longtable.dtx:
+ store row number of head also if it ends with a \cr
+ (tagging-project-gh/554).
+
+2024-07-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * array.dtx (subsection{Handling \cs{cline}}):
+ Support for tagging \cline (tagging/134)
+
=======================================================================
This file lists changes to the LaTeX2e files in reverse chronological order.
It is provided for convenience only. It therefore makes no claims to
@@ -5,6 +16,60 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+2024-07-04 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * longtable.dtx:
+ Added \LTcaptype (from package ltcaption) to support other types
+ beside table and to support unnumbered longtables (gh/1377).
+
+
+2024-06-28 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * multicol.dtx:
+ Update documentation to reflect that \sloppy isn't using
+ \tolerance=10000 any longer (it did in the early days of LaTeX)
+ (gh/1385)
+
+================================================================================
+All changes above are only part of the development branch for the next release.
+================================================================================
+
+2024-06-14 David Carlisle <David.Carlisle@latex-project.org>
+
+ * array.dtx move \ExplSyntaxOff earlier so error message spaces preserved gh/1378
+
+
+#########################
+# 2024-06-01 Release
+#########################
+
+2024-05-23 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * array.dtx:
+ * longtable.dtx:
+ * multicol.dtx:
+ * showkeys.dtx:
+ * varioref.dtx:
+ Do not error with "suspicous date" when rolling back to
+ early years of LaTeX2e (gh/1336)
+
+2024-05-09 Yukai Chou <muzimuzhi@gmail.com>
+
+ * amsmath.dtx:
+ Fix typo in comment, \Umathcar -> \Umathchar (gh/1343)
+
+2024-04-10 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * xr.dtx:
+ Merged in the code from xr-hyper. This extends xr to properly support
+ targets and links and also adds support for properties (gh/1180).
+
+2024-04-08 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * array.dtx (section{The insertion of declarations):
+ Do not \unskip if in math mode, this way explicit spaces at the
+ end of the math cell remain as it is with array env in core LaTeX (gh/1323)
+
2024-03-13 David Carlisle <David.Carlisle@latex-project.org>
* l3sys-query.dtx
@@ -16,7 +81,7 @@ are not part of the distribution.
2023-12-16 David Carlisle <David.Carlisle@latex-project.org>
- * showkeys.dtx: avoid adding extra box to \@lables gh/1123
+ * showkeys.dtx: avoid adding extra box to \@labels gh/1123
2023-12-16 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -41,10 +106,6 @@ are not part of the distribution.
* multicol.dtx (subsection{Maintaining the mark registers}]):
Get rid of forced breaks for mark extraction (gh/1130)
-================================================================================
-All changes above are only part of the development branch for the next release.
-================================================================================
-
#########################
# 2023-11-01c Release
#########################
diff --git a/macros/latex-dev/required/tools/dcolumn.pdf b/macros/latex-dev/required/tools/dcolumn.pdf
index 3b0e4e485b..15d118feae 100644
--- a/macros/latex-dev/required/tools/dcolumn.pdf
+++ b/macros/latex-dev/required/tools/dcolumn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/delarray.pdf b/macros/latex-dev/required/tools/delarray.pdf
index 75c9f0225e..28d9497fd9 100644
--- a/macros/latex-dev/required/tools/delarray.pdf
+++ b/macros/latex-dev/required/tools/delarray.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/enumerate.pdf b/macros/latex-dev/required/tools/enumerate.pdf
index 71af43ddc0..7a3aa3b340 100644
--- a/macros/latex-dev/required/tools/enumerate.pdf
+++ b/macros/latex-dev/required/tools/enumerate.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fileerr.pdf b/macros/latex-dev/required/tools/fileerr.pdf
index bfa08b68cb..2e5d92685b 100644
--- a/macros/latex-dev/required/tools/fileerr.pdf
+++ b/macros/latex-dev/required/tools/fileerr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fontsmpl.pdf b/macros/latex-dev/required/tools/fontsmpl.pdf
index 54a21ad1cc..4bc67919a4 100644
--- a/macros/latex-dev/required/tools/fontsmpl.pdf
+++ b/macros/latex-dev/required/tools/fontsmpl.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/ftnright.pdf b/macros/latex-dev/required/tools/ftnright.pdf
index 7218f93ab4..631413b685 100644
--- a/macros/latex-dev/required/tools/ftnright.pdf
+++ b/macros/latex-dev/required/tools/ftnright.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/hhline.pdf b/macros/latex-dev/required/tools/hhline.pdf
index 2040d11a2e..a8b5e0b679 100644
--- a/macros/latex-dev/required/tools/hhline.pdf
+++ b/macros/latex-dev/required/tools/hhline.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/indentfirst.pdf b/macros/latex-dev/required/tools/indentfirst.pdf
index 4ac9dbaf87..d87fd104cd 100644
--- a/macros/latex-dev/required/tools/indentfirst.pdf
+++ b/macros/latex-dev/required/tools/indentfirst.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/l3sys-query.dtx b/macros/latex-dev/required/tools/l3sys-query.dtx
index d8c92adac1..3cba5da4a6 100644
--- a/macros/latex-dev/required/tools/l3sys-query.dtx
+++ b/macros/latex-dev/required/tools/l3sys-query.dtx
@@ -15,7 +15,7 @@
%<driver> \ProvidesFile{l3sys-query.drv}
% \fi
% \ProvidesFile{l3sys-query.dtx}
- [2024-03-13 v1.0a LaTeX2e interface for l3sys file queries]
+ [2024-03-28 v1.0a LaTeX2e interface for l3sys file queries]
%
% \iffalse
%<*driver>
@@ -122,7 +122,7 @@
% programming interface described in the following section, which allows
% the sequence to be manipulated before being used.
%
-% The defined keys map vey closely to the options of the
+% The defined keys map very closely to the options of the
% \texttt{l3sys-query} command which is described in
% section~\ref{sec:lua}.
%
@@ -138,7 +138,7 @@
% The key \texttt{type} accepts \texttt{d} or \texttt{f}.
%
% \item
-% The key \texttt{exclude} accepts a glob (or Lua pattern) mathing
+% The key \texttt{exclude} accepts a glob (or Lua pattern) matching
% files to be excluded. The package arranges that the quoting of the
% argument is automatically added if unrestricted shell escape is
% enabled.
diff --git a/macros/latex-dev/required/tools/l3sys-query.pdf b/macros/latex-dev/required/tools/l3sys-query.pdf
index 9f67a453e1..1eafdab83a 100644
--- a/macros/latex-dev/required/tools/l3sys-query.pdf
+++ b/macros/latex-dev/required/tools/l3sys-query.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/layout.pdf b/macros/latex-dev/required/tools/layout.pdf
index 90c51932ce..8ab18ca488 100644
--- a/macros/latex-dev/required/tools/layout.pdf
+++ b/macros/latex-dev/required/tools/layout.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/longtable-2020-01-07.sty b/macros/latex-dev/required/tools/longtable-2020-01-07.sty
index f79c691e10..fc7c3f4290 100644
--- a/macros/latex-dev/required/tools/longtable-2020-01-07.sty
+++ b/macros/latex-dev/required/tools/longtable-2020-01-07.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `longtable.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `longtable.sty',
%% generated with the docstrip utility.
%%
diff --git a/macros/latex-dev/required/tools/longtable.dtx b/macros/latex-dev/required/tools/longtable.dtx
index 5a23f3ecb3..439542a18c 100644
--- a/macros/latex-dev/required/tools/longtable.dtx
+++ b/macros/latex-dev/required/tools/longtable.dtx
@@ -27,8 +27,9 @@
\ProvidesFile{longtable.dtx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
-%<package>\providecommand\DeclareRelease[3]{}
-%<package>\providecommand\DeclareCurrentRelease[2]{}
+%<package>
+% Try the 2020 version for any rollback before that date:
+%<package>\DeclareRelease{}{1994-06-01}{longtable-2020-01-07.sty}
%<package>
%<package>\DeclareRelease{v4.13}{2020-01-02}{longtable-2020-01-07.sty}
%<package>\DeclareCurrentRelease{}{2020-02-07}
@@ -37,7 +38,7 @@
%<driver> \ProvidesFile{longtable.drv}
% \fi
% \ProvidesFile{longtable.dtx}
- [2023-12-16 v4.19 Multi-page Table package (DPC)]
+ [2024-07-06 v4.21 Multi-page Table package (DPC)]
%
% \iffalse
%<*driver>
@@ -178,7 +179,7 @@
% \env{longtable}, which has most of the features of the \env{tabular}
% environment, but produces tables which may be broken by \TeX's
% standard page-breaking algorithm. It also shares some features with
-% the \env{table} environment. In particular it uses the same counter,
+% the \env{table} environment. In particular it uses by default the same counter,
% \texttt{table}, and has a similar "\caption" command. Also, the
% standard "\listoftables" command lists tables produced by either the
% \env{table} or \env{longtable} environments.
@@ -334,6 +335,29 @@
% \caption{A floating table}
% \end{table}
%
+% \section{Counter and Caption Types}
+%
+% As mentioned in the introduction \env{longtable} uses and updates by default
+% the \texttt{table} counter, the "\caption" command creates a table caption
+% which is added to the list of tables.
+% Packages like \pkg{ltcaption} added more flexibility here by adding the
+% command "\LTcaptype" which allowed to change the type, e.g. to a listing.
+% Starting with version 4.21 \pkg{longtable} supports this command directly.
+% \DescribeMacro{\LTcaptype}%
+% By redefining this command it is possible to change the counter and caption type.
+% After "\renewcommand\LTcaptype{"\meta{counter}"}" \env{longtable} will update
+% the counter \meta{counter}, use "\fnum@"\meta{counter} in the caption (which
+% typically will make use of "\"\meta{counter}"name" and "\the"\meta{counter}), and
+% write content line entries into the file with the extension stored in the
+% command "\ext@"\meta{counter}. When \pkg{hyperref} is loaded the name of
+% the anchor will use \meta{counter} too. Packages or documents that change
+% "\LTcaptype" to some nonstandard value must ensure that the counter
+% \meta{counter} and the commands "\fnum@"\meta{counter}
+% and "\ext@"\meta{counter} exist and do not error.
+% If "\LTcaptype" is empty no counter is advanced and "\"\meta{counter}"name" in
+% the caption is suppressed.
+%
+%
% \section{Captions and Headings}
%
% At the start of the table one may specify lines which are to appear at
@@ -906,6 +930,15 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\LTcaptype}
+% The name used as counter, in caption, "\addcontentsline" and in targets.
+% "\providecommand" is used for compability with \pkg{ltcaption}
+% \changes{v4.21}{2024/07/04}
+% {Added \cs{LTcaptype} to support other types beside table.}
+% \begin{macrocode}
+\providecommand\LTcaptype{table}
+% \end{macrocode}
+% \end{macro}
% \subsection{Internal Parameters}
%
% \begin{macro}{\LT@head}
@@ -956,8 +989,11 @@
% are preserved correctly when "\includeonly" is used. In the rest of
% the file "\LT@tables" has been replaced by "\c@LT@tables" without
% further comment.
+% \changes{v4.21}{2024/07/04}
+% {Provide a \cs{theH}-representation for targets.}
% \begin{macrocode}
\newcounter{LT@tables}
+\providecommand\theHLT@tables{\theLT@tables}
% \end{macrocode}
% \end{macro}
%
@@ -1049,12 +1085,12 @@
\LT@err{longtable not in 1-column mode}\@ehc
\fi
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/vmode/begin}%
% \end{macrocode}
-%
+%
% \begin{macrocode}
\begingroup
% \end{macrocode}
@@ -1079,6 +1115,9 @@
% Since Version 3.02, \package{longtable} has used the internal counter
% "\c@LT@tables". The \LaTeX\ counter "table" is still incremented
% so that "\caption" works correctly.
+% \changes{v4.21}{2024/07/04}
+% {Use \cs{LTcaptype} instead of \texttt{table} in various places
+% to support other types beside table.}
% \begin{macrocode}
\def\LT@array[#1]#2{%
% \end{macrocode}
@@ -1096,25 +1135,31 @@
% TODO: When a line is killed the structure subtree is there already
% too and must be removed. If hard to do, then maybe at first warn if the
% construction is used.
-%
+%
% \cs{LT@array} is executed in a group, so we can disable para-tagging here.
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/init}
- \@kernel@refstepcounter{table}\stepcounter{LT@tables}
+ \tl_if_empty:eTF { \LTcaptype }
+ {
+ \tl_gset:Ne \@currentHref {LT@tables.\theHLT@tables}
+ }
+ {
+ \@kernel@refstepcounter{\LTcaptype}\stepcounter{LT@tables}
% \end{macrocode}
-% The target is created rather late and a \cs{label} can come earlier,
+% The target is created rather late and a \cs{label} can come earlier,
% so we have to define \cs{@currentHref} explicitly. We can't currently
% assume that \cs{theHtable} is defined always.
% \begin{macrocode}
- \tl_gset:Ne \@currentHref {table.\cs_if_exist_use:N\theHtable}
+ \tl_gset:Ne \@currentHref {\LTcaptype.\cs_if_exist_use:c {theH\LTcaptype}}
+ }
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Managing cell indexes}
% \begin{macrocode}
\tbl_gzero_row_count:
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/longtable/init}
@@ -1224,7 +1269,7 @@
\begingroup
\@mkpream{#2}%
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Managing cell indexes}
% \begin{macrocode}
\tbl_count_table_cols:
@@ -1270,12 +1315,12 @@
\tabskip\z@ \@arstrut
% \end{macrocode}
% Insert the tagging socket to start the row and initialize the cell
-% data for the row.
+% data for the row.
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/row/begin}%
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Managing cell indexes}
% \begin{macrocode}
\tbl_init_cell_data_for_row:
@@ -1313,7 +1358,7 @@
column:~ \the\g_@@_col_int
}
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\tbl_if_row_was_started:T
@@ -1398,7 +1443,7 @@
% We also have to make sure that this breakpoint doesn't affect how the next
% page is broken, so we make the penalty 9999 (10000 is infinite and thus not
% a legal breakpoint) and cancel out the "\kern" with a new "\kern".
-%
+%
% I don't think this is the \emph{right} solution to the problem (that would be
% that the standard output routine has a feature for syncronizing with
% typesetting, as part of the preparations for switching output routine), but
@@ -1475,9 +1520,17 @@
\maxdepth\z@
\fi
% \end{macrocode}
-%
+% \changes{v4.21}{2024/07/04}
+% {Use \cs{LTcaptype} to support other types beside table and handle
+% the case if it is empty.}
% \begin{macrocode}
- \MakeLinkTarget{table}
+ \tl_if_empty:eTF{\LTcaptype}
+ {
+ \MakeLinkTarget{LT@tables}
+ }
+ {
+ \MakeLinkTarget{\LTcaptype}
+ }
% \end{macrocode}
% Put the table head on the page, and then switch to the new output
% routine.
@@ -1486,12 +1539,12 @@
% \begin{macrocode}
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/longtable/head}
% \end{macrocode}
-%
+%
% \begin{macrocode}
\output{\LT@output}}
\ExplSyntaxOff
@@ -1523,18 +1576,18 @@
% \begin{macrocode}
\tbl_crcr:n {endlongtable}
% \end{macrocode}
-%
+%
% \changes{v4.01}{1996/04/11}
% {(DPC) use \cs{noalign} to sneak in \cs{LT@entry@chop}}
% \begin{macrocode}
\noalign{%
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/longtable/finalize}
% \end{macrocode}
-%
+%
% \begin{macrocode}
\let\LT@entry\LT@entry@chop
\xdef\LT@save@row{\LT@save@row}}%
@@ -1578,7 +1631,11 @@
\ifx\LT@save@row\LT@@@@save@row
\else
\LT@warn{Column~ widths~ have~ changed\MessageBreak
- in~ table~ \thetable}%
+ in~
+ \tl_if_empty:eTF{\LTcaptype}
+ {longtable~ \theLT@tables}
+ {\LTcaptype\c_space_tl\use:c{the\LTcaptype}}
+ }
\LT@final@warn
\fi
% \end{macrocode}
@@ -1612,7 +1669,7 @@
% \begin{macrocode}
\ifvoid\footins\else\insert\footins{}\fi
% \end{macrocode}
-%
+%
% \changes{v4.19}{2023/12/16}{Support for tagged PDF}
% \begin{macrocode}
\UseTaggingSocket{tbl/vmode/end}%
@@ -2160,7 +2217,6 @@
\tbl_gdecr_row_count:
\penalty\@M}
\@gtempa}
-\ExplSyntaxOff
%<@@=>
% \end{macrocode}
% \end{macro}
@@ -2186,14 +2242,22 @@
% {Add new control argument}
% \changes{v4.16}{2021/05/07}
% {use \cs{ext@table} gh/561}
-% \begin{macrocode}
-\def\LT@c@ption#1[#2]#3{%
- \LT@makecaption#1\fnum@table{#3}%
- \def\@tempa{#2}%
- \ifx\@tempa\@empty\else
- {\let\\\space
- \addcontentsline{\ext@table}{table}{\protect\numberline{\thetable}{#2}}}%
- \fi}
+% \changes{v4.21}{2024/07/04}
+% {Use \cs{LTcaptype} to support other types beside table.}
+% \begin{macrocode}
+\def\LT@c@ption#1[#2]#3{
+ \tl_if_empty:eTF{\LTcaptype}
+ {\LT@makecaption\@gobble{}{#3}}
+ {\LT@makecaption#1{\csname fnum@\LTcaptype\endcsname}{#3}
+ \def\@tempa{#2}
+ \ifx\@tempa\@empty\else
+ {\let\\\space
+ \addcontentsline
+ {\@nameuse{ext@\LTcaptype}}
+ {\LTcaptype}
+ {\protect\numberline{\@nameuse{the\LTcaptype}}{#2}}}
+ \fi}}
+\ExplSyntaxOff
% \end{macrocode}
% \end{macro}
%
@@ -2374,7 +2438,7 @@
\ExplSyntaxOn
\def\LT@end@hd@ft#1{%
% \end{macrocode}
-%
+%
% This command is used to store the head and foot boxes.
% We need to retrieve and store the row so that we can clean
% up the structure in the finalize code.
@@ -2387,7 +2451,7 @@
% \end{macrocode}
% TODO: This is exposing internal counters, so it should be encapsulated
% in some interface command (but I'm not sure what that should be
-% called, so not done yet.
+% called, so not done yet.
% \changes{v4.19}{2023/12/16}{Managing cell indexes}
% \begin{macrocode}
\tbl_count_missing_cells:n {head/foot}
@@ -2412,19 +2476,28 @@
% To get out of this trap we run \cs{crcr} (which would normally
% come inside \cs{LT@echunk}. That will then trigger \cs{everycr}
% and update row counter unnecessarily, but now we have a defined state, so
-% we can use \cs{noalign} to undo that.
+% we can use \cs{noalign} to undo that.
% We also change \cs{LT@rows} so that further \cs{cr}s do not do
% any harm (as explained above.
%
% The \cs{crcr} inside \cs{LT@echunk} will be bypassed in that case
% as we have just executed a \cs{crcr} and are still in scanning modus for
-% \cs{omit} or \cs{noalign}.
+% \cs{omit} or \cs{noalign}.
% \begin{macrocode}
{
\crcr
\noalign{
% \end{macrocode}
-%
+% \changes{v4.22}{2024/08/13}{Store header row numbers}
+% \begin{macrocode}
+ \int_step_inline:nn
+ { \LT@rows }
+ {
+ \seq_gput_left:ce
+ {g_@@_\cs_to_str:N #1 _rows_seq }
+ { \int_eval:n {\g_@@_row_int - ##1 } }
+ }
+% \end{macrocode}
% \changes{v4.19}{2023/12/16}{Managing cell indexes}
% \begin{macrocode}
\tbl_gdecr_row_count: % undo the increment
@@ -2441,7 +2514,7 @@
{Increase~ LTchunksize}%
\fi
\setbox#1\box\z@
- \@@_trace:n {-->>~ Saving~\noexpand#1}
+ \@@_trace:n {-->>~ Saving~\noexpand#1}
\LT@get@widths
\LT@bchunk}
% \end{macrocode}
@@ -2500,7 +2573,7 @@
\bgroup
% \end{macrocode}
% \changes{v4.12}{2019/02/06}{Color group to match array package}
-% \changes{v4.18}{2023/08/25}{Use \cs{everypar} to match array package, github 1128}%
+% \changes{v4.18}{2023/08/25}{Use \cs{everypar} to match array package, github 1128}
% \begin{macrocode}
\color@begingroup
\let\@footnotetext\LT@p@ftntext
@@ -2508,7 +2581,7 @@
\@arrayparboxrestore
\everypar{%
\vrule \@height \ht\@arstrutbox \@width \z@
- \everypar{}}%
+ \everypar{}}%
}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/required/tools/longtable.pdf b/macros/latex-dev/required/tools/longtable.pdf
index c1c37913ff..7be619967c 100644
--- a/macros/latex-dev/required/tools/longtable.pdf
+++ b/macros/latex-dev/required/tools/longtable.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/manifest.txt b/macros/latex-dev/required/tools/manifest.txt
index 004245d1d5..c07b6cd831 100644
--- a/macros/latex-dev/required/tools/manifest.txt
+++ b/macros/latex-dev/required/tools/manifest.txt
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 1993-2021
+% Copyright (C) 1993-2024
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
@@ -49,7 +49,7 @@ bm.dtx
Access bold math symbols.
calc.dtx
- Infix arithmetic expresions. Contributed to the distribution by
+ Infix arithmetic expressions. Contributed to the distribution by
Kresten Krab Thorup and Frank Jensen.
enumerate.dtx
@@ -60,7 +60,7 @@ fileerr.dtx
missing file error loop.
fontsmpl.dtx
- Package and test file for producing `font samples'
+ Package and test file for producing `font samples'.
ftnright.dtx
Place footnotes in the right hand column in two-column mode.
@@ -77,7 +77,7 @@ multicol.dtx
rawfonts.dtx
Preload fonts under the old internal font names of LaTeX2.09.
- Not recomended for new packages, but may help when updating old
+ Not recommended for new packages, but may help when updating old
files.
shellesc.dtx
@@ -103,7 +103,7 @@ verbatim.dtx
Flexible version of verbatim environment.
xr.dtx
- eXternall References. Extend \ref to access \label commands in
+ eXternal References. Extend \ref to access \label commands in
other documents.
xspace.dtx
diff --git a/macros/latex-dev/required/tools/multicol-2017-04-11.sty b/macros/latex-dev/required/tools/multicol-2017-04-11.sty
index 9e346656bb..bdebc93db9 100644
--- a/macros/latex-dev/required/tools/multicol-2017-04-11.sty
+++ b/macros/latex-dev/required/tools/multicol-2017-04-11.sty
@@ -1,5 +1,7 @@
%%
-%% This is an old release of `multicol.sty',
+%% This is an old release of `multicol.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
%%
%% The source is maintained by the LaTeX Project team and bug
%% reports for it can be opened at http://latex-project.org/bugs.html
diff --git a/macros/latex-dev/required/tools/multicol-2019-10-01.sty b/macros/latex-dev/required/tools/multicol-2019-10-01.sty
index 221f62f68e..fc8bda5479 100644
--- a/macros/latex-dev/required/tools/multicol-2019-10-01.sty
+++ b/macros/latex-dev/required/tools/multicol-2019-10-01.sty
@@ -1,6 +1,7 @@
-%% This is a rollback file for multicol to the last version within release 2019-10-01
-%% =======================
%%
+%% This is an old release of `multicol.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
%%
%% This is file `multicol.sty',
%% generated with the docstrip utility.
@@ -101,14 +102,6 @@
%%
%% Frank.Mittelbach@latex-project.org
%%
-\NeedsTeXFormat{LaTeX2e}[2018-04-01]
-
-\providecommand\DeclareRelease[3]{}
-\providecommand\DeclareCurrentRelease[2]{}
-
-\DeclareRelease{}{2017-04-11}{multicol-2017-04-11.sty}
-\DeclareCurrentRelease{}{2018-04-01}
-
\ProvidesPackage{multicol}
[2019/12/09 v1.8y multicolumn formatting (FMi)]
%%
diff --git a/macros/latex-dev/required/tools/multicol.dtx b/macros/latex-dev/required/tools/multicol.dtx
index 9c680ab563..99f513097e 100644
--- a/macros/latex-dev/required/tools/multicol.dtx
+++ b/macros/latex-dev/required/tools/multicol.dtx
@@ -20,7 +20,7 @@
% \iffalse This is a METACOMMENT
%
%% Package `multicol' to use with LaTeX2e
-%% Copyright 1989-2023 Frank Mittelbach
+%% Copyright 1989-2024 Frank Mittelbach
%%
%% In addition to the terms of LPPL any distributed version
%% (unchanged or modified) of multicol has to keep the statement
@@ -77,7 +77,7 @@
%% not for the payment of a license fee per se (which might or might
%% not follow from this evaluation).
%%
-%% The license fee, if any, can be payed either to the LaTeX fund
+%% The license fee, if any, can be paid either to the LaTeX fund
%% (see ltx3info.txt in the base LaTeX distribution) or to the author of
%% the program who can be contacted at
%%
@@ -86,11 +86,10 @@
%<*dtx>
\ProvidesFile{multicol.dtx}
%</dtx>
-%<package>\NeedsTeXFormat{LaTeX2e}[2018-04-01]
-%<package>
-%<package>\providecommand\DeclareRelease[3]{}
-%<package>\providecommand\DeclareCurrentRelease[2]{}
%<package>
+% For any rollback before 2017 load the 2017 version and hope for the best:
+%<package>\DeclareRelease{}{1994-06-01}{multicol-2017-04-11.sty}
+%
%<package>\DeclareRelease{}{2017-04-11}{multicol-2017-04-11.sty}
%<package>\DeclareRelease{v1.8}{2019-10-01}{multicol-2019-10-01.sty}
%<package>\DeclareCurrentRelease{}{2021-11-15}
@@ -99,7 +98,7 @@
%<driver> \ProvidesFile{multicol.drv}
% \fi
% \ProvidesFile{multicol.dtx}
- [2024/01/29 v1.9g multicolumn formatting (FMi)]
+ [2024/07/01 v1.9h multicolumn formatting (FMi)]
%
%
%
@@ -404,12 +403,17 @@
% the most important is called |\tolerance|: this controls the
% allowed `looseness' (i.e.\ the amount of blank space between words).
% Its default value is 200 (the \LaTeX{} |\fussy|) which is too
-% small for narrow columns. On the other hand the |\sloppy|
-% declaration (which sets |\tolerance| to $10000=\infty$) is too
-% large, allowing really bad spacing.\footnote{Look at the next
-% paragraph, it was set with the \cs{sloppy} declaration.}
-%
-% \begin{sloppypar}
+% small for narrow columns.
+
+% Setting it to \texttt{10000} (a.k.a.\ $\infty$) means arbitrary bad
+% lines are possible. With that setting \LaTeX{} will make most lines
+% perfect but intermix them with really bad lines. This was the
+% setting originally used by \cs{sloppy} (nowadays it is a bit more
+% cautious and used \texttt{9999} which makes a huge
+% difference).\footnote{Look at the next paragraph, it was set with
+% the \cs{tolerance}\texttt{=10000}.}
+%
+% \begin{sloppypar}\tolerance=10000
% \DescribeMacro\multicoltolerance \DescribeMacro\multicolpretolerance
% We therefore use a |\multicoltolerance| parameter for the
% |\tolerance| value inside the \mc{} environment. Its default value
@@ -418,10 +422,10 @@
% be done outside the \mc{} environment. Since |\tolerance| is set
% to |\multicoltolerance| at the beginning of every \textsf{multicols}
% environment one can locally overwrite this default by assigning
-% \verb*+\tolerance = +\meta{desired value}. There also exists a
+% \cs{tolerance}\texttt{=}\meta{desired value}. There also exists a
% |\multicolpretolerance| parameter holding the value for
% |\pretolerance| within a \mc{} environment. Both parameters are
-% usually used only by package designers.
+% usually used only by package or class designers.
% \end{sloppypar}
%
% Generation of multicolumn output can be divided into two parts. In
@@ -680,7 +684,7 @@
% this value will additionally trace the mark handling
% algorithm. It will show what marks are found, what marks are
% considered, etc. To fully understand this information you will
-% probably have to read carefully trough the implementation.
+% probably have to read carefully through the implementation.
% \item[$\meta{number}\geq 4$.] Setting \meta{number}\pagebreak[2] to
% such a high value will additionally place an |\hrule| into your
% output, separating the part of text which had already been
@@ -1946,7 +1950,7 @@
% the balancing happened in the output routine then \TeX{} reverts
% to the |\prevdepth| that was current before the OR once the OR has
% finished. In short |\prevdepth| is something you can't set
-% globally it is alway local to the current list being built. Thus
+% globally it is always local to the current list being built. Thus
% we need to set it back to zero here to avoid incorrect spacing.
% \changes{v1.8h}{2014/09/12}{Set \cs{prevdepdth} for current vlist
% when returning from multicols environment}
@@ -2217,7 +2221,7 @@
% \begin{macro}{\multicolmindepthstring}
% The default minimum depth of each column corresponds to the depth
% of a `p' in the current font. This makes sense for Latin-based
-% languages and was hard-wired intitially, but for Asian languages
+% languages and was hard-wired initially, but for Asian languages
% it is better to use a zero depth (and alternatively one might
% want to use the depth of a strut or a parentheses). So we now
% offer a way to adjust this while maintaining backward
@@ -2463,7 +2467,7 @@
% If |\kept@firstmark| is non-empty then |\kept@botmark| must be
% non-empty too so we can use their values. Otherwise we use the
% value of |\kept@topmark| which was first initialized when we
-% gathered the |\partical@page| and later on was updated to the
+% gathered the |\partial@page| and later on was updated to the
% |\botmark| for the preceding page.
%
% \changes{v1.4a}{1992/02/14}{\cs{botmark} set to \cs{splitbotmark}}
@@ -2939,7 +2943,7 @@
% marks from this box. This has to be done \emph{before} we add a
% penalty of $-10000$ to the top of the box, otherwise only an
% empty box will be considered. But even that is not enough: the box
-% may contain \cs{columnbreak}s in which case doing some artifical
+% may contain \cs{columnbreak}s in which case doing some artificial
% splitting to get the marks out still fails to see all marks
% unless we take some special precaution in \cs{get@keptmarks}
% (which is now done).
diff --git a/macros/latex-dev/required/tools/multicol.pdf b/macros/latex-dev/required/tools/multicol.pdf
index dc6ec1cde6..3b740a6974 100644
--- a/macros/latex-dev/required/tools/multicol.pdf
+++ b/macros/latex-dev/required/tools/multicol.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/rawfonts.pdf b/macros/latex-dev/required/tools/rawfonts.pdf
index e2cae3b61d..f56afeb117 100644
--- a/macros/latex-dev/required/tools/rawfonts.pdf
+++ b/macros/latex-dev/required/tools/rawfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/shellesc.pdf b/macros/latex-dev/required/tools/shellesc.pdf
index 290df81741..96693de02d 100644
--- a/macros/latex-dev/required/tools/shellesc.pdf
+++ b/macros/latex-dev/required/tools/shellesc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/showkeys-2014-10-28.sty b/macros/latex-dev/required/tools/showkeys-2014-10-28.sty
index b4d7b19028..9f465dff5c 100644
--- a/macros/latex-dev/required/tools/showkeys-2014-10-28.sty
+++ b/macros/latex-dev/required/tools/showkeys-2014-10-28.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `showkeys.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `showkeys.sty',
%% generated with the docstrip utility.
%%
diff --git a/macros/latex-dev/required/tools/showkeys.dtx b/macros/latex-dev/required/tools/showkeys.dtx
index aba96a7eab..b6717950a7 100644
--- a/macros/latex-dev/required/tools/showkeys.dtx
+++ b/macros/latex-dev/required/tools/showkeys.dtx
@@ -22,16 +22,15 @@
% \fi
% \iffalse
%% File: showkeys.dtx Copyright (C) 1992-1997 David Carlisle
-%% File: showkeys.dtx Copyright (C) 2006-2023 David Carlisle, LaTeX Project
+%% File: showkeys.dtx Copyright (C) 2006-2024 David Carlisle, LaTeX Project
%
%<*dtx>
\ProvidesFile{showkeys.dtx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>
-%<package>\providecommand\DeclareRelease[3]{}
-%<package>\providecommand\DeclareCurrentRelease[2]{}
-%<package>
+% For every rollback request before 2022 use the 2014 version:
+%<package>\DeclareRelease{}{1994-06-01}{showkeys-2014-10-28.sty}
%<package>\DeclareRelease{}{2014-10-28}{showkeys-2014-10-28.sty}
%<package>\DeclareCurrentRelease{}{2022-06-01}
%<package>
@@ -39,7 +38,7 @@
%<driver> \ProvidesFile{showkeys.drv}
% \fi
% \ProvidesFile{showkeys.dtx}
- [2023/12/16 v3.20 Show cite and label keys (DPC, MH)]
+ [2024/05/23 v3.21 Show cite and label keys (DPC, MH)]
%
% \iffalse
%<*driver>
diff --git a/macros/latex-dev/required/tools/showkeys.pdf b/macros/latex-dev/required/tools/showkeys.pdf
index 968476380c..e9fd82c879 100644
--- a/macros/latex-dev/required/tools/showkeys.pdf
+++ b/macros/latex-dev/required/tools/showkeys.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/somedefs.pdf b/macros/latex-dev/required/tools/somedefs.pdf
index 42fe646dfb..cdc2b30cb5 100644
--- a/macros/latex-dev/required/tools/somedefs.pdf
+++ b/macros/latex-dev/required/tools/somedefs.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tabularx.pdf b/macros/latex-dev/required/tools/tabularx.pdf
index 73f2c1bdf2..e35268596a 100644
--- a/macros/latex-dev/required/tools/tabularx.pdf
+++ b/macros/latex-dev/required/tools/tabularx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/theorem.dtx b/macros/latex-dev/required/tools/theorem.dtx
index a9c3ccae3e..3fbba473ba 100644
--- a/macros/latex-dev/required/tools/theorem.dtx
+++ b/macros/latex-dev/required/tools/theorem.dtx
@@ -24,7 +24,7 @@
%%
%
%
-\def\FMithmInfo{2023/07/05 v2.2c Theorem extension package (FMi)}
+\def\FMithmInfo{2024/08/06 v2.2c Theorem extension package (FMi)}
%
% \ProvidesFile{theorem.dtx}[\FMithmInfo]
%\iffalse % this is a METACOMMENT !
@@ -952,7 +952,6 @@
%
% \subsubsection{The \texttt{changebreak} style}
%
-% \begin{macrocode}
% This style option is stored in the file |thcb.sty|.
% \begin{macrocode}
%<*thcb>
diff --git a/macros/latex-dev/required/tools/theorem.pdf b/macros/latex-dev/required/tools/theorem.pdf
index eb1b723c21..f9244454d3 100644
--- a/macros/latex-dev/required/tools/theorem.pdf
+++ b/macros/latex-dev/required/tools/theorem.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tools-overview.pdf b/macros/latex-dev/required/tools/tools-overview.pdf
index 74db7e1ce1..f92bdfdd28 100644
--- a/macros/latex-dev/required/tools/tools-overview.pdf
+++ b/macros/latex-dev/required/tools/tools-overview.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tools-overview.tex b/macros/latex-dev/required/tools/tools-overview.tex
index 54f4b5ed63..3d45a5e2fc 100644
--- a/macros/latex-dev/required/tools/tools-overview.tex
+++ b/macros/latex-dev/required/tools/tools-overview.tex
@@ -132,7 +132,7 @@
Access bold math symbols.
}%
\entry{calc}{%
- Infix arithmetic expresions. Contributed to the distribution by
+ Infix arithmetic expressions. Contributed to the distribution by
Kresten Krab Thorup and Frank Jensen.
}%
\entry{dcolumn}{%
@@ -149,7 +149,7 @@
missing file error loop.
}%
\entry{fontsmpl}{%
- Package and test file for producing \emph{font samples}
+ Package and test file for producing \emph{font samples}.
}%
\entry{ftnright}{%
Place footnotes in the right hand column in two-column mode.
@@ -173,7 +173,7 @@
}%
\entry{rawfonts}{%
Preload fonts under the old internal font names of \LaTeX{}2.09.
- Not recomended for new packages, but may help when updating old
+ Not recommended for new packages, but may help when updating old
files.
}%
\entry{shellesc}{%
@@ -206,7 +206,7 @@
Flexible version of verbatim environment.
}%
\entry{xr}{%
- eXternall References. Extend \cs{ref} to access \cs{label} commands in
+ eXternal References. Extend \cs{ref} to access \cs{label} commands in
other documents.
}%
\entry{xspace}{%
diff --git a/macros/latex-dev/required/tools/trace.pdf b/macros/latex-dev/required/tools/trace.pdf
index a2f5e7d4fb..336007ba1e 100644
--- a/macros/latex-dev/required/tools/trace.pdf
+++ b/macros/latex-dev/required/tools/trace.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/varioref-2016-02-16.sty b/macros/latex-dev/required/tools/varioref-2016-02-16.sty
index 747e89dc60..39cc4467a7 100644
--- a/macros/latex-dev/required/tools/varioref-2016-02-16.sty
+++ b/macros/latex-dev/required/tools/varioref-2016-02-16.sty
@@ -1,4 +1,8 @@
%%
+%% This is an old release of `varioref.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
%% This is file `varioref.sty',
%% generated with the docstrip utility.
%%
diff --git a/macros/latex-dev/required/tools/varioref.dtx b/macros/latex-dev/required/tools/varioref.dtx
index f25c524188..40b3038074 100644
--- a/macros/latex-dev/required/tools/varioref.dtx
+++ b/macros/latex-dev/required/tools/varioref.dtx
@@ -33,14 +33,15 @@
%%
%
%<package>\NeedsTeXFormat{LaTeX2e}[1995/05/16]
-%<package>\providecommand\DeclareRelease[3]{}
-%<package>\providecommand\DeclareCurrentRelease[2]{}
%<package>
+%
+% For any rollback before 2019 load the 2016 version and hope for the best:
+%<package>\DeclareRelease{}{1994-06-01}{varioref-2016-02-16.sty}
%<package>\DeclareRelease{}{2016-02-16}{varioref-2016-02-16.sty}
%<package>\DeclareCurrentRelease{}{2019-10-01}
%<package>
%<package>\ProvidesPackage{varioref}
-%<package> [2024/01/15 v1.6f package for extended references (FMi)]
+%<package> [2024/05/23 v1.6g package for extended references (FMi)]
% \fi
%
%%
diff --git a/macros/latex-dev/required/tools/varioref.pdf b/macros/latex-dev/required/tools/varioref.pdf
index a398d5ff05..45ccb23775 100644
--- a/macros/latex-dev/required/tools/varioref.pdf
+++ b/macros/latex-dev/required/tools/varioref.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/verbatim.pdf b/macros/latex-dev/required/tools/verbatim.pdf
index d2bd345190..60e64211fa 100644
--- a/macros/latex-dev/required/tools/verbatim.pdf
+++ b/macros/latex-dev/required/tools/verbatim.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xr-2023-07-04.sty b/macros/latex-dev/required/tools/xr-2023-07-04.sty
new file mode 100644
index 0000000000..15bfde169a
--- /dev/null
+++ b/macros/latex-dev/required/tools/xr-2023-07-04.sty
@@ -0,0 +1,84 @@
+%%
+%% This is an old release of `xr.sty' used during rollback operations.
+%% Do not use this file directly.
+%% ==============================
+%%
+%% This is file `xr.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% xr.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs/
+%% (but please observe conditions on bug reports sent to that address!)
+%%
+%%
+%% Copyright (C) 1993-2023
+%% The LaTeX Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
+%% without such generated files.
+%%
+%% The list of all files belonging to the LaTeX `Tools Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% File: xr.dtx Copyright (C) 1993-2019 David Carlisle
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{xr}
+ [2023-07-04 v5.06 eXternal References (DPC)]
+\def\externaldocument{\@ifnextchar[\XR@{\XR@[]}}
+\let\externalcitedocument\externaldocument
+\def\XR@[#1]#2{{%
+ \makeatletter
+ \def\XR@prefix{#1}%
+ \set@curr@file{#2}%
+ \expandafter\XR@next\@curr@file.aux\relax\\}}
+\def\XR@next#1\relax#2\\{%
+ \edef\XR@list{#2}%
+ \XR@loop{#1}}
+\def\XR@aux{%
+ \ifx\XR@list\@empty\else\expandafter\XR@explist\fi}
+
+\def\XR@explist{\expandafter\XR@next\XR@list\\}
+\def\XR@loop#1{\openin\@inputcheck{#1}\relax
+ \ifeof\@inputcheck
+ \PackageWarning{xr}{^^JNo file #1^^JLABELS NOT IMPORTED.^^J}%
+ \expandafter\XR@aux
+ \else
+ \PackageInfo{xr}{IMPORTING LABELS FROM #1}%
+ \expandafter\XR@read\fi}
+\def\XR@read{%
+ \read\@inputcheck to\XR@line
+ \expandafter\XR@test\XR@line...\XR@}
+\long\def\XR@test#1#2#3#4\XR@{%
+ \let\XR@tempa\@gobbletwo
+ \ifx#1\newlabel
+ \let\XR@tempa\@firstoftwo
+ \else\ifx#1\bibcite
+ \let\XR@tempa\@firstoftwo
+ \else\ifx#1\@input
+ \let\XR@tempa\@secondoftwo
+ \fi\fi\fi
+ \XR@tempa{#1{\XR@prefix#2}{#3}}{\edef\XR@list{\XR@list#2\relax}}%
+ \ifeof\@inputcheck\expandafter\XR@aux
+ \else\expandafter\XR@read\fi}
+\endinput
+%%
+%% End of file `xr.sty'.
diff --git a/macros/latex-dev/required/tools/xr.dtx b/macros/latex-dev/required/tools/xr.dtx
index 3914cebcd9..daa0778b36 100644
--- a/macros/latex-dev/required/tools/xr.dtx
+++ b/macros/latex-dev/required/tools/xr.dtx
@@ -21,14 +21,49 @@
%
% \fi
% \iffalse
-%% File: xr.dtx Copyright (C) 1993-2019 David Carlisle
+%% File: xr.dtx Copyright (C) 1993-2024 David Carlisle
%
%<package>\NeedsTeXFormat{LaTeX2e}
+%<package>\DeclareRelease{v5}{2023-07-04}{xr-2023-07-04.sty}
+%<package>\DeclareCurrentRelease{}{2024-04-10}
%<package>\ProvidesPackage{xr}
-%<package> [2023-07-04 v5.06 eXternal References (DPC)]
+%<package> [2024-04-10 v6.00 eXternal References (DPC)]
%
%<*driver>
-\documentclass{ltxdoc}
+\documentclass{l3doc}
+% currently missing in l3doc, copied from array.dtx
+\makeatletter
+\def\MaintainedBy#1{\gdef\@maintainedby{#1}}
+\let\@maintainedby\@empty
+\def\MaintainedByLaTeXTeam#1{%
+{\gdef\@maintainedby{%
+This file is maintained by the \LaTeX{} Project team.\\%
+Bug reports can be opened (category \texttt{#1}) at\\%
+\url{https://latex-project.org/bugs.html}.}}}
+\def\@maketitle{%
+ \newpage
+ \null
+ \vskip 2em%
+ \begin{center}%
+ \let \footnote \thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em%
+ {\large
+ \lineskip .5em%
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em%
+ {\large \@date}%
+ \ifx\@maintainedby\@empty
+ \else
+ \vskip 1em%
+ \fbox{\fbox{\begin{tabular}{@{}l@{}}\@maintainedby\end{tabular}}}%
+ \fi
+ \end{center}%
+ \par
+ \vskip 1.5em}
+\makeatother
\usepackage{xr}
\GetFileInfo{xr.sty}
\begin{document}
@@ -50,44 +85,113 @@
%
% \changes{v5.00}{1993/07/07}
% {First DPC version (by agreement with J-PD). New mechanism
-% (\cmd{\read} instead of \cmd\input).}
+% (\cs{read} instead of \cs{input}).}
%
% \changes{v5.01}{1993/07/20}{Fix bug added by DPC, v5.00 did not import
-% aux files of \cmd\include'ed files. (Reported by J-PD)}
+% aux files of \cs{include}'ed files. (Reported by J-PD)}
%
% \changes{v5.02}{1994/05/28}{Update for LaTeX2e}
% \changes{v5.03}{2018/10/01}{Fix for conditionals in aux file}
% \changes{v5.05}{2019/07/20}{include xcite}
+% \changes{v6.00}{2024/04/10}{merge with xr-hyper}
%
%
% This package implements a system for eXternal References.
-%
+% Version 6.00 merges the \pkg{xr} package and the \pkg{xr-hyper} package.
+% \pkg{xr-hyper} was developed to support the
+% extended label syntax of the \pkg{hyperref} package and to enable active links
+% to the external documents.
+% In the \LaTeX{} release 2023-06-01 the label syntax of \pkg{hyperref}
+% and the \LaTeX{} kernel have been synchronized and there is no longer
+% a need for two packages. The package \pkg{xr-hyper} will be
+% deprecated.
+%
+% The previous version before the merge can be accessed with
+% \begin{verbatim}
+% \usepackage{xr}[=v5]
+% \end{verbatim}
+% or with a rollback date between 2023-07-04 and 2024-04-09
+% \begin{verbatim}
+% \usepackage{xr}[=2024-04-09]
+% \end{verbatim}
+%
+% \section{Usage}
+%
+% \begin{syntax}
+% \cs{externaldocument}\oarg{prefix}\texttt[nocite\texttt]\marg{document}\oarg{url}
+% \end{syntax}
+%
% If one document needs to refer to sections of another, say |aaa.tex|,
% then this package may be loaded in the main file, and the command\\
% |\externaldocument{aaa}|\\
% given in the preamble.
%
-% Then you may use |\ref| and |\pageref| to refer to anything which has
+% Then you may use |\ref| and |\pageref| (or |\nameref| if the
+% package \pkg{nameref} has been loaded to refer to anything which has
% been given a |\label| in either |aaa.tex| or the main document.
+% It is also possible to refer to properties stored with \cs{RecordProperties}.
% You may declare any number of such external documents.
%
% If any of the external documents, or the main document, use the same
% |\label| then an error will occur as the label will be multiply
% defined. To overcome this problem |\externaldocument| has an optional
-% argument. If you declare |\externaldocument[A-]{aaa}|, then all
+% argument \meta{prefix}.
+% If you declare |\externaldocument[A-]{aaa}|, then all
% references from |aaa| are prefixed by |A-|. So for instance, if a
% section of |aaa| had |\label{intro}|, then this could be referenced
% with |\ref{A-intro}|. The prefix need not be |A-|, it can be any
% string chosen to ensure that all the labels imported from external
-% files are unique. Note however that if your style declares certain
-% active characters (|:| in French, |"| in German) then these
-% characters can not usually be used in |\label|, and similarly may not
-% be used in the optional argument to |\externaldocument|.
+% files are unique. Note however that the prefix is expanded and
+% so should not contain commands that are not safe in this context.
%
% As first suggested in Enrico Gregorio's |xcite| package, the current version
% also allows |\cite| to reference |\bibitem| in the external document.
% For compatibility with |xcite|, |\externalcitedocument| is made available
% as an alias for |\externaldocument|
+%
+% Many packages have variant citation commands (natbib,
+% biblatex,....) and the external document may or may not have used
+% hyperref. Because of these differences the citation linking may not
+% always work, it can be disabled by specifying \texttt{[nocite]} after the
+% \meta{prefix}:
+% \begin{verbatim}
+% \externaldocument[][nocite]{aaa}
+% \end{verbatim}
+%
+% The `document' referred to by the main argument \meta{document} is the file
+% \file{document.aux} which must be somewhere on TeX's input path.
+% Some packages (eg hyperref) really need to know the location of the
+% final document rather than the aux file. By default this is assumed
+% to be \file{document.pdf}. A package may redefine the command \cs{XR@ext} to
+% change this default extension. However sometimes the final
+% document may be in a position unrelated to the aux file, or the
+% browser may not be able to find files at an arbitrary point in
+% TeX's input path, so the final optional argument \meta{url} allows a full
+% URL to the final document to be specified.
+% \begin{verbatim}
+% \externaldocument{aaa}[https://example.com/this/path/to/aaa.pdf]
+% \end{verbatim}
+%
+% The package stores the url of the external document in the label data. It can
+% e.g. be retrieved with the \pkg{refcount} package
+%
+% \begin{verbatim}
+% \usepackage{refcount,xr}
+% \externaldocument{aaa}
+% ...
+% \getrefbykeydefault{intro}{url}{??} %prints aaa.pdf or ??
+% \end{verbatim}
+%
+% \pkg{xr} supports also the properties introduced in \LaTeX{} 2023-11-01.
+% Here the url of the external document is stored in the \texttt{xr-url} property.
+%
+% \begin{verbatim}
+% \usepackage{xr}
+% \externaldocument{aaa} %aaa contains \RecordProperties{intro}{page}
+% ...
+% \RefProperty{intro}{page} %gives page number
+% \RefProperty{intro}{xr-url} %gives aaa.pdf
+% \end{verbatim}
%
% \MaybeStop{}
%
@@ -98,20 +202,74 @@
% \end{macrocode}
%
% Check for the optional argument.
+% \changes{v6.00}{2024-04-10}{Copied over extended definition of xr-hyper}
% \begin{macrocode}
-\def\externaldocument{\@ifnextchar[\XR@{\XR@[]}}
+\def\externaldocument{\@testopt\XR@cite{}}
\let\externalcitedocument\externaldocument
+\def\XR@cite[#1]{\@testopt{\XR@[#1]}{}}
+\def\XR@[#1][#2]#3{\@testopt{\XR@@{#1}{#2}{#3}}{#3.\XR@ext}}
+% \end{macrocode}
+%
+% \subsection{helper definitions}
+% \changes{v6.00}{2024-04-10}{new, copied over from xr-hyper}
+% To test the second optional argument
+% \begin{macrocode}
+\def\XR@@nocite{nocite}
+% \end{macrocode}
+% Needed in the processing
+% \begin{macrocode}
+\long\def\@gobblefour #1#2#3#4{}
+\long\def\@firstoffour #1#2#3#4{#1}
+\long\def\@secondoffour#1#2#3#4{#2}
+\long\def\@thirdoffour #1#2#3#4{#3}
+\long\def\@fourthoffour #1#2#3#4{#4}
+% \end{macrocode}
+% The url is added as fifth argument. The command used here is
+% \cs{XR@addURL}. The command is more complicated as needed
+% as it tries to handle also older documents with
+% \cs{newlabel}'s with two arguments.
+% \begin{macrocode}
+\def\XR@addURL#1{\XR@@dURL#1{}{}{}{}\\}
+\def\XR@@dURL#1#2#3#4#5\\{%
+ \unexpanded{{#1}{#2}{#3}{#4}}{\XR@URL}%
+ }%
+% \end{macrocode}
+%
+% \subsection{Variables}
+% \changes{v6.00}{2024-04-10}{new, copied over from xr-hyper}
+% Default file extension:
+% \begin{macrocode}
+\providecommand\XR@ext{pdf}
% \end{macrocode}
%
-% Save the optional prefix. Start processing the first |aux| file.
-% \changes{v5.06}{2020-05-10}{Remove leading and trailing sapces from
+% Save the optional prefix. Start processing the first |aux| file.
+% \changes{v6.00}{2024-04-10}{copied over the new extended internal command from xr-hyper.
+% It prepends the directory name.}
+% Olivier Michel pointed out that
+% if the aux file was not on texinputs you could not always go
+% \cs{externaldocument}{/some/path/to/file}
+% specifically that worked if file.aux was a `simple' document with
+% one aux file, but if \cs{include} had been used, the `sub' aux files
+% would not be found by xr in the remote directory.
+% This version calls \cs{filename@parse} to get the directory name of the
+% remote directory, which is then explicitly prepended to the names of
+% any included aux files.
+% \changes{v5.06}{2020-05-10}{Remove leading and trailing spaces from
% the filename (gh/2223)}
% \begin{macrocode}
-\def\XR@[#1]#2{{%
+\def\XR@@#1#2#3[#4]{{%
\makeatletter
\def\XR@prefix{#1}%
- \set@curr@file{#2}%
- \expandafter\XR@next\@curr@file.aux\relax\\}}
+ \def\XR@nocite{#2}%
+ \ifx\XR@nocite\XR@@nocite
+ \let\XR@bibcite\vadjust
+ \else
+ \let\XR@bibcite\bibcite
+ \fi
+ \def\XR@URL{#4}%
+ \set@curr@file{#3}%
+ \filename@parse\@curr@file
+ \XR@next\@curr@file.aux\relax\\}}
% \end{macrocode}
%
% Process the next |aux| file in the list and remove it from the head of
@@ -161,23 +319,40 @@
% \end{macrocode}
%
% Look at the first token of the line.
-% If it is |\newlabel|, do the |\newlabel|. If it is |\@input|, add the
-% filename to the list of files to process. Otherwise ignore.
+% If it is |\newlabel|, define \cs{r@}\meta{label}, ensure that it has
+% five label data argument and add the url as the last one.
+% If it is |\@input|, add the
+% filename to the list of files to process.
+% If it is |\bibcite|, call a |\bibcite|.
+% If it is |\new@label@record| add the url and then call it.
+% Otherwise ignore.
% Go around the loop if not at end of file. Finally process the next
% file in the list.
%
% 2018 update: make sure the arguments are handled outside the |\ifx| test,
+% \changes{v6.00}{2024-04-10}{copied over extended definition from xr-hyper}
% \begin{macrocode}
\long\def\XR@test#1#2#3#4\XR@{%
- \let\XR@tempa\@gobbletwo
+ \let\XR@tempa\@gobblefour
\ifx#1\newlabel
- \let\XR@tempa\@firstoftwo
- \else\ifx#1\bibcite
- \let\XR@tempa\@firstoftwo
+ \let\XR@tempa\@firstoffour
+ \else\ifx#1\XR@bibcite
+ \let\XR@tempa\@secondoffour
\else\ifx#1\@input
- \let\XR@tempa\@secondoftwo
- \fi\fi\fi
- \XR@tempa{#1{\XR@prefix#2}{#3}}{\edef\XR@list{\XR@list#2\relax}}%
+ \let\XR@tempa\@thirdoffour
+ \else\ifx#1\new@label@record
+ \let\XR@tempa\@fourthoffour
+ \fi\fi\fi\fi
+ \XR@tempa
+ {%
+ \expandafter\protected@xdef\csname r@\XR@prefix#2\endcsname{\XR@addURL{#3}}%
+ }%
+ {\expandafter\bibcite\expandafter{\XR@prefix#2}{#3}}%
+ {\edef\XR@list{\XR@list\filename@area#2\relax}}%
+ {%
+ \edef\next{\noexpand\new@label@record{\XR@prefix#2}{\unexpanded{#3}{xr-url}{\XR@URL}}}%
+ \next
+ }
\ifeof\@inputcheck\expandafter\XR@aux
\else\expandafter\XR@read\fi}
% \end{macrocode}
diff --git a/macros/latex-dev/required/tools/xr.pdf b/macros/latex-dev/required/tools/xr.pdf
index 3a7be5445a..bfa10f5403 100644
--- a/macros/latex-dev/required/tools/xr.pdf
+++ b/macros/latex-dev/required/tools/xr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xspace.pdf b/macros/latex-dev/required/tools/xspace.pdf
index 51de3e2c87..3eeaa8c7c9 100644
--- a/macros/latex-dev/required/tools/xspace.pdf
+++ b/macros/latex-dev/required/tools/xspace.pdf
Binary files differ